libsheepy

C lib for handling text files, strings and json like data structure with an object oriented system
git clone https://spartatek.se/git/libsheepy.git
Log | Files | Refs | README | LICENSE

CuTestTest.c (18334B)


      1 #include <assert.h>
      2 #include <setjmp.h>
      3 #include <stdlib.h>
      4 #include <stdio.h>
      5 #include <string.h>
      6 
      7 #include "CuTest.h"
      8 
      9 /*-------------------------------------------------------------------------*
     10  * Helper functions
     11  *-------------------------------------------------------------------------*/
     12 
     13 #define CompareAsserts(tc, message, expected, actual)  X_CompareAsserts((tc), __FILE__, __LINE__, (message), (expected), (actual))
     14 
     15 static void X_CompareAsserts(CuTest* tc, const char *file, int line, const char* message, const char* expected, CuString *actual)
     16 {
     17 	int mismatch;
     18 	if (expected == NULL || actual == NULL || actual==NULL) {
     19 		mismatch = (expected != NULL || actual != NULL);
     20 	} else {
     21 		const char *front = __FILE__ ":";
     22 		const size_t frontLen = strlen(front);
     23 		const size_t expectedLen = strlen(expected);
     24 
     25 		const char *matchStr = actual->buffer;
     26 
     27 		mismatch = (strncmp(matchStr, front, frontLen) != 0);
     28 		if (!mismatch) {
     29 			matchStr = strchr(matchStr + frontLen, ':');
     30 			mismatch |= (matchStr == NULL || strncmp(matchStr, ": ", 2));
     31 			if (!mismatch) {
     32 				matchStr += 2;
     33 				mismatch |= (strncmp(matchStr, expected, expectedLen) != 0);
     34 			}
     35 		}
     36 	}
     37 
     38 	CuAssert_Line(tc, file, line, message, !mismatch);
     39 }
     40 
     41 /*-------------------------------------------------------------------------*
     42  * CuString Test
     43  *-------------------------------------------------------------------------*/
     44 
     45 void TestCuStringNew(CuTest* tc)
     46 {
     47 	CuString* str = CuStringNew();
     48 	CuAssertTrue(tc, 0 == str->length);
     49 	CuAssertTrue(tc, 0 != str->size);
     50 	CuAssertStrEquals(tc, "", str->buffer);
     51 }
     52 
     53 
     54 void TestCuStringAppend(CuTest* tc)
     55 {
     56 	CuString* str = CuStringNew();
     57 	CuStringAppend(str, "hello");
     58 	CuAssertIntEquals(tc, 5, str->length);
     59 	CuAssertStrEquals(tc, "hello", str->buffer);
     60 	CuStringAppend(str, " world");
     61 	CuAssertIntEquals(tc, 11, str->length);
     62 	CuAssertStrEquals(tc, "hello world", str->buffer);
     63 }
     64 
     65 
     66 void TestCuStringAppendNULL(CuTest* tc)
     67 {
     68 	CuString* str = CuStringNew();
     69 	CuStringAppend(str, NULL);
     70 	CuAssertIntEquals(tc, 4, str->length);
     71 	CuAssertStrEquals(tc, "NULL", str->buffer);
     72 }
     73 
     74 
     75 void TestCuStringAppendChar(CuTest* tc)
     76 {
     77 	CuString* str = CuStringNew();
     78 	CuStringAppendChar(str, 'a');
     79 	CuStringAppendChar(str, 'b');
     80 	CuStringAppendChar(str, 'c');
     81 	CuStringAppendChar(str, 'd');
     82 	CuAssertIntEquals(tc, 4, str->length);
     83 	CuAssertStrEquals(tc, "abcd", str->buffer);
     84 }
     85 
     86 
     87 void TestCuStringInserts(CuTest* tc)
     88 {
     89 	CuString* str = CuStringNew();
     90 	CuStringAppend(str, "world");
     91 	CuAssertIntEquals(tc, 5, str->length);
     92 	CuAssertStrEquals(tc, "world", str->buffer);
     93 	CuStringInsert(str, "hell", 0);
     94 	CuAssertIntEquals(tc, 9, str->length);
     95 	CuAssertStrEquals(tc, "hellworld", str->buffer);
     96 	CuStringInsert(str, "o ", 4);
     97 	CuAssertIntEquals(tc, 11, str->length);
     98 	CuAssertStrEquals(tc, "hello world", str->buffer);
     99 	CuStringInsert(str, "!", 11);
    100 	CuAssertIntEquals(tc, 12, str->length);
    101 	CuAssertStrEquals(tc, "hello world!", str->buffer);
    102 }
    103 
    104 
    105 void TestCuStringResizes(CuTest* tc)
    106 {
    107 	CuString* str = CuStringNew();
    108 	int i;
    109 	for(i = 0 ; i < STRING_MAX ; ++i)
    110 	{
    111 		CuStringAppend(str, "aa");
    112 	}
    113 	CuAssertTrue(tc, STRING_MAX * 2 == str->length);
    114 	CuAssertTrue(tc, STRING_MAX * 2 <= str->size);
    115 }
    116 
    117 CuSuite* CuStringGetSuite(void)
    118 {
    119 	CuSuite* suite = CuSuiteNew();
    120 
    121 	SUITE_ADD_TEST(suite, TestCuStringNew);
    122 	SUITE_ADD_TEST(suite, TestCuStringAppend);
    123 	SUITE_ADD_TEST(suite, TestCuStringAppendNULL);
    124 	SUITE_ADD_TEST(suite, TestCuStringAppendChar);
    125 	SUITE_ADD_TEST(suite, TestCuStringInserts);
    126 	SUITE_ADD_TEST(suite, TestCuStringResizes);
    127 
    128 	return suite;
    129 }
    130 
    131 /*-------------------------------------------------------------------------*
    132  * CuTest Test
    133  *-------------------------------------------------------------------------*/
    134 
    135 void TestPasses(CuTest* tc)
    136 {
    137 	CuAssert(tc, "test should pass", 1 == 0 + 1);
    138 }
    139 
    140 void zTestFails(CuTest* tc)
    141 {
    142 	CuAssert(tc, "test should fail", 1 == 1 + 1);
    143 }
    144 
    145 
    146 void TestCuTestNew(CuTest* tc)
    147 {
    148 	CuTest* tc2 = CuTestNew("MyTest", TestPasses);
    149 	CuAssertStrEquals(tc, "MyTest", tc2->name);
    150 	CuAssertTrue(tc, !tc2->failed);
    151         CuAssertTrue(tc, tc2->message == NULL);
    152 	CuAssertTrue(tc, tc2->function == TestPasses);
    153 	CuAssertTrue(tc, tc2->ran == 0);
    154 	CuAssertTrue(tc, tc2->jumpBuf == NULL);
    155 }
    156 
    157 
    158 void TestCuTestInit(CuTest *tc)
    159 {
    160 	CuTest tc2;
    161 	CuTestInit(&tc2, "MyTest", TestPasses);
    162 	CuAssertStrEquals(tc, "MyTest", tc2.name);
    163 	CuAssertTrue(tc, !tc2.failed);
    164         CuAssertTrue(tc, tc2.message == NULL);
    165 	CuAssertTrue(tc, tc2.function == TestPasses);
    166 	CuAssertTrue(tc, tc2.ran == 0);
    167 	CuAssertTrue(tc, tc2.jumpBuf == NULL);
    168 }
    169 
    170 void TestCuAssert(CuTest* tc)
    171 {
    172 	CuTest tc2;
    173 	CuTestInit(&tc2, "MyTest", TestPasses);
    174 
    175 	CuAssert(&tc2, "test 1", 5 == 4 + 1);
    176 	CuAssertTrue(tc, !tc2.failed);
    177         CuAssertTrue(tc, tc2.message == NULL);
    178 
    179 	CuAssert(&tc2, "test 2", 0);
    180 	CuAssertTrue(tc, tc2.failed);
    181 	CompareAsserts(tc, "CuAssert didn't fail", "test 2", tc2.message);
    182 
    183 	CuAssert(&tc2, "test 3", 1);
    184 	CuAssertTrue(tc, tc2.failed);
    185 	CompareAsserts(tc, "CuAssert didn't fail", "test 2", tc2.message);
    186 
    187 	CuAssert(&tc2, "test 4", 0);
    188 	CuAssertTrue(tc, tc2.failed);
    189 	CompareAsserts(tc, "CuAssert didn't fail", "test 4", tc2.message);
    190 
    191 }
    192 
    193 void TestCuAssertPtrEquals_Success(CuTest* tc)
    194 {
    195 	CuTest tc2;
    196 	int x;
    197 
    198 	CuTestInit(&tc2, "MyTest", TestPasses);
    199 
    200 	/* test success case */
    201 	CuAssertPtrEquals(&tc2, &x, &x);
    202 	CuAssertTrue(tc, ! tc2.failed);
    203         CuAssertTrue(tc, tc2.message == NULL);
    204 }
    205 
    206 void TestCuAssertPtrEquals_Failure(CuTest* tc)
    207 {
    208 	CuTest tc2;
    209 	int x;
    210 	int* nullPtr = NULL;
    211 	char expected_message[STRING_MAX];
    212 
    213 	CuTestInit(&tc2, "MyTest", TestPasses);
    214 
    215 	/* test failing case */
    216 	sprintf(expected_message, "expected pointer <0x%p> but was <0x%p>", (void*)nullPtr, (void*)&x);
    217 	CuAssertPtrEquals(&tc2, NULL, &x);
    218 	CuAssertTrue(tc, tc2.failed);
    219 	CompareAsserts(tc, "CuAssertPtrEquals failed", expected_message, tc2.message);
    220 }
    221 
    222 void TestCuAssertPtrNotNull_Success(CuTest* tc)
    223 {
    224 	CuTest tc2;
    225 	int x;
    226 
    227 	CuTestInit(&tc2, "MyTest", TestPasses);
    228 
    229 	/* test success case */
    230 	CuAssertPtrNotNull(&tc2, &x);
    231 	CuAssertTrue(tc, ! tc2.failed);
    232         CuAssertTrue(tc, tc2.message == NULL);
    233 }
    234 
    235 void TestCuAssertPtrNotNull_Failure(CuTest* tc)
    236 {
    237 	CuTest tc2;
    238 
    239 	CuTestInit(&tc2, "MyTest", TestPasses);
    240 
    241 	/* test failing case */
    242 	CuAssertPtrNotNull(&tc2, NULL);
    243 	CuAssertTrue(tc, tc2.failed);
    244 	CompareAsserts(tc, "CuAssertPtrNotNull failed", "null pointer unexpected", tc2.message);
    245 }
    246 
    247 void TestCuTestRun(CuTest* tc)
    248 {
    249 	CuTest tc2;
    250 	CuTestInit(&tc2, "MyTest", zTestFails);
    251 	CuTestRun(&tc2);
    252 
    253 	CuAssertStrEquals(tc, "MyTest", tc2.name);
    254 	CuAssertTrue(tc, tc2.failed);
    255 	CuAssertTrue(tc, tc2.ran);
    256 	CompareAsserts(tc, "TestRun failed", "test should fail", tc2.message);
    257 }
    258 
    259 /*-------------------------------------------------------------------------*
    260  * CuSuite Test
    261  *-------------------------------------------------------------------------*/
    262 
    263 void TestCuSuiteInit(CuTest* tc)
    264 {
    265 	CuSuite ts;
    266 	CuSuiteInit(&ts);
    267 	CuAssertTrue(tc, ts.count == 0);
    268 	CuAssertTrue(tc, ts.failCount == 0);
    269 }
    270 
    271 void TestCuSuiteNew(CuTest* tc)
    272 {
    273 	CuSuite* ts = CuSuiteNew();
    274 	CuAssertTrue(tc, ts->count == 0);
    275 	CuAssertTrue(tc, ts->failCount == 0);
    276 }
    277 
    278 void TestCuSuiteAddTest(CuTest* tc)
    279 {
    280 	CuSuite ts;
    281 	CuTest tc2;
    282 
    283 	CuSuiteInit(&ts);
    284 	CuTestInit(&tc2, "MyTest", zTestFails);
    285 
    286 	CuSuiteAdd(&ts, &tc2);
    287 	CuAssertTrue(tc, ts.count == 1);
    288 
    289 	CuAssertStrEquals(tc, "MyTest", ts.list[0]->name);
    290 }
    291 
    292 void TestCuSuiteAddSuite(CuTest* tc)
    293 {
    294 	CuSuite* ts1 = CuSuiteNew();
    295 	CuSuite* ts2 = CuSuiteNew();
    296 
    297 	CuSuiteAdd(ts1, CuTestNew("TestFails1", zTestFails));
    298 	CuSuiteAdd(ts1, CuTestNew("TestFails2", zTestFails));
    299 
    300 	CuSuiteAdd(ts2, CuTestNew("TestFails3", zTestFails));
    301 	CuSuiteAdd(ts2, CuTestNew("TestFails4", zTestFails));
    302 
    303 	CuSuiteAddSuite(ts1, ts2);
    304 	CuAssertIntEquals(tc, 4, ts1->count);
    305 
    306 	CuAssertStrEquals(tc, "TestFails1", ts1->list[0]->name);
    307 	CuAssertStrEquals(tc, "TestFails2", ts1->list[1]->name);
    308 	CuAssertStrEquals(tc, "TestFails3", ts1->list[2]->name);
    309 	CuAssertStrEquals(tc, "TestFails4", ts1->list[3]->name);
    310 }
    311 
    312 void TestCuSuiteRun(CuTest* tc)
    313 {
    314 	CuSuite ts;
    315 	CuTest tc1, tc2, tc3, tc4;
    316 
    317 	CuSuiteInit(&ts);
    318 	CuTestInit(&tc1, "TestPasses", TestPasses);
    319 	CuTestInit(&tc2, "TestPasses", TestPasses);
    320 	CuTestInit(&tc3, "TestFails",  zTestFails);
    321 	CuTestInit(&tc4, "TestFails",  zTestFails);
    322 
    323 	CuSuiteAdd(&ts, &tc1);
    324 	CuSuiteAdd(&ts, &tc2);
    325 	CuSuiteAdd(&ts, &tc3);
    326 	CuSuiteAdd(&ts, &tc4);
    327 	CuAssertTrue(tc, ts.count == 4);
    328 
    329 	CuSuiteRun(&ts);
    330 	CuAssertTrue(tc, ts.count - ts.failCount == 2);
    331 	CuAssertTrue(tc, ts.failCount == 2);
    332 }
    333 
    334 void TestCuSuiteSummary(CuTest* tc)
    335 {
    336 	CuSuite ts;
    337 	CuTest tc1, tc2;
    338 	CuString summary;
    339 
    340 	CuSuiteInit(&ts);
    341 	CuTestInit(&tc1, "TestPasses", TestPasses);
    342 	CuTestInit(&tc2, "TestFails",  zTestFails);
    343 	CuStringInit(&summary);
    344 
    345 	CuSuiteAdd(&ts, &tc1);
    346 	CuSuiteAdd(&ts, &tc2);
    347 	CuSuiteRun(&ts);
    348 
    349 	CuSuiteSummary(&ts, &summary);
    350 
    351 	CuAssertTrue(tc, ts.count == 2);
    352 	CuAssertTrue(tc, ts.failCount == 1);
    353 	CuAssertStrEquals(tc, ".F\n\n", summary.buffer);
    354 }
    355 
    356 
    357 void TestCuSuiteDetails_SingleFail(CuTest* tc)
    358 {
    359 	CuSuite ts;
    360 	CuTest tc1, tc2;
    361 	CuString details;
    362 	const char* front;
    363 	const char* back;
    364 
    365 	CuSuiteInit(&ts);
    366 	CuTestInit(&tc1, "TestPasses", TestPasses);
    367 	CuTestInit(&tc2, "TestFails",  zTestFails);
    368 	CuStringInit(&details);
    369 
    370 	CuSuiteAdd(&ts, &tc1);
    371 	CuSuiteAdd(&ts, &tc2);
    372 	CuSuiteRun(&ts);
    373 
    374 	CuSuiteDetails(&ts, &details);
    375 
    376 	CuAssertTrue(tc, ts.count == 2);
    377 	CuAssertTrue(tc, ts.failCount == 1);
    378 
    379 	front = "There was 1 failure:\n"
    380 		"1) TestFails: ";
    381 	back =  "test should fail\n"
    382 		"\n!!!FAILURES!!!\n"
    383 		"Runs: 2 Passes: 1 Fails: 1\n";
    384 
    385 	CuAssertStrEquals(tc, back, details.buffer + strlen(details.buffer) - strlen(back));
    386 	details.buffer[strlen(front)] = 0;
    387 	CuAssertStrEquals(tc, front, details.buffer);
    388 }
    389 
    390 
    391 void TestCuSuiteDetails_SinglePass(CuTest* tc)
    392 {
    393 	CuSuite ts;
    394 	CuTest tc1;
    395 	CuString details;
    396 	const char* expected;
    397 
    398 	CuSuiteInit(&ts);
    399 	CuTestInit(&tc1, "TestPasses", TestPasses);
    400 	CuStringInit(&details);
    401 
    402 	CuSuiteAdd(&ts, &tc1);
    403 	CuSuiteRun(&ts);
    404 
    405 	CuSuiteDetails(&ts, &details);
    406 
    407 	CuAssertTrue(tc, ts.count == 1);
    408 	CuAssertTrue(tc, ts.failCount == 0);
    409 
    410 	expected =
    411 		"OK (1 test)\n";
    412 
    413 	CuAssertStrEquals(tc, expected, details.buffer);
    414 }
    415 
    416 void TestCuSuiteDetails_MultiplePasses(CuTest* tc)
    417 {
    418 	CuSuite ts;
    419 	CuTest tc1, tc2;
    420 	CuString details;
    421 	const char* expected;
    422 
    423 	CuSuiteInit(&ts);
    424 	CuTestInit(&tc1, "TestPasses", TestPasses);
    425 	CuTestInit(&tc2, "TestPasses", TestPasses);
    426 	CuStringInit(&details);
    427 
    428 	CuSuiteAdd(&ts, &tc1);
    429 	CuSuiteAdd(&ts, &tc2);
    430 	CuSuiteRun(&ts);
    431 
    432 	CuSuiteDetails(&ts, &details);
    433 
    434 	CuAssertTrue(tc, ts.count == 2);
    435 	CuAssertTrue(tc, ts.failCount == 0);
    436 
    437 	expected =
    438 		"OK (2 tests)\n";
    439 
    440 	CuAssertStrEquals(tc, expected, details.buffer);
    441 }
    442 
    443 void TestCuSuiteDetails_MultipleFails(CuTest* tc)
    444 {
    445 	CuSuite ts;
    446 	CuTest tc1, tc2;
    447 	CuString details;
    448 	const char* front;
    449 	const char* mid;
    450 	const char* back;
    451 
    452 	CuSuiteInit(&ts);
    453 	CuTestInit(&tc1, "TestFails1", zTestFails);
    454 	CuTestInit(&tc2, "TestFails2", zTestFails);
    455 	CuStringInit(&details);
    456 
    457 	CuSuiteAdd(&ts, &tc1);
    458 	CuSuiteAdd(&ts, &tc2);
    459 	CuSuiteRun(&ts);
    460 
    461 	CuSuiteDetails(&ts, &details);
    462 
    463 	CuAssertTrue(tc, ts.count == 2);
    464 	CuAssertTrue(tc, ts.failCount == 2);
    465 
    466 	front =
    467 		"There were 2 failures:\n"
    468 		"1) TestFails1: ";
    469 	mid =   "test should fail\n"
    470 		"2) TestFails2: ";
    471 	back =  "test should fail\n"
    472 		"\n!!!FAILURES!!!\n"
    473 		"Runs: 2 Passes: 0 Fails: 2\n";
    474 
    475 	CuAssertStrEquals(tc, back, details.buffer + strlen(details.buffer) - strlen(back));
    476 	CuAssert(tc, "Couldn't find middle", strstr(details.buffer, mid) != NULL);
    477 	details.buffer[strlen(front)] = 0;
    478 	CuAssertStrEquals(tc, front, details.buffer);
    479 }
    480 
    481 
    482 /*-------------------------------------------------------------------------*
    483  * Misc Test
    484  *-------------------------------------------------------------------------*/
    485 
    486 void TestCuStrCopy(CuTest* tc)
    487 {
    488 	const char* old = "hello world";
    489 	const char* newStr = CuStrCopy(old);
    490 	CuAssert(tc, "old is new", strcmp(old, newStr) == 0);
    491 }
    492 
    493 
    494 void TestCuStringAppendFormat(CuTest* tc)
    495 {
    496 	int i;
    497 	char* text = CuStrAlloc(301);		/* long string */
    498 	CuString* str = CuStringNew();
    499 	for (i = 0 ; i < 300 ; ++i)
    500 		text[i] = 'a';
    501 	text[300] = '\0';
    502 	CuStringAppendFormat(str, "%s", text);
    503 
    504 	/* buffer limit raised to HUGE_STRING_LEN so no overflow */
    505 
    506 	CuAssert(tc, "length of str->buffer is 300", 300 == strlen(str->buffer));
    507 }
    508 
    509 void TestFail(CuTest* tc)
    510 {
    511 	jmp_buf buf;
    512 	int pointReached = 0;
    513 	CuTest* tc2 = CuTestNew("TestFails", zTestFails);
    514 	tc2->jumpBuf = &buf;
    515 	if (setjmp(buf) == 0)
    516 	{
    517 		CuFail(tc2, "hello world");
    518 		pointReached = 1;
    519 	}
    520 	CuAssert(tc, "point was not reached", pointReached == 0);
    521 }
    522 
    523 void TestAssertStrEquals(CuTest* tc)
    524 {
    525 	jmp_buf buf;
    526 	CuTest *tc2 = CuTestNew("TestAssertStrEquals", zTestFails);
    527 
    528 	const char* expected = "expected <hello> but was <world>";
    529 	const char *expectedMsg = "some text: expected <hello> but was <world>";
    530 
    531 	tc2->jumpBuf = &buf;
    532 	if (setjmp(buf) == 0)
    533 	{
    534 		CuAssertStrEquals(tc2, "hello", "world");
    535 	}
    536 	CuAssertTrue(tc, tc2->failed);
    537 	CompareAsserts(tc, "CuAssertStrEquals failed", expected, tc2->message);
    538 	if (setjmp(buf) == 0)
    539 	{
    540 		CuAssertStrEquals_Msg(tc2, "some text", "hello", "world");
    541 	}
    542 	CuAssertTrue(tc, tc2->failed);
    543 	CompareAsserts(tc, "CuAssertStrEquals failed", expectedMsg, tc2->message);
    544 }
    545 
    546 void TestAssertStrEquals_NULL(CuTest* tc)
    547 {
    548 	jmp_buf buf;
    549 	CuTest *tc2 = CuTestNew("TestAssertStrEquals_NULL", zTestFails);
    550 
    551 	tc2->jumpBuf = &buf;
    552 	if (setjmp(buf) == 0)
    553 	{
    554 		CuAssertStrEquals(tc2, NULL, NULL);
    555 	}
    556 	CuAssertTrue(tc, !tc2->failed);
    557 	CompareAsserts(tc, "CuAssertStrEquals_NULL failed", NULL, tc2->message);
    558 	if (setjmp(buf) == 0)
    559 	{
    560 		CuAssertStrEquals_Msg(tc2, "some text", NULL, NULL);
    561 	}
    562 	CuAssertTrue(tc, !tc2->failed);
    563 	CompareAsserts(tc, "CuAssertStrEquals_NULL failed", NULL, tc2->message);
    564 }
    565 
    566 void TestAssertStrEquals_FailNULLStr(CuTest* tc)
    567 {
    568 	jmp_buf buf;
    569 	CuTest *tc2 = CuTestNew("TestAssertStrEquals_FailNULLStr", zTestFails);
    570 
    571 	const char* expected = "expected <hello> but was <NULL>";
    572 	const char *expectedMsg = "some text: expected <hello> but was <NULL>";
    573 
    574 	tc2->jumpBuf = &buf;
    575 	if (setjmp(buf) == 0)
    576 	{
    577 		CuAssertStrEquals(tc2, "hello", NULL);
    578 	}
    579 	CuAssertTrue(tc, tc2->failed);
    580 	CompareAsserts(tc, "CuAssertStrEquals_FailNULLStr failed", expected, tc2->message);
    581 	if (setjmp(buf) == 0)
    582 	{
    583 		CuAssertStrEquals_Msg(tc2, "some text", "hello", NULL);
    584 	}
    585 	CuAssertTrue(tc, tc2->failed);
    586 	CompareAsserts(tc, "CuAssertStrEquals_FailNULLStr failed", expectedMsg, tc2->message);
    587 }
    588 
    589 void TestAssertStrEquals_FailStrNULL(CuTest* tc)
    590 {
    591 	jmp_buf buf;
    592 	CuTest *tc2 = CuTestNew("TestAssertStrEquals_FailStrNULL", zTestFails);
    593 
    594 	const char* expected = "expected <NULL> but was <hello>";
    595 	const char *expectedMsg = "some text: expected <NULL> but was <hello>";
    596 
    597 	tc2->jumpBuf = &buf;
    598 	if (setjmp(buf) == 0)
    599 	{
    600 		CuAssertStrEquals(tc2, NULL, "hello");
    601 	}
    602 	CuAssertTrue(tc, tc2->failed);
    603 	CompareAsserts(tc, "CuAssertStrEquals_FailStrNULL failed", expected, tc2->message);
    604 	if (setjmp(buf) == 0)
    605 	{
    606 		CuAssertStrEquals_Msg(tc2, "some text", NULL, "hello");
    607 	}
    608 	CuAssertTrue(tc, tc2->failed);
    609 	CompareAsserts(tc, "CuAssertStrEquals_FailStrNULL failed", expectedMsg, tc2->message);
    610 }
    611 
    612 void TestAssertIntEquals(CuTest* tc)
    613 {
    614 	jmp_buf buf;
    615 	CuTest *tc2 = CuTestNew("TestAssertIntEquals", zTestFails);
    616 	const char* expected = "expected <42> but was <32>";
    617 	const char* expectedMsg = "some text: expected <42> but was <32>";
    618 	tc2->jumpBuf = &buf;
    619 	if (setjmp(buf) == 0)
    620 	{
    621 		CuAssertIntEquals(tc2, 42, 32);
    622 	}
    623 	CuAssertTrue(tc, tc2->failed);
    624 	CompareAsserts(tc, "CuAssertIntEquals failed", expected, tc2->message);
    625 	if (setjmp(buf) == 0)
    626 	{
    627 		CuAssertIntEquals_Msg(tc2, "some text", 42, 32);
    628 	}
    629 	CuAssertTrue(tc, tc2->failed);
    630 	CompareAsserts(tc, "CuAssertStrEquals failed", expectedMsg, tc2->message);
    631 }
    632 
    633 void TestAssertDblEquals(CuTest* tc)
    634 {
    635 	jmp_buf buf;
    636 	double x = 3.33;
    637 	double y = 10.0 / 3.0;
    638 	CuTest *tc2 = CuTestNew("TestAssertDblEquals", zTestFails);
    639 	char expected[STRING_MAX];
    640 	char expectedMsg[STRING_MAX];
    641 	sprintf(expected, "expected <%lf> but was <%lf>", x, y);
    642 	sprintf(expectedMsg, "some text: expected <%lf> but was <%lf>", x, y);
    643 
    644 	CuTestInit(tc2, "TestAssertDblEquals", TestPasses);
    645 
    646 	CuAssertDblEquals(tc2, x, x, 0.0);
    647 	CuAssertTrue(tc, ! tc2->failed);
    648         CuAssertTrue(tc, tc2->message == NULL);
    649         
    650 	CuAssertDblEquals(tc2, x, y, 0.01);
    651 	CuAssertTrue(tc, ! tc2->failed);
    652         CuAssertTrue(tc, tc2->message == NULL);
    653 
    654 	tc2->jumpBuf = &buf;
    655 	if (setjmp(buf) == 0)
    656 	{
    657 		CuAssertDblEquals(tc2, x, y, 0.001);
    658 	}
    659 	CuAssertTrue(tc, tc2->failed);
    660 	CompareAsserts(tc, "CuAssertDblEquals failed", expected, tc2->message);
    661 	tc2->jumpBuf = &buf;
    662 	if (setjmp(buf) == 0)
    663 	{
    664 		CuAssertDblEquals_Msg(tc2, "some text", x, y, 0.001);
    665 	}
    666 	CuAssertTrue(tc, tc2->failed);
    667 	CompareAsserts(tc, "CuAssertDblEquals failed", expectedMsg, tc2->message);
    668 }
    669 
    670 /*-------------------------------------------------------------------------*
    671  * main
    672  *-------------------------------------------------------------------------*/
    673 
    674 CuSuite* CuGetSuite(void)
    675 {
    676 	CuSuite* suite = CuSuiteNew();
    677 
    678 	SUITE_ADD_TEST(suite, TestCuStringAppendFormat);
    679 	SUITE_ADD_TEST(suite, TestCuStrCopy);
    680 	SUITE_ADD_TEST(suite, TestFail);
    681 	SUITE_ADD_TEST(suite, TestAssertStrEquals);
    682 	SUITE_ADD_TEST(suite, TestAssertStrEquals_NULL);
    683 	SUITE_ADD_TEST(suite, TestAssertStrEquals_FailStrNULL);
    684 	SUITE_ADD_TEST(suite, TestAssertStrEquals_FailNULLStr);
    685 	SUITE_ADD_TEST(suite, TestAssertIntEquals);
    686 	SUITE_ADD_TEST(suite, TestAssertDblEquals);
    687 
    688 	SUITE_ADD_TEST(suite, TestCuTestNew);
    689 	SUITE_ADD_TEST(suite, TestCuTestInit);
    690 	SUITE_ADD_TEST(suite, TestCuAssert);
    691 	SUITE_ADD_TEST(suite, TestCuAssertPtrEquals_Success);
    692 	SUITE_ADD_TEST(suite, TestCuAssertPtrEquals_Failure);
    693 	SUITE_ADD_TEST(suite, TestCuAssertPtrNotNull_Success);
    694 	SUITE_ADD_TEST(suite, TestCuAssertPtrNotNull_Failure);
    695 	SUITE_ADD_TEST(suite, TestCuTestRun);
    696 
    697 	SUITE_ADD_TEST(suite, TestCuSuiteInit);
    698 	SUITE_ADD_TEST(suite, TestCuSuiteNew);
    699 	SUITE_ADD_TEST(suite, TestCuSuiteAddTest);
    700 	SUITE_ADD_TEST(suite, TestCuSuiteAddSuite);
    701 	SUITE_ADD_TEST(suite, TestCuSuiteRun);
    702 	SUITE_ADD_TEST(suite, TestCuSuiteSummary);
    703 	SUITE_ADD_TEST(suite, TestCuSuiteDetails_SingleFail);
    704 	SUITE_ADD_TEST(suite, TestCuSuiteDetails_SinglePass);
    705 	SUITE_ADD_TEST(suite, TestCuSuiteDetails_MultiplePasses);
    706 	SUITE_ADD_TEST(suite, TestCuSuiteDetails_MultipleFails);
    707 
    708 	return suite;
    709 }