49 #ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_H_ 50 #define GOOGLETEST_INCLUDE_GTEST_GTEST_H_ 61 #include <type_traits> 161 #if GTEST_USE_OWN_FLAGFILE_FLAG_ 163 #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ 170 #pragma warning(push) 171 #pragma warning(disable : 4805) 172 #pragma warning(disable : 4100) 181 class DefaultGlobalTestPartResultReporter;
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;
195 const std::string& message);
218 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 272 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 275 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 278 static bool HasFatalFailure();
281 static bool HasNonfatalFailure();
284 static bool IsSkipped();
288 static bool HasFailure() {
return HasFatalFailure() || HasNonfatalFailure(); }
303 static void RecordProperty(
const std::string& key,
const std::string& value);
304 static void RecordProperty(
const std::string& key, int64_t value);
311 virtual void SetUp();
314 virtual void TearDown();
319 static bool HasSameFixtureClass();
327 virtual void TestBody() = 0;
334 void DeleteSelf_() {
delete this; }
336 const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;
354 struct Setup_should_be_spelled_SetUp {};
355 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
374 : key_(a_key), value_(a_value) {}
377 const char*
key()
const {
return key_.c_str(); }
380 const char*
value()
const {
return value_.c_str(); }
383 void SetValue(
const std::string& new_value) { value_ = new_value; }
408 int total_part_count()
const;
411 int test_property_count()
const;
414 bool Passed()
const {
return !Skipped() && !Failed(); }
417 bool Skipped()
const;
423 bool HasFatalFailure()
const;
426 bool HasNonfatalFailure()
const;
437 const TestPartResult& GetTestPartResult(
int i)
const;
449 friend class internal::ExecDeathTest;
452 friend class internal::WindowsDeathTest;
453 friend class internal::FuchsiaDeathTest;
456 const std::vector<TestPartResult>& test_part_results()
const {
457 return test_part_results_;
461 const std::vector<TestProperty>& test_properties()
const {
462 return test_properties_;
466 void set_start_timestamp(TimeInMillis start) { start_timestamp_ = start; }
469 void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
477 void RecordProperty(
const std::string& xml_element,
483 static bool ValidateTestProperty(
const std::string& xml_element,
487 void AddTestPartResult(
const TestPartResult& test_part_result);
490 int death_test_count()
const {
return death_test_count_; }
493 int increment_death_test_count() {
return ++death_test_count_; }
496 void ClearTestPartResults();
506 std::vector<TestPartResult> test_part_results_;
508 std::vector<TestProperty> test_properties_;
510 int death_test_count_;
512 TimeInMillis start_timestamp_;
514 TimeInMillis elapsed_time_;
542 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 544 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 547 const char*
name()
const {
return name_.c_str(); }
552 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
559 if (value_param_.get() !=
nullptr)
return value_param_->c_str();
564 const char*
file()
const {
return location_.file.c_str(); }
567 int line()
const {
return location_.line; }
594 return matches_filter_ && !is_in_another_shard_;
601 #if GTEST_HAS_DEATH_TEST 602 friend class internal::DefaultDeathTestFactory;
603 #endif // GTEST_HAS_DEATH_TEST 607 friend class internal::StreamingListenerTest;
609 const char* test_suite_name,
const char* name,
const char* type_param,
617 TestInfo(
const std::string& test_suite_name,
const std::string& name,
618 const char* a_type_param,
619 const char* a_value_param,
626 int increment_death_test_count() {
627 return result_.increment_death_test_count();
637 static void ClearTestResult(
TestInfo* test_info) {
638 test_info->result_.Clear();
642 const std::string test_suite_name_;
643 const std::string name_;
646 const std::unique_ptr<const ::std::string> type_param_;
649 const std::unique_ptr<const ::std::string> value_param_;
654 bool matches_filter_;
656 bool is_in_another_shard_;
685 TestSuite(
const char* name,
const char* a_type_param,
693 const char*
name()
const {
return name_.c_str(); }
698 if (type_param_.get() !=
nullptr)
return type_param_->c_str();
706 int successful_test_count()
const;
709 int skipped_test_count()
const;
712 int failed_test_count()
const;
715 int reportable_disabled_test_count()
const;
718 int disabled_test_count()
const;
721 int reportable_test_count()
const;
724 int test_to_run_count()
const;
727 int total_test_count()
const;
730 bool Passed()
const {
return !Failed(); }
734 return failed_test_count() > 0 || ad_hoc_test_result().Failed();
746 const TestInfo* GetTestInfo(
int i)
const;
757 std::vector<TestInfo*>& test_info_list() {
return test_info_list_; }
760 const std::vector<TestInfo*>& test_info_list()
const {
761 return test_info_list_;
766 TestInfo* GetMutableTestInfo(
int i);
769 void set_should_run(
bool should) { should_run_ = should; }
773 void AddTestInfo(
TestInfo* test_info);
779 static void ClearTestSuiteResult(
TestSuite* test_suite) {
780 test_suite->ClearResult();
791 void RunSetUpTestSuite() {
792 if (set_up_tc_ !=
nullptr) {
799 void RunTearDownTestSuite() {
800 if (tear_down_tc_ !=
nullptr) {
806 static bool TestPassed(
const TestInfo* test_info) {
811 static bool TestSkipped(
const TestInfo* test_info) {
816 static bool TestFailed(
const TestInfo* test_info) {
822 static bool TestReportableDisabled(
const TestInfo* test_info) {
823 return test_info->
is_reportable() && test_info->is_disabled_;
827 static bool TestDisabled(
const TestInfo* test_info) {
828 return test_info->is_disabled_;
832 static bool TestReportable(
const TestInfo* test_info) {
837 static bool ShouldRunTest(
const TestInfo* test_info) {
845 void UnshuffleTests();
851 const std::unique_ptr<const ::std::string> type_param_;
854 std::vector<TestInfo*> test_info_list_;
858 std::vector<int> test_indices_;
866 TimeInMillis start_timestamp_;
868 TimeInMillis elapsed_time_;
906 struct Setup_should_be_spelled_SetUp {};
907 virtual Setup_should_be_spelled_SetUp* Setup() {
return nullptr; }
910 #if GTEST_HAS_EXCEPTIONS 914 :
public internal::GoogleTestFailureException {
916 explicit AssertionException(
const TestPartResult& result)
917 : GoogleTestFailureException(result) {}
920 #endif // GTEST_HAS_EXCEPTIONS 929 virtual void OnTestProgramStart(
const UnitTest& unit_test) = 0;
934 virtual void OnTestIterationStart(
const UnitTest& unit_test,
938 virtual void OnEnvironmentsSetUpStart(
const UnitTest& unit_test) = 0;
941 virtual void OnEnvironmentsSetUpEnd(
const UnitTest& unit_test) = 0;
947 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 949 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 952 virtual void OnTestStart(
const TestInfo& test_info) = 0;
960 virtual void OnTestPartResult(
const TestPartResult& test_part_result) = 0;
963 virtual void OnTestEnd(
const TestInfo& test_info) = 0;
969 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 971 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 974 virtual void OnEnvironmentsTearDownStart(
const UnitTest& unit_test) = 0;
977 virtual void OnEnvironmentsTearDownEnd(
const UnitTest& unit_test) = 0;
980 virtual void OnTestIterationEnd(
const UnitTest& unit_test,
int iteration) = 0;
983 virtual void OnTestProgramEnd(
const UnitTest& unit_test) = 0;
1000 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1002 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1009 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1011 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1042 return default_result_printer_;
1053 return default_xml_generator_;
1060 friend class internal::NoExecDeathTest;
1061 friend class internal::TestEventListenersAccessor;
1084 bool EventForwardingEnabled()
const;
1085 void SuppressEventForwarding();
1088 internal::TestEventRepeater* repeater_;
1126 const char* original_working_dir()
const;
1133 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1142 int random_seed()
const;
1152 int successful_test_suite_count()
const;
1155 int failed_test_suite_count()
const;
1158 int total_test_suite_count()
const;
1162 int test_suite_to_run_count()
const;
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_ 1173 int successful_test_count()
const;
1176 int skipped_test_count()
const;
1179 int failed_test_count()
const;
1182 int reportable_disabled_test_count()
const;
1185 int disabled_test_count()
const;
1188 int reportable_test_count()
const;
1191 int total_test_count()
const;
1194 int test_to_run_count()
const;
1198 TimeInMillis start_timestamp()
const;
1205 bool Passed()
const;
1209 bool Failed()
const;
1213 const TestSuite* GetTestSuite(
int i)
const;
1216 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1217 const TestCase* GetTestCase(
int i)
const;
1218 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 1222 const TestResult& ad_hoc_test_result()
const;
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)
1255 void RecordProperty(
const std::string& key,
const std::string& value);
1270 friend class internal::StreamingListenerTest;
1271 friend class internal::UnitTestRecordPropertyTestHelper;
1276 TestPartResult::Type result_type,
const std::string& message);
1290 void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_);
1294 mutable internal::
Mutex mutex_;
1300 internal::UnitTestImpl* impl_;
1348 namespace internal {
1353 template <
typename T1,
typename T2>
1355 const char* rhs_expression,
const T1& lhs,
1357 return EqFailure(lhs_expression, rhs_expression,
1370 template <
typename T1,
typename T2>
1372 const char* rhs_expression,
const T1& lhs,
1375 return AssertionSuccess();
1385 typename T1,
typename T2,
1388 typename std::enable_if<!std::is_integral<T1>::value ||
1389 !std::is_pointer<T2>::value>
::type* =
nullptr>
1390 static AssertionResult
Compare(
const char* lhs_expression,
1391 const char* rhs_expression,
const T1& lhs,
1393 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1402 static AssertionResult
Compare(
const char* lhs_expression,
1405 return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
1408 template <
typename T>
1410 const char* lhs_expression,
const char* rhs_expression,
1412 std::nullptr_t , T* rhs) {
1414 return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(
nullptr),
1422 template <
typename T1,
typename T2>
1424 const T1& val1,
const T2& val2,
1426 return AssertionFailure()
1427 <<
"Expected: (" << expr1 <<
") " << op <<
" (" << expr2
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(); \ 1445 return CmpHelperOpFailure(expr1, expr2, val1, val2, #op); \ 1462 #undef GTEST_IMPL_CMP_HELPER_ 1468 const char* s2_expression,
1469 const char* s1,
const char* s2);
1475 const char* s2_expression,
1476 const char* s1,
const char* s2);
1482 const char* s2_expression,
1483 const char* s1,
const char* s2);
1489 const char* s2_expression,
1490 const char* s1,
const char* s2);
1496 const char* s2_expression,
1497 const wchar_t* s1,
const wchar_t* s2);
1503 const char* s2_expression,
1504 const wchar_t* s1,
const wchar_t* s2);
1517 const char* haystack_expr,
1519 const char* haystack);
1521 const char* haystack_expr,
1522 const wchar_t* needle,
1523 const wchar_t* haystack);
1525 const char* haystack_expr,
1527 const char* haystack);
1529 const char* haystack_expr,
1530 const wchar_t* needle,
1531 const wchar_t* haystack);
1533 const char* haystack_expr,
1534 const ::std::string& needle,
1535 const ::std::string& haystack);
1537 const char* haystack_expr,
1538 const ::std::string& needle,
1539 const ::std::string& haystack);
1541 #if GTEST_HAS_STD_WSTRING 1543 const char* haystack_expr,
1544 const ::std::wstring& needle,
1545 const ::std::wstring& haystack);
1547 const char* haystack_expr,
1548 const ::std::wstring& needle,
1549 const ::std::wstring& haystack);
1550 #endif // GTEST_HAS_STD_WSTRING 1552 namespace internal {
1561 template <
typename RawType>
1563 const char* rhs_expression,
1564 RawType lhs_value, RawType rhs_value) {
1567 if (lhs.AlmostEquals(rhs)) {
1568 return AssertionSuccess();
1571 ::std::stringstream lhs_ss;
1572 lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1575 ::std::stringstream rhs_ss;
1576 rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
1579 return EqFailure(lhs_expression, rhs_expression,
1589 const char* abs_error_expr,
1590 double val1,
double val2,
1599 const char* message);
1611 struct AssertHelperData {
1612 AssertHelperData(TestPartResult::Type t,
const char* srcfile,
int line_num,
1614 :
type(t), file(srcfile), line(line_num), message(msg) {}
1616 TestPartResult::Type
const type;
1617 const char*
const file;
1619 std::string
const message;
1622 AssertHelperData(
const AssertHelperData&) =
delete;
1623 AssertHelperData&
operator=(
const AssertHelperData&) =
delete;
1626 AssertHelperData*
const data_;
1668 template <
typename T>
1678 <<
"GetParam() can only be called inside a value-parameterized test " 1679 <<
"-- did you intend to write TEST_P instead of TEST_F?";
1686 static void SetParam(
const ParamType* parameter) { parameter_ = parameter; }
1689 static const ParamType* parameter_;
1692 template <
class TestClass>
1696 template <
typename T>
1702 template <
typename T>
1710 #define GTEST_SKIP() GTEST_SKIP_("") 1730 #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 1734 #define ADD_FAILURE_AT(file, line) \ 1735 GTEST_MESSAGE_AT_(file, line, "Failed", \ 1736 ::testing::TestPartResult::kNonFatalFailure) 1739 #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 1742 #define GTEST_FAIL_AT(file, line) \ 1743 return GTEST_MESSAGE_AT_(file, line, "Failed", \ 1744 ::testing::TestPartResult::kFatalFailure) 1748 #if !GTEST_DONT_DEFINE_FAIL 1749 #define FAIL() GTEST_FAIL() 1753 #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 1757 #if !GTEST_DONT_DEFINE_SUCCEED 1758 #define SUCCEED() GTEST_SUCCEED() 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_) 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_) 1801 #if !GTEST_DONT_DEFINE_EXPECT_TRUE 1802 #define EXPECT_TRUE(condition) GTEST_EXPECT_TRUE(condition) 1805 #if !GTEST_DONT_DEFINE_EXPECT_FALSE 1806 #define EXPECT_FALSE(condition) GTEST_EXPECT_FALSE(condition) 1809 #if !GTEST_DONT_DEFINE_ASSERT_TRUE 1810 #define ASSERT_TRUE(condition) GTEST_ASSERT_TRUE(condition) 1813 #if !GTEST_DONT_DEFINE_ASSERT_FALSE 1814 #define ASSERT_FALSE(condition) GTEST_ASSERT_FALSE(condition) 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) 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) 1892 #if !GTEST_DONT_DEFINE_ASSERT_EQ 1893 #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 1896 #if !GTEST_DONT_DEFINE_ASSERT_NE 1897 #define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 1900 #if !GTEST_DONT_DEFINE_ASSERT_LE 1901 #define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 1904 #if !GTEST_DONT_DEFINE_ASSERT_LT 1905 #define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 1908 #if !GTEST_DONT_DEFINE_ASSERT_GE 1909 #define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 1912 #if !GTEST_DONT_DEFINE_ASSERT_GT 1913 #define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 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) 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) 1964 #define EXPECT_FLOAT_EQ(val1, val2) \ 1965 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 1968 #define EXPECT_DOUBLE_EQ(val1, val2) \ 1969 EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 1972 #define ASSERT_FLOAT_EQ(val1, val2) \ 1973 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 1976 #define ASSERT_DOUBLE_EQ(val1, val2) \ 1977 ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 1980 #define EXPECT_NEAR(val1, val2, abs_error) \ 1981 EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \ 1984 #define ASSERT_NEAR(val1, val2, abs_error) \ 1985 ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \ 1996 float val1,
float val2);
1998 double val1,
double val2);
2000 #if GTEST_OS_WINDOWS 2011 #define EXPECT_HRESULT_SUCCEEDED(expr) \ 2012 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 2014 #define ASSERT_HRESULT_SUCCEEDED(expr) \ 2015 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 2017 #define EXPECT_HRESULT_FAILED(expr) \ 2018 EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 2020 #define ASSERT_HRESULT_FAILED(expr) \ 2021 ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 2023 #endif // GTEST_OS_WINDOWS 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_) 2057 template <
typename T>
2059 PushTrace(file, line, (
Message() << message).GetString());
2064 PushTrace(file, line, message ? message :
"(null)");
2068 PushTrace(file, line, message);
2078 void PushTrace(
const char* file,
int line, std::string message);
2099 #define SCOPED_TRACE(message) \ 2100 ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)( \ 2101 __FILE__, __LINE__, (message)) 2133 template <
typename T1,
typename T2>
2135 static_assert(std::is_same<T1, T2>::value,
"T1 and T2 are not the same type");
2164 #define GTEST_TEST(test_suite_name, test_name) \ 2165 GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \ 2166 ::testing::internal::GetTestTypeId()) 2170 #if !GTEST_DONT_DEFINE_TEST 2171 #define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name) 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) 2218 #pragma warning(pop) 2279 template <
int&... ExplicitParameterBarrier,
typename Factory>
2281 const char* type_param,
const char* value_param,
2282 const char* file,
int line, Factory factory) {
2287 explicit FactoryImpl(Factory
f) : factory_(std::move(f)) {}
2288 Test* CreateTest()
override {
return factory_(); }
2295 test_suite_name, test_name, type_param, value_param,
2299 new FactoryImpl{std::move(factory)});
2314 inline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); }
2318 #endif // GOOGLETEST_INCLUDE_GTEST_GTEST_H_ GTEST_API_ AssertionResult DoubleLE(const char *expr1, const char *expr2, double val1, double val2)
const char * value() const
class UnitTestImpl * GetUnitTestImpl()
void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const std::string &message)
void OnTestDisabled(const TestInfo &) override
Environment * AddGlobalTestEnvironment(Environment *env)
GTEST_API_ AssertionResult DoubleNearPredFormat(const char *expr1, const char *expr2, const char *abs_error_expr, double val1, double val2, double abs_error)
TimeInMillis start_timestamp() const
GTEST_DECLARE_bool_(break_on_failure)
const TestResult * result() const
static void SetUpTestCase()
void(*)() SetUpTestSuiteFunc
n The following was calculated during iteration
virtual void OnTestCaseStart(const TestCase &)
GTestNonCopyable & operator=(const GTestNonCopyable &)=delete
virtual ~TestEventListener()
AssertionResult CmpHelperEQ(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs)
bool operator==(faketype, faketype)
const char * value_param() const
GTEST_API_ AssertionResult CmpHelperSTRNE(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
GTEST_API_ AssertionResult IsSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)
bool operator!=(faketype, faketype)
void OnTestCaseStart(const TestCase &) override
const TestResult & ad_hoc_test_result() const
TimeInMillis start_timestamp() const
double elapsed_time(ProcessorTimeStamp &time, bool _IN_SECS)
GTEST_API_ AssertionResult IsNotSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)
void OnEnvironmentsSetUpEnd(const UnitTest &) override
GTEST_DECLARE_int32_(random_seed)
void OnTestEnd(const TestInfo &) override
void OnTestIterationStart(const UnitTest &, int) override
GTEST_API_ std::string SrcDir()
std::string FormatForComparisonFailureMessage(const T1 &value, const T2 &)
#define GTEST_LOCK_EXCLUDED_(locks)
GTEST_API_ AssertionResult EqFailure(const char *expected_expression, const char *actual_expression, const std::string &expected_value, const std::string &actual_value, bool ignoring_case)
const char * test_case_name() const
const char * name() const
GTEST_API_ std::string StringStreamToString(::std::stringstream *stream)
void SetValue(const std::string &new_value)
TestEventListener * default_result_printer() const
void OnTestStart(const TestInfo &) override
const char * name() const
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs)
const char * test_suite_name() const
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, std::nullptr_t, T *rhs)
AssertionResult CmpHelperFloatingPointEQ(const char *lhs_expression, const char *rhs_expression, RawType lhs_value, RawType rhs_value)
void OnTestCaseEnd(const TestCase &) override
GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
#define GTEST_IMPL_CMP_HELPER_(op_name, op)
void OnEnvironmentsSetUpStart(const UnitTest &) override
void OnTestSuiteStart(const TestSuite &) override
GTEST_API_ std::string TempDir()
void OnTestProgramStart(const UnitTest &) override
GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
#define GTEST_CHECK_(condition)
void(*)() TearDownTestSuiteFunc
const int kMaxStackTraceDepth
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
static void TearDownTestSuite()
GTEST_API_ TestInfo * MakeAndRegisterTestInfo(const char *test_suite_name, const char *name, const char *type_param, const char *value_param, CodeLocation code_location, TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc, TearDownTestSuiteFunc tear_down_tc, TestFactoryBase *factory)
AssertionResult CmpHelperOpFailure(const char *expr1, const char *expr2, const T1 &val1, const T2 &val2, const char *op)
virtual void OnTestDisabled(const TestInfo &)
const char * type_param() const
virtual void OnTestSuiteEnd(const TestSuite &)
GTEST_DISABLE_MSC_WARNINGS_POP_() inline const char *SkipComma(const char *str)
bool is_in_another_shard() const
TestInfo * 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)
void OnTestPartResult(const TestPartResult &) override
virtual void OnTestSuiteStart(const TestSuite &)
GTEST_DECLARE_string_(color)
const char * type_param() const
GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251) GTEST_DECLARE_bool_(also_run_disabled_tests)
virtual ~WithParamInterface()
TestEventListener * default_xml_generator() const
TimeInMillis elapsed_time() const
static UnitTest * GetInstance()
AssertionResult CmpHelperEQFailure(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs)
TimeInMillis elapsed_time() const
TestProperty(const std::string &a_key, const std::string &a_value)
GTEST_API_ AssertionResult CmpHelperSTREQ(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)
GTEST_API_ AssertionResult FloatLE(const char *expr1, const char *expr2, float val1, float val2)
bool is_reportable() const
ScopedTrace(const char *file, int line, const T &message)
void OnTestProgramEnd(const UnitTest &) override
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
virtual void OnTestCaseEnd(const TestCase &)
static const ParamType & GetParam()
static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, const T1 &lhs, const T2 &rhs)
static void SetUpTestSuite()
const char * file() const
constexpr bool StaticAssertTypeEq() noexcept
void OnTestSuiteEnd(const TestSuite &) override
void OnTestIterationEnd(const UnitTest &, int) override
ScopedTrace(const char *file, int line, const char *message)
GTestNonCopyable()=default
std::set< std::string > * GetIgnoredParameterizedTestSuites()
void OnEnvironmentsTearDownStart(const UnitTest &) override
static void TearDownTestCase()
#define GTEST_MUST_USE_RESULT_
void OnEnvironmentsTearDownEnd(const UnitTest &) override
~GTestNonCopyable()=default
ScopedTrace(const char *file, int line, const std::string &message)