blob: 5d412d5ed5be47ef6cda52147f48fa4444df6421 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2007 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10//
11// A reuseable entry point for gunit tests.
12
13#if defined(WEBRTC_WIN)
14#include <crtdbg.h>
15#endif
16
17#include "webrtc/base/flags.h"
18#include "webrtc/base/fileutils.h"
19#include "webrtc/base/gunit.h"
20#include "webrtc/base/logging.h"
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000021
22DEFINE_bool(help, false, "prints this message");
23DEFINE_string(log, "", "logging options to use");
24#if defined(WEBRTC_WIN)
25DEFINE_int(crt_break_alloc, -1, "memory allocation to break on");
26DEFINE_bool(default_error_handlers, false,
27 "leave the default exception/dbg handler functions in place");
28
29void TestInvalidParameterHandler(const wchar_t* expression,
30 const wchar_t* function,
31 const wchar_t* file,
32 unsigned int line,
33 uintptr_t pReserved) {
34 LOG(LS_ERROR) << "InvalidParameter Handler called. Exiting.";
35 LOG(LS_ERROR) << expression << std::endl << function << std::endl << file
36 << std::endl << line;
37 exit(1);
38}
39void TestPureCallHandler() {
40 LOG(LS_ERROR) << "Purecall Handler called. Exiting.";
41 exit(1);
42}
43int TestCrtReportHandler(int report_type, char* msg, int* retval) {
44 LOG(LS_ERROR) << "CrtReport Handler called...";
45 LOG(LS_ERROR) << msg;
46 if (report_type == _CRT_ASSERT) {
47 exit(1);
48 } else {
49 *retval = 0;
50 return TRUE;
51 }
52}
53#endif // WEBRTC_WIN
54
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000055int main(int argc, char** argv) {
56 testing::InitGoogleTest(&argc, argv);
henrike@webrtc.orgc50bf7c2014-05-14 18:24:13 +000057 rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, false);
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000058 if (FLAG_help) {
henrike@webrtc.orgc50bf7c2014-05-14 18:24:13 +000059 rtc::FlagList::Print(NULL, false);
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000060 return 0;
61 }
62
63#if defined(WEBRTC_WIN)
64 if (!FLAG_default_error_handlers) {
65 // Make sure any errors don't throw dialogs hanging the test run.
66 _set_invalid_parameter_handler(TestInvalidParameterHandler);
67 _set_purecall_handler(TestPureCallHandler);
68 _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestCrtReportHandler);
69 }
70
71#ifdef _DEBUG // Turn on memory leak checking on Windows.
72 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF |_CRTDBG_LEAK_CHECK_DF);
73 if (FLAG_crt_break_alloc >= 0) {
74 _crtBreakAlloc = FLAG_crt_break_alloc;
75 }
76#endif // _DEBUG
77#endif // WEBRTC_WIN
78
79 rtc::Filesystem::SetOrganizationName("google");
80 rtc::Filesystem::SetApplicationName("unittest");
81
82 // By default, log timestamps. Allow overrides by used of a --log flag.
83 rtc::LogMessage::LogTimestamps();
84 if (*FLAG_log != '\0') {
85 rtc::LogMessage::ConfigureLogging(FLAG_log, "unittest.log");
86 }
87
88 int res = RUN_ALL_TESTS();
89
90 // clean up logging so we don't appear to leak memory.
91 rtc::LogMessage::ConfigureLogging("", "");
92
93#if defined(WEBRTC_WIN)
94 // Unhook crt function so that we don't ever log after statics have been
95 // uninitialized.
96 if (!FLAG_default_error_handlers)
97 _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestCrtReportHandler);
98#endif
99
100 return res;
101}