• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
11 /* Support for Meta Test Rig */
12 #define TEST_CASE(...)
13 
14 /* Include Passthroughs for Linking Tests */
putcharSpy(int c)15 void putcharSpy(int c) { (void)putchar(c);}
flushSpy(void)16 void flushSpy(void) {}
17 
18 #define EXPECT_ABORT_BEGIN \
19     if (TEST_PROTECT())    \
20     {
21 
22 #define VERIFY_FAILS_END                                                       \
23     }                                                                          \
24     Unity.CurrentTestFailed = (Unity.CurrentTestFailed != 0) ? 0 : 1;          \
25     if (Unity.CurrentTestFailed == 1) {                                        \
26       SetToOneMeanWeAlreadyCheckedThisGuy = 1;                                 \
27       UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber);                   \
28       UNITY_OUTPUT_CHAR(':');                                                  \
29       UnityPrint(Unity.CurrentTestName);                                       \
30       UnityPrint(":FAIL: [[[[ Test Should Have Failed But Did Not ]]]]");      \
31       UNITY_OUTPUT_CHAR('\n');                                                 \
32     }
33 
34 #define VERIFY_IGNORES_END                                                     \
35     }                                                                          \
36     Unity.CurrentTestFailed = (Unity.CurrentTestIgnored != 0) ? 0 : 1;         \
37     Unity.CurrentTestIgnored = 0;                                              \
38     if (Unity.CurrentTestFailed == 1) {                                        \
39       SetToOneMeanWeAlreadyCheckedThisGuy = 1;                                 \
40       UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber);                   \
41       UNITY_OUTPUT_CHAR(':');                                                  \
42       UnityPrint(Unity.CurrentTestName);                                       \
43       UnityPrint(":FAIL: [[[[ Test Should Have Ignored But Did Not ]]]]");     \
44       UNITY_OUTPUT_CHAR('\n');                                                 \
45     }
46 
47 int SetToOneToFailInTearDown;
48 int SetToOneMeanWeAlreadyCheckedThisGuy;
49 static unsigned NextExpectedStringIndex;
50 static unsigned NextExpectedCharIndex;
51 
suiteSetUp(void)52 void suiteSetUp(void)
53 {
54     NextExpectedStringIndex = 0;
55     NextExpectedCharIndex = 0;
56 }
57 
setUp(void)58 void setUp(void)
59 {
60   SetToOneToFailInTearDown = 0;
61   SetToOneMeanWeAlreadyCheckedThisGuy = 0;
62 }
63 
tearDown(void)64 void tearDown(void)
65 {
66   if (SetToOneToFailInTearDown == 1)
67     TEST_FAIL_MESSAGE("<= Failed in tearDown");
68   if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0))
69   {
70     UnityPrint(": [[[[ Test Should Have Passed But Did Not ]]]]");
71     UNITY_OUTPUT_CHAR('\n');
72   }
73 }
74 
75 TEST_CASE(0)
76 TEST_CASE(44)
77 TEST_CASE((90)+9)
test_TheseShouldAllPass(int Num)78 void test_TheseShouldAllPass(int Num)
79 {
80     TEST_ASSERT_TRUE(Num < 100);
81 }
82 
83 TEST_CASE(3)
84 TEST_CASE(77)
85 TEST_CASE( (99) + 1 - (1))
test_TheseShouldAllFail(int Num)86 void test_TheseShouldAllFail(int Num)
87 {
88     EXPECT_ABORT_BEGIN
89     TEST_ASSERT_TRUE(Num > 100);
90     VERIFY_FAILS_END
91 }
92 
93 TEST_CASE(1)
94 TEST_CASE(44)
95 TEST_CASE(99)
96 TEST_CASE(98)
test_TheseAreEveryOther(int Num)97 void test_TheseAreEveryOther(int Num)
98 {
99     if (Num & 1)
100     {
101         EXPECT_ABORT_BEGIN
102         TEST_ASSERT_TRUE(Num > 100);
103         VERIFY_FAILS_END
104     }
105     else
106     {
107         TEST_ASSERT_TRUE(Num < 100);
108     }
109 }
110 
test_NormalPassesStillWork(void)111 void test_NormalPassesStillWork(void)
112 {
113     TEST_ASSERT_TRUE(1);
114 }
115 
test_NormalFailsStillWork(void)116 void test_NormalFailsStillWork(void)
117 {
118     EXPECT_ABORT_BEGIN
119     TEST_ASSERT_TRUE(0);
120     VERIFY_FAILS_END
121 }
122 
123 TEST_CASE(0, "abc")
124 TEST_CASE(1, "{")
125 TEST_CASE(2, "}")
126 TEST_CASE(3, ";")
127 TEST_CASE(4, "\"quoted\"")
test_StringsArePreserved(unsigned index,const char * str)128 void test_StringsArePreserved(unsigned index, const char * str)
129 {
130     static const char * const expected[] =
131     {
132         "abc",
133         "{",
134         "}",
135         ";",
136         "\"quoted\""
137     };
138 
139     /* Ensure that no test cases are skipped by tracking the next expected index */
140     TEST_ASSERT_EQUAL_UINT32(NextExpectedStringIndex, index);
141     TEST_ASSERT_LESS_THAN(sizeof(expected) / sizeof(expected[0]), index);
142     TEST_ASSERT_EQUAL_STRING(expected[index], str);
143 
144     NextExpectedStringIndex++;
145 }
146 
147 TEST_CASE(0, 'x')
148 TEST_CASE(1, '{')
149 TEST_CASE(2, '}')
150 TEST_CASE(3, ';')
151 TEST_CASE(4, '\'')
152 TEST_CASE(5, '"')
test_CharsArePreserved(unsigned index,char c)153 void test_CharsArePreserved(unsigned index, char c)
154 {
155     static const char expected[] =
156     {
157         'x',
158         '{',
159         '}',
160         ';',
161         '\'',
162         '"'
163     };
164 
165     /* Ensure that no test cases are skipped by tracking the next expected index */
166     TEST_ASSERT_EQUAL_UINT32(NextExpectedCharIndex, index);
167     TEST_ASSERT_LESS_THAN(sizeof(expected) / sizeof(expected[0]), index);
168     TEST_ASSERT_EQUAL(expected[index], c);
169 
170     NextExpectedCharIndex++;
171 }
172