~jameinel/subunit/integration

« back to all changes in this revision

Viewing changes to c/check-subunit-0.9.5.patch

  • Committer: Robert Collins
  • Date: 2007-04-21 07:10:18 UTC
  • Revision ID: robertc@robertcollins.net-20070421071018-66d676a9atirgqmz
Update the check patch to be more accceptable to upstream, include documentation, and apply to check 0.9.5.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
=== added file 'tests/test_vars.in'
 
2
--- tests/test_vars.in  1970-01-01 00:00:00 +0000
 
3
+++ tests/test_vars.in  2007-04-21 06:59:27 +0000
 
4
@@ -0,0 +1,2 @@
 
5
+# defined to 1 if subunit is enabled
 
6
+export ENABLE_SUBUNIT=@ENABLE_SUBUNIT@
 
7
 
 
8
=== modified file 'AUTHORS'
 
9
--- AUTHORS     2006-12-12 19:11:09 +0000
 
10
+++ AUTHORS     2007-04-21 03:18:23 +0000
 
11
@@ -14,6 +14,7 @@
 
12
                  Robert Lemmen (gcov description in manual)
 
13
                 Loic Martin (AM_PATH_CHECK patch)
 
14
                 Ross Burton (pkg-config patch)
 
15
+                Robert Collins (subunit support)
 
16
 
 
17
 Anybody who has contributed code to Check or Check's build system is
 
18
 considered an author.  Send patches to this file to 
 
19
 
 
20
=== modified file 'NEWS'
 
21
--- NEWS        2006-11-21 23:56:21 +0000
 
22
+++ NEWS        2007-04-21 03:18:23 +0000
 
23
@@ -1,3 +1,9 @@
 
24
+In development:
 
25
+
 
26
+* Added CK_SUBUNIT support for outputting test information in the subunit wire
 
27
+  protocol. See the check manual for more information. (Contributed by Robert
 
28
+  Collins).
 
29
+
 
30
 Tue, Nov 21, 2006: Released Check 0.9.5
 
31
 
 
32
 * Fixed code coverage support to work with gcc4 and buggy libtool.
 
33
 
 
34
=== modified file 'configure.ac'
 
35
--- configure.ac        2006-12-12 19:11:09 +0000
 
36
+++ configure.ac        2007-04-21 06:59:27 +0000
 
37
@@ -65,6 +65,26 @@
 
38
 
 
39
 AM_CONDITIONAL(NO_TIMEOUT_TESTS, test x"$enable_timeout_tests" = "xfalse")
 
40
 
 
41
+AC_ARG_ENABLE(subunit,
 
42
+AC_HELP_STRING([--enable-subunit],
 
43
+              [enable support for the subunit test protocol @<:@default=autodetect@:>@]),
 
44
+[case "${enableval}" in
 
45
+  yes)
 
46
+    enable_subunit=true
 
47
+    echo "Enabled subunit support"
 
48
+    ;;
 
49
+  no)
 
50
+    enable_subunit=false
 
51
+    echoo "Disabled subunit support"
 
52
+    ;;
 
53
+  autodetect)
 
54
+    echo "Subunit support will enable automatically."
 
55
+    ;;
 
56
+  *)   AC_MSG_ERROR(bad value ${enableval} for --enable-subunit) ;;
 
57
+esac], 
 
58
+[echo "Subunit support will enable automatically."
 
59
+ enable_subunit=autodetect])
 
60
+
 
61
 # Checks for programs.
 
62
 AC_PROG_AWK
 
63
 AC_PROG_CC
 
64
@@ -85,6 +105,42 @@
 
65
 AC_HEADER_SYS_WAIT
 
66
 AC_CHECK_HEADERS([fcntl.h stddef.h stdint.h stdlib.h string.h sys/time.h unistd.h])
 
67
 
 
68
+if test xfalse != x"$enable_subunit"; then
 
69
+AC_CHECK_LIB(subunit, subunit_test_start, ,
 
70
+[case "$enable_subunit" in
 
71
+ autodetect)
 
72
+   enable_subunit=false
 
73
+   ;;
 
74
+ true)
 
75
+   AC_MSG_ERROR([libunit is required for subunit protocol support. The homepage for subunit is https://launchpad.net/subunit/])
 
76
+   ;;
 
77
+ esac
 
78
+])
 
79
+fi
 
80
+if test xfalse != x"$enable_subunit"; then
 
81
+AC_CHECK_HEADER([subunit/child.h], ,
 
82
+[case "$enable_subunit" in
 
83
+ autodetect)
 
84
+   enable_subunit=false
 
85
+   ;;
 
86
+ true)
 
87
+   AC_MSG_ERROR([The header subunit/child.h could not be succesfully included and is required for subunit protocol support. The homepage for subunit is https://launchpad.net/subunit/])
 
88
+   ;;
 
89
+ esac
 
90
+])
 
91
+fi
 
92
+if test xfalse = x"$enable_subunit"; then
 
93
+ENABLE_SUBUNIT="0"
 
94
+else
 
95
+ENABLE_SUBUNIT="1"
 
96
+fi
 
97
+AC_SUBST(ENABLE_SUBUNIT)
 
98
+AC_DEFINE_UNQUOTED(ENABLE_SUBUNIT, $ENABLE_SUBUNIT, [Subunit protocol result output])
 
99
+
 
100
+AM_CONDITIONAL(SUBUNIT, test x"$enable_subunit" != "xfalse")
 
101
+
 
102
+
 
103
+
 
104
 # Checks for typedefs, structures, and compiler characteristics.
 
105
 AC_C_CONST
 
106
 AC_TYPE_PID_T
 
107
@@ -112,6 +168,7 @@
 
108
                 doc/Makefile
 
109
                  src/check.h
 
110
                  src/Makefile
 
111
-                 tests/Makefile])
 
112
+                 tests/Makefile
 
113
+                tests/test_vars])
 
114
 
 
115
 AC_OUTPUT
 
116
 
 
117
=== modified file 'doc/check.texi'
 
118
--- doc/check.texi      2007-01-16 21:57:52 +0000
 
119
+++ doc/check.texi      2007-04-21 03:18:23 +0000
 
120
@@ -39,6 +39,7 @@
 
121
 @author Chris Pickett
 
122
 @author Fredrik Hugosson
 
123
 @author Robert Lemmen
 
124
+@author Robert Collins
 
125
 
 
126
 @c The following two commands start the copyright page.
 
127
 @page
 
128
@@ -98,6 +99,7 @@
 
129
 * Test Timeouts::               
 
130
 * Determining Test Coverage::   
 
131
 * Test Logging::                
 
132
+* Subunit Support::
 
133
 
 
134
 Test Fixtures
 
135
 
 
136
@@ -672,6 +674,11 @@
 
137
 which can have the values "silent", "minimal", "normal", "verbose". If
 
138
 the variable is not found or the value is not recognized, the print
 
139
 mode is set to @code{CK_NORMAL}.
 
140
+
 
141
+@vindex CK_SUBUNIT
 
142
+@item CK_SUBUNIT
 
143
+Prints running progress through the @uref{https://launchpad.net/subunit/,
 
144
+subunit} test runner protocol. See 'subunit support' under the Advanced Features section for more information.
 
145
 @end table
 
146
 
 
147
 With the @code{CK_NORMAL} flag specified in our @code{main()}, let's
 
148
@@ -766,6 +773,7 @@
 
149
 * Test Timeouts::               
 
150
 * Determining Test Coverage::   
 
151
 * Test Logging::                
 
152
+* Subunit Support::
 
153
 @end menu
 
154
 
 
155
 @node Running Multiple Cases, No Fork Mode, Advanced Features, Advanced Features
 
156
@@ -1147,7 +1155,7 @@
 
157
 you.  For more information or help with other compilers, please refer
 
158
 to the relevant manuals.
 
159
 
 
160
-@node Test Logging,  , Determining Test Coverage, Advanced Features
 
161
+@node Test Logging, Subunit Support, Determining Test Coverage, Advanced Features
 
162
 @section Test Logging
 
163
 
 
164
 @findex srunner_set_log()
 
165
@@ -1250,6 +1258,50 @@
 
166
 @end verbatim
 
167
 @end example
 
168
 
 
169
+@node Subunit Support, , Test Logging, Advanced Features
 
170
+@section Subunit Support
 
171
+
 
172
+Check supports running test suites with subunit output. This can be useful to
 
173
+combine test results from multiple languages, or to perform programmatic
 
174
+analysis on the results of multiple check test suites or otherise handle test
 
175
+results in a programmatic manner. Using subunit with check is very straight
 
176
+forward. There are two steps:
 
177
+1) In your check test suite driver pass 'CK_SUBUNIT' as the output mode
 
178
+for your srunner.
 
179
+@example
 
180
+@verbatim
 
181
+SRunner *sr;
 
182
+sr = srunner_create (make_s1_suite ());
 
183
+srunner_add_suite (sr, make_s2_suite ());
 
184
+srunner_run_all (sr, CK_SUBUNIT);
 
185
+@end verbatim
 
186
+@end example
 
187
+2) Setup your main language test runner to run your check based test
 
188
+executable. For instance using python:
 
189
+@example
 
190
+@verbatim
 
191
+
 
192
+import subunit
 
193
+
 
194
+class ShellTests(subunit.ExecTestCase):
 
195
+    """Run some tests from the C codebase."""
 
196
+
 
197
+    def test_group_one(self):
 
198
+        """./foo/check_driver"""
 
199
+
 
200
+    def test_group_two(self):
 
201
+        """./foo/other_driver"""
 
202
+@end verbatim
 
203
+@end example
 
204
+
 
205
+In this example, running the test suite ShellTests in python (using any test
 
206
+runner - unittest.py, tribunal, trial, nose or others) will run
 
207
+./foo/check_driver and ./foo/other_driver and report on their result.
 
208
+
 
209
+Subunit is hosted on launchpad - the @uref{https://launchpad.net/subunit/,
 
210
+subunit} project there contains bug tracker, future plans, and source code
 
211
+control details.
 
212
+
 
213
 @node Conclusion and References, AM_PATH_CHECK, Advanced Features, Top
 
214
 @chapter Conclusion and References
 
215
 The tutorial and description of advanced features has provided an
 
216
 
 
217
=== modified file 'src/check.h.in'
 
218
--- src/check.h.in      2006-12-08 17:47:49 +0000
 
219
+++ src/check.h.in      2007-04-21 06:59:27 +0000
 
220
@@ -257,6 +257,9 @@
 
221
   CK_NORMAL, /* All failed tests */
 
222
   CK_VERBOSE, /* All tests */
 
223
   CK_ENV, /* Look at environment var */
 
224
+#if @ENABLE_SUBUNIT@
 
225
+  CK_SUBUNIT, /* Run as a subunit child process */
 
226
+#endif
 
227
   CK_LAST
 
228
 };
 
229
 
 
230
 
 
231
=== modified file 'src/check_impl.h'
 
232
--- src/check_impl.h    2006-10-13 00:24:56 +0000
 
233
+++ src/check_impl.h    2007-04-21 01:55:36 +0000
 
234
@@ -89,6 +89,7 @@
 
235
   CLSTART_S,
 
236
   CLEND_SR,
 
237
   CLEND_S,
 
238
+  CLSTART_T, /* A test case is about to run */
 
239
   CLEND_T
 
240
 };
 
241
 
 
242
 
 
243
=== modified file 'src/check_log.c'
 
244
--- src/check_log.c     2006-10-13 04:10:50 +0000
 
245
+++ src/check_log.c     2007-04-21 06:59:27 +0000
 
246
@@ -25,12 +25,16 @@
 
247
 #include <sys/time.h>
 
248
 #include <time.h>
 
249
 #include <check.h>
 
250
+#if HAVE_SUBUNIT_CHILD_H
 
251
+#include <subunit/child.h>
 
252
+#endif
 
253
 
 
254
 #include "check_error.h"
 
255
 #include "check_list.h"
 
256
 #include "check_impl.h"
 
257
 #include "check_log.h"
 
258
 #include "check_print.h"
 
259
+#include "check_str.h"
 
260
 
 
261
 
 
262
 static void srunner_send_evt (SRunner *sr, void *obj, enum cl_event evt);
 
263
@@ -107,6 +111,13 @@
 
264
   srunner_send_evt (sr, s, CLEND_S);
 
265
 }
 
266
 
 
267
+void log_test_start (SRunner *sr, TCase * tc, TF * tfun)
 
268
+{
 
269
+  char buffer[100];
 
270
+  snprintf(buffer, 99, "%s:%s", tc->name, tfun->name);
 
271
+  srunner_send_evt (sr, buffer, CLSTART_T);
 
272
+}
 
273
+
 
274
 void log_test_end (SRunner *sr, TestResult *tr)
 
275
 {
 
276
   srunner_send_evt (sr, tr, CLEND_T);
 
277
@@ -128,7 +139,6 @@
 
278
 void stdout_lfun (SRunner *sr, FILE *file, enum print_output printmode,
 
279
                  void *obj, enum cl_event evt)
 
280
 {
 
281
-  TestResult *tr;
 
282
   Suite *s;
 
283
   
 
284
   if (printmode == CK_ENV) {
 
285
@@ -163,8 +173,9 @@
 
286
   case CLEND_S:
 
287
     s = obj;
 
288
     break;
 
289
+  case CLSTART_T:
 
290
+    break;
 
291
   case CLEND_T:
 
292
-    tr = obj;
 
293
     break;
 
294
   default:
 
295
     eprintf("Bad event type received in stdout_lfun", __FILE__, __LINE__);
 
296
@@ -197,12 +208,14 @@
 
297
   case CLEND_S:
 
298
     s = obj;
 
299
     break;
 
300
+  case CLSTART_T:
 
301
+    break;
 
302
   case CLEND_T:
 
303
     tr = obj;
 
304
     tr_fprint(file, tr, CK_VERBOSE);
 
305
     break;
 
306
   default:
 
307
-    eprintf("Bad event type received in stdout_lfun", __FILE__, __LINE__);
 
308
+    eprintf("Bad event type received in lfile_lfun", __FILE__, __LINE__);
 
309
   }
 
310
 
 
311
   
 
312
@@ -250,6 +263,8 @@
 
313
     fprintf(file, "  </suite>\n");
 
314
     s = obj;
 
315
     break;
 
316
+  case CLSTART_T:
 
317
+    break;
 
318
   case CLEND_T:
 
319
     tr = obj;
 
320
     tr_xmlprint(file, tr, CK_VERBOSE);
 
321
@@ -260,6 +275,66 @@
 
322
 
 
323
 }
 
324
 
 
325
+#if ENABLE_SUBUNIT
 
326
+void subunit_lfun (SRunner *sr, FILE *file, enum print_output printmode,
 
327
+                 void *obj, enum cl_event evt)
 
328
+{
 
329
+  TestResult *tr;
 
330
+  Suite *s;
 
331
+  char const * name;
 
332
+  
 
333
+  /* assert(printmode == CK_SUBUNIT); */
 
334
+
 
335
+  switch (evt) {
 
336
+  case CLINITLOG_SR:
 
337
+    break;
 
338
+  case CLENDLOG_SR:
 
339
+    break;
 
340
+  case CLSTART_SR:
 
341
+    break;
 
342
+  case CLSTART_S:
 
343
+    s = obj;
 
344
+    break;
 
345
+  case CLEND_SR:
 
346
+    if (printmode > CK_SILENT) {
 
347
+      fprintf (file, "\n");
 
348
+      srunner_fprint (file, sr, printmode);
 
349
+    }
 
350
+    break;
 
351
+  case CLEND_S:
 
352
+    s = obj;
 
353
+    break;
 
354
+  case CLSTART_T:
 
355
+    name = obj;
 
356
+    subunit_test_start(name);
 
357
+    break;
 
358
+  case CLEND_T:
 
359
+    tr = obj;
 
360
+    {
 
361
+      char *name = ck_strdup_printf ("%s:%s", tr->tcname, tr->tname);
 
362
+      char *msg = tr_short_str (tr);
 
363
+      switch (tr->rtype) {
 
364
+       case CK_PASS:
 
365
+         subunit_test_pass(name);
 
366
+         break;
 
367
+       case CK_FAILURE:
 
368
+         subunit_test_fail(name, msg);
 
369
+         break;
 
370
+       case CK_ERROR:
 
371
+         subunit_test_error(name, msg);
 
372
+         break;
 
373
+       default:
 
374
+         eprintf("Bad result type in subunit_lfun", __FILE__, __LINE__);
 
375
+        free(name);
 
376
+        free(msg);
 
377
+      }
 
378
+    }
 
379
+    break;
 
380
+  default:
 
381
+    eprintf("Bad event type received in subunit_lfun", __FILE__, __LINE__);
 
382
+  }
 
383
+}
 
384
+#endif
 
385
 
 
386
 FILE *srunner_open_lfile (SRunner *sr)
 
387
 {
 
388
@@ -289,7 +364,14 @@
 
389
 {
 
390
   FILE *f;
 
391
   sr->loglst = check_list_create();
 
392
-  srunner_register_lfun (sr, stdout, 0, stdout_lfun, print_mode);
 
393
+#if ENABLE_SUBUNIT
 
394
+  if (print_mode != CK_SUBUNIT)
 
395
+#endif
 
396
+      srunner_register_lfun (sr, stdout, 0, stdout_lfun, print_mode);
 
397
+#if ENABLE_SUBUNIT
 
398
+  else
 
399
+      srunner_register_lfun (sr, stdout, 0, subunit_lfun, print_mode);
 
400
+#endif
 
401
   f = srunner_open_lfile (sr);
 
402
   if (f) {
 
403
     srunner_register_lfun (sr, f, 1, lfile_lfun, print_mode);
 
404
 
 
405
=== modified file 'src/check_log.h'
 
406
--- src/check_log.h     2006-10-13 00:24:56 +0000
 
407
+++ src/check_log.h     2007-04-21 01:55:36 +0000
 
408
@@ -26,6 +26,7 @@
 
409
 void log_suite_start (SRunner *sr, Suite *s);
 
410
 void log_suite_end (SRunner *sr, Suite *s);
 
411
 void log_test_end (SRunner *sr, TestResult *tr);
 
412
+void log_test_start (SRunner *sr, TCase *tc, TF *tfun);
 
413
 
 
414
 void stdout_lfun (SRunner *sr, FILE *file, enum print_output,
 
415
                  void *obj, enum cl_event evt);
 
416
@@ -36,6 +37,9 @@
 
417
 void xml_lfun (SRunner *sr, FILE *file, enum print_output,
 
418
                  void *obj, enum cl_event evt);
 
419
 
 
420
+void subunit_lfun (SRunner *sr, FILE *file, enum print_output,
 
421
+                 void *obj, enum cl_event evt);
 
422
+
 
423
 void srunner_register_lfun (SRunner *sr, FILE *lfile, int close,
 
424
                            LFun lfun, enum print_output);
 
425
 
 
426
 
 
427
=== modified file 'src/check_print.c'
 
428
--- src/check_print.c   2006-10-13 00:24:56 +0000
 
429
+++ src/check_print.c   2007-04-21 06:59:27 +0000
 
430
@@ -54,6 +54,11 @@
 
431
 static void srunner_fprint_summary (FILE *file, SRunner *sr,
 
432
                                    enum print_output print_mode)
 
433
 {
 
434
+#if ENABLE_SUBUNIT
 
435
+  if (print_mode == CK_SUBUNIT)
 
436
+      return;
 
437
+#endif
 
438
+
 
439
   if (print_mode >= CK_MINIMAL) {
 
440
     char *str;
 
441
 
 
442
@@ -68,6 +73,11 @@
 
443
                                    enum print_output print_mode)
 
444
 {
 
445
   List *resultlst;
 
446
+
 
447
+#if ENABLE_SUBUNIT
 
448
+  if (print_mode == CK_SUBUNIT)
 
449
+      return;
 
450
+#endif
 
451
   
 
452
   resultlst = sr->resultlst;
 
453
   
 
454
 
 
455
=== modified file 'src/check_run.c'
 
456
--- src/check_run.c     2006-11-18 01:02:13 +0000
 
457
+++ src/check_run.c     2007-04-21 01:55:36 +0000
 
458
@@ -188,6 +188,7 @@
 
459
 
 
460
     for (i = tfun->loop_start; i < tfun->loop_end; i++)
 
461
     {
 
462
+      log_test_start (sr, tc, tfun);
 
463
       switch (srunner_fork_status(sr)) {
 
464
        case CK_FORK:
 
465
         tr = tcase_run_tfun_fork (sr, tc, tfun, i);
 
466
 
 
467
=== modified file 'src/check_str.c'
 
468
--- src/check_str.c     2006-10-13 00:24:56 +0000
 
469
+++ src/check_str.c     2007-04-21 01:55:36 +0000
 
470
@@ -47,6 +47,20 @@
 
471
   return rstr;
 
472
 }
 
473
 
 
474
+char *tr_short_str (TestResult *tr) 
 
475
+{
 
476
+  const char *exact_msg;
 
477
+  char *rstr;
 
478
+  
 
479
+  exact_msg = (tr->rtype == CK_ERROR) ? "(after this point) ": "";
 
480
+  
 
481
+  rstr = ck_strdup_printf ("%s:%d: %s%s",
 
482
+                           tr->file, tr->line,
 
483
+                           exact_msg, tr->msg);
 
484
+
 
485
+  return rstr;
 
486
+}
 
487
+
 
488
 char *sr_stat_str (SRunner *sr)
 
489
 {
 
490
   char *str;
 
491
 
 
492
=== modified file 'src/check_str.h'
 
493
--- src/check_str.h     2006-10-13 00:24:56 +0000
 
494
+++ src/check_str.h     2007-04-21 01:55:36 +0000
 
495
@@ -25,6 +25,12 @@
 
496
    value has been malloc'd, and must be freed by the caller */
 
497
 char *tr_str (TestResult *tr);
 
498
 
 
499
+/* Return a string representation of the given TestResult message
 
500
+   without the test id or result type. This is suitable for separate
 
501
+   formatting of the test and the message. Return value has been 
 
502
+   malloc'd, and must be freed by the caller */
 
503
+char *tr_short_str (TestResult *tr);
 
504
+
 
505
 /* Return a string representation of the given SRunner's run
 
506
    statistics (% passed, num run, passed, errors, failures). Return
 
507
    value has been malloc'd, and must be freed by the caller
 
508
 
 
509
=== modified file 'tests/Makefile.am'
 
510
--- tests/Makefile.am   2006-11-17 08:56:43 +0000
 
511
+++ tests/Makefile.am   2007-04-21 06:59:27 +0000
 
512
@@ -15,7 +15,7 @@
 
513
        ex_xml_output   \
 
514
        ex_log_output
 
515
 
 
516
-EXTRA_DIST = test_output.sh test_log_output.sh test_xml_output.sh
 
517
+EXTRA_DIST = test_output.sh test_log_output.sh test_vars.in test_xml_output.sh
 
518
 
 
519
 if NO_TIMEOUT_TESTS
 
520
 check_check_CFLAGS = -DTIMEOUT_TESTS_ENABLED=0
 
521
 
 
522
=== modified file 'tests/check_check_log.c'
 
523
--- tests/check_check_log.c     2006-10-13 00:24:56 +0000
 
524
+++ tests/check_check_log.c     2007-04-21 06:59:27 +0000
 
525
@@ -2,6 +2,9 @@
 
526
 #include <stdlib.h>
 
527
 #include <string.h>
 
528
 #include <check.h>
 
529
+#include <check_list.h>
 
530
+#include <check_impl.h>
 
531
+#include <check_log.h>
 
532
 #include "check_check.h"
 
533
 
 
534
 
 
535
@@ -78,15 +81,40 @@
 
536
 }
 
537
 END_TEST
 
538
 
 
539
+#if ENABLE_SUBUNIT
 
540
+START_TEST(test_init_logging_subunit)
 
541
+{
 
542
+  /* init_logging with CK_SUBUNIT sets stdout 
 
543
+   * to a subunit function, not any log.
 
544
+   */
 
545
+  Log * first_log = NULL;
 
546
+  Suite *s = suite_create("Suite");
 
547
+  SRunner *sr = srunner_create(s);
 
548
+  srunner_init_logging(sr, CK_SUBUNIT);
 
549
+  list_front (sr->loglst);
 
550
+  fail_if (list_at_end(sr->loglst), "No entries in log list");
 
551
+  first_log = list_val(sr->loglst);
 
552
+  fail_if (first_log == NULL, "log is NULL");
 
553
+  list_advance(sr->loglst);
 
554
+  fail_unless(list_at_end(sr->loglst), "More than one entry in log list");
 
555
+  fail_unless(first_log->lfun == subunit_lfun,
 
556
+              "Log function is not the subunit lfun.");
 
557
+  srunner_end_logging(sr);
 
558
+  srunner_free(sr);
 
559
+}
 
560
+END_TEST
 
561
+#endif
 
562
+
 
563
 Suite *make_log_suite(void)
 
564
 {
 
565
 
 
566
   Suite *s;
 
567
-  TCase *tc_core, *tc_core_xml;
 
568
+  TCase *tc_core, *tc_core_xml, *tc_core_subunit;
 
569
 
 
570
   s = suite_create("Log");
 
571
   tc_core = tcase_create("Core");
 
572
   tc_core_xml = tcase_create("Core XML");
 
573
+  tc_core_subunit = tcase_create("Core SubUnit");
 
574
 
 
575
   suite_add_tcase(s, tc_core);
 
576
   tcase_add_test(tc_core, test_set_log);
 
577
@@ -98,6 +126,11 @@
 
578
   tcase_add_test(tc_core_xml, test_no_set_xml);
 
579
   tcase_add_test(tc_core_xml, test_double_set_xml);
 
580
 
 
581
+#if ENABLE_SUBUNIT
 
582
+  suite_add_tcase(s, tc_core_subunit);
 
583
+  tcase_add_test(tc_core_subunit, test_init_logging_subunit);
 
584
+#endif
 
585
+  
 
586
   return s;
 
587
 }
 
588
 
 
589
 
 
590
=== modified file 'tests/ex_output.c'
 
591
--- tests/ex_output.c   2006-10-13 00:24:56 +0000
 
592
+++ tests/ex_output.c   2007-04-21 06:59:27 +0000
 
593
@@ -2,6 +2,7 @@
 
594
 #include <stdio.h>
 
595
 #include <string.h>
 
596
 #include <check.h>
 
597
+#include "config.h"
 
598
 
 
599
 START_TEST(test_pass)
 
600
 {
 
601
@@ -47,11 +48,20 @@
 
602
   srunner_free(sr);
 
603
 }
 
604
 
 
605
+static void print_usage(void)
 
606
+{
 
607
+    printf ("Usage: ex_output (CK_SILENT | CK_MINIMAL | CK_NORMAL | CK_VERBOSE");
 
608
+#if ENABLE_SUBUNIT
 
609
+    printf (" | CK_SUBUNIT");
 
610
+#endif
 
611
+    printf (")\n");
 
612
+}
 
613
+
 
614
 int main (int argc, char **argv)
 
615
 {
 
616
   
 
617
   if (argc != 2) {
 
618
-    printf ("Usage: ex_output (CK_SILENT | CK_MINIMAL | CK_NORMAL | CK_VERBOSE)\n");
 
619
+    print_usage();
 
620
     return EXIT_FAILURE;
 
621
   }
 
622
 
 
623
@@ -63,8 +73,12 @@
 
624
     run_tests(CK_NORMAL);
 
625
   else if (strcmp (argv[1], "CK_VERBOSE") == 0)
 
626
     run_tests(CK_VERBOSE);
 
627
+#if ENABLE_SUBUNIT
 
628
+  else if (strcmp (argv[1], "CK_SUBUNIT") == 0)
 
629
+    run_tests(CK_SUBUNIT);
 
630
+#endif
 
631
   else {
 
632
-    printf ("Usage: ex_output (CK_SILENT | CK_MINIMAL | CK_NORMAL | CK_VERBOSE)\n");
 
633
+    print_usage();
 
634
     return EXIT_FAILURE;
 
635
   }    
 
636
     
 
637
 
 
638
=== modified file 'tests/test_output.sh'
 
639
--- tests/test_output.sh        2006-10-13 00:24:56 +0000
 
640
+++ tests/test_output.sh        2007-04-21 06:59:27 +0000
 
641
@@ -1,5 +1,7 @@
 
642
 #!/bin/sh
 
643
 
 
644
+. "${srcdir}/"test_vars
 
645
+
 
646
 if [ "${srcdir}" = "." ]; then
 
647
     lsrc=""
 
648
 else
 
649
@@ -18,12 +20,24 @@
 
650
 ${lsrc}ex_output.c:8:P:Core:test_pass:0: Passed
 
651
 ${lsrc}ex_output.c:14:F:Core:test_fail:0: Failure
 
652
 ${lsrc}ex_output.c:18:E:Core:test_exit:0: (after this point) Early exit with return value 1"
 
653
+t4="xtest: Core:test_pass
 
654
+success: Core:test_pass
 
655
+test: Core:test_fail
 
656
+failure: Core:test_fail [
 
657
+${lsrc}ex_output.c:14: Failure
 
658
+]
 
659
+test: Core:test_exit
 
660
+error: Core:test_exit [
 
661
+${lsrc}ex_output.c:18: (after this point) Early exit with return value 1
 
662
+]"
 
663
 
 
664
 op0=`./ex_output CK_SILENT`
 
665
 op1=`./ex_output CK_MINIMAL`
 
666
 op2=`./ex_output CK_NORMAL`
 
667
 op3=`./ex_output CK_VERBOSE`
 
668
-
 
669
+if test 1 -eq $ENABLE_SUBUNIT; then
 
670
+op4=`./ex_output CK_SUBUNIT`
 
671
+fi
 
672
 
 
673
 test_output ( ) {
 
674
     if [ "${1}" != "${2}" ]; then
 
675
@@ -41,4 +55,7 @@
 
676
 test_output "$t1" x"$op1" "CK_MINIMAL";
 
677
 test_output "$t2" x"$op2" "CK_NORMAL";
 
678
 test_output "$t3" x"$op3" "CK_VERBOSE";
 
679
+if test 1 -eq $ENABLE_SUBUNIT; then
 
680
+test_output "$t4" x"$op4" "CK_SUBUNIT";
 
681
+fi
 
682
 exit 0
 
683