1 /*
2 * Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers.
3 * All rights reserved.
4 *
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
8 */
9
10 #pragma ident "%Z%%M% %I% %E% SMI"
11
12 #include <sm/gen.h>
13 SM_IDSTR(Id, "@(#)$Id: test.c,v 1.16 2002/01/08 17:54:40 ca Exp $")
14
15 /*
16 ** Abstractions for writing libsm test programs.
17 */
18
19 #include <stdlib.h>
20 #include <unistd.h>
21 #include <stdio.h>
22 #include <sm/debug.h>
23 #include <sm/test.h>
24
25 extern char *optarg;
26 extern int optind;
27 extern int optopt;
28 extern int opterr;
29
30 int SmTestIndex;
31 int SmTestNumErrors;
32 bool SmTestVerbose;
33
34 static char Help[] = "\
35 %s [-h] [-d debugging] [-v]\n\
36 \n\
37 %s\n\
38 \n\
39 -h Display this help information.\n\
40 -d debugging Set debug activation levels.\n\
41 -v Verbose output.\n\
42 ";
43
44 static char Usage[] = "\
45 Usage: %s [-h] [-v]\n\
46 Use %s -h for help.\n\
47 ";
48
49 /*
50 ** SM_TEST_BEGIN -- initialize test system.
51 **
52 ** Parameters:
53 ** argc -- argument counter.
54 ** argv -- argument vector.
55 ** testname -- description of tests.
56 **
57 ** Results:
58 ** none.
59 */
60
61 void
sm_test_begin(argc,argv,testname)62 sm_test_begin(argc, argv, testname)
63 int argc;
64 char **argv;
65 char *testname;
66 {
67 int c;
68
69 SmTestIndex = 0;
70 SmTestNumErrors = 0;
71 SmTestVerbose = false;
72 opterr = 0;
73
74 while ((c = getopt(argc, argv, "vhd:")) != -1)
75 {
76 switch (c)
77 {
78 case 'v':
79 SmTestVerbose = true;
80 break;
81 case 'd':
82 sm_debug_addsettings_x(optarg);
83 break;
84 case 'h':
85 (void) fprintf(stdout, Help, argv[0], testname);
86 exit(0);
87 default:
88 (void) fprintf(stderr,
89 "Unknown command line option -%c\n",
90 optopt);
91 (void) fprintf(stderr, Usage, argv[0], argv[0]);
92 exit(1);
93 }
94 }
95 }
96
97 /*
98 ** SM_TEST -- single test.
99 **
100 ** Parameters:
101 ** success -- did test succeeed?
102 ** expr -- expression that has been evaluated.
103 ** filename -- guess...
104 ** lineno -- line number.
105 **
106 ** Results:
107 ** value of success.
108 */
109
110 bool
sm_test(success,expr,filename,lineno)111 sm_test(success, expr, filename, lineno)
112 bool success;
113 char *expr;
114 char *filename;
115 int lineno;
116 {
117 ++SmTestIndex;
118 if (SmTestVerbose)
119 (void) fprintf(stderr, "%d..", SmTestIndex);
120 if (!success)
121 {
122 ++SmTestNumErrors;
123 if (!SmTestVerbose)
124 (void) fprintf(stderr, "%d..", SmTestIndex);
125 (void) fprintf(stderr, "bad! %s:%d %s\n", filename, lineno,
126 expr);
127 }
128 else
129 {
130 if (SmTestVerbose)
131 (void) fprintf(stderr, "ok\n");
132 }
133 return success;
134 }
135
136 /*
137 ** SM_TEST_END -- end of test system.
138 **
139 ** Parameters:
140 ** none.
141 **
142 ** Results:
143 ** number of errors.
144 */
145
146 int
sm_test_end()147 sm_test_end()
148 {
149 (void) fprintf(stderr, "%d of %d tests completed successfully\n",
150 SmTestIndex - SmTestNumErrors, SmTestIndex);
151 if (SmTestNumErrors != 0)
152 (void) fprintf(stderr, "*** %d error%s in test! ***\n",
153 SmTestNumErrors,
154 SmTestNumErrors > 1 ? "s" : "");
155
156 return SmTestNumErrors;
157 }
158