|
1 /* |
|
2 ******************************************************************************** |
|
3 * |
|
4 * Copyright (C) 1996-2013, International Business Machines |
|
5 * Corporation and others. All Rights Reserved. |
|
6 * |
|
7 ******************************************************************************** |
|
8 */ |
|
9 |
|
10 #ifndef CTEST_H |
|
11 #define CTEST_H |
|
12 |
|
13 #include "unicode/testtype.h" |
|
14 #include "unicode/utrace.h" |
|
15 |
|
16 |
|
17 /* prototypes *********************************/ |
|
18 |
|
19 U_CDECL_BEGIN |
|
20 typedef void (U_CALLCONV *TestFunctionPtr)(void); |
|
21 typedef int (U_CALLCONV *ArgHandlerPtr)(int arg, int argc, const char* const argv[], void *context); |
|
22 typedef struct TestNode TestNode; |
|
23 U_CDECL_END |
|
24 |
|
25 /** |
|
26 * This is use to set or get the option value for REPEAT_TESTS. |
|
27 * Use with set/getTestOption(). |
|
28 * |
|
29 * @internal |
|
30 */ |
|
31 #define REPEAT_TESTS_OPTION 1 |
|
32 |
|
33 /** |
|
34 * This is use to set or get the option value for VERBOSITY. |
|
35 * When option is set to zero to disable log_verbose() messages. |
|
36 * Otherwise nonzero to see log_verbose() messages. |
|
37 * Use with set/getTestOption(). |
|
38 * |
|
39 * @internal |
|
40 */ |
|
41 #define VERBOSITY_OPTION 2 |
|
42 |
|
43 /** |
|
44 * This is use to set or get the option value for ERR_MSG. |
|
45 * Use with set/getTestOption(). |
|
46 * |
|
47 * @internal |
|
48 */ |
|
49 #define ERR_MSG_OPTION 3 |
|
50 |
|
51 /** |
|
52 * This is use to set or get the option value for QUICK. |
|
53 * When option is zero, disable some of the slower tests. |
|
54 * Otherwise nonzero to run the slower tests. |
|
55 * Use with set/getTestOption(). |
|
56 * |
|
57 * @internal |
|
58 */ |
|
59 #define QUICK_OPTION 4 |
|
60 |
|
61 /** |
|
62 * This is use to set or get the option value for WARN_ON_MISSING_DATA. |
|
63 * When option is nonzero, warn on missing data. |
|
64 * Otherwise, errors are propagated when data is not available. |
|
65 * Affects the behavior of log_dataerr. |
|
66 * Use with set/getTestOption(). |
|
67 * |
|
68 * @see log_data_err |
|
69 * @internal |
|
70 */ |
|
71 #define WARN_ON_MISSING_DATA_OPTION 5 |
|
72 |
|
73 /** |
|
74 * This is use to set or get the option value for ICU_TRACE. |
|
75 * ICU tracing level, is set by command line option. |
|
76 * Use with set/getTestOption(). |
|
77 * |
|
78 * @internal |
|
79 */ |
|
80 #define ICU_TRACE_OPTION 6 |
|
81 |
|
82 /** |
|
83 * Maximum amount of memory uprv_malloc should allocate before returning NULL. |
|
84 * |
|
85 * @internal |
|
86 */ |
|
87 extern T_CTEST_EXPORT_API size_t MAX_MEMORY_ALLOCATION; |
|
88 |
|
89 /** |
|
90 * If memory tracing was enabled, contains the number of unfreed allocations. |
|
91 * |
|
92 * @internal |
|
93 */ |
|
94 extern T_CTEST_EXPORT_API int32_t ALLOCATION_COUNT; |
|
95 |
|
96 /** |
|
97 * Pass to setTestOption to decrement the test option value. |
|
98 * |
|
99 * @internal |
|
100 */ |
|
101 #define DECREMENT_OPTION_VALUE -99 |
|
102 |
|
103 /** |
|
104 * Gets the test option set on commandline. |
|
105 * |
|
106 * @param testOption macro definition for the individual test option |
|
107 * @return value of test option, zero if option is not set or off |
|
108 * @internal Internal APIs for testing purpose only |
|
109 */ |
|
110 T_CTEST_API int32_t T_CTEST_EXPORT2 |
|
111 getTestOption ( int32_t testOption ); |
|
112 |
|
113 /** |
|
114 * Sets the test option with value given on commandline. |
|
115 * |
|
116 * @param testOption macro definition for the individual test option |
|
117 * @param value to set the test option to |
|
118 * @internal Internal APIs for testing purpose only |
|
119 */ |
|
120 T_CTEST_API void T_CTEST_EXPORT2 |
|
121 setTestOption ( int32_t testOption, int32_t value); |
|
122 |
|
123 /** |
|
124 * Show the names of all nodes. |
|
125 * |
|
126 * @param root Subtree of tests. |
|
127 * @internal Internal APIs for testing purpose only |
|
128 */ |
|
129 T_CTEST_API void T_CTEST_EXPORT2 |
|
130 showTests ( const TestNode *root); |
|
131 |
|
132 /** |
|
133 * Run a subtree of tests. |
|
134 * |
|
135 * @param root Subtree of tests. |
|
136 * @internal Internal APIs for testing purpose only |
|
137 */ |
|
138 T_CTEST_API void T_CTEST_EXPORT2 |
|
139 runTests ( const TestNode* root); |
|
140 |
|
141 /** |
|
142 * Add a test to the subtree. |
|
143 * Example usage: |
|
144 * <PRE> |
|
145 * TestNode* root=NULL; |
|
146 * addTest(&root, &mytest, "/a/b/mytest" ); |
|
147 * </PRE> |
|
148 * @param root Pointer to the root pointer. |
|
149 * @param test Pointer to 'void function(void)' for actual test. |
|
150 * @param path Path from root under which test will be placed. Ex. '/a/b/mytest' |
|
151 * @internal Internal APIs for testing purpose only |
|
152 */ |
|
153 T_CTEST_API void T_CTEST_EXPORT2 |
|
154 addTest(TestNode** root, |
|
155 TestFunctionPtr test, |
|
156 const char *path); |
|
157 |
|
158 /** |
|
159 * Clean up any allocated memory. |
|
160 * Conditions for calling this function are the same as u_cleanup(). |
|
161 * @see u_cleanup |
|
162 * @internal Internal APIs for testing purpose only |
|
163 */ |
|
164 T_CTEST_API void T_CTEST_EXPORT2 |
|
165 cleanUpTestTree(TestNode *tn); |
|
166 |
|
167 /** |
|
168 * Retreive a specific subtest. (subtree). |
|
169 * |
|
170 * @param root Pointer to the root. |
|
171 * @param path Path relative to the root, Ex. '/a/b' |
|
172 * @return The subtest, or NULL on failure. |
|
173 * @internal Internal APIs for testing purpose only |
|
174 */ |
|
175 T_CTEST_API const TestNode* T_CTEST_EXPORT2 |
|
176 getTest(const TestNode* root, |
|
177 const char *path); |
|
178 |
|
179 |
|
180 /** |
|
181 * Log an error message. (printf style) |
|
182 * @param pattern printf-style format string |
|
183 * @internal Internal APIs for testing purpose only |
|
184 */ |
|
185 T_CTEST_API void T_CTEST_EXPORT2 |
|
186 log_err(const char* pattern, ...); |
|
187 |
|
188 T_CTEST_API void T_CTEST_EXPORT2 |
|
189 log_err_status(UErrorCode status, const char* pattern, ...); |
|
190 /** |
|
191 * Log an informational message. (printf style) |
|
192 * @param pattern printf-style format string |
|
193 * @internal Internal APIs for testing purpose only |
|
194 */ |
|
195 T_CTEST_API void T_CTEST_EXPORT2 |
|
196 log_info(const char* pattern, ...); |
|
197 |
|
198 /** |
|
199 * Log an informational message. (vprintf style) |
|
200 * @param prefix a string that is output before the pattern and without formatting |
|
201 * @param pattern printf-style format string |
|
202 * @param ap variable-arguments list |
|
203 * @internal Internal APIs for testing purpose only |
|
204 */ |
|
205 T_CTEST_API void T_CTEST_EXPORT2 |
|
206 vlog_info(const char *prefix, const char *pattern, va_list ap); |
|
207 |
|
208 /** |
|
209 * Log a verbose informational message. (printf style) |
|
210 * This message will only appear if the global VERBOSITY is nonzero |
|
211 * @param pattern printf-style format string |
|
212 * @internal Internal APIs for testing purpose only |
|
213 */ |
|
214 T_CTEST_API void T_CTEST_EXPORT2 |
|
215 log_verbose(const char* pattern, ...); |
|
216 |
|
217 /** |
|
218 * Log an error message concerning missing data. (printf style) |
|
219 * If WARN_ON_MISSING_DATA is nonzero, this will case a log_info (warning) to be |
|
220 * printed, but if it is zero this will produce an error (log_err). |
|
221 * @param pattern printf-style format string |
|
222 * @internal Internal APIs for testing purpose only |
|
223 */ |
|
224 T_CTEST_API void T_CTEST_EXPORT2 |
|
225 log_data_err(const char *pattern, ...); |
|
226 |
|
227 /** |
|
228 * Log a known issue. |
|
229 * @param ticket ticket number such as "12345" for ICU tickets or "cldrbug:6636" for CLDR tickets. |
|
230 * @param fmt ... sprintf-style format, optional message. can be NULL. |
|
231 * @return TRUE if known issue test should be skipped, FALSE if it should be run |
|
232 */ |
|
233 T_CTEST_API UBool |
|
234 T_CTEST_EXPORT2 |
|
235 log_knownIssue(const char *ticket, const char *fmt, ...); |
|
236 |
|
237 /** |
|
238 * Initialize the variables above. This allows the test to set up accordingly |
|
239 * before running the tests. |
|
240 * This must be called before runTests. |
|
241 */ |
|
242 T_CTEST_API int T_CTEST_EXPORT2 |
|
243 initArgs( int argc, const char* const argv[], ArgHandlerPtr argHandler, void *context); |
|
244 |
|
245 /** |
|
246 * Processes the command line arguments. |
|
247 * This is a sample implementation |
|
248 * <PRE>Usage: %s [ -l ] [ -v ] [ -? ] [ /path/to/test ] |
|
249 * -l List only, do not run\ |
|
250 * -v turn OFF verbosity |
|
251 * -? print this message</PRE> |
|
252 * @param root Testnode root with tests already attached to it |
|
253 * @param argv argument list from main (stdio.h) |
|
254 * @param argc argument list count from main (stdio.h) |
|
255 * @return positive for error count, 0 for success, negative for illegal argument |
|
256 * @internal Internal APIs for testing purpose only |
|
257 */ |
|
258 T_CTEST_API int T_CTEST_EXPORT2 |
|
259 runTestRequest(const TestNode* root, |
|
260 int argc, |
|
261 const char* const argv[]); |
|
262 |
|
263 |
|
264 T_CTEST_API const char* T_CTEST_EXPORT2 |
|
265 getTestName(void); |
|
266 |
|
267 /** |
|
268 * Append a time delta to str if it is significant (>5 ms) otherwise no change |
|
269 * @param delta a delta in millis |
|
270 * @param str a string to append to. |
|
271 */ |
|
272 T_CTEST_API void T_CTEST_EXPORT2 |
|
273 str_timeDelta(char *str, UDate delta); |
|
274 |
|
275 |
|
276 /* ======== XML (JUnit output) ========= */ |
|
277 |
|
278 /** |
|
279 * Set the filename for the XML output. |
|
280 * @param fileName file name. Caller must retain storage. |
|
281 * @return 0 on success, 1 on failure. |
|
282 */ |
|
283 T_CTEST_API int32_t T_CTEST_EXPORT2 |
|
284 ctest_xml_setFileName(const char *fileName); |
|
285 |
|
286 |
|
287 /** |
|
288 * Init XML subsystem. Call ctest_xml_setFileName first |
|
289 * @param rootName the test root name to be written |
|
290 * @return 0 on success, 1 on failure. |
|
291 */ |
|
292 T_CTEST_API int32_t T_CTEST_EXPORT2 |
|
293 ctest_xml_init(const char *rootName); |
|
294 |
|
295 |
|
296 /** |
|
297 * Set the filename for the XML output. Caller must retain storage. |
|
298 * @return 0 on success, 1 on failure. |
|
299 */ |
|
300 T_CTEST_API int32_t T_CTEST_EXPORT2 |
|
301 ctest_xml_fini(void); |
|
302 |
|
303 |
|
304 /** |
|
305 * report a test case |
|
306 * @return 0 on success, 1 on failure. |
|
307 */ |
|
308 T_CTEST_API int32_t |
|
309 T_CTEST_EXPORT2 |
|
310 ctest_xml_testcase(const char *classname, const char *name, const char *time, const char *failMsg); |
|
311 |
|
312 #endif |