static void run_test_in_its_own_process(TestSuite *suite, UnitTest *test, TestReporter *reporter) { #ifdef WIN32 HANDLE pHandle = NULL; CgTestParams* pThreadParams = malloc(sizeof(CgTestParams)); if(!pThreadParams) return; pThreadParams->reporter = reporter; pThreadParams->suite = suite; pThreadParams->test = test; #endif (*reporter->start)(reporter, test->name); #ifdef WIN32 pHandle = (VOID *)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &run_test_thread, (LPVOID) pThreadParams, 0, NULL); WaitForSingleObject(pHandle, INFINITE); (*reporter->finish)(reporter, test->name); #else if (in_child_process()) { run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); stop(); } else { wait_for_child_process(); (*reporter->finish)(reporter, test->name); } #endif }
void run_test_in_its_own_process(TestSuite *suite, CgreenTest *test, TestReporter *reporter) { uint32_t test_starting_milliseconds = cgreen_time_get_current_milliseconds(); (*reporter->start_test)(reporter, test->name); if (test->skip) { send_reporter_skipped_notification(reporter); (*reporter->finish_test)(reporter, test->filename, test->line, NULL, 0); } else if (in_child_process()) { run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); stop(); } else { uint32_t test_duration = cgreen_time_duration_in_milliseconds(test_starting_milliseconds, cgreen_time_get_current_milliseconds()); const int status = wait_for_child_process(); if (WIFSIGNALED(status)) { /* a C++ exception generates SIGABRT. Only print our special message for different signals. */ const int sig = WTERMSIG(status); if (sig != SIGABRT) { char buf[128]; snprintf(buf, sizeof(buf), "Test terminated with signal: %s", (const char *)strsignal(sig)); (*reporter->finish_test)(reporter, test->filename, test->line, buf, test_duration); return; } } (*reporter->finish_test)(reporter, test->filename, test->line, NULL, test_duration); } }
static void run_test_in_the_current_process(TestSuite *suite, CgreenTest *test, TestReporter *reporter) { uint32_t test_duration = 0; uint32_t test_starting_milliseconds = cgreen_time_get_current_milliseconds(); (*reporter->start_test)(reporter, test->name); if (test->skip) { send_reporter_skipped_notification(reporter); } else { run_the_test_code(suite, test, reporter); test_duration = cgreen_time_duration_in_milliseconds(test_starting_milliseconds, cgreen_time_get_current_milliseconds()); send_reporter_completion_notification(reporter); } (*reporter->finish_test)(reporter, test->filename, test->line, NULL, test_duration); }
unsigned int run_test_thread(void* pVoid) { CgTestParams* pTestParams = (CgTestParams*)pVoid; if(!pTestParams) return (unsigned int)-1; __try { run_the_test_code(pTestParams->suite, pTestParams->test, pTestParams->reporter); } __finally { send_reporter_completion_notification(pTestParams->reporter); } free(pTestParams); return 0; }
static void run_test_in_the_current_process_child(TestSuite *suite, CgreenTest *test, TestReporter *reporter) { (*reporter->start_test)(reporter, test->name); run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); stop(0, 0, 0, 0, 0); }
static void run_test_in_the_current_process(TestSuite *suite, UnitTest *test, TestReporter *reporter) { (*reporter->start)(reporter, test->name); run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); (*reporter->finish)(reporter, test->name); }
static void run_test_in_the_current_process(TestSuite *suite, CgreenTest *test, TestReporter *reporter) { (*reporter->start_test)(reporter, test->name); run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); (*reporter->finish_test)(reporter, test->filename, test->line, NULL); }