#include #include #include #include #include #include "CuTest.h" CuSuite* CuGetSuite(); CuSuite* CuStringGetSuite(); /*-------------------------------------------------------------------------* * CuString Test *-------------------------------------------------------------------------*/ void TestCuStringNew(CuTest* tc) { CuString* str = CuStringNew(); CuAssertTrue(tc, 0 == str->length); CuAssertTrue(tc, 0 != str->size); CuAssertStrEquals(tc, "", str->buffer); } void TestCuStringAppendNULL(CuTest* tc) { CuString* str = CuStringNew(); CuStringAppend(str, NULL); CuAssertIntEquals(tc, 4, str->length); CuAssertStrEquals(tc, "NULL", str->buffer); } void TestCuStringAppendChar(CuTest* tc) { CuString* str = CuStringNew(); CuStringAppendChar(str, 'a'); CuStringAppendChar(str, 'b'); CuStringAppendChar(str, 'c'); CuStringAppendChar(str, 'd'); CuAssertIntEquals(tc, 4, str->length); CuAssertStrEquals(tc, "abcd", str->buffer); } CuSuite* CuStringGetSuite(void) { CuSuite* suite = CuSuiteNew(); SUITE_ADD_TEST(suite, TestCuStringNew); SUITE_ADD_TEST(suite, TestCuStringAppendNULL); SUITE_ADD_TEST(suite, TestCuStringAppendChar); return suite; } /*-------------------------------------------------------------------------* * CuTest Test *-------------------------------------------------------------------------*/ void TestPasses(CuTest* tc) { CuAssert(tc, "test should pass", 1 == 0 + 1); } void zTestFails(CuTest* tc) { CuAssert(tc, "test should fail", 1 == 1 + 1); } void TestCuTestNew(CuTest* tc) { CuTest* tc2 = CuTestNew("MyTest", TestPasses); CuAssertStrEquals(tc, "MyTest", tc2->name); CuAssertTrue(tc, !tc2->failed); CuAssertTrue(tc, tc2->message == NULL); CuAssertTrue(tc, tc2->function == TestPasses); CuAssertTrue(tc, tc2->ran == 0); CuAssertTrue(tc, tc2->jumpBuf == NULL); } void TestCuAssert(CuTest* tc) { CuTest tc2; CuTestInit(&tc2, "MyTest", TestPasses); CuAssert(&tc2, "test 1", 5 == 4 + 1); CuAssertTrue(tc, !tc2.failed); CuAssertTrue(tc, tc2.message == NULL); } void TestCuAssertPtrEquals_Success(CuTest* tc) { CuTest tc2; int x; CuTestInit(&tc2, "MyTest", TestPasses); /* test success case */ CuAssertPtrEquals(&tc2, &x, &x); CuAssertTrue(tc, ! tc2.failed); CuAssertTrue(tc, NULL == tc2.message); } /*-------------------------------------------------------------------------* * CuSuite Test *-------------------------------------------------------------------------*/ void TestCuSuiteInit(CuTest* tc) { CuSuite ts; CuSuiteInit(&ts); CuAssertTrue(tc, ts.count == 0); CuAssertTrue(tc, ts.failCount == 0); } void TestCuSuiteNew(CuTest* tc) { CuSuite* ts = CuSuiteNew(); CuAssertTrue(tc, ts->count == 0); CuAssertTrue(tc, ts->failCount == 0); } void TestCuSuiteAddTest(CuTest* tc) { CuSuite ts; CuTest tc2; CuSuiteInit(&ts); CuTestInit(&tc2, "MyTest", zTestFails); CuSuiteAdd(&ts, &tc2); CuAssertTrue(tc, ts.count == 1); CuAssertStrEquals(tc, "MyTest", ts.list[0]->name); } void TestCuSuiteAddSuite(CuTest* tc) { CuSuite* ts1 = CuSuiteNew(); CuSuite* ts2 = CuSuiteNew(); CuSuiteAdd(ts1, CuTestNew("TestFails1", zTestFails)); CuSuiteAdd(ts1, CuTestNew("TestFails2", zTestFails)); CuSuiteAdd(ts2, CuTestNew("TestFails3", zTestFails)); CuSuiteAdd(ts2, CuTestNew("TestFails4", zTestFails)); CuSuiteAddSuite(ts1, ts2); CuAssertIntEquals(tc, 4, ts1->count); CuAssertStrEquals(tc, "TestFails1", ts1->list[0]->name); CuAssertStrEquals(tc, "TestFails2", ts1->list[1]->name); CuAssertStrEquals(tc, "TestFails3", ts1->list[2]->name); CuAssertStrEquals(tc, "TestFails4", ts1->list[3]->name); } void TestCuSuiteRun(CuTest* tc) { CuSuite ts; CuTest tc1, tc2, tc3, tc4; CuSuiteInit(&ts); CuTestInit(&tc1, "TestPasses", TestPasses); CuTestInit(&tc2, "TestPasses", TestPasses); CuTestInit(&tc3, "TestFails", zTestFails); CuTestInit(&tc4, "TestFails", zTestFails); CuSuiteAdd(&ts, &tc1); CuSuiteAdd(&ts, &tc2); CuSuiteAdd(&ts, &tc3); CuSuiteAdd(&ts, &tc4); CuAssertTrue(tc, ts.count == 4); CuSuiteRun(&ts); CuAssertTrue(tc, ts.count - ts.failCount == 2); CuAssertTrue(tc, ts.failCount == 2); } void TestCuSuiteSummary(CuTest* tc) { CuSuite ts; CuTest tc1, tc2; CuString summary; CuSuiteInit(&ts); CuTestInit(&tc1, "TestPasses", TestPasses); CuTestInit(&tc2, "TestFails", zTestFails); CuStringInit(&summary); CuSuiteAdd(&ts, &tc1); CuSuiteAdd(&ts, &tc2); CuSuiteRun(&ts); CuSuiteSummary(&ts, &summary); CuAssertTrue(tc, ts.count == 2); CuAssertTrue(tc, ts.failCount == 1); CuAssertStrEquals(tc, ".F\n\n", summary.buffer); } /*-------------------------------------------------------------------------* * Misc Test *-------------------------------------------------------------------------*/ void TestCuStrCopy(CuTest* tc) { const char* old = "hello world"; const char* newStr = CuStrCopy(old); CuAssert(tc, "old is new", strcmp(old, newStr) == 0); } void TestCuStringAppendFormat(CuTest* tc) { int i; char* text = CuStrAlloc(301); /* long string */ CuString* str = CuStringNew(); for (i = 0 ; i < 300 ; ++i) text[i] = 'a'; text[300] = '\0'; CuStringAppendFormat(str, "%s", text); /* buffer limit raised to HUGE_STRING_LEN so no overflow */ CuAssert(tc, "length of str->buffer is 300", 300 == strlen(str->buffer)); } void TestAssertIntEquals(CuTest* tc) { CuTest* tc2 = CuTestNew("TestAssertIntEquals", zTestFails); CuAssertIntEquals(tc2, 32, 32); } /*-------------------------------------------------------------------------* * main *-------------------------------------------------------------------------*/ CuSuite* CuGetSuite(void) { CuSuite* suite = CuSuiteNew(); SUITE_ADD_TEST(suite, TestAssertIntEquals); SUITE_ADD_TEST(suite, TestCuTestNew); SUITE_ADD_TEST(suite, TestCuAssert); SUITE_ADD_TEST(suite, TestCuAssertPtrEquals_Success); SUITE_ADD_TEST(suite, TestCuSuiteInit); SUITE_ADD_TEST(suite, TestCuSuiteNew); SUITE_ADD_TEST(suite, TestCuSuiteAddTest); SUITE_ADD_TEST(suite, TestCuSuiteAddSuite); SUITE_ADD_TEST(suite, TestCuSuiteRun); SUITE_ADD_TEST(suite, TestCuSuiteSummary); return suite; } void RunAllTests(void) { CuString *output = CuStringNew(); CuSuite* suite = CuSuiteNew(); CuSuiteAddSuite(suite, CuGetSuite()); CuSuiteAddSuite(suite, CuStringGetSuite()); CuSuiteRun(suite); CuSuiteSummary(suite, output); CuSuiteDetails(suite, output); printf("%s\n", output->buffer); } int main(void) { RunAllTests(); return 0; }