1 /* ========================================== 2 Unity Project - A Test Framework for C 3 Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams 4 [Released under MIT License. Please refer to license.txt for details] 5 ========================================== */ 6 7 #include <setjmp.h> 8 #include <stdio.h> 9 #include "unity.h" 10 putcharSpy(int c)11void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests 12 13 #define TEST_CASE(...) 14 15 #define EXPECT_ABORT_BEGIN \ 16 if (TEST_PROTECT()) \ 17 { 18 19 #define VERIFY_FAILS_END \ 20 } \ 21 Unity.CurrentTestFailed = (Unity.CurrentTestFailed != 0) ? 0 : 1; \ 22 if (Unity.CurrentTestFailed == 1) { \ 23 SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ 24 UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ 25 UNITY_OUTPUT_CHAR(':'); \ 26 UnityPrint(Unity.CurrentTestName); \ 27 UnityPrint(":FAIL: [[[[ Test Should Have Failed But Did Not ]]]]"); \ 28 UNITY_OUTPUT_CHAR('\n'); \ 29 } 30 31 #define VERIFY_IGNORES_END \ 32 } \ 33 Unity.CurrentTestFailed = (Unity.CurrentTestIgnored != 0) ? 0 : 1; \ 34 Unity.CurrentTestIgnored = 0; \ 35 if (Unity.CurrentTestFailed == 1) { \ 36 SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ 37 UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ 38 UNITY_OUTPUT_CHAR(':'); \ 39 UnityPrint(Unity.CurrentTestName); \ 40 UnityPrint(":FAIL: [[[[ Test Should Have Ignored But Did Not ]]]]"); \ 41 UNITY_OUTPUT_CHAR('\n'); \ 42 } 43 44 int SetToOneToFailInTearDown; 45 int SetToOneMeanWeAlreadyCheckedThisGuy; 46 setUp(void)47void setUp(void) 48 { 49 SetToOneToFailInTearDown = 0; 50 SetToOneMeanWeAlreadyCheckedThisGuy = 0; 51 } 52 tearDown(void)53void tearDown(void) 54 { 55 if (SetToOneToFailInTearDown == 1) 56 TEST_FAIL_MESSAGE("<= Failed in tearDown"); 57 if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0)) 58 { 59 UnityPrint(": [[[[ Test Should Have Passed But Did Not ]]]]"); 60 UNITY_OUTPUT_CHAR('\n'); 61 } 62 } 63 64 TEST_CASE(0) 65 TEST_CASE(44) 66 TEST_CASE((90)+9) test_TheseShouldAllPass(int Num)67void test_TheseShouldAllPass(int Num) 68 { 69 TEST_ASSERT_TRUE(Num < 100); 70 } 71 72 TEST_CASE(3) 73 TEST_CASE(77) 74 TEST_CASE( (99) + 1 - (1)) test_TheseShouldAllFail(int Num)75void test_TheseShouldAllFail(int Num) 76 { 77 EXPECT_ABORT_BEGIN 78 TEST_ASSERT_TRUE(Num > 100); 79 VERIFY_FAILS_END 80 } 81 82 TEST_CASE(1) 83 TEST_CASE(44) 84 TEST_CASE(99) 85 TEST_CASE(98) test_TheseAreEveryOther(int Num)86void test_TheseAreEveryOther(int Num) 87 { 88 if (Num & 1) 89 { 90 EXPECT_ABORT_BEGIN 91 TEST_ASSERT_TRUE(Num > 100); 92 VERIFY_FAILS_END 93 } 94 else 95 { 96 TEST_ASSERT_TRUE(Num < 100); 97 } 98 } 99 test_NormalPassesStillWork(void)100void test_NormalPassesStillWork(void) 101 { 102 TEST_ASSERT_TRUE(1); 103 } 104 test_NormalFailsStillWork(void)105void test_NormalFailsStillWork(void) 106 { 107 EXPECT_ABORT_BEGIN 108 TEST_ASSERT_TRUE(0); 109 VERIFY_FAILS_END 110 } 111