135375f98Sopenharmony_ci/* ==========================================
235375f98Sopenharmony_ci    Unity Project - A Test Framework for C
335375f98Sopenharmony_ci    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
435375f98Sopenharmony_ci    [Released under MIT License. Please refer to license.txt for details]
535375f98Sopenharmony_ci========================================== */
635375f98Sopenharmony_ci
735375f98Sopenharmony_ci#include "unity.h"
835375f98Sopenharmony_ci#define TEST_INSTANCES
935375f98Sopenharmony_ci#include "self_assessment_utils.h"
1035375f98Sopenharmony_ci
1135375f98Sopenharmony_cistatic int SetToOneToFailInTearDown;
1235375f98Sopenharmony_cistatic int SetToOneMeanWeAlreadyCheckedThisGuy;
1335375f98Sopenharmony_ci
1435375f98Sopenharmony_civoid setUp(void)
1535375f98Sopenharmony_ci{
1635375f98Sopenharmony_ci    SetToOneToFailInTearDown = 0;
1735375f98Sopenharmony_ci    SetToOneMeanWeAlreadyCheckedThisGuy = 0;
1835375f98Sopenharmony_ci}
1935375f98Sopenharmony_ci
2035375f98Sopenharmony_civoid tearDown(void)
2135375f98Sopenharmony_ci{
2235375f98Sopenharmony_ci    endPutcharSpy(); /* Stop suppressing test output */
2335375f98Sopenharmony_ci    if (SetToOneToFailInTearDown == 1)
2435375f98Sopenharmony_ci    {
2535375f98Sopenharmony_ci        /* These will be skipped internally if already failed/ignored */
2635375f98Sopenharmony_ci        TEST_FAIL_MESSAGE("<= Failed in tearDown");
2735375f98Sopenharmony_ci        TEST_IGNORE_MESSAGE("<= Ignored in tearDown");
2835375f98Sopenharmony_ci    }
2935375f98Sopenharmony_ci    if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0))
3035375f98Sopenharmony_ci    {
3135375f98Sopenharmony_ci        UnityPrint(": [[[[ Test Should Have Passed But Did Not ]]]]");
3235375f98Sopenharmony_ci        UNITY_OUTPUT_CHAR('\n');
3335375f98Sopenharmony_ci    }
3435375f98Sopenharmony_ci}
3535375f98Sopenharmony_ci
3635375f98Sopenharmony_civoid testEqualStrings(void)
3735375f98Sopenharmony_ci{
3835375f98Sopenharmony_ci    const char *testString = "foo";
3935375f98Sopenharmony_ci
4035375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING(testString, testString);
4135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_MESSAGE("foo", "foo", "foo isn't foo");
4235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo", testString);
4335375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING(testString, "foo");
4435375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("", "");
4535375f98Sopenharmony_ci}
4635375f98Sopenharmony_ci
4735375f98Sopenharmony_civoid testEqualStringsLen(void)
4835375f98Sopenharmony_ci{
4935375f98Sopenharmony_ci    const char *testString = "foobar";
5035375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN(testString, testString, strlen(testString));
5135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE("foobar", "foobaz", 5, "fooba isn't fooba");
5235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("foo", testString, 3);
5335375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN(testString, "foo", 3);
5435375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("", "", 3);
5535375f98Sopenharmony_ci}
5635375f98Sopenharmony_ci
5735375f98Sopenharmony_civoid testEqualStringsWithCarriageReturnsAndLineFeeds(void)
5835375f98Sopenharmony_ci{
5935375f98Sopenharmony_ci    const char *testString = "foo\r\nbar";
6035375f98Sopenharmony_ci
6135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING(testString, testString);
6235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo\r\nbar", "foo\r\nbar");
6335375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo\r\nbar", testString);
6435375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING(testString, "foo\r\nbar");
6535375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("", "");
6635375f98Sopenharmony_ci}
6735375f98Sopenharmony_ci
6835375f98Sopenharmony_civoid testNotEqualString1(void)
6935375f98Sopenharmony_ci{
7035375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
7135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo", "bar");
7235375f98Sopenharmony_ci    VERIFY_FAILS_END
7335375f98Sopenharmony_ci}
7435375f98Sopenharmony_ci
7535375f98Sopenharmony_civoid testNotEqualStringLen1(void)
7635375f98Sopenharmony_ci{
7735375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
7835375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("foobar", "foobaz", 6);
7935375f98Sopenharmony_ci    VERIFY_FAILS_END
8035375f98Sopenharmony_ci}
8135375f98Sopenharmony_ci
8235375f98Sopenharmony_civoid testNotEqualString2(void)
8335375f98Sopenharmony_ci{
8435375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
8535375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo", "");
8635375f98Sopenharmony_ci    VERIFY_FAILS_END
8735375f98Sopenharmony_ci}
8835375f98Sopenharmony_ci
8935375f98Sopenharmony_civoid testNotEqualStringLen2(void)
9035375f98Sopenharmony_ci{
9135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
9235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("foo", "", 3);
9335375f98Sopenharmony_ci    VERIFY_FAILS_END
9435375f98Sopenharmony_ci}
9535375f98Sopenharmony_ci
9635375f98Sopenharmony_civoid testNotEqualString3(void)
9735375f98Sopenharmony_ci{
9835375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
9935375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("", "bar");
10035375f98Sopenharmony_ci    VERIFY_FAILS_END
10135375f98Sopenharmony_ci}
10235375f98Sopenharmony_ci
10335375f98Sopenharmony_civoid testNotEqualStringLen3(void)
10435375f98Sopenharmony_ci{
10535375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
10635375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("", "bar", 3);
10735375f98Sopenharmony_ci    VERIFY_FAILS_END
10835375f98Sopenharmony_ci}
10935375f98Sopenharmony_ci
11035375f98Sopenharmony_civoid testNotEqualString4(void)
11135375f98Sopenharmony_ci{
11235375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
11335375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("bar\r", "bar\n");
11435375f98Sopenharmony_ci    VERIFY_FAILS_END
11535375f98Sopenharmony_ci}
11635375f98Sopenharmony_ci
11735375f98Sopenharmony_civoid testNotEqualStringLen4(void)
11835375f98Sopenharmony_ci{
11935375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
12035375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("ba\r\x16", "ba\r\n", 4);
12135375f98Sopenharmony_ci    VERIFY_FAILS_END
12235375f98Sopenharmony_ci}
12335375f98Sopenharmony_ci
12435375f98Sopenharmony_civoid testNotEqualString5(void)
12535375f98Sopenharmony_ci{
12635375f98Sopenharmony_ci    const char str1[] = { 0x41, 0x42, 0x03, 0x00 };
12735375f98Sopenharmony_ci    const char str2[] = { 0x41, 0x42, 0x04, 0x00 };
12835375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
12935375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING(str1, str2);
13035375f98Sopenharmony_ci    VERIFY_FAILS_END
13135375f98Sopenharmony_ci}
13235375f98Sopenharmony_ci
13335375f98Sopenharmony_civoid testNotEqualString_ExpectedStringIsNull(void)
13435375f98Sopenharmony_ci{
13535375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
13635375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING(NULL, "bar");
13735375f98Sopenharmony_ci    VERIFY_FAILS_END
13835375f98Sopenharmony_ci}
13935375f98Sopenharmony_ci
14035375f98Sopenharmony_civoid testNotEqualStringLen_ExpectedStringIsNull(void)
14135375f98Sopenharmony_ci{
14235375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
14335375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN(NULL, "bar", 1);
14435375f98Sopenharmony_ci    VERIFY_FAILS_END
14535375f98Sopenharmony_ci}
14635375f98Sopenharmony_ci
14735375f98Sopenharmony_civoid testNotEqualString_ActualStringIsNull(void)
14835375f98Sopenharmony_ci{
14935375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
15035375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo", NULL);
15135375f98Sopenharmony_ci    VERIFY_FAILS_END
15235375f98Sopenharmony_ci}
15335375f98Sopenharmony_ci
15435375f98Sopenharmony_civoid testNotEqualStringLen_ActualStringIsNull(void)
15535375f98Sopenharmony_ci{
15635375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
15735375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_LEN("foo", NULL, 1);
15835375f98Sopenharmony_ci    VERIFY_FAILS_END
15935375f98Sopenharmony_ci}
16035375f98Sopenharmony_ci
16135375f98Sopenharmony_civoid testNotEqualString_ExpectedStringIsLonger(void)
16235375f98Sopenharmony_ci{
16335375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
16435375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo2", "foo");
16535375f98Sopenharmony_ci    VERIFY_FAILS_END
16635375f98Sopenharmony_ci}
16735375f98Sopenharmony_ci
16835375f98Sopenharmony_civoid testNotEqualString_ActualStringIsLonger(void)
16935375f98Sopenharmony_ci{
17035375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
17135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("foo", "foo2");
17235375f98Sopenharmony_ci    VERIFY_FAILS_END
17335375f98Sopenharmony_ci}
17435375f98Sopenharmony_ci
17535375f98Sopenharmony_civoid testEqualStringArrays(void)
17635375f98Sopenharmony_ci{
17735375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "boo", "woo", "moo" };
17835375f98Sopenharmony_ci    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
17935375f98Sopenharmony_ci
18035375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, expStrings, 3);
18135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 3);
18235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 2);
18335375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 1);
18435375f98Sopenharmony_ci}
18535375f98Sopenharmony_ci
18635375f98Sopenharmony_civoid testNotEqualStringArray1(void)
18735375f98Sopenharmony_ci{
18835375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "boo", "woo", "moo" };
18935375f98Sopenharmony_ci    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
19035375f98Sopenharmony_ci
19135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
19235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
19335375f98Sopenharmony_ci    VERIFY_FAILS_END
19435375f98Sopenharmony_ci}
19535375f98Sopenharmony_ci
19635375f98Sopenharmony_civoid testNotEqualStringArray2(void)
19735375f98Sopenharmony_ci{
19835375f98Sopenharmony_ci    const char *testStrings[] = { "zoo", "boo", "woo", "moo" };
19935375f98Sopenharmony_ci    const char *expStrings[] = { "foo", "boo", "woo", "moo" };
20035375f98Sopenharmony_ci
20135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
20235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
20335375f98Sopenharmony_ci    VERIFY_FAILS_END
20435375f98Sopenharmony_ci}
20535375f98Sopenharmony_ci
20635375f98Sopenharmony_civoid testNotEqualStringArray3(void)
20735375f98Sopenharmony_ci{
20835375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "boo", "woo", NULL };
20935375f98Sopenharmony_ci    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
21035375f98Sopenharmony_ci
21135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
21235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
21335375f98Sopenharmony_ci    VERIFY_FAILS_END
21435375f98Sopenharmony_ci}
21535375f98Sopenharmony_ci
21635375f98Sopenharmony_civoid testNotEqualStringArray4(void)
21735375f98Sopenharmony_ci{
21835375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "boo", "woo", "moo" };
21935375f98Sopenharmony_ci    const char *expStrings[] = { "foo", NULL, "woo", "moo" };
22035375f98Sopenharmony_ci
22135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
22235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
22335375f98Sopenharmony_ci    VERIFY_FAILS_END
22435375f98Sopenharmony_ci}
22535375f98Sopenharmony_ci
22635375f98Sopenharmony_civoid testNotEqualStringArray5(void)
22735375f98Sopenharmony_ci{
22835375f98Sopenharmony_ci    const char **testStrings = NULL;
22935375f98Sopenharmony_ci    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
23035375f98Sopenharmony_ci
23135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
23235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
23335375f98Sopenharmony_ci    VERIFY_FAILS_END
23435375f98Sopenharmony_ci}
23535375f98Sopenharmony_ci
23635375f98Sopenharmony_civoid testNotEqualStringArray6(void)
23735375f98Sopenharmony_ci{
23835375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "boo", "woo", "zoo" };
23935375f98Sopenharmony_ci    const char **expStrings = NULL;
24035375f98Sopenharmony_ci
24135375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
24235375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
24335375f98Sopenharmony_ci    VERIFY_FAILS_END
24435375f98Sopenharmony_ci}
24535375f98Sopenharmony_ci
24635375f98Sopenharmony_civoid testEqualStringArrayIfBothNulls(void)
24735375f98Sopenharmony_ci{
24835375f98Sopenharmony_ci    const char **testStrings = NULL;
24935375f98Sopenharmony_ci    const char **expStrings = NULL;
25035375f98Sopenharmony_ci
25135375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
25235375f98Sopenharmony_ci}
25335375f98Sopenharmony_ci
25435375f98Sopenharmony_civoid testNotEqualStringArrayLengthZero(void)
25535375f98Sopenharmony_ci{
25635375f98Sopenharmony_ci    const char *testStrings[] = {NULL};
25735375f98Sopenharmony_ci    const char **expStrings = NULL;
25835375f98Sopenharmony_ci
25935375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
26035375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 0);
26135375f98Sopenharmony_ci    VERIFY_FAILS_END
26235375f98Sopenharmony_ci}
26335375f98Sopenharmony_ci
26435375f98Sopenharmony_civoid testEqualStringEachEqual(void)
26535375f98Sopenharmony_ci{
26635375f98Sopenharmony_ci    const char *testStrings1[] = { "foo", "foo", "foo", "foo" };
26735375f98Sopenharmony_ci    const char *testStrings2[] = { "boo", "boo", "boo", "zoo" };
26835375f98Sopenharmony_ci    const char *testStrings3[] = { "", "", "", "" };
26935375f98Sopenharmony_ci
27035375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", testStrings1, 4);
27135375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", testStrings1, 1);
27235375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("boo", testStrings2, 3);
27335375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("", testStrings3, 4);
27435375f98Sopenharmony_ci}
27535375f98Sopenharmony_ci
27635375f98Sopenharmony_civoid testNotEqualStringEachEqual1(void)
27735375f98Sopenharmony_ci{
27835375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "foo", "foo", "moo" };
27935375f98Sopenharmony_ci
28035375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
28135375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", testStrings, 4);
28235375f98Sopenharmony_ci    VERIFY_FAILS_END
28335375f98Sopenharmony_ci}
28435375f98Sopenharmony_ci
28535375f98Sopenharmony_civoid testNotEqualStringEachEqual2(void)
28635375f98Sopenharmony_ci{
28735375f98Sopenharmony_ci    const char *testStrings[] = { "boo", "foo", "foo", "foo" };
28835375f98Sopenharmony_ci
28935375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
29035375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", testStrings, 4);
29135375f98Sopenharmony_ci    VERIFY_FAILS_END
29235375f98Sopenharmony_ci}
29335375f98Sopenharmony_ci
29435375f98Sopenharmony_civoid testNotEqualStringEachEqual3(void)
29535375f98Sopenharmony_ci{
29635375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "foo", "foo", NULL };
29735375f98Sopenharmony_ci
29835375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
29935375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", testStrings, 4);
30035375f98Sopenharmony_ci    VERIFY_FAILS_END
30135375f98Sopenharmony_ci}
30235375f98Sopenharmony_ci
30335375f98Sopenharmony_civoid testNotEqualStringEachEqual4(void)
30435375f98Sopenharmony_ci{
30535375f98Sopenharmony_ci    const char *testStrings[] = { "foo", "foo", "woo", "foo" };
30635375f98Sopenharmony_ci
30735375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
30835375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", testStrings, 4);
30935375f98Sopenharmony_ci    VERIFY_FAILS_END
31035375f98Sopenharmony_ci}
31135375f98Sopenharmony_ci
31235375f98Sopenharmony_civoid testNotEqualStringEachEqual5(void)
31335375f98Sopenharmony_ci{
31435375f98Sopenharmony_ci    EXPECT_ABORT_BEGIN
31535375f98Sopenharmony_ci    TEST_ASSERT_EACH_EQUAL_STRING("foo", NULL, 1);
31635375f98Sopenharmony_ci    VERIFY_FAILS_END
31735375f98Sopenharmony_ci}
31835375f98Sopenharmony_ci
31935375f98Sopenharmony_civoid testCstringsEscapeSequence(void)
32035375f98Sopenharmony_ci{
32135375f98Sopenharmony_ci#ifndef USING_OUTPUT_SPY
32235375f98Sopenharmony_ci    TEST_IGNORE();
32335375f98Sopenharmony_ci#else
32435375f98Sopenharmony_ci    startPutcharSpy();
32535375f98Sopenharmony_ci    UnityPrint("\x16\x10");
32635375f98Sopenharmony_ci    endPutcharSpy();
32735375f98Sopenharmony_ci    TEST_ASSERT_EQUAL_STRING("\\x16\\x10", getBufferPutcharSpy());
32835375f98Sopenharmony_ci#endif
32935375f98Sopenharmony_ci}
330