52 #ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_H_ 53 #define GOOGLETEST_INCLUDE_GTEST_GTEST_H_ 59 #include <type_traits> 62 #include "gtest/internal/gtest-internal.h" 63 #include "gtest/internal/gtest-string.h" 64 #include "gtest/gtest-death-test.h" 65 #include "gtest/gtest-matchers.h" 66 #include "gtest/gtest-message.h" 67 #include "gtest/gtest-param-test.h" 68 #include "gtest/gtest-printers.h" 69 #include "gtest/gtest_prod.h" 70 #include "gtest/gtest-test-part.h" 71 #include "gtest/gtest-typed-test.h" 73 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \
81 # pragma warning(push) 82 # pragma warning(disable:4805) 83 # pragma warning(disable:4100) 90 GTEST_DECLARE_bool_(also_run_disabled_tests);
93 GTEST_DECLARE_bool_(break_on_failure);
97 GTEST_DECLARE_bool_(catch_exceptions);
102 GTEST_DECLARE_string_(color);
106 GTEST_DECLARE_bool_(fail_fast);
110 GTEST_DECLARE_string_(filter);
114 GTEST_DECLARE_bool_(install_failure_signal_handler);
118 GTEST_DECLARE_bool_(list_tests);
122 GTEST_DECLARE_string_(output);
125 GTEST_DECLARE_bool_(brief);
129 GTEST_DECLARE_bool_(print_time);
132 GTEST_DECLARE_bool_(print_utf8);
135 GTEST_DECLARE_int32_(random_seed);
139 GTEST_DECLARE_int32_(repeat);
143 GTEST_DECLARE_bool_(show_internal_stack_frames);
146 GTEST_DECLARE_bool_(shuffle);
150 GTEST_DECLARE_int32_(stack_trace_depth);
155 GTEST_DECLARE_bool_(throw_on_failure);
160 GTEST_DECLARE_string_(stream_result_to);
162 #if GTEST_USE_OWN_FLAGFILE_FLAG_ 163 GTEST_DECLARE_string_(flagfile);
164 #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ 167 const int kMaxStackTraceDepth = 100;
172 class DefaultGlobalTestPartResultReporter;
174 class NoExecDeathTest;
175 class FinalSuccessChecker;
176 class GTestFlagSaver;
177 class StreamingListenerTest;
178 class TestResultAccessor;
179 class TestEventListenersAccessor;
180 class TestEventRepeater;
181 class UnitTestRecordPropertyTestHelper;
182 class WindowsDeathTest;
183 class FuchsiaDeathTest;
184 class UnitTestImpl* GetUnitTestImpl();
185 void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
186 const std::string& message);
187 std::set<std::string>* GetIgnoredParameterizedTestSuites();
198 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 199 using TestCase = TestSuite;
283 class GTEST_API_ AssertionResult {
287 AssertionResult(
const AssertionResult& other);
293 #if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920) 294 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 )
304 template <
typename T>
305 explicit AssertionResult(
307 typename std::enable_if<
308 !std::is_convertible<T, AssertionResult>::value>::type*
311 : success_(success) {}
313 #if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920) 314 GTEST_DISABLE_MSC_WARNINGS_POP_()
318 AssertionResult& operator=(AssertionResult other) {
324 operator bool()
const {
return success_; }
327 AssertionResult operator!()
const;
333 const char* message()
const {
334 return message_.get() !=
nullptr ? message_->c_str() :
"";
337 const char* failure_message()
const {
return message(); }
340 template <
typename T> AssertionResult&
operator<<(
const T& value) {
341 AppendMessage(Message() << value);
348 ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
349 AppendMessage(Message() << basic_manipulator);
355 void AppendMessage(
const Message& a_message) {
356 if (message_.get() ==
nullptr) message_.reset(new ::std::string);
357 message_->append(a_message.GetString().c_str());
361 void swap(AssertionResult& other);
369 std::unique_ptr< ::std::string> message_;
373 GTEST_API_ AssertionResult AssertionSuccess();
376 GTEST_API_ AssertionResult AssertionFailure();
380 GTEST_API_ AssertionResult AssertionFailure(
const Message& msg);
387 #include "gtest/gtest_pred_impl.h" 414 class GTEST_API_ Test {
416 friend class TestInfo;
427 static void SetUpTestSuite() {}
435 static void TearDownTestSuite() {}
439 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 440 static void TearDownTestCase() {}
441 static void SetUpTestCase() {}
442 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 445 static bool HasFatalFailure();
448 static bool HasNonfatalFailure();
451 static bool IsSkipped();
455 static bool HasFailure() {
return HasFatalFailure() || HasNonfatalFailure(); }
470 static void RecordProperty(
const std::string& key,
const std::string& value);
471 static void RecordProperty(
const std::string& key,
int value);
478 virtual void SetUp();
481 virtual void TearDown();
486 static bool HasSameFixtureClass();
494 virtual void TestBody() = 0;
501 void DeleteSelf_() {
delete this; }
503 const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;
521 struct Setup_should_be_spelled_SetUp {};
522 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
525 GTEST_DISALLOW_COPY_AND_ASSIGN_(Test);
528 typedef internal::TimeInMillis TimeInMillis;
539 TestProperty(
const std::string& a_key,
const std::string& a_value) :
540 key_(a_key), value_(a_value) {
544 const char* key()
const {
549 const char* value()
const {
550 return value_.c_str();
554 void SetValue(
const std::string& new_value) {
571 class GTEST_API_ TestResult {
581 int total_part_count()
const;
584 int test_property_count()
const;
587 bool Passed()
const {
return !Skipped() && !Failed(); }
590 bool Skipped()
const;
596 bool HasFatalFailure()
const;
599 bool HasNonfatalFailure()
const;
602 TimeInMillis elapsed_time()
const {
return elapsed_time_; }
606 TimeInMillis start_timestamp()
const {
return start_timestamp_; }
610 const TestPartResult& GetTestPartResult(
int i)
const;
615 const TestProperty& GetTestProperty(
int i)
const;
618 friend class TestInfo;
619 friend class TestSuite;
620 friend class UnitTest;
621 friend class internal::DefaultGlobalTestPartResultReporter;
622 friend class internal::ExecDeathTest;
623 friend class internal::TestResultAccessor;
624 friend class internal::UnitTestImpl;
625 friend class internal::WindowsDeathTest;
626 friend class internal::FuchsiaDeathTest;
629 const std::vector<TestPartResult>& test_part_results()
const {
630 return test_part_results_;
634 const std::vector<TestProperty>& test_properties()
const {
635 return test_properties_;
639 void set_start_timestamp(TimeInMillis start) { start_timestamp_ = start; }
642 void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
650 void RecordProperty(
const std::string& xml_element,
651 const TestProperty& test_property);
656 static bool ValidateTestProperty(
const std::string& xml_element,
657 const TestProperty& test_property);
660 void AddTestPartResult(
const TestPartResult& test_part_result);
663 int death_test_count()
const {
return death_test_count_; }
666 int increment_death_test_count() {
return ++death_test_count_; }
669 void ClearTestPartResults();
676 internal::Mutex test_properties_mutex_;
679 std::vector<TestPartResult> test_part_results_;
681 std::vector<TestProperty> test_properties_;
683 int death_test_count_;
685 TimeInMillis start_timestamp_;
687 TimeInMillis elapsed_time_;
690 GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult);
704 class GTEST_API_ TestInfo {
711 const char* test_suite_name()
const {
return test_suite_name_.c_str(); }
714 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 715 const char* test_case_name()
const {
return test_suite_name(); }
716 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 719 const char* name()
const {
return name_.c_str(); }
723 const char* type_param()
const {
724 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
730 const char* value_param()
const {
731 if (value_param_.get() !=
nullptr)
return value_param_->c_str();
736 const char* file()
const {
return location_.file.c_str(); }
739 int line()
const {
return location_.line; }
742 bool is_in_another_shard()
const {
return is_in_another_shard_; }
760 bool should_run()
const {
return should_run_; }
763 bool is_reportable()
const {
766 return matches_filter_ && !is_in_another_shard_;
770 const TestResult* result()
const {
return &result_; }
773 #if GTEST_HAS_DEATH_TEST 774 friend class internal::DefaultDeathTestFactory;
775 #endif // GTEST_HAS_DEATH_TEST 777 friend class TestSuite;
778 friend class internal::UnitTestImpl;
779 friend class internal::StreamingListenerTest;
780 friend TestInfo* internal::MakeAndRegisterTestInfo(
781 const char* test_suite_name,
const char* name,
const char* type_param,
782 const char* value_param, internal::CodeLocation code_location,
783 internal::TypeId fixture_class_id, internal::SetUpTestSuiteFunc set_up_tc,
784 internal::TearDownTestSuiteFunc tear_down_tc,
785 internal::TestFactoryBase* factory);
789 TestInfo(
const std::string& test_suite_name,
const std::string& name,
790 const char* a_type_param,
791 const char* a_value_param,
792 internal::CodeLocation a_code_location,
793 internal::TypeId fixture_class_id,
794 internal::TestFactoryBase* factory);
798 int increment_death_test_count() {
799 return result_.increment_death_test_count();
809 static void ClearTestResult(TestInfo* test_info) {
810 test_info->result_.Clear();
814 const std::string test_suite_name_;
815 const std::string name_;
818 const std::unique_ptr<const ::std::string> type_param_;
821 const std::unique_ptr<const ::std::string> value_param_;
822 internal::CodeLocation location_;
823 const internal::TypeId fixture_class_id_;
826 bool matches_filter_;
828 bool is_in_another_shard_;
829 internal::TestFactoryBase*
const factory_;
836 GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo);
842 class GTEST_API_ TestSuite {
856 TestSuite(
const char* name,
const char* a_type_param,
857 internal::SetUpTestSuiteFunc set_up_tc,
858 internal::TearDownTestSuiteFunc tear_down_tc);
861 virtual ~TestSuite();
864 const char* name()
const {
return name_.c_str(); }
868 const char* type_param()
const {
869 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
874 bool should_run()
const {
return should_run_; }
877 int successful_test_count()
const;
880 int skipped_test_count()
const;
883 int failed_test_count()
const;
886 int reportable_disabled_test_count()
const;
889 int disabled_test_count()
const;
892 int reportable_test_count()
const;
895 int test_to_run_count()
const;
898 int total_test_count()
const;
901 bool Passed()
const {
return !Failed(); }
904 bool Failed()
const {
905 return failed_test_count() > 0 || ad_hoc_test_result().Failed();
909 TimeInMillis elapsed_time()
const {
return elapsed_time_; }
913 TimeInMillis start_timestamp()
const {
return start_timestamp_; }
917 const TestInfo* GetTestInfo(
int i)
const;
921 const TestResult& ad_hoc_test_result()
const {
return ad_hoc_test_result_; }
925 friend class internal::UnitTestImpl;
928 std::vector<TestInfo*>& test_info_list() {
return test_info_list_; }
931 const std::vector<TestInfo*>& test_info_list()
const {
932 return test_info_list_;
937 TestInfo* GetMutableTestInfo(
int i);
940 void set_should_run(
bool should) { should_run_ = should; }
944 void AddTestInfo(TestInfo * test_info);
950 static void ClearTestSuiteResult(TestSuite* test_suite) {
951 test_suite->ClearResult();
962 void RunSetUpTestSuite() {
963 if (set_up_tc_ !=
nullptr) {
970 void RunTearDownTestSuite() {
971 if (tear_down_tc_ !=
nullptr) {
977 static bool TestPassed(
const TestInfo* test_info) {
978 return test_info->should_run() && test_info->result()->Passed();
982 static bool TestSkipped(
const TestInfo* test_info) {
983 return test_info->should_run() && test_info->result()->Skipped();
987 static bool TestFailed(
const TestInfo* test_info) {
988 return test_info->should_run() && test_info->result()->Failed();
993 static bool TestReportableDisabled(
const TestInfo* test_info) {
994 return test_info->is_reportable() && test_info->is_disabled_;
998 static bool TestDisabled(
const TestInfo* test_info) {
999 return test_info->is_disabled_;
1003 static bool TestReportable(
const TestInfo* test_info) {
1004 return test_info->is_reportable();
1008 static bool ShouldRunTest(
const TestInfo* test_info) {
1009 return test_info->should_run();
1013 void ShuffleTests(internal::Random* random);
1016 void UnshuffleTests();
1022 const std::unique_ptr<const ::std::string> type_param_;
1025 std::vector<TestInfo*> test_info_list_;
1029 std::vector<int> test_indices_;
1031 internal::SetUpTestSuiteFunc set_up_tc_;
1033 internal::TearDownTestSuiteFunc tear_down_tc_;
1037 TimeInMillis start_timestamp_;
1039 TimeInMillis elapsed_time_;
1042 TestResult ad_hoc_test_result_;
1045 GTEST_DISALLOW_COPY_AND_ASSIGN_(TestSuite);
1065 virtual ~Environment() {}
1068 virtual void SetUp() {}
1071 virtual void TearDown() {}
1075 struct Setup_should_be_spelled_SetUp {};
1076 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
1079 #if GTEST_HAS_EXCEPTIONS 1082 class GTEST_API_ AssertionException
1083 :
public internal::GoogleTestFailureException {
1085 explicit AssertionException(
const TestPartResult& result)
1086 : GoogleTestFailureException(result) {}
1089 #endif // GTEST_HAS_EXCEPTIONS 1093 class TestEventListener {
1095 virtual ~TestEventListener() {}
1098 virtual void OnTestProgramStart(
const UnitTest& unit_test) = 0;
1103 virtual void OnTestIterationStart(
const UnitTest& unit_test,
1107 virtual void OnEnvironmentsSetUpStart(
const UnitTest& unit_test) = 0;
1110 virtual void OnEnvironmentsSetUpEnd(
const UnitTest& unit_test) = 0;
1113 virtual void OnTestSuiteStart(
const TestSuite& ) {}
1116 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1117 virtual void OnTestCaseStart(
const TestCase& ) {}
1118 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1121 virtual void OnTestStart(
const TestInfo& test_info) = 0;
1126 virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
1129 virtual void OnTestEnd(
const TestInfo& test_info) = 0;
1132 virtual void OnTestSuiteEnd(
const TestSuite& ) {}
1135 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1136 virtual void OnTestCaseEnd(
const TestCase& ) {}
1137 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1140 virtual void OnEnvironmentsTearDownStart(
const UnitTest& unit_test) = 0;
1143 virtual void OnEnvironmentsTearDownEnd(
const UnitTest& unit_test) = 0;
1146 virtual void OnTestIterationEnd(
const UnitTest& unit_test,
1150 virtual void OnTestProgramEnd(
const UnitTest& unit_test) = 0;
1158 class EmptyTestEventListener :
public TestEventListener {
1160 void OnTestProgramStart(
const UnitTest& )
override {}
1161 void OnTestIterationStart(
const UnitTest& ,
1163 void OnEnvironmentsSetUpStart(
const UnitTest& )
override {}
1164 void OnEnvironmentsSetUpEnd(
const UnitTest& )
override {}
1165 void OnTestSuiteStart(
const TestSuite& )
override {}
1167 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1168 void OnTestCaseStart(
const TestCase& )
override {}
1169 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1171 void OnTestStart(
const TestInfo& )
override {}
1172 void OnTestPartResult(
const TestPartResult& )
override {}
1173 void OnTestEnd(
const TestInfo& )
override {}
1174 void OnTestSuiteEnd(
const TestSuite& )
override {}
1175 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1176 void OnTestCaseEnd(
const TestCase& )
override {}
1177 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1179 void OnEnvironmentsTearDownStart(
const UnitTest& )
override {}
1180 void OnEnvironmentsTearDownEnd(
const UnitTest& )
override {}
1181 void OnTestIterationEnd(
const UnitTest& ,
1183 void OnTestProgramEnd(
const UnitTest& )
override {}
1187 class GTEST_API_ TestEventListeners {
1189 TestEventListeners();
1190 ~TestEventListeners();
1195 void Append(TestEventListener* listener);
1200 TestEventListener* Release(TestEventListener* listener);
1207 TestEventListener* default_result_printer()
const {
1208 return default_result_printer_;
1218 TestEventListener* default_xml_generator()
const {
1219 return default_xml_generator_;
1223 friend class TestSuite;
1224 friend class TestInfo;
1225 friend class internal::DefaultGlobalTestPartResultReporter;
1226 friend class internal::NoExecDeathTest;
1227 friend class internal::TestEventListenersAccessor;
1228 friend class internal::UnitTestImpl;
1232 TestEventListener* repeater();
1239 void SetDefaultResultPrinter(TestEventListener* listener);
1246 void SetDefaultXmlGenerator(TestEventListener* listener);
1250 bool EventForwardingEnabled()
const;
1251 void SuppressEventForwarding();
1254 internal::TestEventRepeater* repeater_;
1256 TestEventListener* default_result_printer_;
1258 TestEventListener* default_xml_generator_;
1261 GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners);
1274 class GTEST_API_ UnitTest {
1279 static UnitTest* GetInstance();
1287 int Run() GTEST_MUST_USE_RESULT_;
1291 const
char* original_working_dir() const;
1295 const TestSuite* current_test_suite() const GTEST_LOCK_EXCLUDED_(mutex_);
1298 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1299 const TestCase* current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_);
1304 const TestInfo* current_test_info() const
1305 GTEST_LOCK_EXCLUDED_(mutex_);
1308 int random_seed() const;
1314 internal::ParameterizedTestSuiteRegistry& parameterized_test_registry()
1315 GTEST_LOCK_EXCLUDED_(mutex_);
1318 int successful_test_suite_count() const;
1321 int failed_test_suite_count() const;
1324 int total_test_suite_count() const;
1328 int test_suite_to_run_count() const;
1331 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1332 int successful_test_case_count()
const;
1333 int failed_test_case_count()
const;
1334 int total_test_case_count()
const;
1335 int test_case_to_run_count()
const;
1336 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1339 int successful_test_count()
const;
1342 int skipped_test_count()
const;
1345 int failed_test_count()
const;
1348 int reportable_disabled_test_count()
const;
1351 int disabled_test_count()
const;
1354 int reportable_test_count()
const;
1357 int total_test_count()
const;
1360 int test_to_run_count()
const;
1364 TimeInMillis start_timestamp()
const;
1367 TimeInMillis elapsed_time()
const;
1371 bool Passed()
const;
1375 bool Failed()
const;
1379 const TestSuite* GetTestSuite(
int i)
const;
1382 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1383 const TestCase* GetTestCase(
int i)
const;
1384 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1388 const TestResult& ad_hoc_test_result()
const;
1392 TestEventListeners& listeners();
1404 Environment* AddEnvironment(Environment* env);
1410 void AddTestPartResult(TestPartResult::Type result_type,
1411 const char* file_name,
1413 const std::string& message,
1414 const std::string& os_stack_trace)
1415 GTEST_LOCK_EXCLUDED_(mutex_);
1422 void RecordProperty(
const std::string& key,
const std::string& value);
1426 TestSuite* GetMutableTestSuite(
int i);
1429 internal::UnitTestImpl* impl() {
return impl_; }
1430 const internal::UnitTestImpl* impl()
const {
return impl_; }
1434 friend class ScopedTrace;
1436 friend class internal::AssertHelper;
1437 friend class internal::StreamingListenerTest;
1438 friend class internal::UnitTestRecordPropertyTestHelper;
1439 friend Environment* AddGlobalTestEnvironment(Environment* env);
1440 friend std::set<std::string>* internal::GetIgnoredParameterizedTestSuites();
1441 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
1442 friend void internal::ReportFailureInUnknownLocation(
1443 TestPartResult::Type result_type,
1444 const std::string& message);
1450 virtual ~UnitTest();
1454 void PushGTestTrace(
const internal::TraceInfo& trace)
1455 GTEST_LOCK_EXCLUDED_(mutex_);
1458 void PopGTestTrace()
1459 GTEST_LOCK_EXCLUDED_(mutex_);
1463 mutable internal::Mutex mutex_;
1469 internal::UnitTestImpl* impl_;
1472 GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest);
1493 inline Environment* AddGlobalTestEnvironment(Environment* env) {
1494 return UnitTest::GetInstance()->AddEnvironment(env);
1506 GTEST_API_
void InitGoogleTest(
int* argc,
char** argv);
1510 GTEST_API_
void InitGoogleTest(
int* argc,
wchar_t** argv);
1514 GTEST_API_
void InitGoogleTest();
1516 namespace internal {
1521 template <
typename T1,
typename T2>
1522 AssertionResult CmpHelperEQFailure(
const char* lhs_expression,
1523 const char* rhs_expression,
1524 const T1& lhs,
const T2& rhs) {
1525 return EqFailure(lhs_expression,
1527 FormatForComparisonFailureMessage(lhs, rhs),
1528 FormatForComparisonFailureMessage(rhs, lhs),
1536 inline bool operator==(faketype, faketype) {
return true; }
1537 inline bool operator!=(faketype, faketype) {
return false; }
1540 template <
typename T1,
typename T2>
1541 AssertionResult CmpHelperEQ(
const char* lhs_expression,
1542 const char* rhs_expression,
1546 return AssertionSuccess();
1549 return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs);
1556 typename T1,
typename T2,
1559 typename std::enable_if<!std::is_integral<T1>::value ||
1560 !std::is_pointer<T2>::value>::type* =
nullptr>
1561 static AssertionResult Compare(
const char* lhs_expression,
1562 const char* rhs_expression,
const T1& lhs,
1564 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1573 static AssertionResult Compare(
const char* lhs_expression,
1574 const char* rhs_expression,
1577 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1580 template <
typename T>
1581 static AssertionResult Compare(
1582 const char* lhs_expression,
const char* rhs_expression,
1584 std::nullptr_t , T* rhs) {
1586 return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(
nullptr),
1594 template <
typename T1,
typename T2>
1595 AssertionResult CmpHelperOpFailure(
const char* expr1,
const char* expr2,
1596 const T1& val1,
const T2& val2,
1598 return AssertionFailure()
1599 <<
"Expected: (" << expr1 <<
") " << op <<
" (" << expr2
1600 <<
"), actual: " << FormatForComparisonFailureMessage(val1, val2)
1601 <<
" vs " << FormatForComparisonFailureMessage(val2, val1);
1610 #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 1611 template <typename T1, typename T2>\ 1612 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 1613 const T1& val1, const T2& val2) {\ 1614 if (val1 op val2) {\ 1615 return AssertionSuccess();\ 1617 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\ 1624 GTEST_IMPL_CMP_HELPER_(NE, !=)
1626 GTEST_IMPL_CMP_HELPER_(LE, <=)
1628 GTEST_IMPL_CMP_HELPER_(LT, <)
1630 GTEST_IMPL_CMP_HELPER_(GE, >=)
1632 GTEST_IMPL_CMP_HELPER_(GT, >)
1634 #undef GTEST_IMPL_CMP_HELPER_ 1639 GTEST_API_ AssertionResult CmpHelperSTREQ(
const char* s1_expression,
1640 const char* s2_expression,
1647 GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(
const char* s1_expression,
1648 const char* s2_expression,
1655 GTEST_API_ AssertionResult CmpHelperSTRNE(
const char* s1_expression,
1656 const char* s2_expression,
1663 GTEST_API_ AssertionResult CmpHelperSTRCASENE(
const char* s1_expression,
1664 const char* s2_expression,
1672 GTEST_API_ AssertionResult CmpHelperSTREQ(
const char* s1_expression,
1673 const char* s2_expression,
1680 GTEST_API_ AssertionResult CmpHelperSTRNE(
const char* s1_expression,
1681 const char* s2_expression,
1695 GTEST_API_ AssertionResult IsSubstring(
1696 const char* needle_expr,
const char* haystack_expr,
1697 const char* needle,
const char* haystack);
1698 GTEST_API_ AssertionResult IsSubstring(
1699 const char* needle_expr,
const char* haystack_expr,
1700 const wchar_t* needle,
const wchar_t* haystack);
1701 GTEST_API_ AssertionResult IsNotSubstring(
1702 const char* needle_expr,
const char* haystack_expr,
1703 const char* needle,
const char* haystack);
1704 GTEST_API_ AssertionResult IsNotSubstring(
1705 const char* needle_expr,
const char* haystack_expr,
1706 const wchar_t* needle,
const wchar_t* haystack);
1707 GTEST_API_ AssertionResult IsSubstring(
1708 const char* needle_expr,
const char* haystack_expr,
1709 const ::std::string& needle, const ::std::string& haystack);
1710 GTEST_API_ AssertionResult IsNotSubstring(
1711 const char* needle_expr,
const char* haystack_expr,
1712 const ::std::string& needle, const ::std::string& haystack);
1714 #if GTEST_HAS_STD_WSTRING 1715 GTEST_API_ AssertionResult IsSubstring(
1716 const char* needle_expr,
const char* haystack_expr,
1717 const ::std::wstring& needle, const ::std::wstring& haystack);
1718 GTEST_API_ AssertionResult IsNotSubstring(
1719 const char* needle_expr,
const char* haystack_expr,
1720 const ::std::wstring& needle, const ::std::wstring& haystack);
1721 #endif // GTEST_HAS_STD_WSTRING 1723 namespace internal {
1732 template <
typename RawType>
1733 AssertionResult CmpHelperFloatingPointEQ(
const char* lhs_expression,
1734 const char* rhs_expression,
1736 RawType rhs_value) {
1737 const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value);
1739 if (lhs.AlmostEquals(rhs)) {
1740 return AssertionSuccess();
1743 ::std::stringstream lhs_ss;
1744 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1747 ::std::stringstream rhs_ss;
1748 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1751 return EqFailure(lhs_expression,
1753 StringStreamToString(&lhs_ss),
1754 StringStreamToString(&rhs_ss),
1761 GTEST_API_ AssertionResult DoubleNearPredFormat(
const char* expr1,
1763 const char* abs_error_expr,
1770 class GTEST_API_ AssertHelper {
1773 AssertHelper(TestPartResult::Type type,
1776 const char* message);
1781 void operator=(
const Message& message)
const;
1788 struct AssertHelperData {
1789 AssertHelperData(TestPartResult::Type t,
1790 const char* srcfile,
1793 : type(t), file(srcfile), line(line_num), message(msg) { }
1795 TestPartResult::Type
const type;
1796 const char*
const file;
1798 std::string
const message;
1801 GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
1804 AssertHelperData*
const data_;
1806 GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper);
1845 template <
typename T>
1846 class WithParamInterface {
1848 typedef T ParamType;
1849 virtual ~WithParamInterface() {}
1853 static const ParamType& GetParam() {
1854 GTEST_CHECK_(parameter_ !=
nullptr)
1855 <<
"GetParam() can only be called inside a value-parameterized test " 1856 <<
"-- did you intend to write TEST_P instead of TEST_F?";
1863 static void SetParam(
const ParamType* parameter) {
1864 parameter_ = parameter;
1868 static const ParamType* parameter_;
1871 template <
class TestClass>
friend class internal::ParameterizedTestFactory;
1874 template <
typename T>
1875 const T* WithParamInterface<T>::parameter_ =
nullptr;
1880 template <
typename T>
1881 class TestWithParam :
public Test,
public WithParamInterface<T> {
1889 #define GTEST_SKIP() GTEST_SKIP_("") 1909 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 1913 #define ADD_FAILURE_AT(file, line) \ 1914 GTEST_MESSAGE_AT_(file, line, "Failed", \ 1915 ::testing::TestPartResult::kNonFatalFailure) 1918 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 1921 #define GTEST_FAIL_AT(file, line) \ 1922 GTEST_MESSAGE_AT_(file, line, "Failed", \ 1923 ::testing::TestPartResult::kFatalFailure) 1927 #if !GTEST_DONT_DEFINE_FAIL 1928 # define FAIL() GTEST_FAIL() 1932 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 1936 #if !GTEST_DONT_DEFINE_SUCCEED 1937 # define SUCCEED() GTEST_SUCCEED() 1949 #define EXPECT_THROW(statement, expected_exception) \ 1950 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 1951 #define EXPECT_NO_THROW(statement) \ 1952 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 1953 #define EXPECT_ANY_THROW(statement) \ 1954 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 1955 #define ASSERT_THROW(statement, expected_exception) \ 1956 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 1957 #define ASSERT_NO_THROW(statement) \ 1958 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 1959 #define ASSERT_ANY_THROW(statement) \ 1960 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 1965 #define GTEST_EXPECT_TRUE(condition) \ 1966 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 1967 GTEST_NONFATAL_FAILURE_) 1968 #define GTEST_EXPECT_FALSE(condition) \ 1969 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 1970 GTEST_NONFATAL_FAILURE_) 1971 #define GTEST_ASSERT_TRUE(condition) \ 1972 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 1973 GTEST_FATAL_FAILURE_) 1974 #define GTEST_ASSERT_FALSE(condition) \ 1975 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 1976 GTEST_FATAL_FAILURE_) 1981 #if !GTEST_DONT_DEFINE_EXPECT_TRUE 1982 #define EXPECT_TRUE(condition) GTEST_EXPECT_TRUE(condition) 1985 #if !GTEST_DONT_DEFINE_EXPECT_FALSE 1986 #define EXPECT_FALSE(condition) GTEST_EXPECT_FALSE(condition) 1989 #if !GTEST_DONT_DEFINE_ASSERT_TRUE 1990 #define ASSERT_TRUE(condition) GTEST_ASSERT_TRUE(condition) 1993 #if !GTEST_DONT_DEFINE_ASSERT_FALSE 1994 #define ASSERT_FALSE(condition) GTEST_ASSERT_FALSE(condition) 2043 #define EXPECT_EQ(val1, val2) \ 2044 EXPECT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2) 2045 #define EXPECT_NE(val1, val2) \ 2046 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 2047 #define EXPECT_LE(val1, val2) \ 2048 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 2049 #define EXPECT_LT(val1, val2) \ 2050 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 2051 #define EXPECT_GE(val1, val2) \ 2052 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 2053 #define EXPECT_GT(val1, val2) \ 2054 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 2056 #define GTEST_ASSERT_EQ(val1, val2) \ 2057 ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2) 2058 #define GTEST_ASSERT_NE(val1, val2) \ 2059 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 2060 #define GTEST_ASSERT_LE(val1, val2) \ 2061 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 2062 #define GTEST_ASSERT_LT(val1, val2) \ 2063 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 2064 #define GTEST_ASSERT_GE(val1, val2) \ 2065 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 2066 #define GTEST_ASSERT_GT(val1, val2) \ 2067 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 2072 #if !GTEST_DONT_DEFINE_ASSERT_EQ 2073 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 2076 #if !GTEST_DONT_DEFINE_ASSERT_NE 2077 # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 2080 #if !GTEST_DONT_DEFINE_ASSERT_LE 2081 # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 2084 #if !GTEST_DONT_DEFINE_ASSERT_LT 2085 # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 2088 #if !GTEST_DONT_DEFINE_ASSERT_GE 2089 # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 2092 #if !GTEST_DONT_DEFINE_ASSERT_GT 2093 # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 2112 #define EXPECT_STREQ(s1, s2) \ 2113 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 2114 #define EXPECT_STRNE(s1, s2) \ 2115 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 2116 #define EXPECT_STRCASEEQ(s1, s2) \ 2117 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 2118 #define EXPECT_STRCASENE(s1, s2)\ 2119 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 2121 #define ASSERT_STREQ(s1, s2) \ 2122 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 2123 #define ASSERT_STRNE(s1, s2) \ 2124 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 2125 #define ASSERT_STRCASEEQ(s1, s2) \ 2126 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 2127 #define ASSERT_STRCASENE(s1, s2)\ 2128 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 2144 #define EXPECT_FLOAT_EQ(val1, val2)\ 2145 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 2148 #define EXPECT_DOUBLE_EQ(val1, val2)\ 2149 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 2152 #define ASSERT_FLOAT_EQ(val1, val2)\ 2153 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 2156 #define ASSERT_DOUBLE_EQ(val1, val2)\ 2157 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 2160 #define EXPECT_NEAR(val1, val2, abs_error)\ 2161 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 2162 val1, val2, abs_error) 2164 #define ASSERT_NEAR(val1, val2, abs_error)\ 2165 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 2166 val1, val2, abs_error) 2175 GTEST_API_ AssertionResult FloatLE(
const char* expr1,
const char* expr2,
2176 float val1,
float val2);
2177 GTEST_API_ AssertionResult DoubleLE(
const char* expr1,
const char* expr2,
2178 double val1,
double val2);
2181 #if GTEST_OS_WINDOWS 2192 # define EXPECT_HRESULT_SUCCEEDED(expr) \ 2193 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 2195 # define ASSERT_HRESULT_SUCCEEDED(expr) \ 2196 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 2198 # define EXPECT_HRESULT_FAILED(expr) \ 2199 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 2201 # define ASSERT_HRESULT_FAILED(expr) \ 2202 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 2204 #endif // GTEST_OS_WINDOWS 2216 #define ASSERT_NO_FATAL_FAILURE(statement) \ 2217 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 2218 #define EXPECT_NO_FATAL_FAILURE(statement) \ 2219 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 2231 class GTEST_API_ ScopedTrace {
2238 template <
typename T>
2239 ScopedTrace(
const char* file,
int line,
const T& message) {
2240 PushTrace(file, line, (Message() << message).GetString());
2244 ScopedTrace(
const char* file,
int line,
const char* message) {
2245 PushTrace(file, line, message ? message :
"(null)");
2248 ScopedTrace(
const char* file,
int line,
const std::string& message) {
2249 PushTrace(file, line, message);
2259 void PushTrace(
const char* file,
int line, std::string message);
2261 GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace);
2262 } GTEST_ATTRIBUTE_UNUSED_;
2281 #define SCOPED_TRACE(message) \ 2282 ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 2283 __FILE__, __LINE__, (message)) 2315 template <
typename T1,
typename T2>
2316 constexpr
bool StaticAssertTypeEq() noexcept {
2317 static_assert(std::is_same<T1, T2>::value,
"T1 and T2 are not the same type");
2346 #define GTEST_TEST(test_suite_name, test_name) \ 2347 GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \ 2348 ::testing::internal::GetTestTypeId()) 2352 #if !GTEST_DONT_DEFINE_TEST 2353 #define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name) 2383 #if !GTEST_DONT_DEFINE_TEST 2384 #define TEST_F(test_fixture, test_name)\ 2385 GTEST_TEST_(test_fixture, test_name, test_fixture, \ 2386 ::testing::internal::GetTypeId<test_fixture>()) 2387 #endif // !GTEST_DONT_DEFINE_TEST 2391 GTEST_API_ std::string TempDir();
2394 # pragma warning(pop) 2454 template <
int&... ExplicitParameterBarrier,
typename Factory>
2455 TestInfo* RegisterTest(
const char* test_suite_name,
const char* test_name,
2456 const char* type_param,
const char* value_param,
2457 const char* file,
int line, Factory factory) {
2458 using TestT =
typename std::remove_pointer<decltype(factory())>::type;
2460 class FactoryImpl :
public internal::TestFactoryBase {
2462 explicit FactoryImpl(Factory f) : factory_(
std::move(f)) {}
2463 Test* CreateTest()
override {
return factory_(); }
2469 return internal::MakeAndRegisterTestInfo(
2470 test_suite_name, test_name, type_param, value_param,
2471 internal::CodeLocation(file, line), internal::GetTypeId<TestT>(),
2472 internal::SuiteApiResolver<TestT>::GetSetUpCaseOrSuite(file, line),
2473 internal::SuiteApiResolver<TestT>::GetTearDownCaseOrSuite(file, line),
2474 new FactoryImpl{std::move(factory)});
2487 int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_;
2489 inline
int RUN_ALL_TESTS() {
2490 return ::testing::UnitTest::GetInstance()->Run();
2493 GTEST_DISABLE_MSC_WARNINGS_POP_()
2495 #endif // GOOGLETEST_INCLUDE_GTEST_GTEST_H_ JSON_API OStream & operator<<(OStream &, const Value &root)
Output using the StyledStreamWriter.
Definition: gmock-actions.h:154
Definition: gtest-internal.h:1322