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