/* Charmonizer/Test.h - test Charmonizer's output. */ #ifndef H_CHAZ_TEST #define H_CHAZ_TEST #include "Charmonizer/Core/Defines.h" typedef struct chaz_TestBatch chaz_TestBatch; /* Destructor. */ typedef void (*chaz_TestBatch_destroy_t)(chaz_TestBatch *batch); /* This function, which is unique to each TestBatch, actually runs the test * sequence. */ typedef void (*chaz_TestBatch_test_func_t)(chaz_TestBatch *batch); /* Print a header, execute the test sequence, print a report. */ typedef void (*chaz_TestBatch_run_test_t)(chaz_TestBatch *batch); struct chaz_TestBatch { char *name; unsigned test_num; unsigned num_tests; unsigned num_passed; unsigned num_failed; unsigned num_skipped; chaz_TestBatch_destroy_t destroy; chaz_TestBatch_test_func_t test_func; chaz_TestBatch_run_test_t run_test; }; /* Unbuffer stdout. Perform any other setup needed. */ void chaz_Test_init(void); /* Constructor for TestBatch. */ chaz_TestBatch* chaz_Test_new_batch(const char *batch_name, unsigned num_tests, chaz_TestBatch_test_func_t test_func); /* Note: maybe add line numbers later. */ #define CHAZ_TEST_ASSERT_TRUE chaz_Test_assert_true #define CHAZ_TEST_ASSERT_FALSE chaz_Test_assert_false #define CHAZ_TEST_ASSERT_STR_EQ chaz_Test_assert_str_eq #define CHAZ_TEST_ASSERT_STR_NEQ chaz_Test_assert_str_neq #define CHAZ_TEST_PASS chaz_Test_pass #define CHAZ_TEST_FAIL chaz_Test_fail #define CHAZ_TEST_ASSERT_INT_EQ chaz_Test_assert_int_eq #define CHAZ_TEST_ASSERT_FLOAT_EQ chaz_Test_assert_float_eq /* Print a message indicating that a test was skipped and update batch. */ #define CHAZ_TEST_SKIP(batch, message) \ chaz_Test_skip(batch, message) /* Print a message indicating that all remaining tests will be skipped and * return. */ #define CHAZ_TEST_SKIP_REMAINING(batch, message) \ do { \ chaz_Test_report_skip_remaining(batch, message); \ return; \ } while (0) void chaz_Test_assert_true(chaz_TestBatch *batch, int expression, const char *pat, ...); void chaz_Test_assert_false(chaz_TestBatch *batch, int expression, const char *pat, ...); void chaz_Test_assert_str_eq(chaz_TestBatch *batch, const char *expected, const char *got, const char *pat, ...); void chaz_Test_assert_str_neq(chaz_TestBatch *batch, const char *expected, const char *got, const char *pat, ...); void chaz_Test_pass(chaz_TestBatch *batch, const char *pat, ...); void chaz_Test_fail(chaz_TestBatch *batch, const char *pat, ...); void chaz_Test_assert_int_eq(chaz_TestBatch *batch, long expected, long got, const char *pat, ...); void chaz_Test_assert_float_eq(chaz_TestBatch *batch, double expected, double got, const char *pat, ...); void chaz_Test_skip(chaz_TestBatch *batch, const char *pat, ...); void chaz_Test_report_skip_remaining(chaz_TestBatch* batch, const char *pat, ...); #ifdef CHAZ_USE_SHORT_NAMES #define TestBatch_destroy_t chaz_TestBatch_destroy_t #define TestBatch_test_func_t chaz_TestBatch_test_func_t #define TestBatch_run_test_t chaz_TestBatch_run_test_t #define TestBatch chaz_TestBatch #define Test_init chaz_Test_init #define Test_new_batch chaz_Test_new_batch #define ASSERT_TRUE CHAZ_TEST_ASSERT_TRUE #define ASSERT_FALSE CHAZ_TEST_ASSERT_FALSE #define ASSERT_STR_EQ CHAZ_TEST_ASSERT_STR_EQ #define ASSERT_STR_NEQ CHAZ_TEST_ASSERT_STR_NEQ #define PASS CHAZ_TEST_PASS #define FAIL CHAZ_TEST_FAIL #define ASSERT_INT_EQ CHAZ_TEST_ASSERT_INT_EQ #define ASSERT_FLOAT_EQ CHAZ_TEST_ASSERT_FLOAT_EQ #define SKIP CHAZ_TEST_SKIP #define SKIP_REMAINING CHAZ_TEST_SKIP_REMAINING #endif #endif /* H_CHAZ_TEST */ /** * Copyright 2006 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */