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> 13SM_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 25extern char *optarg; 26extern int optind; 27extern int optopt; 28extern int opterr; 29 30int SmTestIndex; 31int SmTestNumErrors; 32bool SmTestVerbose; 33 34static 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 44static char Usage[] = "\ 45Usage: %s [-h] [-v]\n\ 46Use %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 61void 62sm_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 110bool 111sm_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 146int 147sm_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