52 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 53 #define GTEST_INCLUDE_GTEST_GTEST_H_ 60 #include "gtest/internal/gtest-internal.h" 61 #include "gtest/internal/gtest-string.h" 62 #include "gtest/gtest-death-test.h" 63 #include "gtest/gtest-matchers.h" 64 #include "gtest/gtest-message.h" 65 #include "gtest/gtest-param-test.h" 66 #include "gtest/gtest-printers.h" 67 #include "gtest/gtest_prod.h" 68 #include "gtest/gtest-test-part.h" 69 #include "gtest/gtest-typed-test.h" 71 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \
94 # pragma warning(push) 95 # pragma warning(disable:4805) 96 # pragma warning(disable:4100) 103 GTEST_DECLARE_bool_(also_run_disabled_tests);
106 GTEST_DECLARE_bool_(break_on_failure);
110 GTEST_DECLARE_bool_(catch_exceptions);
115 GTEST_DECLARE_string_(color);
119 GTEST_DECLARE_string_(filter);
123 GTEST_DECLARE_bool_(install_failure_signal_handler);
127 GTEST_DECLARE_bool_(list_tests);
131 GTEST_DECLARE_string_(output);
135 GTEST_DECLARE_bool_(print_time);
138 GTEST_DECLARE_bool_(print_utf8);
141 GTEST_DECLARE_int32_(random_seed);
145 GTEST_DECLARE_int32_(repeat);
149 GTEST_DECLARE_bool_(show_internal_stack_frames);
152 GTEST_DECLARE_bool_(shuffle);
156 GTEST_DECLARE_int32_(stack_trace_depth);
161 GTEST_DECLARE_bool_(throw_on_failure);
166 GTEST_DECLARE_string_(stream_result_to);
168 #if GTEST_USE_OWN_FLAGFILE_FLAG_ 169 GTEST_DECLARE_string_(flagfile);
170 #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ 173 const int kMaxStackTraceDepth = 100;
178 class DefaultGlobalTestPartResultReporter;
180 class NoExecDeathTest;
181 class FinalSuccessChecker;
182 class GTestFlagSaver;
183 class StreamingListenerTest;
184 class TestResultAccessor;
185 class TestEventListenersAccessor;
186 class TestEventRepeater;
187 class UnitTestRecordPropertyTestHelper;
188 class WindowsDeathTest;
189 class FuchsiaDeathTest;
190 class UnitTestImpl* GetUnitTestImpl();
191 void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
192 const std::string& message);
203 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 204 using TestCase = TestSuite;
288 class GTEST_API_ AssertionResult {
292 AssertionResult(
const AssertionResult& other);
294 #if defined(_MSC_VER) && _MSC_VER < 1910 295 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 )
305 template <
typename T>
306 explicit AssertionResult(
308 typename internal::EnableIf<
309 !std::is_convertible<T, AssertionResult>::value>::type*
312 : success_(success) {}
314 #if defined(_MSC_VER) && _MSC_VER < 1910 315 GTEST_DISABLE_MSC_WARNINGS_POP_()
319 AssertionResult& operator=(AssertionResult other) {
325 operator bool()
const {
return success_; }
328 AssertionResult operator!()
const;
334 const char* message()
const {
335 return message_.get() !=
nullptr ? message_->c_str() :
"";
338 const char* failure_message()
const {
return message(); }
341 template <
typename T> AssertionResult& operator<<(
const T& value) {
342 AppendMessage(Message() << value);
348 AssertionResult& operator<<(
349 ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
350 AppendMessage(Message() << basic_manipulator);
356 void AppendMessage(
const Message& a_message) {
357 if (message_.get() ==
nullptr) message_.reset(new ::std::string);
358 message_->append(a_message.GetString().c_str());
362 void swap(AssertionResult& other);
370 std::unique_ptr< ::std::string> message_;
374 GTEST_API_ AssertionResult AssertionSuccess();
377 GTEST_API_ AssertionResult AssertionFailure();
381 GTEST_API_ AssertionResult AssertionFailure(
const Message& msg);
388 #include "gtest/gtest_pred_impl.h" 428 static void SetUpTestSuite() {}
436 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) {
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 const TestPartResult& GetTestPartResult(
int i)
const;
617 friend class internal::DefaultGlobalTestPartResultReporter;
618 friend class internal::ExecDeathTest;
619 friend class internal::TestResultAccessor;
620 friend class internal::UnitTestImpl;
621 friend class internal::WindowsDeathTest;
622 friend class internal::FuchsiaDeathTest;
625 const std::vector<TestPartResult>& test_part_results()
const {
626 return test_part_results_;
630 const std::vector<TestProperty>& test_properties()
const {
631 return test_properties_;
635 void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
643 void RecordProperty(
const std::string& xml_element,
649 static bool ValidateTestProperty(
const std::string& xml_element,
653 void AddTestPartResult(
const TestPartResult& test_part_result);
656 int death_test_count()
const {
return death_test_count_; }
659 int increment_death_test_count() {
return ++death_test_count_; }
662 void ClearTestPartResults();
672 std::vector<TestPartResult> test_part_results_;
674 std::vector<TestProperty> test_properties_;
676 int death_test_count_;
678 TimeInMillis elapsed_time_;
702 const char* test_suite_name()
const {
return test_suite_name_.c_str(); }
705 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 706 const char* test_case_name()
const {
return test_suite_name(); }
707 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 710 const char* name()
const {
return name_.c_str(); }
714 const char* type_param()
const {
715 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
721 const char* value_param()
const {
722 if (value_param_.get() !=
nullptr)
return value_param_->c_str();
727 const char* file()
const {
return location_.file.c_str(); }
730 int line()
const {
return location_.line; }
733 bool is_in_another_shard()
const {
return is_in_another_shard_; }
751 bool should_run()
const {
return should_run_; }
754 bool is_reportable()
const {
757 return matches_filter_ && !is_in_another_shard_;
761 const TestResult* result()
const {
return &result_; }
764 #if GTEST_HAS_DEATH_TEST 765 friend class internal::DefaultDeathTestFactory;
766 #endif // GTEST_HAS_DEATH_TEST 769 friend class internal::UnitTestImpl;
770 friend class internal::StreamingListenerTest;
771 friend TestInfo* internal::MakeAndRegisterTestInfo(
772 const char* test_suite_name,
const char* name,
const char* type_param,
774 internal::TypeId fixture_class_id, internal::SetUpTestSuiteFunc set_up_tc,
775 internal::TearDownTestSuiteFunc tear_down_tc,
780 TestInfo(
const std::string& test_suite_name,
const std::string& name,
781 const char* a_type_param,
782 const char* a_value_param,
784 internal::TypeId fixture_class_id,
789 int increment_death_test_count() {
790 return result_.increment_death_test_count();
797 static void ClearTestResult(
TestInfo* test_info) {
798 test_info->result_.Clear();
802 const std::string test_suite_name_;
803 const std::string name_;
806 const std::unique_ptr<const ::std::string> type_param_;
809 const std::unique_ptr<const ::std::string> value_param_;
811 const internal::TypeId fixture_class_id_;
814 bool matches_filter_;
816 bool is_in_another_shard_;
824 GTEST_DISALLOW_COPY_AND_ASSIGN_(
TestInfo);
844 TestSuite(
const char* name,
const char* a_type_param,
845 internal::SetUpTestSuiteFunc set_up_tc,
846 internal::TearDownTestSuiteFunc tear_down_tc);
852 const char* name()
const {
return name_.c_str(); }
856 const char* type_param()
const {
857 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
862 bool should_run()
const {
return should_run_; }
865 int successful_test_count()
const;
868 int skipped_test_count()
const;
871 int failed_test_count()
const;
874 int reportable_disabled_test_count()
const;
877 int disabled_test_count()
const;
880 int reportable_test_count()
const;
883 int test_to_run_count()
const;
886 int total_test_count()
const;
889 bool Passed()
const {
return !Failed(); }
892 bool Failed()
const {
return failed_test_count() > 0; }
895 TimeInMillis elapsed_time()
const {
return elapsed_time_; }
899 const TestInfo* GetTestInfo(
int i)
const;
903 const TestResult& ad_hoc_test_result()
const {
return ad_hoc_test_result_; }
907 friend class internal::UnitTestImpl;
910 std::vector<TestInfo*>& test_info_list() {
return test_info_list_; }
913 const std::vector<TestInfo*>& test_info_list()
const {
914 return test_info_list_;
919 TestInfo* GetMutableTestInfo(
int i);
922 void set_should_run(
bool should) { should_run_ = should; }
926 void AddTestInfo(
TestInfo * test_info);
932 static void ClearTestSuiteResult(
TestSuite* test_suite) {
933 test_suite->ClearResult();
941 void RunSetUpTestSuite() {
942 if (set_up_tc_ !=
nullptr) {
949 void RunTearDownTestSuite() {
950 if (tear_down_tc_ !=
nullptr) {
956 static bool TestPassed(
const TestInfo* test_info) {
957 return test_info->should_run() && test_info->result()->Passed();
961 static bool TestSkipped(
const TestInfo* test_info) {
962 return test_info->should_run() && test_info->result()->Skipped();
966 static bool TestFailed(
const TestInfo* test_info) {
967 return test_info->should_run() && test_info->result()->Failed();
972 static bool TestReportableDisabled(
const TestInfo* test_info) {
973 return test_info->is_reportable() && test_info->is_disabled_;
977 static bool TestDisabled(
const TestInfo* test_info) {
978 return test_info->is_disabled_;
982 static bool TestReportable(
const TestInfo* test_info) {
983 return test_info->is_reportable();
987 static bool ShouldRunTest(
const TestInfo* test_info) {
988 return test_info->should_run();
995 void UnshuffleTests();
1001 const std::unique_ptr<const ::std::string> type_param_;
1004 std::vector<TestInfo*> test_info_list_;
1008 std::vector<int> test_indices_;
1010 internal::SetUpTestSuiteFunc set_up_tc_;
1012 internal::TearDownTestSuiteFunc tear_down_tc_;
1016 TimeInMillis elapsed_time_;
1022 GTEST_DISALLOW_COPY_AND_ASSIGN_(
TestSuite);
1045 virtual void SetUp() {}
1048 virtual void TearDown() {}
1052 struct Setup_should_be_spelled_SetUp {};
1053 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
1056 #if GTEST_HAS_EXCEPTIONS 1059 class GTEST_API_ AssertionException
1060 :
public internal::GoogleTestFailureException {
1062 explicit AssertionException(
const TestPartResult& result)
1063 : GoogleTestFailureException(result) {}
1066 #endif // GTEST_HAS_EXCEPTIONS 1075 virtual void OnTestProgramStart(
const UnitTest& unit_test) = 0;
1080 virtual void OnTestIterationStart(
const UnitTest& unit_test,
1084 virtual void OnEnvironmentsSetUpStart(
const UnitTest& unit_test) = 0;
1087 virtual void OnEnvironmentsSetUpEnd(
const UnitTest& unit_test) = 0;
1090 virtual void OnTestSuiteStart(
const TestSuite& ) {}
1093 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1094 virtual void OnTestCaseStart(
const TestCase& ) {}
1095 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1098 virtual void OnTestStart(
const TestInfo& test_info) = 0;
1103 virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
1106 virtual void OnTestEnd(
const TestInfo& test_info) = 0;
1109 virtual void OnTestSuiteEnd(
const TestSuite& ) {}
1112 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1113 virtual void OnTestCaseEnd(
const TestCase& ) {}
1114 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1117 virtual void OnEnvironmentsTearDownStart(
const UnitTest& unit_test) = 0;
1120 virtual void OnEnvironmentsTearDownEnd(
const UnitTest& unit_test) = 0;
1123 virtual void OnTestIterationEnd(
const UnitTest& unit_test,
1127 virtual void OnTestProgramEnd(
const UnitTest& unit_test) = 0;
1137 void OnTestProgramStart(
const UnitTest& )
override {}
1138 void OnTestIterationStart(
const UnitTest& ,
1140 void OnEnvironmentsSetUpStart(
const UnitTest& )
override {}
1141 void OnEnvironmentsSetUpEnd(
const UnitTest& )
override {}
1142 void OnTestSuiteStart(
const TestSuite& )
override {}
1144 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1145 void OnTestCaseStart(
const TestCase& )
override {}
1146 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1148 void OnTestStart(
const TestInfo& )
override {}
1149 void OnTestPartResult(
const TestPartResult& )
override {}
1150 void OnTestEnd(
const TestInfo& )
override {}
1151 void OnTestSuiteEnd(
const TestSuite& )
override {}
1152 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1153 void OnTestCaseEnd(
const TestCase& )
override {}
1154 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1156 void OnEnvironmentsTearDownStart(
const UnitTest& )
override {}
1157 void OnEnvironmentsTearDownEnd(
const UnitTest& )
override {}
1158 void OnTestIterationEnd(
const UnitTest& ,
1160 void OnTestProgramEnd(
const UnitTest& )
override {}
1185 return default_result_printer_;
1196 return default_xml_generator_;
1202 friend class internal::DefaultGlobalTestPartResultReporter;
1203 friend class internal::NoExecDeathTest;
1205 friend class internal::UnitTestImpl;
1227 bool EventForwardingEnabled()
const;
1228 void SuppressEventForwarding();
1264 int Run() GTEST_MUST_USE_RESULT_;
1268 const char* original_working_dir()
const;
1272 const TestSuite* current_test_suite()
const GTEST_LOCK_EXCLUDED_(mutex_);
1275 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1276 const TestCase* current_test_case()
const GTEST_LOCK_EXCLUDED_(mutex_);
1281 const TestInfo* current_test_info()
const 1282 GTEST_LOCK_EXCLUDED_(mutex_);
1285 int random_seed()
const;
1292 GTEST_LOCK_EXCLUDED_(mutex_);
1295 int successful_test_suite_count()
const;
1298 int failed_test_suite_count()
const;
1301 int total_test_suite_count()
const;
1305 int test_suite_to_run_count()
const;
1308 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1309 int successful_test_case_count()
const;
1310 int failed_test_case_count()
const;
1311 int total_test_case_count()
const;
1312 int test_case_to_run_count()
const;
1313 #endif // EMOVE_LEGACY_TEST_CASEAPI 1316 int successful_test_count()
const;
1319 int skipped_test_count()
const;
1322 int failed_test_count()
const;
1325 int reportable_disabled_test_count()
const;
1328 int disabled_test_count()
const;
1331 int reportable_test_count()
const;
1334 int total_test_count()
const;
1337 int test_to_run_count()
const;
1341 TimeInMillis start_timestamp()
const;
1344 TimeInMillis elapsed_time()
const;
1347 bool Passed()
const;
1351 bool Failed()
const;
1355 const TestSuite* GetTestSuite(
int i)
const;
1358 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1359 const TestCase* GetTestCase(
int i)
const;
1360 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1364 const TestResult& ad_hoc_test_result()
const;
1386 void AddTestPartResult(TestPartResult::Type result_type,
1387 const char* file_name,
1389 const std::string& message,
1390 const std::string& os_stack_trace)
1391 GTEST_LOCK_EXCLUDED_(mutex_);
1398 void RecordProperty(
const std::string& key,
const std::string& value);
1405 internal::UnitTestImpl* impl() {
return impl_; }
1406 const internal::UnitTestImpl* impl()
const {
return impl_; }
1413 friend class internal::StreamingListenerTest;
1416 friend internal::UnitTestImpl* internal::GetUnitTestImpl();
1417 friend void internal::ReportFailureInUnknownLocation(
1418 TestPartResult::Type result_type,
1419 const std::string& message);
1429 void PushGTestTrace(
const internal::TraceInfo& trace)
1430 GTEST_LOCK_EXCLUDED_(mutex_);
1433 void PopGTestTrace()
1434 GTEST_LOCK_EXCLUDED_(mutex_);
1444 internal::UnitTestImpl* impl_;
1447 GTEST_DISALLOW_COPY_AND_ASSIGN_(
UnitTest);
1469 return UnitTest::GetInstance()->AddEnvironment(env);
1481 GTEST_API_
void InitGoogleTest(
int* argc,
char** argv);
1485 GTEST_API_
void InitGoogleTest(
int* argc,
wchar_t** argv);
1489 GTEST_API_
void InitGoogleTest();
1491 namespace internal {
1496 template <
typename T1,
typename T2>
1497 AssertionResult CmpHelperEQFailure(
const char* lhs_expression,
1498 const char* rhs_expression,
1499 const T1& lhs,
const T2& rhs) {
1500 return EqFailure(lhs_expression,
1502 FormatForComparisonFailureMessage(lhs, rhs),
1503 FormatForComparisonFailureMessage(rhs, lhs),
1515 template <
typename T1,
typename T2>
1516 AssertionResult CmpHelperEQ(
const char* lhs_expression,
1517 const char* rhs_expression,
1521 return AssertionSuccess();
1524 return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs);
1530 GTEST_API_ AssertionResult CmpHelperEQ(
const char* lhs_expression,
1531 const char* rhs_expression,
1539 template <
bool lhs_is_null_literal>
1543 template <
typename T1,
typename T2>
1544 static AssertionResult Compare(
const char* lhs_expression,
1545 const char* rhs_expression,
1548 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1557 static AssertionResult Compare(
const char* lhs_expression,
1558 const char* rhs_expression,
1561 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1574 template <
typename T1,
typename T2>
1575 static AssertionResult Compare(
1576 const char* lhs_expression,
const char* rhs_expression,
const T1& lhs,
1583 typename EnableIf<!std::is_pointer<T2>::value>::type* =
nullptr) {
1584 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1589 template <
typename T>
1590 static AssertionResult Compare(
1591 const char* lhs_expression,
1592 const char* rhs_expression,
1602 return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(
nullptr),
1610 template <
typename T1,
typename T2>
1611 AssertionResult CmpHelperOpFailure(
const char* expr1,
const char* expr2,
1612 const T1& val1,
const T2& val2,
1614 return AssertionFailure()
1615 <<
"Expected: (" << expr1 <<
") " << op <<
" (" << expr2
1616 <<
"), actual: " << FormatForComparisonFailureMessage(val1, val2)
1617 <<
" vs " << FormatForComparisonFailureMessage(val2, val1);
1631 #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 1632 template <typename T1, typename T2>\ 1633 AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 1634 const T1& val1, const T2& val2) {\ 1635 if (val1 op val2) {\ 1636 return AssertionSuccess();\ 1638 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\ 1641 GTEST_API_ AssertionResult CmpHelper##op_name(\ 1642 const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) 1647 GTEST_IMPL_CMP_HELPER_(NE, !=);
1649 GTEST_IMPL_CMP_HELPER_(LE, <=);
1651 GTEST_IMPL_CMP_HELPER_(LT, <);
1653 GTEST_IMPL_CMP_HELPER_(GE, >=);
1655 GTEST_IMPL_CMP_HELPER_(GT, >);
1657 #undef GTEST_IMPL_CMP_HELPER_ 1662 GTEST_API_ AssertionResult CmpHelperSTREQ(
const char* s1_expression,
1663 const char* s2_expression,
1670 GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(
const char* s1_expression,
1671 const char* s2_expression,
1678 GTEST_API_ AssertionResult CmpHelperSTRNE(
const char* s1_expression,
1679 const char* s2_expression,
1686 GTEST_API_ AssertionResult CmpHelperSTRCASENE(
const char* s1_expression,
1687 const char* s2_expression,
1695 GTEST_API_ AssertionResult CmpHelperSTREQ(
const char* s1_expression,
1696 const char* s2_expression,
1703 GTEST_API_ AssertionResult CmpHelperSTRNE(
const char* s1_expression,
1704 const char* s2_expression,
1718 GTEST_API_ AssertionResult IsSubstring(
1719 const char* needle_expr,
const char* haystack_expr,
1720 const char* needle,
const char* haystack);
1721 GTEST_API_ AssertionResult IsSubstring(
1722 const char* needle_expr,
const char* haystack_expr,
1723 const wchar_t* needle,
const wchar_t* haystack);
1724 GTEST_API_ AssertionResult IsNotSubstring(
1725 const char* needle_expr,
const char* haystack_expr,
1726 const char* needle,
const char* haystack);
1727 GTEST_API_ AssertionResult IsNotSubstring(
1728 const char* needle_expr,
const char* haystack_expr,
1729 const wchar_t* needle,
const wchar_t* haystack);
1730 GTEST_API_ AssertionResult IsSubstring(
1731 const char* needle_expr,
const char* haystack_expr,
1732 const ::std::string& needle, const ::std::string& haystack);
1733 GTEST_API_ AssertionResult IsNotSubstring(
1734 const char* needle_expr,
const char* haystack_expr,
1735 const ::std::string& needle, const ::std::string& haystack);
1737 #if GTEST_HAS_STD_WSTRING 1738 GTEST_API_ AssertionResult IsSubstring(
1739 const char* needle_expr,
const char* haystack_expr,
1740 const ::std::wstring& needle, const ::std::wstring& haystack);
1741 GTEST_API_ AssertionResult IsNotSubstring(
1742 const char* needle_expr,
const char* haystack_expr,
1743 const ::std::wstring& needle, const ::std::wstring& haystack);
1744 #endif // GTEST_HAS_STD_WSTRING 1746 namespace internal {
1755 template <
typename RawType>
1756 AssertionResult CmpHelperFloatingPointEQ(
const char* lhs_expression,
1757 const char* rhs_expression,
1759 RawType rhs_value) {
1762 if (lhs.AlmostEquals(rhs)) {
1763 return AssertionSuccess();
1766 ::std::stringstream lhs_ss;
1767 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1770 ::std::stringstream rhs_ss;
1771 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1774 return EqFailure(lhs_expression,
1776 StringStreamToString(&lhs_ss),
1777 StringStreamToString(&rhs_ss),
1784 GTEST_API_ AssertionResult DoubleNearPredFormat(
const char* expr1,
1786 const char* abs_error_expr,
1799 const char* message);
1804 void operator=(
const Message& message)
const;
1811 struct AssertHelperData {
1812 AssertHelperData(TestPartResult::Type t,
1813 const char* srcfile,
1816 : type(t), file(srcfile), line(line_num), message(msg) { }
1818 TestPartResult::Type
const type;
1819 const char*
const file;
1821 std::string
const message;
1824 GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
1827 AssertHelperData*
const data_;
1832 enum GTestColor { COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW };
1834 GTEST_API_ GTEST_ATTRIBUTE_PRINTF_(2, 3)
void ColoredPrintf(GTestColor color,
1874 template <
typename T>
1877 typedef T ParamType;
1882 static const ParamType& GetParam() {
1883 GTEST_CHECK_(parameter_ !=
nullptr)
1884 <<
"GetParam() can only be called inside a value-parameterized test " 1885 <<
"-- did you intend to write TEST_P instead of TEST_F?";
1892 static void SetParam(
const ParamType* parameter) {
1893 parameter_ = parameter;
1897 static const ParamType* parameter_;
1903 template <
typename T>
1909 template <
typename T>
1918 #define GTEST_SKIP() GTEST_SKIP_("Skipped") 1938 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 1942 #define ADD_FAILURE_AT(file, line) \ 1943 GTEST_MESSAGE_AT_(file, line, "Failed", \ 1944 ::testing::TestPartResult::kNonFatalFailure) 1947 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 1951 #if !GTEST_DONT_DEFINE_FAIL 1952 # define FAIL() GTEST_FAIL() 1956 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 1960 #if !GTEST_DONT_DEFINE_SUCCEED 1961 # define SUCCEED() GTEST_SUCCEED() 1973 #define EXPECT_THROW(statement, expected_exception) \ 1974 GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 1975 #define EXPECT_NO_THROW(statement) \ 1976 GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 1977 #define EXPECT_ANY_THROW(statement) \ 1978 GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 1979 #define ASSERT_THROW(statement, expected_exception) \ 1980 GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 1981 #define ASSERT_NO_THROW(statement) \ 1982 GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 1983 #define ASSERT_ANY_THROW(statement) \ 1984 GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 1989 #define EXPECT_TRUE(condition) \ 1990 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 1991 GTEST_NONFATAL_FAILURE_) 1992 #define EXPECT_FALSE(condition) \ 1993 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 1994 GTEST_NONFATAL_FAILURE_) 1995 #define ASSERT_TRUE(condition) \ 1996 GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 1997 GTEST_FATAL_FAILURE_) 1998 #define ASSERT_FALSE(condition) \ 1999 GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 2000 GTEST_FATAL_FAILURE_) 2048 #define EXPECT_EQ(val1, val2) \ 2049 EXPECT_PRED_FORMAT2(::testing::internal:: \ 2050 EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ 2052 #define EXPECT_NE(val1, val2) \ 2053 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 2054 #define EXPECT_LE(val1, val2) \ 2055 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 2056 #define EXPECT_LT(val1, val2) \ 2057 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 2058 #define EXPECT_GE(val1, val2) \ 2059 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 2060 #define EXPECT_GT(val1, val2) \ 2061 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 2063 #define GTEST_ASSERT_EQ(val1, val2) \ 2064 ASSERT_PRED_FORMAT2(::testing::internal:: \ 2065 EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ 2067 #define GTEST_ASSERT_NE(val1, val2) \ 2068 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 2069 #define GTEST_ASSERT_LE(val1, val2) \ 2070 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 2071 #define GTEST_ASSERT_LT(val1, val2) \ 2072 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 2073 #define GTEST_ASSERT_GE(val1, val2) \ 2074 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 2075 #define GTEST_ASSERT_GT(val1, val2) \ 2076 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 2081 #if !GTEST_DONT_DEFINE_ASSERT_EQ 2082 # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 2085 #if !GTEST_DONT_DEFINE_ASSERT_NE 2086 # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 2089 #if !GTEST_DONT_DEFINE_ASSERT_LE 2090 # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 2093 #if !GTEST_DONT_DEFINE_ASSERT_LT 2094 # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 2097 #if !GTEST_DONT_DEFINE_ASSERT_GE 2098 # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 2101 #if !GTEST_DONT_DEFINE_ASSERT_GT 2102 # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 2121 #define EXPECT_STREQ(s1, s2) \ 2122 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 2123 #define EXPECT_STRNE(s1, s2) \ 2124 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 2125 #define EXPECT_STRCASEEQ(s1, s2) \ 2126 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 2127 #define EXPECT_STRCASENE(s1, s2)\ 2128 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 2130 #define ASSERT_STREQ(s1, s2) \ 2131 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 2132 #define ASSERT_STRNE(s1, s2) \ 2133 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 2134 #define ASSERT_STRCASEEQ(s1, s2) \ 2135 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 2136 #define ASSERT_STRCASENE(s1, s2)\ 2137 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 2153 #define EXPECT_FLOAT_EQ(val1, val2)\ 2154 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 2157 #define EXPECT_DOUBLE_EQ(val1, val2)\ 2158 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 2161 #define ASSERT_FLOAT_EQ(val1, val2)\ 2162 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 2165 #define ASSERT_DOUBLE_EQ(val1, val2)\ 2166 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 2169 #define EXPECT_NEAR(val1, val2, abs_error)\ 2170 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 2171 val1, val2, abs_error) 2173 #define ASSERT_NEAR(val1, val2, abs_error)\ 2174 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 2175 val1, val2, abs_error) 2184 GTEST_API_ AssertionResult FloatLE(
const char* expr1,
const char* expr2,
2185 float val1,
float val2);
2186 GTEST_API_ AssertionResult DoubleLE(
const char* expr1,
const char* expr2,
2187 double val1,
double val2);
2190 #if GTEST_OS_WINDOWS 2201 # define EXPECT_HRESULT_SUCCEEDED(expr) \ 2202 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 2204 # define ASSERT_HRESULT_SUCCEEDED(expr) \ 2205 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 2207 # define EXPECT_HRESULT_FAILED(expr) \ 2208 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 2210 # define ASSERT_HRESULT_FAILED(expr) \ 2211 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 2213 #endif // GTEST_OS_WINDOWS 2225 #define ASSERT_NO_FATAL_FAILURE(statement) \ 2226 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 2227 #define EXPECT_NO_FATAL_FAILURE(statement) \ 2228 GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 2247 template <
typename T>
2248 ScopedTrace(
const char* file,
int line,
const T& message) {
2249 PushTrace(file, line, (
Message() << message).GetString());
2253 ScopedTrace(
const char* file,
int line,
const char* message) {
2254 PushTrace(file, line, message ? message :
"(null)");
2257 #if GTEST_HAS_GLOBAL_STRING 2258 ScopedTrace(
const char* file,
int line, const ::string& message) {
2259 PushTrace(file, line, message);
2263 ScopedTrace(
const char* file,
int line,
const std::string& message) {
2264 PushTrace(file, line, message);
2274 void PushTrace(
const char* file,
int line, std::string message);
2277 } GTEST_ATTRIBUTE_UNUSED_;
2296 #define SCOPED_TRACE(message) \ 2297 ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 2298 __FILE__, __LINE__, (message)) 2331 template <
typename T1,
typename T2>
2332 bool StaticAssertTypeEq() {
2362 #define GTEST_TEST(test_suite_name, test_name) \ 2363 GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \ 2364 ::testing::internal::GetTestTypeId()) 2368 #if !GTEST_DONT_DEFINE_TEST 2369 #define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name) 2398 #define TEST_F(test_fixture, test_name)\ 2399 GTEST_TEST_(test_fixture, test_name, test_fixture, \ 2400 ::testing::internal::GetTypeId<test_fixture>()) 2404 GTEST_API_ std::string TempDir();
2407 # pragma warning(pop) 2467 template <
int&... ExplicitParameterBarrier,
typename Factory>
2468 TestInfo* RegisterTest(
const char* test_suite_name,
const char* test_name,
2469 const char* type_param,
const char* value_param,
2470 const char* file,
int line, Factory factory) {
2471 using TestT =
typename std::remove_pointer<decltype(factory())>::type;
2475 explicit FactoryImpl(Factory f) : factory_(std::move(f)) {}
2476 Test* CreateTest()
override {
return factory_(); }
2482 return internal::MakeAndRegisterTestInfo(
2483 test_suite_name, test_name, type_param, value_param,
2487 new FactoryImpl{std::move(factory)});
2500 int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_;
2502 inline int RUN_ALL_TESTS() {
2503 return ::testing::UnitTest::GetInstance()->Run();
2506 GTEST_DISABLE_MSC_WARNINGS_POP_()
2508 #endif // GTEST_INCLUDE_GTEST_GTEST_H_ Definition: gmock-actions.h:59
Definition: gtest_unittest.cc:152
Definition: gtest-internal.h:535
Definition: gtest-internal.h:859
Definition: gtest-message.h:90
Definition: gtest-internal.h:472
Definition: gtest-internal.h:512
Definition: gtest_unittest.cc:176
Definition: gtest-internal.h:1026
Definition: gtest-param-util.h:391
Definition: gtest-port.h:1905
Definition: gtest.cc:3334
Definition: gtest-port.h:858
Definition: gtest-param-util.h:653
Definition: gtest-internal.h:270