1 // Copyright 2005, Google Inc.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 // * Neither the name of Google Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30 // The Google C++ Testing and Mocking Framework (Google Test)
31 //
32 // This header file defines the public API for Google Test. It should be
33 // included by any test program that uses Google Test.
34 //
35 // IMPORTANT NOTE: Due to limitation of the C++ language, we have to
36 // leave some internal implementation details in this header file.
37 // They are clearly marked by comments like this:
38 //
39 // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
40 //
41 // Such code is NOT meant to be used by a user directly, and is subject
42 // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user
43 // program!
44 //
45 // Acknowledgment: Google Test borrowed the idea of automatic test
46 // registration from Barthelemy Dagenais' (barthelemy@prologique.com)
47 // easyUnit framework.
48
49 #ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_H_
50 #define GOOGLETEST_INCLUDE_GTEST_GTEST_H_
51
52 #include <cstddef>
53 #include <cstdint>
54 #include <iomanip>
55 #include <limits>
56 #include <memory>
57 #include <ostream>
58 #include <set>
59 #include <sstream>
60 #include <string>
61 #include <type_traits>
62 #include <vector>
63
64 #include "gtest/gtest-assertion-result.h"
65 #include "gtest/gtest-death-test.h"
66 #include "gtest/gtest-matchers.h"
67 #include "gtest/gtest-message.h"
68 #include "gtest/gtest-param-test.h"
69 #include "gtest/gtest-printers.h"
70 #include "gtest/gtest-test-part.h"
71 #include "gtest/gtest-typed-test.h"
72 #include "gtest/gtest_pred_impl.h"
73 #include "gtest/gtest_prod.h"
74 #include "gtest/internal/gtest-internal.h"
75 #include "gtest/internal/gtest-string.h"
76
77 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \
78 /* class A needs to have dll-interface to be used by clients of class B */)
79
80 // Declares the flags.
81
82 // This flag temporary enables the disabled tests.
83 GTEST_DECLARE_bool_(also_run_disabled_tests);
84
85 // This flag brings the debugger on an assertion failure.
86 GTEST_DECLARE_bool_(break_on_failure);
87
88 // This flag controls whether Google Test catches all test-thrown exceptions
89 // and logs them as failures.
90 GTEST_DECLARE_bool_(catch_exceptions);
91
92 // This flag enables using colors in terminal output. Available values are
93 // "yes" to enable colors, "no" (disable colors), or "auto" (the default)
94 // to let Google Test decide.
95 GTEST_DECLARE_string_(color);
96
97 // This flag controls whether the test runner should continue execution past
98 // first failure.
99 GTEST_DECLARE_bool_(fail_fast);
100
101 // This flag sets up the filter to select by name using a glob pattern
102 // the tests to run. If the filter is not given all tests are executed.
103 GTEST_DECLARE_string_(filter);
104
105 // This flag controls whether Google Test installs a signal handler that dumps
106 // debugging information when fatal signals are raised.
107 GTEST_DECLARE_bool_(install_failure_signal_handler);
108
109 // This flag causes the Google Test to list tests. None of the tests listed
110 // are actually run if the flag is provided.
111 GTEST_DECLARE_bool_(list_tests);
112
113 // This flag controls whether Google Test emits a detailed XML report to a file
114 // in addition to its normal textual output.
115 GTEST_DECLARE_string_(output);
116
117 // This flags control whether Google Test prints only test failures.
118 GTEST_DECLARE_bool_(brief);
119
120 // This flags control whether Google Test prints the elapsed time for each
121 // test.
122 GTEST_DECLARE_bool_(print_time);
123
124 // This flags control whether Google Test prints UTF8 characters as text.
125 GTEST_DECLARE_bool_(print_utf8);
126
127 // This flag specifies the random number seed.
128 GTEST_DECLARE_int32_(random_seed);
129
130 // This flag sets how many times the tests are repeated. The default value
131 // is 1. If the value is -1 the tests are repeating forever.
132 GTEST_DECLARE_int32_(repeat);
133
134 // This flag controls whether Google Test Environments are recreated for each
135 // repeat of the tests. The default value is true. If set to false the global
136 // test Environment objects are only set up once, for the first iteration, and
137 // only torn down once, for the last.
138 GTEST_DECLARE_bool_(recreate_environments_when_repeating);
139
140 // This flag controls whether Google Test includes Google Test internal
141 // stack frames in failure stack traces.
142 GTEST_DECLARE_bool_(show_internal_stack_frames);
143
144 // When this flag is specified, tests' order is randomized on every iteration.
145 GTEST_DECLARE_bool_(shuffle);
146
147 // This flag specifies the maximum number of stack frames to be
148 // printed in a failure message.
149 GTEST_DECLARE_int32_(stack_trace_depth);
150
151 // When this flag is specified, a failed assertion will throw an
152 // exception if exceptions are enabled, or exit the program with a
153 // non-zero code otherwise. For use with an external test framework.
154 GTEST_DECLARE_bool_(throw_on_failure);
155
156 // When this flag is set with a "host:port" string, on supported
157 // platforms test results are streamed to the specified port on
158 // the specified host machine.
159 GTEST_DECLARE_string_(stream_result_to);
160
161 #if GTEST_USE_OWN_FLAGFILE_FLAG_
162 GTEST_DECLARE_string_(flagfile);
163 #endif // GTEST_USE_OWN_FLAGFILE_FLAG_
164
165 namespace testing {
166
167 // Silence C4100 (unreferenced formal parameter) and 4805
168 // unsafe mix of type 'const int' and type 'const bool'
169 #ifdef _MSC_VER
170 #pragma warning(push)
171 #pragma warning(disable : 4805)
172 #pragma warning(disable : 4100)
173 #endif
174
175 // The upper limit for valid stack trace depths.
176 const int kMaxStackTraceDepth = 100;
177
178 namespace internal {
179
180 class AssertHelper;
181 class DefaultGlobalTestPartResultReporter;
182 class ExecDeathTest;
183 class NoExecDeathTest;
184 class FinalSuccessChecker;
185 class GTestFlagSaver;
186 class StreamingListenerTest;
187 class TestResultAccessor;
188 class TestEventListenersAccessor;
189 class TestEventRepeater;
190 class UnitTestRecordPropertyTestHelper;
191 class WindowsDeathTest;
192 class FuchsiaDeathTest;
193 class UnitTestImpl* GetUnitTestImpl();
194 void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
195 const std::string& message);
196 std::set<std::string>* GetIgnoredParameterizedTestSuites();
197
198 // A base class that prevents subclasses from being copyable.
199 // We do this instead of using '= delete' so as to avoid triggering warnings
200 // inside user code regarding any of our declarations.
201 class GTestNonCopyable {
202 public:
203 GTestNonCopyable() = default;
204 GTestNonCopyable(const GTestNonCopyable &) = delete;
205 GTestNonCopyable &operator=(const GTestNonCopyable &) = delete;
206 ~GTestNonCopyable() = default;
207 };
208
209 } // namespace internal
210
211 // The friend relationship of some of these classes is cyclic.
212 // If we don't forward declare them the compiler might confuse the classes
213 // in friendship clauses with same named classes on the scope.
214 class Test;
215 class TestSuite;
216
217 // Old API is still available but deprecated
218 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
219 using TestCase = TestSuite;
220 #endif
221 class TestInfo;
222 class UnitTest;
223
224 // The abstract class that all tests inherit from.
225 //
226 // In Google Test, a unit test program contains one or many TestSuites, and
227 // each TestSuite contains one or many Tests.
228 //
229 // When you define a test using the TEST macro, you don't need to
230 // explicitly derive from Test - the TEST macro automatically does
231 // this for you.
232 //
233 // The only time you derive from Test is when defining a test fixture
234 // to be used in a TEST_F. For example:
235 //
236 // class FooTest : public testing::Test {
237 // protected:
238 // void SetUp() override { ... }
239 // void TearDown() override { ... }
240 // ...
241 // };
242 //
243 // TEST_F(FooTest, Bar) { ... }
244 // TEST_F(FooTest, Baz) { ... }
245 //
246 // Test is not copyable.
247 class GTEST_API_ Test {
248 public:
249 friend class TestInfo;
250
251 // The d'tor is virtual as we intend to inherit from Test.
252 virtual ~Test();
253
254 // Sets up the stuff shared by all tests in this test suite.
255 //
256 // Google Test will call Foo::SetUpTestSuite() before running the first
257 // test in test suite Foo. Hence a sub-class can define its own
258 // SetUpTestSuite() method to shadow the one defined in the super
259 // class.
SetUpTestSuite()260 static void SetUpTestSuite() {}
261
262 // Tears down the stuff shared by all tests in this test suite.
263 //
264 // Google Test will call Foo::TearDownTestSuite() after running the last
265 // test in test suite Foo. Hence a sub-class can define its own
266 // TearDownTestSuite() method to shadow the one defined in the super
267 // class.
TearDownTestSuite()268 static void TearDownTestSuite() {}
269
270 // Legacy API is deprecated but still available. Use SetUpTestSuite and
271 // TearDownTestSuite instead.
272 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
TearDownTestCase()273 static void TearDownTestCase() {}
SetUpTestCase()274 static void SetUpTestCase() {}
275 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
276
277 // Returns true if and only if the current test has a fatal failure.
278 static bool HasFatalFailure();
279
280 // Returns true if and only if the current test has a non-fatal failure.
281 static bool HasNonfatalFailure();
282
283 // Returns true if and only if the current test was skipped.
284 static bool IsSkipped();
285
286 // Returns true if and only if the current test has a (either fatal or
287 // non-fatal) failure.
HasFailure()288 static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }
289
290 // Logs a property for the current test, test suite, or for the entire
291 // invocation of the test program when used outside of the context of a
292 // test suite. Only the last value for a given key is remembered. These
293 // are public static so they can be called from utility functions that are
294 // not members of the test fixture. Calls to RecordProperty made during
295 // lifespan of the test (from the moment its constructor starts to the
296 // moment its destructor finishes) will be output in XML as attributes of
297 // the <testcase> element. Properties recorded from fixture's
298 // SetUpTestSuite or TearDownTestSuite are logged as attributes of the
299 // corresponding <testsuite> element. Calls to RecordProperty made in the
300 // global context (before or after invocation of RUN_ALL_TESTS and from
301 // SetUp/TearDown method of Environment objects registered with Google
302 // Test) will be output as attributes of the <testsuites> element.
303 static void RecordProperty(const std::string& key, const std::string& value);
304 static void RecordProperty(const std::string& key, int64_t value);
305
306 protected:
307 // Creates a Test object.
308 Test();
309
310 // Sets up the test fixture.
311 virtual void SetUp();
312
313 // Tears down the test fixture.
314 virtual void TearDown();
315
316 private:
317 // Returns true if and only if the current test has the same fixture class
318 // as the first test in the current test suite.
319 static bool HasSameFixtureClass();
320
321 // Runs the test after the test fixture has been set up.
322 //
323 // A sub-class must implement this to define the test logic.
324 //
325 // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM.
326 // Instead, use the TEST or TEST_F macro.
327 virtual void TestBody() = 0;
328
329 // Sets up, executes, and tears down the test.
330 void Run();
331
332 // Deletes self. We deliberately pick an unusual name for this
333 // internal method to avoid clashing with names used in user TESTs.
DeleteSelf_()334 void DeleteSelf_() { delete this; }
335
336 const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;
337
338 // Often a user misspells SetUp() as Setup() and spends a long time
339 // wondering why it is never called by Google Test. The declaration of
340 // the following method is solely for catching such an error at
341 // compile time:
342 //
343 // - The return type is deliberately chosen to be not void, so it
344 // will be a conflict if void Setup() is declared in the user's
345 // test fixture.
346 //
347 // - This method is private, so it will be another compiler error
348 // if the method is called from the user's test fixture.
349 //
350 // DO NOT OVERRIDE THIS FUNCTION.
351 //
352 // If you see an error about overriding the following function or
353 // about it being private, you have mis-spelled SetUp() as Setup().
354 struct Setup_should_be_spelled_SetUp {};
Setup()355 virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; }
356
357 // We disallow copying Tests.
358 Test(const Test&) = delete;
359 Test& operator=(const Test&) = delete;
360 };
361
362 typedef internal::TimeInMillis TimeInMillis;
363
364 // A copyable object representing a user specified test property which can be
365 // output as a key/value string pair.
366 //
367 // Don't inherit from TestProperty as its destructor is not virtual.
368 class TestProperty {
369 public:
370 // C'tor. TestProperty does NOT have a default constructor.
371 // Always use this constructor (with parameters) to create a
372 // TestProperty object.
TestProperty(const std::string & a_key,const std::string & a_value)373 TestProperty(const std::string& a_key, const std::string& a_value)
374 : key_(a_key), value_(a_value) {}
375
376 // Gets the user supplied key.
key()377 const char* key() const { return key_.c_str(); }
378
379 // Gets the user supplied value.
value()380 const char* value() const { return value_.c_str(); }
381
382 // Sets a new value, overriding the one supplied in the constructor.
SetValue(const std::string & new_value)383 void SetValue(const std::string& new_value) { value_ = new_value; }
384
385 private:
386 // The key supplied by the user.
387 std::string key_;
388 // The value supplied by the user.
389 std::string value_;
390 };
391
392 // The result of a single Test. This includes a list of
393 // TestPartResults, a list of TestProperties, a count of how many
394 // death tests there are in the Test, and how much time it took to run
395 // the Test.
396 //
397 // TestResult is not copyable.
398 class GTEST_API_ TestResult {
399 public:
400 // Creates an empty TestResult.
401 TestResult();
402
403 // D'tor. Do not inherit from TestResult.
404 ~TestResult();
405
406 // Gets the number of all test parts. This is the sum of the number
407 // of successful test parts and the number of failed test parts.
408 int total_part_count() const;
409
410 // Returns the number of the test properties.
411 int test_property_count() const;
412
413 // Returns true if and only if the test passed (i.e. no test part failed).
Passed()414 bool Passed() const { return !Skipped() && !Failed(); }
415
416 // Returns true if and only if the test was skipped.
417 bool Skipped() const;
418
419 // Returns true if and only if the test failed.
420 bool Failed() const;
421
422 // Returns true if and only if the test fatally failed.
423 bool HasFatalFailure() const;
424
425 // Returns true if and only if the test has a non-fatal failure.
426 bool HasNonfatalFailure() const;
427
428 // Returns the elapsed time, in milliseconds.
elapsed_time()429 TimeInMillis elapsed_time() const { return elapsed_time_; }
430
431 // Gets the time of the test case start, in ms from the start of the
432 // UNIX epoch.
start_timestamp()433 TimeInMillis start_timestamp() const { return start_timestamp_; }
434
435 // Returns the i-th test part result among all the results. i can range from 0
436 // to total_part_count() - 1. If i is not in that range, aborts the program.
437 const TestPartResult& GetTestPartResult(int i) const;
438
439 // Returns the i-th test property. i can range from 0 to
440 // test_property_count() - 1. If i is not in that range, aborts the
441 // program.
442 const TestProperty& GetTestProperty(int i) const;
443
444 private:
445 friend class TestInfo;
446 friend class TestSuite;
447 friend class UnitTest;
448 friend class internal::DefaultGlobalTestPartResultReporter;
449 friend class internal::ExecDeathTest;
450 friend class internal::TestResultAccessor;
451 friend class internal::UnitTestImpl;
452 friend class internal::WindowsDeathTest;
453 friend class internal::FuchsiaDeathTest;
454
455 // Gets the vector of TestPartResults.
test_part_results()456 const std::vector<TestPartResult>& test_part_results() const {
457 return test_part_results_;
458 }
459
460 // Gets the vector of TestProperties.
test_properties()461 const std::vector<TestProperty>& test_properties() const {
462 return test_properties_;
463 }
464
465 // Sets the start time.
set_start_timestamp(TimeInMillis start)466 void set_start_timestamp(TimeInMillis start) { start_timestamp_ = start; }
467
468 // Sets the elapsed time.
set_elapsed_time(TimeInMillis elapsed)469 void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
470
471 // Adds a test property to the list. The property is validated and may add
472 // a non-fatal failure if invalid (e.g., if it conflicts with reserved
473 // key names). If a property is already recorded for the same key, the
474 // value will be updated, rather than storing multiple values for the same
475 // key. xml_element specifies the element for which the property is being
476 // recorded and is used for validation.
477 void RecordProperty(const std::string& xml_element,
478 const TestProperty& test_property);
479
480 // Adds a failure if the key is a reserved attribute of Google Test
481 // testsuite tags. Returns true if the property is valid.
482 // FIXME: Validate attribute names are legal and human readable.
483 static bool ValidateTestProperty(const std::string& xml_element,
484 const TestProperty& test_property);
485
486 // Adds a test part result to the list.
487 void AddTestPartResult(const TestPartResult& test_part_result);
488
489 // Returns the death test count.
death_test_count()490 int death_test_count() const { return death_test_count_; }
491
492 // Increments the death test count, returning the new count.
increment_death_test_count()493 int increment_death_test_count() { return ++death_test_count_; }
494
495 // Clears the test part results.
496 void ClearTestPartResults();
497
498 // Clears the object.
499 void Clear();
500
501 // Protects mutable state of the property vector and of owned
502 // properties, whose values may be updated.
503 internal::Mutex test_properties_mutex_;
504
505 // The vector of TestPartResults
506 std::vector<TestPartResult> test_part_results_;
507 // The vector of TestProperties
508 std::vector<TestProperty> test_properties_;
509 // Running count of death tests.
510 int death_test_count_;
511 // The start time, in milliseconds since UNIX Epoch.
512 TimeInMillis start_timestamp_;
513 // The elapsed time, in milliseconds.
514 TimeInMillis elapsed_time_;
515
516 // We disallow copying TestResult.
517 TestResult(const TestResult&) = delete;
518 TestResult& operator=(const TestResult&) = delete;
519 }; // class TestResult
520
521 // A TestInfo object stores the following information about a test:
522 //
523 // Test suite name
524 // Test name
525 // Whether the test should be run
526 // A function pointer that creates the test object when invoked
527 // Test result
528 //
529 // The constructor of TestInfo registers itself with the UnitTest
530 // singleton such that the RUN_ALL_TESTS() macro knows which tests to
531 // run.
532 class GTEST_API_ TestInfo {
533 public:
534 // Destructs a TestInfo object. This function is not virtual, so
535 // don't inherit from TestInfo.
536 ~TestInfo();
537
538 // Returns the test suite name.
test_suite_name()539 const char* test_suite_name() const { return test_suite_name_.c_str(); }
540
541 // Legacy API is deprecated but still available
542 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
test_case_name()543 const char* test_case_name() const { return test_suite_name(); }
544 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
545
546 // Returns the test name.
name()547 const char* name() const { return name_.c_str(); }
548
549 // Returns the name of the parameter type, or NULL if this is not a typed
550 // or a type-parameterized test.
type_param()551 const char* type_param() const {
552 if (type_param_.get() != nullptr) return type_param_->c_str();
553 return nullptr;
554 }
555
556 // Returns the text representation of the value parameter, or NULL if this
557 // is not a value-parameterized test.
value_param()558 const char* value_param() const {
559 if (value_param_.get() != nullptr) return value_param_->c_str();
560 return nullptr;
561 }
562
563 // Returns the file name where this test is defined.
file()564 const char* file() const { return location_.file.c_str(); }
565
566 // Returns the line where this test is defined.
line()567 int line() const { return location_.line; }
568
569 // Return true if this test should not be run because it's in another shard.
is_in_another_shard()570 bool is_in_another_shard() const { return is_in_another_shard_; }
571
572 // Returns true if this test should run, that is if the test is not
573 // disabled (or it is disabled but the also_run_disabled_tests flag has
574 // been specified) and its full name matches the user-specified filter.
575 //
576 // Google Test allows the user to filter the tests by their full names.
577 // The full name of a test Bar in test suite Foo is defined as
578 // "Foo.Bar". Only the tests that match the filter will run.
579 //
580 // A filter is a colon-separated list of glob (not regex) patterns,
581 // optionally followed by a '-' and a colon-separated list of
582 // negative patterns (tests to exclude). A test is run if it
583 // matches one of the positive patterns and does not match any of
584 // the negative patterns.
585 //
586 // For example, *A*:Foo.* is a filter that matches any string that
587 // contains the character 'A' or starts with "Foo.".
should_run()588 bool should_run() const { return should_run_; }
589
590 // Returns true if and only if this test will appear in the XML report.
is_reportable()591 bool is_reportable() const {
592 // The XML report includes tests matching the filter, excluding those
593 // run in other shards.
594 return matches_filter_ && !is_in_another_shard_;
595 }
596
597 // Returns the result of the test.
result()598 const TestResult* result() const { return &result_; }
599
600 private:
601 #if GTEST_HAS_DEATH_TEST
602 friend class internal::DefaultDeathTestFactory;
603 #endif // GTEST_HAS_DEATH_TEST
604 friend class Test;
605 friend class TestSuite;
606 friend class internal::UnitTestImpl;
607 friend class internal::StreamingListenerTest;
608 friend TestInfo* internal::MakeAndRegisterTestInfo(
609 const char* test_suite_name, const char* name, const char* type_param,
610 const char* value_param, internal::CodeLocation code_location,
611 internal::TypeId fixture_class_id, internal::SetUpTestSuiteFunc set_up_tc,
612 internal::TearDownTestSuiteFunc tear_down_tc,
613 internal::TestFactoryBase* factory);
614
615 // Constructs a TestInfo object. The newly constructed instance assumes
616 // ownership of the factory object.
617 TestInfo(const std::string& test_suite_name, const std::string& name,
618 const char* a_type_param, // NULL if not a type-parameterized test
619 const char* a_value_param, // NULL if not a value-parameterized test
620 internal::CodeLocation a_code_location,
621 internal::TypeId fixture_class_id,
622 internal::TestFactoryBase* factory);
623
624 // Increments the number of death tests encountered in this test so
625 // far.
increment_death_test_count()626 int increment_death_test_count() {
627 return result_.increment_death_test_count();
628 }
629
630 // Creates the test object, runs it, records its result, and then
631 // deletes it.
632 void Run();
633
634 // Skip and records the test result for this object.
635 void Skip();
636
ClearTestResult(TestInfo * test_info)637 static void ClearTestResult(TestInfo* test_info) {
638 test_info->result_.Clear();
639 }
640
641 // These fields are immutable properties of the test.
642 const std::string test_suite_name_; // test suite name
643 const std::string name_; // Test name
644 // Name of the parameter type, or NULL if this is not a typed or a
645 // type-parameterized test.
646 const std::unique_ptr<const ::std::string> type_param_;
647 // Text representation of the value parameter, or NULL if this is not a
648 // value-parameterized test.
649 const std::unique_ptr<const ::std::string> value_param_;
650 internal::CodeLocation location_;
651 const internal::TypeId fixture_class_id_; // ID of the test fixture class
652 bool should_run_; // True if and only if this test should run
653 bool is_disabled_; // True if and only if this test is disabled
654 bool matches_filter_; // True if this test matches the
655 // user-specified filter.
656 bool is_in_another_shard_; // Will be run in another shard.
657 internal::TestFactoryBase* const factory_; // The factory that creates
658 // the test object
659
660 // This field is mutable and needs to be reset before running the
661 // test for the second time.
662 TestResult result_;
663
664 TestInfo(const TestInfo&) = delete;
665 TestInfo& operator=(const TestInfo&) = delete;
666 };
667
668 // A test suite, which consists of a vector of TestInfos.
669 //
670 // TestSuite is not copyable.
671 class GTEST_API_ TestSuite {
672 public:
673 // Creates a TestSuite with the given name.
674 //
675 // TestSuite does NOT have a default constructor. Always use this
676 // constructor to create a TestSuite object.
677 //
678 // Arguments:
679 //
680 // name: name of the test suite
681 // a_type_param: the name of the test's type parameter, or NULL if
682 // this is not a type-parameterized test.
683 // set_up_tc: pointer to the function that sets up the test suite
684 // tear_down_tc: pointer to the function that tears down the test suite
685 TestSuite(const char* name, const char* a_type_param,
686 internal::SetUpTestSuiteFunc set_up_tc,
687 internal::TearDownTestSuiteFunc tear_down_tc);
688
689 // Destructor of TestSuite.
690 virtual ~TestSuite();
691
692 // Gets the name of the TestSuite.
name()693 const char* name() const { return name_.c_str(); }
694
695 // Returns the name of the parameter type, or NULL if this is not a
696 // type-parameterized test suite.
type_param()697 const char* type_param() const {
698 if (type_param_.get() != nullptr) return type_param_->c_str();
699 return nullptr;
700 }
701
702 // Returns true if any test in this test suite should run.
should_run()703 bool should_run() const { return should_run_; }
704
705 // Gets the number of successful tests in this test suite.
706 int successful_test_count() const;
707
708 // Gets the number of skipped tests in this test suite.
709 int skipped_test_count() const;
710
711 // Gets the number of failed tests in this test suite.
712 int failed_test_count() const;
713
714 // Gets the number of disabled tests that will be reported in the XML report.
715 int reportable_disabled_test_count() const;
716
717 // Gets the number of disabled tests in this test suite.
718 int disabled_test_count() const;
719
720 // Gets the number of tests to be printed in the XML report.
721 int reportable_test_count() const;
722
723 // Get the number of tests in this test suite that should run.
724 int test_to_run_count() const;
725
726 // Gets the number of all tests in this test suite.
727 int total_test_count() const;
728
729 // Returns true if and only if the test suite passed.
Passed()730 bool Passed() const { return !Failed(); }
731
732 // Returns true if and only if the test suite failed.
Failed()733 bool Failed() const {
734 return failed_test_count() > 0 || ad_hoc_test_result().Failed();
735 }
736
737 // Returns the elapsed time, in milliseconds.
elapsed_time()738 TimeInMillis elapsed_time() const { return elapsed_time_; }
739
740 // Gets the time of the test suite start, in ms from the start of the
741 // UNIX epoch.
start_timestamp()742 TimeInMillis start_timestamp() const { return start_timestamp_; }
743
744 // Returns the i-th test among all the tests. i can range from 0 to
745 // total_test_count() - 1. If i is not in that range, returns NULL.
746 const TestInfo* GetTestInfo(int i) const;
747
748 // Returns the TestResult that holds test properties recorded during
749 // execution of SetUpTestSuite and TearDownTestSuite.
ad_hoc_test_result()750 const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; }
751
752 private:
753 friend class Test;
754 friend class internal::UnitTestImpl;
755
756 // Gets the (mutable) vector of TestInfos in this TestSuite.
test_info_list()757 std::vector<TestInfo*>& test_info_list() { return test_info_list_; }
758
759 // Gets the (immutable) vector of TestInfos in this TestSuite.
test_info_list()760 const std::vector<TestInfo*>& test_info_list() const {
761 return test_info_list_;
762 }
763
764 // Returns the i-th test among all the tests. i can range from 0 to
765 // total_test_count() - 1. If i is not in that range, returns NULL.
766 TestInfo* GetMutableTestInfo(int i);
767
768 // Sets the should_run member.
set_should_run(bool should)769 void set_should_run(bool should) { should_run_ = should; }
770
771 // Adds a TestInfo to this test suite. Will delete the TestInfo upon
772 // destruction of the TestSuite object.
773 void AddTestInfo(TestInfo* test_info);
774
775 // Clears the results of all tests in this test suite.
776 void ClearResult();
777
778 // Clears the results of all tests in the given test suite.
ClearTestSuiteResult(TestSuite * test_suite)779 static void ClearTestSuiteResult(TestSuite* test_suite) {
780 test_suite->ClearResult();
781 }
782
783 // Runs every test in this TestSuite.
784 void Run();
785
786 // Skips the execution of tests under this TestSuite
787 void Skip();
788
789 // Runs SetUpTestSuite() for this TestSuite. This wrapper is needed
790 // for catching exceptions thrown from SetUpTestSuite().
RunSetUpTestSuite()791 void RunSetUpTestSuite() {
792 if (set_up_tc_ != nullptr) {
793 (*set_up_tc_)();
794 }
795 }
796
797 // Runs TearDownTestSuite() for this TestSuite. This wrapper is
798 // needed for catching exceptions thrown from TearDownTestSuite().
RunTearDownTestSuite()799 void RunTearDownTestSuite() {
800 if (tear_down_tc_ != nullptr) {
801 (*tear_down_tc_)();
802 }
803 }
804
805 // Returns true if and only if test passed.
TestPassed(const TestInfo * test_info)806 static bool TestPassed(const TestInfo* test_info) {
807 return test_info->should_run() && test_info->result()->Passed();
808 }
809
810 // Returns true if and only if test skipped.
TestSkipped(const TestInfo * test_info)811 static bool TestSkipped(const TestInfo* test_info) {
812 return test_info->should_run() && test_info->result()->Skipped();
813 }
814
815 // Returns true if and only if test failed.
TestFailed(const TestInfo * test_info)816 static bool TestFailed(const TestInfo* test_info) {
817 return test_info->should_run() && test_info->result()->Failed();
818 }
819
820 // Returns true if and only if the test is disabled and will be reported in
821 // the XML report.
TestReportableDisabled(const TestInfo * test_info)822 static bool TestReportableDisabled(const TestInfo* test_info) {
823 return test_info->is_reportable() && test_info->is_disabled_;
824 }
825
826 // Returns true if and only if test is disabled.
TestDisabled(const TestInfo * test_info)827 static bool TestDisabled(const TestInfo* test_info) {
828 return test_info->is_disabled_;
829 }
830
831 // Returns true if and only if this test will appear in the XML report.
TestReportable(const TestInfo * test_info)832 static bool TestReportable(const TestInfo* test_info) {
833 return test_info->is_reportable();
834 }
835
836 // Returns true if the given test should run.
ShouldRunTest(const TestInfo * test_info)837 static bool ShouldRunTest(const TestInfo* test_info) {
838 return test_info->should_run();
839 }
840
841 // Shuffles the tests in this test suite.
842 void ShuffleTests(internal::Random* random);
843
844 // Restores the test order to before the first shuffle.
845 void UnshuffleTests();
846
847 // Name of the test suite.
848 std::string name_;
849 // Name of the parameter type, or NULL if this is not a typed or a
850 // type-parameterized test.
851 const std::unique_ptr<const ::std::string> type_param_;
852 // The vector of TestInfos in their original order. It owns the
853 // elements in the vector.
854 std::vector<TestInfo*> test_info_list_;
855 // Provides a level of indirection for the test list to allow easy
856 // shuffling and restoring the test order. The i-th element in this
857 // vector is the index of the i-th test in the shuffled test list.
858 std::vector<int> test_indices_;
859 // Pointer to the function that sets up the test suite.
860 internal::SetUpTestSuiteFunc set_up_tc_;
861 // Pointer to the function that tears down the test suite.
862 internal::TearDownTestSuiteFunc tear_down_tc_;
863 // True if and only if any test in this test suite should run.
864 bool should_run_;
865 // The start time, in milliseconds since UNIX Epoch.
866 TimeInMillis start_timestamp_;
867 // Elapsed time, in milliseconds.
868 TimeInMillis elapsed_time_;
869 // Holds test properties recorded during execution of SetUpTestSuite and
870 // TearDownTestSuite.
871 TestResult ad_hoc_test_result_;
872
873 // We disallow copying TestSuites.
874 TestSuite(const TestSuite&) = delete;
875 TestSuite& operator=(const TestSuite&) = delete;
876 };
877
878 // An Environment object is capable of setting up and tearing down an
879 // environment. You should subclass this to define your own
880 // environment(s).
881 //
882 // An Environment object does the set-up and tear-down in virtual
883 // methods SetUp() and TearDown() instead of the constructor and the
884 // destructor, as:
885 //
886 // 1. You cannot safely throw from a destructor. This is a problem
887 // as in some cases Google Test is used where exceptions are enabled, and
888 // we may want to implement ASSERT_* using exceptions where they are
889 // available.
890 // 2. You cannot use ASSERT_* directly in a constructor or
891 // destructor.
892 class Environment {
893 public:
894 // The d'tor is virtual as we need to subclass Environment.
~Environment()895 virtual ~Environment() {}
896
897 // Override this to define how to set up the environment.
SetUp()898 virtual void SetUp() {}
899
900 // Override this to define how to tear down the environment.
TearDown()901 virtual void TearDown() {}
902
903 private:
904 // If you see an error about overriding the following function or
905 // about it being private, you have mis-spelled SetUp() as Setup().
906 struct Setup_should_be_spelled_SetUp {};
Setup()907 virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; }
908 };
909
910 #if GTEST_HAS_EXCEPTIONS
911
912 // Exception which can be thrown from TestEventListener::OnTestPartResult.
913 class GTEST_API_ AssertionException
914 : public internal::GoogleTestFailureException {
915 public:
AssertionException(const TestPartResult & result)916 explicit AssertionException(const TestPartResult& result)
917 : GoogleTestFailureException(result) {}
918 };
919
920 #endif // GTEST_HAS_EXCEPTIONS
921
922 // The interface for tracing execution of tests. The methods are organized in
923 // the order the corresponding events are fired.
924 class TestEventListener {
925 public:
~TestEventListener()926 virtual ~TestEventListener() {}
927
928 // Fired before any test activity starts.
929 virtual void OnTestProgramStart(const UnitTest& unit_test) = 0;
930
931 // Fired before each iteration of tests starts. There may be more than
932 // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration
933 // index, starting from 0.
934 virtual void OnTestIterationStart(const UnitTest& unit_test,
935 int iteration) = 0;
936
937 // Fired before environment set-up for each iteration of tests starts.
938 virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0;
939
940 // Fired after environment set-up for each iteration of tests ends.
941 virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0;
942
943 // Fired before the test suite starts.
OnTestSuiteStart(const TestSuite &)944 virtual void OnTestSuiteStart(const TestSuite& /*test_suite*/) {}
945
946 // Legacy API is deprecated but still available
947 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
OnTestCaseStart(const TestCase &)948 virtual void OnTestCaseStart(const TestCase& /*test_case*/) {}
949 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
950
951 // Fired before the test starts.
952 virtual void OnTestStart(const TestInfo& test_info) = 0;
953
954 // Fired when a test is disabled
OnTestDisabled(const TestInfo &)955 virtual void OnTestDisabled(const TestInfo& /*test_info*/) {}
956
957 // Fired after a failed assertion or a SUCCEED() invocation.
958 // If you want to throw an exception from this function to skip to the next
959 // TEST, it must be AssertionException defined above, or inherited from it.
960 virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0;
961
962 // Fired after the test ends.
963 virtual void OnTestEnd(const TestInfo& test_info) = 0;
964
965 // Fired after the test suite ends.
OnTestSuiteEnd(const TestSuite &)966 virtual void OnTestSuiteEnd(const TestSuite& /*test_suite*/) {}
967
968 // Legacy API is deprecated but still available
969 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
OnTestCaseEnd(const TestCase &)970 virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {}
971 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
972
973 // Fired before environment tear-down for each iteration of tests starts.
974 virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0;
975
976 // Fired after environment tear-down for each iteration of tests ends.
977 virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0;
978
979 // Fired after each iteration of tests finishes.
980 virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration) = 0;
981
982 // Fired after all test activities have ended.
983 virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0;
984 };
985
986 // The convenience class for users who need to override just one or two
987 // methods and are not concerned that a possible change to a signature of
988 // the methods they override will not be caught during the build. For
989 // comments about each method please see the definition of TestEventListener
990 // above.
991 class EmptyTestEventListener : public TestEventListener {
992 public:
OnTestProgramStart(const UnitTest &)993 void OnTestProgramStart(const UnitTest& /*unit_test*/) override {}
OnTestIterationStart(const UnitTest &,int)994 void OnTestIterationStart(const UnitTest& /*unit_test*/,
995 int /*iteration*/) override {}
OnEnvironmentsSetUpStart(const UnitTest &)996 void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {}
OnEnvironmentsSetUpEnd(const UnitTest &)997 void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {}
OnTestSuiteStart(const TestSuite &)998 void OnTestSuiteStart(const TestSuite& /*test_suite*/) override {}
999 // Legacy API is deprecated but still available
1000 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
OnTestCaseStart(const TestCase &)1001 void OnTestCaseStart(const TestCase& /*test_case*/) override {}
1002 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1003
OnTestStart(const TestInfo &)1004 void OnTestStart(const TestInfo& /*test_info*/) override {}
OnTestDisabled(const TestInfo &)1005 void OnTestDisabled(const TestInfo& /*test_info*/) override {}
OnTestPartResult(const TestPartResult &)1006 void OnTestPartResult(const TestPartResult& /*test_part_result*/) override {}
OnTestEnd(const TestInfo &)1007 void OnTestEnd(const TestInfo& /*test_info*/) override {}
OnTestSuiteEnd(const TestSuite &)1008 void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {}
1009 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
OnTestCaseEnd(const TestCase &)1010 void OnTestCaseEnd(const TestCase& /*test_case*/) override {}
1011 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1012
OnEnvironmentsTearDownStart(const UnitTest &)1013 void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {}
OnEnvironmentsTearDownEnd(const UnitTest &)1014 void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {}
OnTestIterationEnd(const UnitTest &,int)1015 void OnTestIterationEnd(const UnitTest& /*unit_test*/,
1016 int /*iteration*/) override {}
OnTestProgramEnd(const UnitTest &)1017 void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {}
1018 };
1019
1020 // TestEventListeners lets users add listeners to track events in Google Test.
1021 class GTEST_API_ TestEventListeners {
1022 public:
1023 TestEventListeners();
1024 ~TestEventListeners();
1025
1026 // Appends an event listener to the end of the list. Google Test assumes
1027 // the ownership of the listener (i.e. it will delete the listener when
1028 // the test program finishes).
1029 void Append(TestEventListener* listener);
1030
1031 // Removes the given event listener from the list and returns it. It then
1032 // becomes the caller's responsibility to delete the listener. Returns
1033 // NULL if the listener is not found in the list.
1034 TestEventListener* Release(TestEventListener* listener);
1035
1036 // Returns the standard listener responsible for the default console
1037 // output. Can be removed from the listeners list to shut down default
1038 // console output. Note that removing this object from the listener list
1039 // with Release transfers its ownership to the caller and makes this
1040 // function return NULL the next time.
default_result_printer()1041 TestEventListener* default_result_printer() const {
1042 return default_result_printer_;
1043 }
1044
1045 // Returns the standard listener responsible for the default XML output
1046 // controlled by the --gtest_output=xml flag. Can be removed from the
1047 // listeners list by users who want to shut down the default XML output
1048 // controlled by this flag and substitute it with custom one. Note that
1049 // removing this object from the listener list with Release transfers its
1050 // ownership to the caller and makes this function return NULL the next
1051 // time.
default_xml_generator()1052 TestEventListener* default_xml_generator() const {
1053 return default_xml_generator_;
1054 }
1055
1056 private:
1057 friend class TestSuite;
1058 friend class TestInfo;
1059 friend class internal::DefaultGlobalTestPartResultReporter;
1060 friend class internal::NoExecDeathTest;
1061 friend class internal::TestEventListenersAccessor;
1062 friend class internal::UnitTestImpl;
1063
1064 // Returns repeater that broadcasts the TestEventListener events to all
1065 // subscribers.
1066 TestEventListener* repeater();
1067
1068 // Sets the default_result_printer attribute to the provided listener.
1069 // The listener is also added to the listener list and previous
1070 // default_result_printer is removed from it and deleted. The listener can
1071 // also be NULL in which case it will not be added to the list. Does
1072 // nothing if the previous and the current listener objects are the same.
1073 void SetDefaultResultPrinter(TestEventListener* listener);
1074
1075 // Sets the default_xml_generator attribute to the provided listener. The
1076 // listener is also added to the listener list and previous
1077 // default_xml_generator is removed from it and deleted. The listener can
1078 // also be NULL in which case it will not be added to the list. Does
1079 // nothing if the previous and the current listener objects are the same.
1080 void SetDefaultXmlGenerator(TestEventListener* listener);
1081
1082 // Controls whether events will be forwarded by the repeater to the
1083 // listeners in the list.
1084 bool EventForwardingEnabled() const;
1085 void SuppressEventForwarding();
1086
1087 // The actual list of listeners.
1088 internal::TestEventRepeater* repeater_;
1089 // Listener responsible for the standard result output.
1090 TestEventListener* default_result_printer_;
1091 // Listener responsible for the creation of the XML output file.
1092 TestEventListener* default_xml_generator_;
1093
1094 // We disallow copying TestEventListeners.
1095 TestEventListeners(const TestEventListeners&) = delete;
1096 TestEventListeners& operator=(const TestEventListeners&) = delete;
1097 };
1098
1099 // A UnitTest consists of a vector of TestSuites.
1100 //
1101 // This is a singleton class. The only instance of UnitTest is
1102 // created when UnitTest::GetInstance() is first called. This
1103 // instance is never deleted.
1104 //
1105 // UnitTest is not copyable.
1106 //
1107 // This class is thread-safe as long as the methods are called
1108 // according to their specification.
1109 class GTEST_API_ UnitTest {
1110 public:
1111 // Gets the singleton UnitTest object. The first time this method
1112 // is called, a UnitTest object is constructed and returned.
1113 // Consecutive calls will return the same object.
1114 static UnitTest* GetInstance();
1115
1116 // Runs all tests in this UnitTest object and prints the result.
1117 // Returns 0 if successful, or 1 otherwise.
1118 //
1119 // This method can only be called from the main thread.
1120 //
1121 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1122 int Run() GTEST_MUST_USE_RESULT_;
1123
1124 // Returns the working directory when the first TEST() or TEST_F()
1125 // was executed. The UnitTest object owns the string.
1126 const char* original_working_dir() const;
1127
1128 // Returns the TestSuite object for the test that's currently running,
1129 // or NULL if no test is running.
1130 const TestSuite* current_test_suite() const GTEST_LOCK_EXCLUDED_(mutex_);
1131
1132 // Legacy API is still available but deprecated
1133 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1134 const TestCase* current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_);
1135 #endif
1136
1137 // Returns the TestInfo object for the test that's currently running,
1138 // or NULL if no test is running.
1139 const TestInfo* current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_);
1140
1141 // Returns the random seed used at the start of the current test run.
1142 int random_seed() const;
1143
1144 // Returns the ParameterizedTestSuiteRegistry object used to keep track of
1145 // value-parameterized tests and instantiate and register them.
1146 //
1147 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1148 internal::ParameterizedTestSuiteRegistry& parameterized_test_registry()
1149 GTEST_LOCK_EXCLUDED_(mutex_);
1150
1151 // Gets the number of successful test suites.
1152 int successful_test_suite_count() const;
1153
1154 // Gets the number of failed test suites.
1155 int failed_test_suite_count() const;
1156
1157 // Gets the number of all test suites.
1158 int total_test_suite_count() const;
1159
1160 // Gets the number of all test suites that contain at least one test
1161 // that should run.
1162 int test_suite_to_run_count() const;
1163
1164 // Legacy API is deprecated but still available
1165 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1166 int successful_test_case_count() const;
1167 int failed_test_case_count() const;
1168 int total_test_case_count() const;
1169 int test_case_to_run_count() const;
1170 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1171
1172 // Gets the number of successful tests.
1173 int successful_test_count() const;
1174
1175 // Gets the number of skipped tests.
1176 int skipped_test_count() const;
1177
1178 // Gets the number of failed tests.
1179 int failed_test_count() const;
1180
1181 // Gets the number of disabled tests that will be reported in the XML report.
1182 int reportable_disabled_test_count() const;
1183
1184 // Gets the number of disabled tests.
1185 int disabled_test_count() const;
1186
1187 // Gets the number of tests to be printed in the XML report.
1188 int reportable_test_count() const;
1189
1190 // Gets the number of all tests.
1191 int total_test_count() const;
1192
1193 // Gets the number of tests that should run.
1194 int test_to_run_count() const;
1195
1196 // Gets the time of the test program start, in ms from the start of the
1197 // UNIX epoch.
1198 TimeInMillis start_timestamp() const;
1199
1200 // Gets the elapsed time, in milliseconds.
1201 TimeInMillis elapsed_time() const;
1202
1203 // Returns true if and only if the unit test passed (i.e. all test suites
1204 // passed).
1205 bool Passed() const;
1206
1207 // Returns true if and only if the unit test failed (i.e. some test suite
1208 // failed or something outside of all tests failed).
1209 bool Failed() const;
1210
1211 // Gets the i-th test suite among all the test suites. i can range from 0 to
1212 // total_test_suite_count() - 1. If i is not in that range, returns NULL.
1213 const TestSuite* GetTestSuite(int i) const;
1214
1215 // Legacy API is deprecated but still available
1216 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1217 const TestCase* GetTestCase(int i) const;
1218 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
1219
1220 // Returns the TestResult containing information on test failures and
1221 // properties logged outside of individual test suites.
1222 const TestResult& ad_hoc_test_result() const;
1223
1224 // Returns the list of event listeners that can be used to track events
1225 // inside Google Test.
1226 TestEventListeners& listeners();
1227
1228 private:
1229 // Registers and returns a global test environment. When a test
1230 // program is run, all global test environments will be set-up in
1231 // the order they were registered. After all tests in the program
1232 // have finished, all global test environments will be torn-down in
1233 // the *reverse* order they were registered.
1234 //
1235 // The UnitTest object takes ownership of the given environment.
1236 //
1237 // This method can only be called from the main thread.
1238 Environment* AddEnvironment(Environment* env);
1239
1240 // Adds a TestPartResult to the current TestResult object. All
1241 // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)
1242 // eventually call this to report their results. The user code
1243 // should use the assertion macros instead of calling this directly.
1244 void AddTestPartResult(TestPartResult::Type result_type,
1245 const char* file_name, int line_number,
1246 const std::string& message,
1247 const std::string& os_stack_trace)
1248 GTEST_LOCK_EXCLUDED_(mutex_);
1249
1250 // Adds a TestProperty to the current TestResult object when invoked from
1251 // inside a test, to current TestSuite's ad_hoc_test_result_ when invoked
1252 // from SetUpTestSuite or TearDownTestSuite, or to the global property set
1253 // when invoked elsewhere. If the result already contains a property with
1254 // the same key, the value will be updated.
1255 void RecordProperty(const std::string& key, const std::string& value);
1256
1257 // Gets the i-th test suite among all the test suites. i can range from 0 to
1258 // total_test_suite_count() - 1. If i is not in that range, returns NULL.
1259 TestSuite* GetMutableTestSuite(int i);
1260
1261 // Accessors for the implementation object.
impl()1262 internal::UnitTestImpl* impl() { return impl_; }
impl()1263 const internal::UnitTestImpl* impl() const { return impl_; }
1264
1265 // These classes and functions are friends as they need to access private
1266 // members of UnitTest.
1267 friend class ScopedTrace;
1268 friend class Test;
1269 friend class internal::AssertHelper;
1270 friend class internal::StreamingListenerTest;
1271 friend class internal::UnitTestRecordPropertyTestHelper;
1272 friend Environment* AddGlobalTestEnvironment(Environment* env);
1273 friend std::set<std::string>* internal::GetIgnoredParameterizedTestSuites();
1274 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
1275 friend void internal::ReportFailureInUnknownLocation(
1276 TestPartResult::Type result_type, const std::string& message);
1277
1278 // Creates an empty UnitTest.
1279 UnitTest();
1280
1281 // D'tor
1282 virtual ~UnitTest();
1283
1284 // Pushes a trace defined by SCOPED_TRACE() on to the per-thread
1285 // Google Test trace stack.
1286 void PushGTestTrace(const internal::TraceInfo& trace)
1287 GTEST_LOCK_EXCLUDED_(mutex_);
1288
1289 // Pops a trace from the per-thread Google Test trace stack.
1290 void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_);
1291
1292 // Protects mutable state in *impl_. This is mutable as some const
1293 // methods need to lock it too.
1294 mutable internal::Mutex mutex_;
1295
1296 // Opaque implementation object. This field is never changed once
1297 // the object is constructed. We don't mark it as const here, as
1298 // doing so will cause a warning in the constructor of UnitTest.
1299 // Mutable state in *impl_ is protected by mutex_.
1300 internal::UnitTestImpl* impl_;
1301
1302 // We disallow copying UnitTest.
1303 UnitTest(const UnitTest&) = delete;
1304 UnitTest& operator=(const UnitTest&) = delete;
1305 };
1306
1307 // A convenient wrapper for adding an environment for the test
1308 // program.
1309 //
1310 // You should call this before RUN_ALL_TESTS() is called, probably in
1311 // main(). If you use gtest_main, you need to call this before main()
1312 // starts for it to take effect. For example, you can define a global
1313 // variable like this:
1314 //
1315 // testing::Environment* const foo_env =
1316 // testing::AddGlobalTestEnvironment(new FooEnvironment);
1317 //
1318 // However, we strongly recommend you to write your own main() and
1319 // call AddGlobalTestEnvironment() there, as relying on initialization
1320 // of global variables makes the code harder to read and may cause
1321 // problems when you register multiple environments from different
1322 // translation units and the environments have dependencies among them
1323 // (remember that the compiler doesn't guarantee the order in which
1324 // global variables from different translation units are initialized).
AddGlobalTestEnvironment(Environment * env)1325 inline Environment* AddGlobalTestEnvironment(Environment* env) {
1326 return UnitTest::GetInstance()->AddEnvironment(env);
1327 }
1328
1329 // Initializes Google Test. This must be called before calling
1330 // RUN_ALL_TESTS(). In particular, it parses a command line for the
1331 // flags that Google Test recognizes. Whenever a Google Test flag is
1332 // seen, it is removed from argv, and *argc is decremented.
1333 //
1334 // No value is returned. Instead, the Google Test flag variables are
1335 // updated.
1336 //
1337 // Calling the function for the second time has no user-visible effect.
1338 GTEST_API_ void InitGoogleTest(int* argc, char** argv);
1339
1340 // This overloaded version can be used in Windows programs compiled in
1341 // UNICODE mode.
1342 GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv);
1343
1344 // This overloaded version can be used on Arduino/embedded platforms where
1345 // there is no argc/argv.
1346 GTEST_API_ void InitGoogleTest();
1347
1348 namespace internal {
1349
1350 // Separate the error generating code from the code path to reduce the stack
1351 // frame size of CmpHelperEQ. This helps reduce the overhead of some sanitizers
1352 // when calling EXPECT_* in a tight loop.
1353 template <typename T1, typename T2>
CmpHelperEQFailure(const char * lhs_expression,const char * rhs_expression,const T1 & lhs,const T2 & rhs)1354 AssertionResult CmpHelperEQFailure(const char* lhs_expression,
1355 const char* rhs_expression, const T1& lhs,
1356 const T2& rhs) {
1357 return EqFailure(lhs_expression, rhs_expression,
1358 FormatForComparisonFailureMessage(lhs, rhs),
1359 FormatForComparisonFailureMessage(rhs, lhs), false);
1360 }
1361
1362 // This block of code defines operator==/!=
1363 // to block lexical scope lookup.
1364 // It prevents using invalid operator==/!= defined at namespace scope.
1365 struct faketype {};
1366 inline bool operator==(faketype, faketype) { return true; }
1367 inline bool operator!=(faketype, faketype) { return false; }
1368
1369 // The helper function for {ASSERT|EXPECT}_EQ.
1370 template <typename T1, typename T2>
CmpHelperEQ(const char * lhs_expression,const char * rhs_expression,const T1 & lhs,const T2 & rhs)1371 AssertionResult CmpHelperEQ(const char* lhs_expression,
1372 const char* rhs_expression, const T1& lhs,
1373 const T2& rhs) {
1374 if (lhs == rhs) {
1375 return AssertionSuccess();
1376 }
1377
1378 return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs);
1379 }
1380
1381 class EqHelper {
1382 public:
1383 // This templatized version is for the general case.
1384 template <
1385 typename T1, typename T2,
1386 // Disable this overload for cases where one argument is a pointer
1387 // and the other is the null pointer constant.
1388 typename std::enable_if<!std::is_integral<T1>::value ||
1389 !std::is_pointer<T2>::value>::type* = nullptr>
Compare(const char * lhs_expression,const char * rhs_expression,const T1 & lhs,const T2 & rhs)1390 static AssertionResult Compare(const char* lhs_expression,
1391 const char* rhs_expression, const T1& lhs,
1392 const T2& rhs) {
1393 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1394 }
1395
1396 // With this overloaded version, we allow anonymous enums to be used
1397 // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous
1398 // enums can be implicitly cast to BiggestInt.
1399 //
1400 // Even though its body looks the same as the above version, we
1401 // cannot merge the two, as it will make anonymous enums unhappy.
Compare(const char * lhs_expression,const char * rhs_expression,BiggestInt lhs,BiggestInt rhs)1402 static AssertionResult Compare(const char* lhs_expression,
1403 const char* rhs_expression, BiggestInt lhs,
1404 BiggestInt rhs) {
1405 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1406 }
1407
1408 template <typename T>
Compare(const char * lhs_expression,const char * rhs_expression,std::nullptr_t,T * rhs)1409 static AssertionResult Compare(
1410 const char* lhs_expression, const char* rhs_expression,
1411 // Handle cases where '0' is used as a null pointer literal.
1412 std::nullptr_t /* lhs */, T* rhs) {
1413 // We already know that 'lhs' is a null pointer.
1414 return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(nullptr),
1415 rhs);
1416 }
1417 };
1418
1419 // Separate the error generating code from the code path to reduce the stack
1420 // frame size of CmpHelperOP. This helps reduce the overhead of some sanitizers
1421 // when calling EXPECT_OP in a tight loop.
1422 template <typename T1, typename T2>
CmpHelperOpFailure(const char * expr1,const char * expr2,const T1 & val1,const T2 & val2,const char * op)1423 AssertionResult CmpHelperOpFailure(const char* expr1, const char* expr2,
1424 const T1& val1, const T2& val2,
1425 const char* op) {
1426 return AssertionFailure()
1427 << "Expected: (" << expr1 << ") " << op << " (" << expr2
1428 << "), actual: " << FormatForComparisonFailureMessage(val1, val2)
1429 << " vs " << FormatForComparisonFailureMessage(val2, val1);
1430 }
1431
1432 // A macro for implementing the helper functions needed to implement
1433 // ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste
1434 // of similar code.
1435 //
1436 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1437
1438 #define GTEST_IMPL_CMP_HELPER_(op_name, op) \
1439 template <typename T1, typename T2> \
1440 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \
1441 const T1& val1, const T2& val2) { \
1442 if (val1 op val2) { \
1443 return AssertionSuccess(); \
1444 } else { \
1445 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op); \
1446 } \
1447 }
1448
1449 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1450
1451 // Implements the helper function for {ASSERT|EXPECT}_NE
1452 GTEST_IMPL_CMP_HELPER_(NE, !=)
1453 // Implements the helper function for {ASSERT|EXPECT}_LE
1454 GTEST_IMPL_CMP_HELPER_(LE, <=)
1455 // Implements the helper function for {ASSERT|EXPECT}_LT
1456 GTEST_IMPL_CMP_HELPER_(LT, <)
1457 // Implements the helper function for {ASSERT|EXPECT}_GE
1458 GTEST_IMPL_CMP_HELPER_(GE, >=)
1459 // Implements the helper function for {ASSERT|EXPECT}_GT
1460 GTEST_IMPL_CMP_HELPER_(GT, >)
1461
1462 #undef GTEST_IMPL_CMP_HELPER_
1463
1464 // The helper function for {ASSERT|EXPECT}_STREQ.
1465 //
1466 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1467 GTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression,
1468 const char* s2_expression,
1469 const char* s1, const char* s2);
1470
1471 // The helper function for {ASSERT|EXPECT}_STRCASEEQ.
1472 //
1473 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1474 GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* s1_expression,
1475 const char* s2_expression,
1476 const char* s1, const char* s2);
1477
1478 // The helper function for {ASSERT|EXPECT}_STRNE.
1479 //
1480 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1481 GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,
1482 const char* s2_expression,
1483 const char* s1, const char* s2);
1484
1485 // The helper function for {ASSERT|EXPECT}_STRCASENE.
1486 //
1487 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1488 GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression,
1489 const char* s2_expression,
1490 const char* s1, const char* s2);
1491
1492 // Helper function for *_STREQ on wide strings.
1493 //
1494 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1495 GTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression,
1496 const char* s2_expression,
1497 const wchar_t* s1, const wchar_t* s2);
1498
1499 // Helper function for *_STRNE on wide strings.
1500 //
1501 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1502 GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,
1503 const char* s2_expression,
1504 const wchar_t* s1, const wchar_t* s2);
1505
1506 } // namespace internal
1507
1508 // IsSubstring() and IsNotSubstring() are intended to be used as the
1509 // first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by
1510 // themselves. They check whether needle is a substring of haystack
1511 // (NULL is considered a substring of itself only), and return an
1512 // appropriate error message when they fail.
1513 //
1514 // The {needle,haystack}_expr arguments are the stringified
1515 // expressions that generated the two real arguments.
1516 GTEST_API_ AssertionResult IsSubstring(const char* needle_expr,
1517 const char* haystack_expr,
1518 const char* needle,
1519 const char* haystack);
1520 GTEST_API_ AssertionResult IsSubstring(const char* needle_expr,
1521 const char* haystack_expr,
1522 const wchar_t* needle,
1523 const wchar_t* haystack);
1524 GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,
1525 const char* haystack_expr,
1526 const char* needle,
1527 const char* haystack);
1528 GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,
1529 const char* haystack_expr,
1530 const wchar_t* needle,
1531 const wchar_t* haystack);
1532 GTEST_API_ AssertionResult IsSubstring(const char* needle_expr,
1533 const char* haystack_expr,
1534 const ::std::string& needle,
1535 const ::std::string& haystack);
1536 GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,
1537 const char* haystack_expr,
1538 const ::std::string& needle,
1539 const ::std::string& haystack);
1540
1541 #if GTEST_HAS_STD_WSTRING
1542 GTEST_API_ AssertionResult IsSubstring(const char* needle_expr,
1543 const char* haystack_expr,
1544 const ::std::wstring& needle,
1545 const ::std::wstring& haystack);
1546 GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,
1547 const char* haystack_expr,
1548 const ::std::wstring& needle,
1549 const ::std::wstring& haystack);
1550 #endif // GTEST_HAS_STD_WSTRING
1551
1552 namespace internal {
1553
1554 // Helper template function for comparing floating-points.
1555 //
1556 // Template parameter:
1557 //
1558 // RawType: the raw floating-point type (either float or double)
1559 //
1560 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1561 template <typename RawType>
CmpHelperFloatingPointEQ(const char * lhs_expression,const char * rhs_expression,RawType lhs_value,RawType rhs_value)1562 AssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression,
1563 const char* rhs_expression,
1564 RawType lhs_value, RawType rhs_value) {
1565 const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value);
1566
1567 if (lhs.AlmostEquals(rhs)) {
1568 return AssertionSuccess();
1569 }
1570
1571 ::std::stringstream lhs_ss;
1572 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1573 << lhs_value;
1574
1575 ::std::stringstream rhs_ss;
1576 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1577 << rhs_value;
1578
1579 return EqFailure(lhs_expression, rhs_expression,
1580 StringStreamToString(&lhs_ss), StringStreamToString(&rhs_ss),
1581 false);
1582 }
1583
1584 // Helper function for implementing ASSERT_NEAR.
1585 //
1586 // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
1587 GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1,
1588 const char* expr2,
1589 const char* abs_error_expr,
1590 double val1, double val2,
1591 double abs_error);
1592
1593 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
1594 // A class that enables one to stream messages to assertion macros
1595 class GTEST_API_ AssertHelper {
1596 public:
1597 // Constructor.
1598 AssertHelper(TestPartResult::Type type, const char* file, int line,
1599 const char* message);
1600 ~AssertHelper();
1601
1602 // Message assignment is a semantic trick to enable assertion
1603 // streaming; see the GTEST_MESSAGE_ macro below.
1604 void operator=(const Message& message) const;
1605
1606 private:
1607 // We put our data in a struct so that the size of the AssertHelper class can
1608 // be as small as possible. This is important because gcc is incapable of
1609 // re-using stack space even for temporary variables, so every EXPECT_EQ
1610 // reserves stack space for another AssertHelper.
1611 struct AssertHelperData {
AssertHelperDataAssertHelperData1612 AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num,
1613 const char* msg)
1614 : type(t), file(srcfile), line(line_num), message(msg) {}
1615
1616 TestPartResult::Type const type;
1617 const char* const file;
1618 int const line;
1619 std::string const message;
1620
1621 private:
1622 AssertHelperData(const AssertHelperData&) = delete;
1623 AssertHelperData& operator=(const AssertHelperData&) = delete;
1624 };
1625
1626 AssertHelperData* const data_;
1627
1628 AssertHelper(const AssertHelper&) = delete;
1629 AssertHelper& operator=(const AssertHelper&) = delete;
1630 };
1631
1632 } // namespace internal
1633
1634 // The pure interface class that all value-parameterized tests inherit from.
1635 // A value-parameterized class must inherit from both ::testing::Test and
1636 // ::testing::WithParamInterface. In most cases that just means inheriting
1637 // from ::testing::TestWithParam, but more complicated test hierarchies
1638 // may need to inherit from Test and WithParamInterface at different levels.
1639 //
1640 // This interface has support for accessing the test parameter value via
1641 // the GetParam() method.
1642 //
1643 // Use it with one of the parameter generator defining functions, like Range(),
1644 // Values(), ValuesIn(), Bool(), Combine(), and ConvertGenerator<T>().
1645 //
1646 // class FooTest : public ::testing::TestWithParam<int> {
1647 // protected:
1648 // FooTest() {
1649 // // Can use GetParam() here.
1650 // }
1651 // ~FooTest() override {
1652 // // Can use GetParam() here.
1653 // }
1654 // void SetUp() override {
1655 // // Can use GetParam() here.
1656 // }
1657 // void TearDown override {
1658 // // Can use GetParam() here.
1659 // }
1660 // };
1661 // TEST_P(FooTest, DoesBar) {
1662 // // Can use GetParam() method here.
1663 // Foo foo;
1664 // ASSERT_TRUE(foo.DoesBar(GetParam()));
1665 // }
1666 // INSTANTIATE_TEST_SUITE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));
1667
1668 template <typename T>
1669 class WithParamInterface {
1670 public:
1671 typedef T ParamType;
~WithParamInterface()1672 virtual ~WithParamInterface() {}
1673
1674 // The current parameter value. Is also available in the test fixture's
1675 // constructor.
GetParam()1676 static const ParamType& GetParam() {
1677 GTEST_CHECK_(parameter_ != nullptr)
1678 << "GetParam() can only be called inside a value-parameterized test "
1679 << "-- did you intend to write TEST_P instead of TEST_F?";
1680 return *parameter_;
1681 }
1682
1683 private:
1684 // Sets parameter value. The caller is responsible for making sure the value
1685 // remains alive and unchanged throughout the current test.
SetParam(const ParamType * parameter)1686 static void SetParam(const ParamType* parameter) { parameter_ = parameter; }
1687
1688 // Static value used for accessing parameter during a test lifetime.
1689 static const ParamType* parameter_;
1690
1691 // TestClass must be a subclass of WithParamInterface<T> and Test.
1692 template <class TestClass>
1693 friend class internal::ParameterizedTestFactory;
1694 };
1695
1696 template <typename T>
1697 const T* WithParamInterface<T>::parameter_ = nullptr;
1698
1699 // Most value-parameterized classes can ignore the existence of
1700 // WithParamInterface, and can just inherit from ::testing::TestWithParam.
1701
1702 template <typename T>
1703 class TestWithParam : public Test, public WithParamInterface<T> {};
1704
1705 // Macros for indicating success/failure in test code.
1706
1707 // Skips test in runtime.
1708 // Skipping test aborts current function.
1709 // Skipped tests are neither successful nor failed.
1710 #define GTEST_SKIP() GTEST_SKIP_("")
1711
1712 // ADD_FAILURE unconditionally adds a failure to the current test.
1713 // SUCCEED generates a success - it doesn't automatically make the
1714 // current test successful, as a test is only successful when it has
1715 // no failure.
1716 //
1717 // EXPECT_* verifies that a certain condition is satisfied. If not,
1718 // it behaves like ADD_FAILURE. In particular:
1719 //
1720 // EXPECT_TRUE verifies that a Boolean condition is true.
1721 // EXPECT_FALSE verifies that a Boolean condition is false.
1722 //
1723 // FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except
1724 // that they will also abort the current function on failure. People
1725 // usually want the fail-fast behavior of FAIL and ASSERT_*, but those
1726 // writing data-driven tests often find themselves using ADD_FAILURE
1727 // and EXPECT_* more.
1728
1729 // Generates a nonfatal failure with a generic message.
1730 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
1731
1732 // Generates a nonfatal failure at the given source file location with
1733 // a generic message.
1734 #define ADD_FAILURE_AT(file, line) \
1735 GTEST_MESSAGE_AT_(file, line, "Failed", \
1736 ::testing::TestPartResult::kNonFatalFailure)
1737
1738 // Generates a fatal failure with a generic message.
1739 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed")
1740
1741 // Like GTEST_FAIL(), but at the given source file location.
1742 #define GTEST_FAIL_AT(file, line) \
1743 return GTEST_MESSAGE_AT_(file, line, "Failed", \
1744 ::testing::TestPartResult::kFatalFailure)
1745
1746 // Define this macro to 1 to omit the definition of FAIL(), which is a
1747 // generic name and clashes with some other libraries.
1748 #if !GTEST_DONT_DEFINE_FAIL
1749 #define FAIL() GTEST_FAIL()
1750 #endif
1751
1752 // Generates a success with a generic message.
1753 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded")
1754
1755 // Define this macro to 1 to omit the definition of SUCCEED(), which
1756 // is a generic name and clashes with some other libraries.
1757 #if !GTEST_DONT_DEFINE_SUCCEED
1758 #define SUCCEED() GTEST_SUCCEED()
1759 #endif
1760
1761 // Macros for testing exceptions.
1762 //
1763 // * {ASSERT|EXPECT}_THROW(statement, expected_exception):
1764 // Tests that the statement throws the expected exception.
1765 // * {ASSERT|EXPECT}_NO_THROW(statement):
1766 // Tests that the statement doesn't throw any exception.
1767 // * {ASSERT|EXPECT}_ANY_THROW(statement):
1768 // Tests that the statement throws an exception.
1769
1770 #define EXPECT_THROW(statement, expected_exception) \
1771 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
1772 #define EXPECT_NO_THROW(statement) \
1773 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
1774 #define EXPECT_ANY_THROW(statement) \
1775 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)
1776 #define ASSERT_THROW(statement, expected_exception) \
1777 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
1778 #define ASSERT_NO_THROW(statement) \
1779 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
1780 #define ASSERT_ANY_THROW(statement) \
1781 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)
1782
1783 // Boolean assertions. Condition can be either a Boolean expression or an
1784 // AssertionResult. For more information on how to use AssertionResult with
1785 // these macros see comments on that class.
1786 #define GTEST_EXPECT_TRUE(condition) \
1787 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
1788 GTEST_NONFATAL_FAILURE_)
1789 #define GTEST_EXPECT_FALSE(condition) \
1790 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
1791 GTEST_NONFATAL_FAILURE_)
1792 #define GTEST_ASSERT_TRUE(condition) \
1793 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, GTEST_FATAL_FAILURE_)
1794 #define GTEST_ASSERT_FALSE(condition) \
1795 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
1796 GTEST_FATAL_FAILURE_)
1797
1798 // Define these macros to 1 to omit the definition of the corresponding
1799 // EXPECT or ASSERT, which clashes with some users' own code.
1800
1801 #if !GTEST_DONT_DEFINE_EXPECT_TRUE
1802 #define EXPECT_TRUE(condition) GTEST_EXPECT_TRUE(condition)
1803 #endif
1804
1805 #if !GTEST_DONT_DEFINE_EXPECT_FALSE
1806 #define EXPECT_FALSE(condition) GTEST_EXPECT_FALSE(condition)
1807 #endif
1808
1809 #if !GTEST_DONT_DEFINE_ASSERT_TRUE
1810 #define ASSERT_TRUE(condition) GTEST_ASSERT_TRUE(condition)
1811 #endif
1812
1813 #if !GTEST_DONT_DEFINE_ASSERT_FALSE
1814 #define ASSERT_FALSE(condition) GTEST_ASSERT_FALSE(condition)
1815 #endif
1816
1817 // Macros for testing equalities and inequalities.
1818 //
1819 // * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2
1820 // * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2
1821 // * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2
1822 // * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2
1823 // * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2
1824 // * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2
1825 //
1826 // When they are not, Google Test prints both the tested expressions and
1827 // their actual values. The values must be compatible built-in types,
1828 // or you will get a compiler error. By "compatible" we mean that the
1829 // values can be compared by the respective operator.
1830 //
1831 // Note:
1832 //
1833 // 1. It is possible to make a user-defined type work with
1834 // {ASSERT|EXPECT}_??(), but that requires overloading the
1835 // comparison operators and is thus discouraged by the Google C++
1836 // Usage Guide. Therefore, you are advised to use the
1837 // {ASSERT|EXPECT}_TRUE() macro to assert that two objects are
1838 // equal.
1839 //
1840 // 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on
1841 // pointers (in particular, C strings). Therefore, if you use it
1842 // with two C strings, you are testing how their locations in memory
1843 // are related, not how their content is related. To compare two C
1844 // strings by content, use {ASSERT|EXPECT}_STR*().
1845 //
1846 // 3. {ASSERT|EXPECT}_EQ(v1, v2) is preferred to
1847 // {ASSERT|EXPECT}_TRUE(v1 == v2), as the former tells you
1848 // what the actual value is when it fails, and similarly for the
1849 // other comparisons.
1850 //
1851 // 4. Do not depend on the order in which {ASSERT|EXPECT}_??()
1852 // evaluate their arguments, which is undefined.
1853 //
1854 // 5. These macros evaluate their arguments exactly once.
1855 //
1856 // Examples:
1857 //
1858 // EXPECT_NE(Foo(), 5);
1859 // EXPECT_EQ(a_pointer, NULL);
1860 // ASSERT_LT(i, array_size);
1861 // ASSERT_GT(records.size(), 0) << "There is no record left.";
1862
1863 #define EXPECT_EQ(val1, val2) \
1864 EXPECT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
1865 #define EXPECT_NE(val1, val2) \
1866 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
1867 #define EXPECT_LE(val1, val2) \
1868 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
1869 #define EXPECT_LT(val1, val2) \
1870 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
1871 #define EXPECT_GE(val1, val2) \
1872 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
1873 #define EXPECT_GT(val1, val2) \
1874 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
1875
1876 #define GTEST_ASSERT_EQ(val1, val2) \
1877 ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
1878 #define GTEST_ASSERT_NE(val1, val2) \
1879 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
1880 #define GTEST_ASSERT_LE(val1, val2) \
1881 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
1882 #define GTEST_ASSERT_LT(val1, val2) \
1883 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
1884 #define GTEST_ASSERT_GE(val1, val2) \
1885 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
1886 #define GTEST_ASSERT_GT(val1, val2) \
1887 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
1888
1889 // Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of
1890 // ASSERT_XY(), which clashes with some users' own code.
1891
1892 #if !GTEST_DONT_DEFINE_ASSERT_EQ
1893 #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
1894 #endif
1895
1896 #if !GTEST_DONT_DEFINE_ASSERT_NE
1897 #define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)
1898 #endif
1899
1900 #if !GTEST_DONT_DEFINE_ASSERT_LE
1901 #define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)
1902 #endif
1903
1904 #if !GTEST_DONT_DEFINE_ASSERT_LT
1905 #define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)
1906 #endif
1907
1908 #if !GTEST_DONT_DEFINE_ASSERT_GE
1909 #define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)
1910 #endif
1911
1912 #if !GTEST_DONT_DEFINE_ASSERT_GT
1913 #define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
1914 #endif
1915
1916 // C-string Comparisons. All tests treat NULL and any non-NULL string
1917 // as different. Two NULLs are equal.
1918 //
1919 // * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2
1920 // * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2
1921 // * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case
1922 // * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case
1923 //
1924 // For wide or narrow string objects, you can use the
1925 // {ASSERT|EXPECT}_??() macros.
1926 //
1927 // Don't depend on the order in which the arguments are evaluated,
1928 // which is undefined.
1929 //
1930 // These macros evaluate their arguments exactly once.
1931
1932 #define EXPECT_STREQ(s1, s2) \
1933 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
1934 #define EXPECT_STRNE(s1, s2) \
1935 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
1936 #define EXPECT_STRCASEEQ(s1, s2) \
1937 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
1938 #define EXPECT_STRCASENE(s1, s2) \
1939 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
1940
1941 #define ASSERT_STREQ(s1, s2) \
1942 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
1943 #define ASSERT_STRNE(s1, s2) \
1944 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
1945 #define ASSERT_STRCASEEQ(s1, s2) \
1946 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
1947 #define ASSERT_STRCASENE(s1, s2) \
1948 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
1949
1950 // Macros for comparing floating-point numbers.
1951 //
1952 // * {ASSERT|EXPECT}_FLOAT_EQ(val1, val2):
1953 // Tests that two float values are almost equal.
1954 // * {ASSERT|EXPECT}_DOUBLE_EQ(val1, val2):
1955 // Tests that two double values are almost equal.
1956 // * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error):
1957 // Tests that v1 and v2 are within the given distance to each other.
1958 //
1959 // Google Test uses ULP-based comparison to automatically pick a default
1960 // error bound that is appropriate for the operands. See the
1961 // FloatingPoint template class in gtest-internal.h if you are
1962 // interested in the implementation details.
1963
1964 #define EXPECT_FLOAT_EQ(val1, val2) \
1965 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
1966 val1, val2)
1967
1968 #define EXPECT_DOUBLE_EQ(val1, val2) \
1969 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
1970 val1, val2)
1971
1972 #define ASSERT_FLOAT_EQ(val1, val2) \
1973 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
1974 val1, val2)
1975
1976 #define ASSERT_DOUBLE_EQ(val1, val2) \
1977 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
1978 val1, val2)
1979
1980 #define EXPECT_NEAR(val1, val2, abs_error) \
1981 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \
1982 abs_error)
1983
1984 #define ASSERT_NEAR(val1, val2, abs_error) \
1985 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \
1986 abs_error)
1987
1988 // These predicate format functions work on floating-point values, and
1989 // can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g.
1990 //
1991 // EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0);
1992
1993 // Asserts that val1 is less than, or almost equal to, val2. Fails
1994 // otherwise. In particular, it fails if either val1 or val2 is NaN.
1995 GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2,
1996 float val1, float val2);
1997 GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,
1998 double val1, double val2);
1999
2000 #if GTEST_OS_WINDOWS
2001
2002 // Macros that test for HRESULT failure and success, these are only useful
2003 // on Windows, and rely on Windows SDK macros and APIs to compile.
2004 //
2005 // * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr)
2006 //
2007 // When expr unexpectedly fails or succeeds, Google Test prints the
2008 // expected result and the actual result with both a human-readable
2009 // string representation of the error, if available, as well as the
2010 // hex result code.
2011 #define EXPECT_HRESULT_SUCCEEDED(expr) \
2012 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
2013
2014 #define ASSERT_HRESULT_SUCCEEDED(expr) \
2015 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
2016
2017 #define EXPECT_HRESULT_FAILED(expr) \
2018 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
2019
2020 #define ASSERT_HRESULT_FAILED(expr) \
2021 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
2022
2023 #endif // GTEST_OS_WINDOWS
2024
2025 // Macros that execute statement and check that it doesn't generate new fatal
2026 // failures in the current thread.
2027 //
2028 // * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement);
2029 //
2030 // Examples:
2031 //
2032 // EXPECT_NO_FATAL_FAILURE(Process());
2033 // ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed";
2034 //
2035 #define ASSERT_NO_FATAL_FAILURE(statement) \
2036 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)
2037 #define EXPECT_NO_FATAL_FAILURE(statement) \
2038 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
2039
2040 // Causes a trace (including the given source file path and line number,
2041 // and the given message) to be included in every test failure message generated
2042 // by code in the scope of the lifetime of an instance of this class. The effect
2043 // is undone with the destruction of the instance.
2044 //
2045 // The message argument can be anything streamable to std::ostream.
2046 //
2047 // Example:
2048 // testing::ScopedTrace trace("file.cc", 123, "message");
2049 //
2050 class GTEST_API_ ScopedTrace {
2051 public:
2052 // The c'tor pushes the given source file location and message onto
2053 // a trace stack maintained by Google Test.
2054
2055 // Template version. Uses Message() to convert the values into strings.
2056 // Slow, but flexible.
2057 template <typename T>
ScopedTrace(const char * file,int line,const T & message)2058 ScopedTrace(const char* file, int line, const T& message) {
2059 PushTrace(file, line, (Message() << message).GetString());
2060 }
2061
2062 // Optimize for some known types.
ScopedTrace(const char * file,int line,const char * message)2063 ScopedTrace(const char* file, int line, const char* message) {
2064 PushTrace(file, line, message ? message : "(null)");
2065 }
2066
ScopedTrace(const char * file,int line,const std::string & message)2067 ScopedTrace(const char* file, int line, const std::string& message) {
2068 PushTrace(file, line, message);
2069 }
2070
2071 // The d'tor pops the info pushed by the c'tor.
2072 //
2073 // Note that the d'tor is not virtual in order to be efficient.
2074 // Don't inherit from ScopedTrace!
2075 ~ScopedTrace();
2076
2077 private:
2078 void PushTrace(const char* file, int line, std::string message);
2079
2080 ScopedTrace(const ScopedTrace&) = delete;
2081 ScopedTrace& operator=(const ScopedTrace&) = delete;
2082 };
2083
2084 // Causes a trace (including the source file path, the current line
2085 // number, and the given message) to be included in every test failure
2086 // message generated by code in the current scope. The effect is
2087 // undone when the control leaves the current scope.
2088 //
2089 // The message argument can be anything streamable to std::ostream.
2090 //
2091 // In the implementation, we include the current line number as part
2092 // of the dummy variable name, thus allowing multiple SCOPED_TRACE()s
2093 // to appear in the same block - as long as they are on different
2094 // lines.
2095 //
2096 // Assuming that each thread maintains its own stack of traces.
2097 // Therefore, a SCOPED_TRACE() would (correctly) only affect the
2098 // assertions in its own thread.
2099 #define SCOPED_TRACE(message) \
2100 ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)( \
2101 __FILE__, __LINE__, (message))
2102
2103 // Compile-time assertion for type equality.
2104 // StaticAssertTypeEq<type1, type2>() compiles if and only if type1 and type2
2105 // are the same type. The value it returns is not interesting.
2106 //
2107 // Instead of making StaticAssertTypeEq a class template, we make it a
2108 // function template that invokes a helper class template. This
2109 // prevents a user from misusing StaticAssertTypeEq<T1, T2> by
2110 // defining objects of that type.
2111 //
2112 // CAVEAT:
2113 //
2114 // When used inside a method of a class template,
2115 // StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is
2116 // instantiated. For example, given:
2117 //
2118 // template <typename T> class Foo {
2119 // public:
2120 // void Bar() { testing::StaticAssertTypeEq<int, T>(); }
2121 // };
2122 //
2123 // the code:
2124 //
2125 // void Test1() { Foo<bool> foo; }
2126 //
2127 // will NOT generate a compiler error, as Foo<bool>::Bar() is never
2128 // actually instantiated. Instead, you need:
2129 //
2130 // void Test2() { Foo<bool> foo; foo.Bar(); }
2131 //
2132 // to cause a compiler error.
2133 template <typename T1, typename T2>
StaticAssertTypeEq()2134 constexpr bool StaticAssertTypeEq() noexcept {
2135 static_assert(std::is_same<T1, T2>::value, "T1 and T2 are not the same type");
2136 return true;
2137 }
2138
2139 // Defines a test.
2140 //
2141 // The first parameter is the name of the test suite, and the second
2142 // parameter is the name of the test within the test suite.
2143 //
2144 // The convention is to end the test suite name with "Test". For
2145 // example, a test suite for the Foo class can be named FooTest.
2146 //
2147 // Test code should appear between braces after an invocation of
2148 // this macro. Example:
2149 //
2150 // TEST(FooTest, InitializesCorrectly) {
2151 // Foo foo;
2152 // EXPECT_TRUE(foo.StatusIsOK());
2153 // }
2154
2155 // Note that we call GetTestTypeId() instead of GetTypeId<
2156 // ::testing::Test>() here to get the type ID of testing::Test. This
2157 // is to work around a suspected linker bug when using Google Test as
2158 // a framework on Mac OS X. The bug causes GetTypeId<
2159 // ::testing::Test>() to return different values depending on whether
2160 // the call is from the Google Test framework itself or from user test
2161 // code. GetTestTypeId() is guaranteed to always return the same
2162 // value, as it always calls GetTypeId<>() from the Google Test
2163 // framework.
2164 #define GTEST_TEST(test_suite_name, test_name) \
2165 GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \
2166 ::testing::internal::GetTestTypeId())
2167
2168 // Define this macro to 1 to omit the definition of TEST(), which
2169 // is a generic name and clashes with some other libraries.
2170 #if !GTEST_DONT_DEFINE_TEST
2171 #define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name)
2172 #endif
2173
2174 // Defines a test that uses a test fixture.
2175 //
2176 // The first parameter is the name of the test fixture class, which
2177 // also doubles as the test suite name. The second parameter is the
2178 // name of the test within the test suite.
2179 //
2180 // A test fixture class must be declared earlier. The user should put
2181 // the test code between braces after using this macro. Example:
2182 //
2183 // class FooTest : public testing::Test {
2184 // protected:
2185 // void SetUp() override { b_.AddElement(3); }
2186 //
2187 // Foo a_;
2188 // Foo b_;
2189 // };
2190 //
2191 // TEST_F(FooTest, InitializesCorrectly) {
2192 // EXPECT_TRUE(a_.StatusIsOK());
2193 // }
2194 //
2195 // TEST_F(FooTest, ReturnsElementCountCorrectly) {
2196 // EXPECT_EQ(a_.size(), 0);
2197 // EXPECT_EQ(b_.size(), 1);
2198 // }
2199 #define GTEST_TEST_F(test_fixture, test_name) \
2200 GTEST_TEST_(test_fixture, test_name, test_fixture, \
2201 ::testing::internal::GetTypeId<test_fixture>())
2202 #if !GTEST_DONT_DEFINE_TEST_F
2203 #define TEST_F(test_fixture, test_name) GTEST_TEST_F(test_fixture, test_name)
2204 #endif
2205
2206 // Returns a path to a temporary directory, which should be writable. It is
2207 // implementation-dependent whether or not the path is terminated by the
2208 // directory-separator character.
2209 GTEST_API_ std::string TempDir();
2210
2211 // Returns a path to a directory that contains ancillary data files that might
2212 // be used by tests. It is implementation dependent whether or not the path is
2213 // terminated by the directory-separator character. The directory and the files
2214 // in it should be considered read-only.
2215 GTEST_API_ std::string SrcDir();
2216
2217 #ifdef _MSC_VER
2218 #pragma warning(pop)
2219 #endif
2220
2221 // Dynamically registers a test with the framework.
2222 //
2223 // This is an advanced API only to be used when the `TEST` macros are
2224 // insufficient. The macros should be preferred when possible, as they avoid
2225 // most of the complexity of calling this function.
2226 //
2227 // The `factory` argument is a factory callable (move-constructible) object or
2228 // function pointer that creates a new instance of the Test object. It
2229 // handles ownership to the caller. The signature of the callable is
2230 // `Fixture*()`, where `Fixture` is the test fixture class for the test. All
2231 // tests registered with the same `test_suite_name` must return the same
2232 // fixture type. This is checked at runtime.
2233 //
2234 // The framework will infer the fixture class from the factory and will call
2235 // the `SetUpTestSuite` and `TearDownTestSuite` for it.
2236 //
2237 // Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is
2238 // undefined.
2239 //
2240 // Use case example:
2241 //
2242 // class MyFixture : public ::testing::Test {
2243 // public:
2244 // // All of these optional, just like in regular macro usage.
2245 // static void SetUpTestSuite() { ... }
2246 // static void TearDownTestSuite() { ... }
2247 // void SetUp() override { ... }
2248 // void TearDown() override { ... }
2249 // };
2250 //
2251 // class MyTest : public MyFixture {
2252 // public:
2253 // explicit MyTest(int data) : data_(data) {}
2254 // void TestBody() override { ... }
2255 //
2256 // private:
2257 // int data_;
2258 // };
2259 //
2260 // void RegisterMyTests(const std::vector<int>& values) {
2261 // for (int v : values) {
2262 // ::testing::RegisterTest(
2263 // "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr,
2264 // std::to_string(v).c_str(),
2265 // __FILE__, __LINE__,
2266 // // Important to use the fixture type as the return type here.
2267 // [=]() -> MyFixture* { return new MyTest(v); });
2268 // }
2269 // }
2270 // ...
2271 // int main(int argc, char** argv) {
2272 // ::testing::InitGoogleTest(&argc, argv);
2273 // std::vector<int> values_to_test = LoadValuesFromConfig();
2274 // RegisterMyTests(values_to_test);
2275 // ...
2276 // return RUN_ALL_TESTS();
2277 // }
2278 //
2279 template <int&... ExplicitParameterBarrier, typename Factory>
RegisterTest(const char * test_suite_name,const char * test_name,const char * type_param,const char * value_param,const char * file,int line,Factory factory)2280 TestInfo* RegisterTest(const char* test_suite_name, const char* test_name,
2281 const char* type_param, const char* value_param,
2282 const char* file, int line, Factory factory) {
2283 using TestT = typename std::remove_pointer<decltype(factory())>::type;
2284
2285 class FactoryImpl : public internal::TestFactoryBase {
2286 public:
2287 explicit FactoryImpl(Factory f) : factory_(std::move(f)) {}
2288 Test* CreateTest() override { return factory_(); }
2289
2290 private:
2291 Factory factory_;
2292 };
2293
2294 return internal::MakeAndRegisterTestInfo(
2295 test_suite_name, test_name, type_param, value_param,
2296 internal::CodeLocation(file, line), internal::GetTypeId<TestT>(),
2297 internal::SuiteApiResolver<TestT>::GetSetUpCaseOrSuite(file, line),
2298 internal::SuiteApiResolver<TestT>::GetTearDownCaseOrSuite(file, line),
2299 new FactoryImpl{std::move(factory)});
2300 }
2301
2302 } // namespace testing
2303
2304 // Use this function in main() to run all tests. It returns 0 if all
2305 // tests are successful, or 1 otherwise.
2306 //
2307 // RUN_ALL_TESTS() should be invoked after the command line has been
2308 // parsed by InitGoogleTest().
2309 //
2310 // This function was formerly a macro; thus, it is in the global
2311 // namespace and has an all-caps name.
2312 int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_;
2313
RUN_ALL_TESTS()2314 inline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); }
2315
2316 GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251
2317
2318 #endif // GOOGLETEST_INCLUDE_GTEST_GTEST_H_
2319