// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 ********************************************************************************
 *
 *   Copyright (C) 1996-2013, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ********************************************************************************
 */

#ifndef CTEST_H
#define CTEST_H

#include "unicode/testtype.h"
#include "unicode/utrace.h"


/* prototypes *********************************/

U_CDECL_BEGIN
typedef void (U_CALLCONV *TestFunctionPtr)(void);
typedef int (U_CALLCONV *ArgHandlerPtr)(int arg, int argc, const char* const argv[], void *context);
typedef struct TestNode TestNode;
U_CDECL_END

/**
 * This is use to set or get the option value for REPEAT_TESTS.
 * Use with set/getTestOption().
 *
 * @internal
 */
#define REPEAT_TESTS_OPTION 1

/**
 * This is use to set or get the option value for VERBOSITY.
 * When option is set to zero to disable log_verbose() messages.
 * Otherwise nonzero to see log_verbose() messages.
 * Use with set/getTestOption().
 *
 * @internal
 */
#define VERBOSITY_OPTION 2

/**
 * This is use to set or get the option value for ERR_MSG.
 * Use with set/getTestOption().
 *
 * @internal
 */
#define ERR_MSG_OPTION 3

/**
 * This is use to set or get the option value for QUICK.
 * When option is zero, disable some of the slower tests.
 * Otherwise nonzero to run the slower tests.
 * Use with set/getTestOption().
 *
 * @internal
 */
#define QUICK_OPTION 4

/**
 * This is use to set or get the option value for WARN_ON_MISSING_DATA.
 * When option is nonzero, warn on missing data.
 * Otherwise, errors are propagated when data is not available.
 * Affects the behavior of log_dataerr.
 * Use with set/getTestOption().
 *
 * @see log_data_err
 * @internal
 */
#define WARN_ON_MISSING_DATA_OPTION 5

/**
 * This is use to set or get the option value for ICU_TRACE.
 * ICU tracing level, is set by command line option.
 * Use with set/getTestOption().
 *
 * @internal
 */
#define ICU_TRACE_OPTION 6

/**
 * Maximum amount of memory uprv_malloc should allocate before returning NULL.
 *
 * @internal
 */
extern T_CTEST_EXPORT_API size_t MAX_MEMORY_ALLOCATION;

/**
 * If memory tracing was enabled, contains the number of unfreed allocations.
 *
 * @internal
 */
extern T_CTEST_EXPORT_API int32_t ALLOCATION_COUNT;

/**
 * Pass to setTestOption to decrement the test option value.
 *
 * @internal
 */
#define DECREMENT_OPTION_VALUE -99

/**
 * Gets the test option set on commandline.
 *
 * @param testOption macro definition for the individual test option
 * @return value of test option, zero if option is not set or off
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API int32_t T_CTEST_EXPORT2
getTestOption ( int32_t testOption );

/**
 * Sets the test option with value given on commandline.
 *
 * @param testOption macro definition for the individual test option
 * @param value to set the test option to
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
setTestOption ( int32_t testOption, int32_t value);

/**
 * Show the names of all nodes.
 *
 * @param root Subtree of tests.
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
showTests ( const TestNode *root);

/**
 * Run a subtree of tests.
 *
 * @param root Subtree of tests.
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
runTests ( const TestNode* root);

/**
 * Add a test to the subtree.
 * Example usage:
 * <PRE>
 *     TestNode* root=NULL;
 *     addTest(&root, &mytest, "/a/b/mytest" );
 * </PRE>
 * @param root Pointer to the root pointer.
 * @param test Pointer to 'void function(void)' for actual test.
 * @param path Path from root under which test will be placed. Ex. '/a/b/mytest'
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
addTest(TestNode** root,
        TestFunctionPtr test,
        const char *path);

/**
 * Clean up any allocated memory.
 * Conditions for calling this function are the same as u_cleanup().
 * @see u_cleanup
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
cleanUpTestTree(TestNode *tn);

/**
 * Retreive a specific subtest. (subtree).
 *
 * @param root Pointer to the root.
 * @param path Path relative to the root, Ex. '/a/b'
 * @return The subtest, or NULL on failure.
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API const TestNode* T_CTEST_EXPORT2
getTest(const TestNode* root,
        const char *path);


/**
 * Log an error message. (printf style)
 * @param pattern printf-style format string
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
log_err(const char* pattern, ...);

T_CTEST_API void T_CTEST_EXPORT2
log_err_status(UErrorCode status, const char* pattern, ...);
/**
 * Log an informational message. (printf style)
 * @param pattern printf-style format string
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
log_info(const char* pattern, ...);

/**
 * Log an informational message. (vprintf style)
 * @param prefix a string that is output before the pattern and without formatting
 * @param pattern printf-style format string
 * @param ap variable-arguments list
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
vlog_info(const char *prefix, const char *pattern, va_list ap);

/**
 * Log a verbose informational message. (printf style)
 * This message will only appear if the global VERBOSITY is nonzero
 * @param pattern printf-style format string
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
log_verbose(const char* pattern, ...);

/**
 * Log an error message concerning missing data. (printf style)
 * If WARN_ON_MISSING_DATA is nonzero, this will case a log_info (warning) to be
 * printed, but if it is zero this will produce an error (log_err).
 * @param pattern printf-style format string
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API void T_CTEST_EXPORT2
log_data_err(const char *pattern, ...);

/**
 * Log a known issue.
 * @param ticket ticket number such as "12345" for ICU tickets or "cldrbug:6636" for CLDR tickets.
 * @param fmt ...  sprintf-style format, optional message. can be NULL.
 * @return TRUE if known issue test should be skipped, FALSE if it should be run
 */
T_CTEST_API UBool
T_CTEST_EXPORT2
log_knownIssue(const char *ticket, const char *fmt, ...);

/**
 * Initialize the variables above. This allows the test to set up accordingly
 * before running the tests.
 * This must be called before runTests.
 */
T_CTEST_API int T_CTEST_EXPORT2 
initArgs( int argc, const char* const argv[], ArgHandlerPtr argHandler, void *context);

/**
 * Processes the command line arguments.
 * This is a sample implementation
 * <PRE>Usage: %s [ -l ] [ -v ] [ -? ] [ /path/to/test ]
 *        -l List only, do not run\
 *        -v turn OFF verbosity
 *        -? print this message</PRE>
 * @param root Testnode root with tests already attached to it
 * @param argv argument list from main (stdio.h)
 * @param argc argument list count from main (stdio.h)
 * @return positive for error count, 0 for success, negative for illegal argument
 * @internal Internal APIs for testing purpose only
 */
T_CTEST_API int T_CTEST_EXPORT2 
runTestRequest(const TestNode* root,
            int argc,
            const char* const argv[]);


T_CTEST_API const char* T_CTEST_EXPORT2
getTestName(void);

/**
 * Append a time delta to str if it is significant (>5 ms) otherwise no change
 * @param delta a delta in millis
 * @param str a string to append to.
 */
T_CTEST_API void T_CTEST_EXPORT2
str_timeDelta(char *str, UDate delta);


/* ======== XML (JUnit output) ========= */

/**
 * Set the filename for the XML output. 
 * @param fileName file name. Caller must retain storage.
 * @return 0 on success, 1 on failure.
 */
T_CTEST_API int32_t T_CTEST_EXPORT2
ctest_xml_setFileName(const char *fileName);


/**
 * Init XML subsystem. Call ctest_xml_setFileName first
 * @param rootName the test root name to be written
 * @return 0 on success, 1 on failure.
 */
T_CTEST_API int32_t T_CTEST_EXPORT2
ctest_xml_init(const char *rootName);


/**
 * Set the filename for the XML output. Caller must retain storage.
 * @return 0 on success, 1 on failure.
 */
T_CTEST_API int32_t T_CTEST_EXPORT2
ctest_xml_fini(void);


/**
 * report a test case
 * @return 0 on success, 1 on failure.
 */
T_CTEST_API int32_t
T_CTEST_EXPORT2
ctest_xml_testcase(const char *classname, const char *name, const char *time, const char *failMsg);

#endif
