jit-dejagnu.h revision 1.1 1 1.1 mrg /* DejaGnu unit testing header.
2 1.1 mrg Copyright (C) 2000-2016 Free Software Foundation, Inc.
3 1.1 mrg
4 1.1 mrg This file is part of DejaGnu.
5 1.1 mrg
6 1.1 mrg DejaGnu is free software; you can redistribute it and/or modify it
7 1.1 mrg under the terms of the GNU General Public License as published by
8 1.1 mrg the Free Software Foundation; either version 3 of the License, or
9 1.1 mrg (at your option) any later version.
10 1.1 mrg
11 1.1 mrg DejaGnu is distributed in the hope that it will be useful, but
12 1.1 mrg WITHOUT ANY WARRANTY; without even the implied warranty of
13 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 1.1 mrg General Public License for more details.
15 1.1 mrg
16 1.1 mrg You should have received a copy of the GNU General Public License
17 1.1 mrg along with DejaGnu; if not, write to the Free Software Foundation,
18 1.1 mrg Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
19 1.1 mrg
20 1.1 mrg /* Imported from 1.6.2 with modifications
21 1.1 mrg * to avoid and unused symbol in C compilations
22 1.1 mrg * avoid wait () clashing with system-provided routines
23 1.1 mrg * provide a deterministic last line of output after the totals. */
24 1.1 mrg
25 1.1 mrg #ifndef __DEJAGNU_H__
26 1.1 mrg #define __DEJAGNU_H__
27 1.1 mrg
28 1.1 mrg #include <stdio.h>
29 1.1 mrg #include <stdarg.h>
30 1.1 mrg #include <string.h>
31 1.1 mrg
32 1.1 mrg /* If you have problems with DejaGnu dropping failed, untested, or
33 1.1 mrg * unresolved messages generated by a unit testcase, then: */
34 1.1 mrg
35 1.1 mrg /* #define _DEJAGNU_WAIT_ */
36 1.1 mrg
37 1.1 mrg #ifdef _DEJAGNU_WAIT_
38 1.1 mrg #include <sys/time.h>
39 1.1 mrg #include <sys/types.h>
40 1.1 mrg #include <unistd.h>
41 1.1 mrg #endif
42 1.1 mrg
43 1.1 mrg static int passed;
44 1.1 mrg static int failed;
45 1.1 mrg static int untest;
46 1.1 mrg static int unresolve;
47 1.1 mrg static int xfailed;
48 1.1 mrg #ifdef __cplusplus
49 1.1 mrg static int xpassed;
50 1.1 mrg #endif
51 1.1 mrg
52 1.1 mrg static char buffer[512];
53 1.1 mrg
54 1.1 mrg #ifdef _DEJAGNU_WAIT_
55 1.1 mrg void
56 1.1 mrg dg_wait (void)
57 1.1 mrg {
58 1.1 mrg fd_set rfds;
59 1.1 mrg struct timeval tv;
60 1.1 mrg
61 1.1 mrg FD_ZERO (&rfds);
62 1.1 mrg tv.tv_sec = 0;
63 1.1 mrg tv.tv_usec = 1;
64 1.1 mrg
65 1.1 mrg select (0, &rfds, NULL, NULL, &tv);
66 1.1 mrg }
67 1.1 mrg #endif
68 1.1 mrg
69 1.1 mrg static inline void
70 1.1 mrg pass (const char* fmt, ...)
71 1.1 mrg {
72 1.1 mrg va_list ap;
73 1.1 mrg
74 1.1 mrg passed++;
75 1.1 mrg va_start (ap, fmt);
76 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
77 1.1 mrg va_end (ap);
78 1.1 mrg printf ("\tPASSED: %s\n", buffer);
79 1.1 mrg #ifdef _DEJAGNU_WAIT_
80 1.1 mrg dg_wait ();
81 1.1 mrg #endif
82 1.1 mrg }
83 1.1 mrg
84 1.1 mrg static inline void
85 1.1 mrg xpass (const char* fmt, ...)
86 1.1 mrg {
87 1.1 mrg va_list ap;
88 1.1 mrg
89 1.1 mrg passed++;
90 1.1 mrg va_start (ap, fmt);
91 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
92 1.1 mrg va_end (ap);
93 1.1 mrg printf ("\tXPASSED: %s\n", buffer);
94 1.1 mrg #ifdef _DEJAGNU_WAIT_
95 1.1 mrg dg_wait ();
96 1.1 mrg #endif
97 1.1 mrg }
98 1.1 mrg
99 1.1 mrg static inline void
100 1.1 mrg fail (const char* fmt, ...)
101 1.1 mrg {
102 1.1 mrg va_list ap;
103 1.1 mrg
104 1.1 mrg failed++;
105 1.1 mrg va_start (ap, fmt);
106 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
107 1.1 mrg va_end (ap);
108 1.1 mrg printf ("\tFAILED: %s\n", buffer);
109 1.1 mrg #ifdef _DEJAGNU_WAIT_
110 1.1 mrg dg_wait ();
111 1.1 mrg #endif
112 1.1 mrg }
113 1.1 mrg
114 1.1 mrg static inline void
115 1.1 mrg xfail (const char* fmt, ...)
116 1.1 mrg {
117 1.1 mrg va_list ap;
118 1.1 mrg
119 1.1 mrg failed++;
120 1.1 mrg va_start (ap, fmt);
121 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
122 1.1 mrg va_end (ap);
123 1.1 mrg printf ("\tXFAILED: %s\n", buffer);
124 1.1 mrg #ifdef _DEJAGNU_WAIT_
125 1.1 mrg dg_wait ();
126 1.1 mrg #endif
127 1.1 mrg }
128 1.1 mrg
129 1.1 mrg static inline void
130 1.1 mrg untested (const char* fmt, ...)
131 1.1 mrg {
132 1.1 mrg va_list ap;
133 1.1 mrg
134 1.1 mrg untest++;
135 1.1 mrg va_start (ap, fmt);
136 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
137 1.1 mrg va_end (ap);
138 1.1 mrg printf ("\tUNTESTED: %s\n", buffer);
139 1.1 mrg #ifdef _DEJAGNU_WAIT_
140 1.1 mrg dg_wait ();
141 1.1 mrg #endif
142 1.1 mrg }
143 1.1 mrg
144 1.1 mrg static inline void
145 1.1 mrg unresolved (const char* fmt, ...)
146 1.1 mrg {
147 1.1 mrg va_list ap;
148 1.1 mrg
149 1.1 mrg unresolve++;
150 1.1 mrg va_start (ap, fmt);
151 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
152 1.1 mrg va_end (ap);
153 1.1 mrg printf ("\tUNRESOLVED: %s\n", buffer);
154 1.1 mrg #ifdef _DEJAGNU_WAIT_
155 1.1 mrg dg_wait ();
156 1.1 mrg #endif
157 1.1 mrg }
158 1.1 mrg
159 1.1 mrg static inline void
160 1.1 mrg note (const char* fmt, ...)
161 1.1 mrg {
162 1.1 mrg va_list ap;
163 1.1 mrg
164 1.1 mrg va_start (ap, fmt);
165 1.1 mrg vsnprintf (buffer, sizeof (buffer), fmt, ap);
166 1.1 mrg va_end (ap);
167 1.1 mrg printf ("\tNOTE: %s\n", buffer);
168 1.1 mrg #ifdef _DEJAGNU_WAIT_
169 1.1 mrg dg_wait ();
170 1.1 mrg #endif
171 1.1 mrg }
172 1.1 mrg
173 1.1 mrg static inline void
174 1.1 mrg totals (void)
175 1.1 mrg {
176 1.1 mrg printf ("\nTotals:\n");
177 1.1 mrg printf ("\t#passed:\t\t%d\n", passed);
178 1.1 mrg printf ("\t#real failed:\t\t%d\n", failed);
179 1.1 mrg if (xfailed)
180 1.1 mrg printf ("\t#expected failures:\t\t%d\n", xfailed);
181 1.1 mrg if (untest)
182 1.1 mrg printf ("\t#untested:\t\t%d\n", untest);
183 1.1 mrg if (unresolve)
184 1.1 mrg printf ("\t#unresolved:\t\t%d\n", unresolve);
185 1.1 mrg printf ("\njit-dg-harness-complete\n");
186 1.1 mrg }
187 1.1 mrg
188 1.1 mrg #ifdef __cplusplus
189 1.1 mrg
190 1.1 mrg #include <iostream>
191 1.1 mrg #include <iomanip>
192 1.1 mrg #include <fstream>
193 1.1 mrg #include <string>
194 1.1 mrg
195 1.1 mrg const char *outstate_list[] = {
196 1.1 mrg "FAILED: ", "PASSED: ", "UNTESTED: ", "UNRESOLVED: ", "XFAILED: ", "XPASSED: "
197 1.1 mrg };
198 1.1 mrg
199 1.1 mrg const char ** outstate = outstate_list;
200 1.1 mrg
201 1.1 mrg enum teststate { FAILED, PASSED, UNTESTED, UNRESOLVED, XFAILED, XPASSED} laststate;
202 1.1 mrg
203 1.1 mrg class TestState {
204 1.1 mrg private:
205 1.1 mrg teststate laststate;
206 1.1 mrg std::string lastmsg;
207 1.1 mrg public:
208 1.1 mrg TestState (void)
209 1.1 mrg {
210 1.1 mrg passed = 0;
211 1.1 mrg failed = 0;
212 1.1 mrg untest = 0;
213 1.1 mrg xpassed = 0;
214 1.1 mrg xfailed = 0;
215 1.1 mrg unresolve = 0;
216 1.1 mrg }
217 1.1 mrg
218 1.1 mrg ~TestState (void) { totals(); }
219 1.1 mrg
220 1.1 mrg void testrun (bool b, std::string s)
221 1.1 mrg {
222 1.1 mrg if (b)
223 1.1 mrg pass (s);
224 1.1 mrg else
225 1.1 mrg fail (s);
226 1.1 mrg }
227 1.1 mrg
228 1.1 mrg void pass (std::string s)
229 1.1 mrg {
230 1.1 mrg passed++;
231 1.1 mrg laststate = PASSED;
232 1.1 mrg lastmsg = s;
233 1.1 mrg std::cout << "\t" << outstate[PASSED] << s << std::endl;
234 1.1 mrg }
235 1.1 mrg
236 1.1 mrg void pass (const char *c)
237 1.1 mrg {
238 1.1 mrg std::string s = c;
239 1.1 mrg pass (s);
240 1.1 mrg }
241 1.1 mrg
242 1.1 mrg void xpass (std::string s)
243 1.1 mrg {
244 1.1 mrg xpassed++;
245 1.1 mrg laststate = PASSED;
246 1.1 mrg lastmsg = s;
247 1.1 mrg std::cout << "\t" << outstate[XPASSED] << s << std::endl;
248 1.1 mrg }
249 1.1 mrg
250 1.1 mrg void xpass (const char *c)
251 1.1 mrg {
252 1.1 mrg std::string s = c;
253 1.1 mrg xpass (s);
254 1.1 mrg }
255 1.1 mrg
256 1.1 mrg void fail (std::string s)
257 1.1 mrg {
258 1.1 mrg failed++;
259 1.1 mrg laststate = FAILED;
260 1.1 mrg lastmsg = s;
261 1.1 mrg std::cout << "\t" << outstate[FAILED] << s << std::endl;
262 1.1 mrg }
263 1.1 mrg
264 1.1 mrg void fail (const char *c)
265 1.1 mrg {
266 1.1 mrg std::string s = c;
267 1.1 mrg fail (s);
268 1.1 mrg }
269 1.1 mrg
270 1.1 mrg void xfail (std::string s)
271 1.1 mrg {
272 1.1 mrg xfailed++;
273 1.1 mrg laststate = XFAILED;
274 1.1 mrg lastmsg = s;
275 1.1 mrg std::cout << "\t" << outstate[XFAILED] << s << std::endl;
276 1.1 mrg }
277 1.1 mrg
278 1.1 mrg void xfail (const char *c)
279 1.1 mrg {
280 1.1 mrg std::string s = c;
281 1.1 mrg xfail (s);
282 1.1 mrg }
283 1.1 mrg
284 1.1 mrg void untested (std::string s)
285 1.1 mrg {
286 1.1 mrg untest++;
287 1.1 mrg laststate = UNTESTED;
288 1.1 mrg lastmsg = s;
289 1.1 mrg std::cout << "\t" << outstate[UNTESTED] << s << std::endl;
290 1.1 mrg }
291 1.1 mrg
292 1.1 mrg void untested (const char *c)
293 1.1 mrg {
294 1.1 mrg std::string s = c;
295 1.1 mrg untested (s);
296 1.1 mrg }
297 1.1 mrg
298 1.1 mrg void unresolved (std::string s)
299 1.1 mrg {
300 1.1 mrg unresolve++;
301 1.1 mrg laststate = UNRESOLVED;
302 1.1 mrg lastmsg = s;
303 1.1 mrg std::cout << "\t" << outstate[UNRESOLVED] << s << std::endl;
304 1.1 mrg }
305 1.1 mrg
306 1.1 mrg void unresolved (const char *c)
307 1.1 mrg {
308 1.1 mrg std::string s = c;
309 1.1 mrg unresolved (s);
310 1.1 mrg }
311 1.1 mrg
312 1.1 mrg void totals (void)
313 1.1 mrg {
314 1.1 mrg std::cout << "\t#passed:\t\t" << passed << std::endl;
315 1.1 mrg std::cout << "\t#real failed:\t\t" << failed << std::endl;
316 1.1 mrg if (xfailed)
317 1.1 mrg std::cout << "\t#expected failures:\t\t" << xfailed << std::endl;
318 1.1 mrg if (xpassed)
319 1.1 mrg std::cout << "\t#unexpected passes:\t\t" << xpassed << std::endl;
320 1.1 mrg if (untest)
321 1.1 mrg std::cout << "\t#untested:\t\t" << untest << std::endl;
322 1.1 mrg if (unresolve)
323 1.1 mrg std::cout << "\t#unresolved:\t\t" << unresolve << std::endl;
324 1.1 mrg std::cout << "\njit-dg-harness-complete" << std::endl;
325 1.1 mrg }
326 1.1 mrg
327 1.1 mrg // This is so this class can be printed in an ostream.
328 1.1 mrg friend std::ostream & operator << (std::ostream &os, TestState& t)
329 1.1 mrg {
330 1.1 mrg return os << "\t" << outstate[t.laststate] << t.lastmsg ;
331 1.1 mrg }
332 1.1 mrg
333 1.1 mrg int GetState (void) { return laststate; }
334 1.1 mrg std::string GetMsg (void) { return lastmsg; }
335 1.1 mrg };
336 1.1 mrg
337 1.1 mrg #endif /* __cplusplus */
338 1.1 mrg #endif /* _DEJAGNU_H_ */
339