1 /* $NetBSD: testsuite.h,v 1.5 2014/12/10 04:37:56 christos Exp $ */ 2 3 /* Id: testsuite.h,v 1.1 2003/06/04 00:27:03 marka Exp */ 4 /* 5 * Copyright (c) 2002 Japan Network Information Center. 6 * All rights reserved. 7 * 8 * By using this file, you agree to the terms and conditions set forth bellow. 9 * 10 * LICENSE TERMS AND CONDITIONS 11 * 12 * The following License Terms and Conditions apply, unless a different 13 * license is obtained from Japan Network Information Center ("JPNIC"), 14 * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda, 15 * Chiyoda-ku, Tokyo 101-0047, Japan. 16 * 17 * 1. Use, Modification and Redistribution (including distribution of any 18 * modified or derived work) in source and/or binary forms is permitted 19 * under this License Terms and Conditions. 20 * 21 * 2. Redistribution of source code must retain the copyright notices as they 22 * appear in each source code file, this License Terms and Conditions. 23 * 24 * 3. Redistribution in binary form must reproduce the Copyright Notice, 25 * this License Terms and Conditions, in the documentation and/or other 26 * materials provided with the distribution. For the purposes of binary 27 * distribution the "Copyright Notice" refers to the following language: 28 * "Copyright (c) 2000-2002 Japan Network Information Center. All rights reserved." 29 * 30 * 4. The name of JPNIC may not be used to endorse or promote products 31 * derived from this Software without specific prior written approval of 32 * JPNIC. 33 * 34 * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC 35 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 37 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE 38 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 39 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 40 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 41 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 42 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 43 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 44 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 45 */ 46 47 #ifndef IDN_TESTSUITE_H 48 #define IDN_TESTSUITE_H 1 49 50 #ifdef __cplusplus 51 extern "C" { 52 #endif 53 54 /* 55 * Result codes for test case. 56 */ 57 typedef enum { 58 idn_teststatus_pass, 59 idn_teststatus_fail, 60 idn_teststatus_skip 61 } idn_teststatus_t; 62 63 /* 64 * Testsuite manager type (opaque). 65 */ 66 typedef struct idn_testsuite *idn_testsuite_t; 67 68 /* 69 * Testcase function type. 70 */ 71 typedef void (*idn_testsuite_testproc_t)(idn_testsuite_t ctx); 72 73 /* 74 * Message handler type. 75 */ 76 typedef void (*idn_testsuite_msgproc_t)(const char *msg); 77 78 /* 79 * Create a testsuite manager context. 80 * 81 * Create an empty context and store it in '*ctxp'. 82 * Return 1 on success. Return 0 if memory is exhausted. 83 */ 84 extern int 85 idn_testsuite_create(idn_testsuite_t *ctxp); 86 87 /* 88 * Destory the testsuite manager context. 89 * 90 * Destroy the context created by idn_testsuite_create(), and release 91 * memory allocated to the context. 92 */ 93 extern void 94 idn_testsuite_destroy(idn_testsuite_t ctx); 95 96 /* 97 * Add a test case to the `group' test group. 98 * Return 1 on success. Return 0 if memory is exhausted. 99 */ 100 extern int 101 idn_testsuite_addtestcase(idn_testsuite_t ctx, const char *title, 102 idn_testsuite_testproc_t proc); 103 104 /* 105 * Return the number of test cases registered in the context. 106 */ 107 extern int 108 idn_testsuite_ntestcases(idn_testsuite_t ctx); 109 110 /* 111 * Run test cases registered in the context. 112 */ 113 extern void 114 idn_testsuite_runall(idn_testsuite_t ctx); 115 extern void 116 idn_testsuite_run(idn_testsuite_t ctx, char *titles[]); 117 118 /* 119 * Return the string description of `status'. 120 */ 121 extern const char * 122 idn_teststatus_tostring(idn_teststatus_t status); 123 124 /* 125 * Return the number of passed/failed/skipped test cases. 126 */ 127 extern int 128 idn_testsuite_npassed(idn_testsuite_t ctx); 129 extern int 130 idn_testsuite_nfailed(idn_testsuite_t ctx); 131 extern int 132 idn_testsuite_nskipped(idn_testsuite_t ctx); 133 134 /* 135 * Set/Get status of the test case running currently. 136 * 137 * These functions must be called by test case function. 138 */ 139 extern idn_teststatus_t 140 idn_testsuite_getstatus(idn_testsuite_t ctx); 141 extern void 142 idn_testsuite_setstatus(idn_testsuite_t ctx, idn_teststatus_t status); 143 144 /* 145 * Enable/Disable verbose mode. 146 */ 147 extern void 148 idn_testsuite_setverbose(idn_testsuite_t ctx); 149 extern void 150 idn_testsuite_unsetverbose(idn_testsuite_t ctx); 151 152 /* 153 * Generic assertion with message 154 */ 155 extern void 156 idn_testsuite_assert(idn_testsuite_t ctx, const char *msg, 157 const char *file, int lineno); 158 159 #define ASSERT_THRU(msg) \ 160 idn_testsuite_assert(ctx__, msg, __FILE__, __LINE__) 161 #define ASSERT(msg) \ 162 do { \ 163 ASSERT_THRU(msg); \ 164 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 165 goto EXIT__; \ 166 } while (/*CONSTCOND*/0) 167 168 /* 169 * Assertion function and macro to compare two `int' values. 170 * The assertion passes if `gotten' is equal to `expected'. 171 */ 172 extern void 173 idn_testsuite_assertint(idn_testsuite_t ctx, int gotten, int expected, 174 const char *file, int lineno); 175 176 #define ASSERT_INT(gotten, expected) \ 177 do { \ 178 idn_testsuite_assertint(ctx__, gotten, expected, __FILE__, __LINE__); \ 179 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 180 goto EXIT__; \ 181 } while (/*CONSTCOND*/0) 182 183 /* 184 * Assertion function and macro to compare two strings. 185 * The assertion passes if `gotten' is lexically equal to `expected'. 186 */ 187 extern void 188 idn_testsuite_assertstring(idn_testsuite_t ctx, const char *gotten, 189 const char *expected, const char *file, int lineno); 190 191 #define ASSERT_STRING(gotten, expected) \ 192 do { \ 193 idn_testsuite_assertstring(ctx__, gotten, expected, __FILE__, __LINE__); \ 194 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 195 goto EXIT__; \ 196 } while (/*CONSTCOND*/0) 197 198 /* 199 * Assertion function and macro to compare two pointers. 200 * The assertion passes if `gotten' is equal to `expected'. 201 */ 202 extern void 203 idn_testsuite_assertptr(idn_testsuite_t ctx, const void *gotten, 204 const void *expected, const char *file, int lineno); 205 206 #define ASSERT_PTR(gotten, expected) \ 207 do { \ 208 idn_testsuite_assertptr(ctx__, gotten, expected, __FILE__, __LINE__); \ 209 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 210 goto EXIT__; \ 211 } while (/*CONSTCOND*/0) 212 213 /* 214 * Assertion function and macro to compare two pointers. 215 * The assertion passes if `gotten' is NOT equal to `expected'. 216 */ 217 extern void 218 idn_testsuite_assertptrne(idn_testsuite_t ctx, 219 const void *gotten, const void *unexpected, 220 const char *file, int lineno); 221 222 #define ASSERT_PTR_NE(gotten, unexpected) \ 223 do { \ 224 idn_testsuite_assertptrne(ctx__, gotten, unexpected, __FILE__, __LINE__); \ 225 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 226 goto EXIT__; \ 227 } while (/*CONSTCOND*/0) 228 229 /* 230 * Assertion function and macro to compare two `idn_result_t' values. 231 * The assertion passes if `gotten' is equal to `expected'. 232 */ 233 extern void 234 idn_testsuite_assertresult(idn_testsuite_t ctx, 235 idn_result_t gotten, idn_result_t expected, 236 const char *file, int lineno); 237 238 #define ASSERT_RESULT(gotten, expected) \ 239 do { \ 240 idn_testsuite_assertresult(ctx__, gotten, expected, __FILE__, __LINE__); \ 241 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 242 goto EXIT__; \ 243 } while (/*CONSTCOND*/0) 244 245 /* 246 * Assertion function and macro to compare two UCS4 strings. 247 * The assertion passes if `gotten' is lexically equal to `expected'. 248 */ 249 extern void 250 idn_testsuite_assertucs4string(idn_testsuite_t ctx, 251 const unsigned long *gotten, 252 const unsigned long *expected, 253 const char *file, 254 int lineno); 255 256 #define ASSERT_UCS4STRING_THRU(gotten, expected) \ 257 idn_testsuite_assertucs4string(ctx__, gotten, expected, __FILE__, __LINE__) 258 #define ASSERT_UCS4STRING(gotten, expected) \ 259 do { \ 260 ASSERT_UCS4STRING_THRU(gotten, expected); \ 261 if (idn_testsuite_getstatus(ctx__) != idn_teststatus_pass) \ 262 goto EXIT__; \ 263 } while (/*CONSTCOND*/0) 264 265 /* 266 * Shorthands. 267 */ 268 #define SKIP_TESTCASE \ 269 do { \ 270 idn_testsuite_setstatus(ctx__, idn_teststatus_skip); \ 271 goto EXIT__; \ 272 } while (/*CONSTCOND*/0) 273 274 #ifdef __cplusplus 275 } 276 #endif 277 278 #endif /* IDN_TESTSUITE_H */ 279