39 #ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 40 #define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ 46 #include <sys/types.h> 49 #endif // GTEST_OS_LINUX 51 #if GTEST_HAS_EXCEPTIONS 66 #include <type_traits> 83 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) 84 #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo##bar 95 #define GTEST_STRINGIFY_HELPER_(name, ...) #name 96 #define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__, ) 106 class AssertionResult;
110 class TestPartResult;
113 template <
typename T>
138 template <
typename T,
139 typename std::enable_if<!std::is_convertible<T, Sink>::value,
148 #if GTEST_HAS_EXCEPTIONS 159 class GTEST_API_ GoogleTestFailureException :
public ::std::runtime_error {
161 explicit GoogleTestFailureException(
const TestPartResult& failure);
166 #endif // GTEST_HAS_EXCEPTIONS 168 namespace edit_distance {
176 const std::vector<size_t>& left,
const std::vector<size_t>& right);
180 const std::vector<std::string>& left,
181 const std::vector<std::string>& right);
185 const std::vector<std::string>& right,
206 const char* actual_expression,
207 const std::string& expected_value,
208 const std::string& actual_value,
213 const AssertionResult& assertion_result,
const char* expression_text,
214 const char* actual_predicate_value,
const char* expected_predicate_value);
245 template <
typename RawType>
255 static const size_t kBitCount = 8 *
sizeof(RawType);
258 static const size_t kFractionBitCount =
259 std::numeric_limits<RawType>::digits - 1;
262 static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;
265 static const Bits kSignBitMask =
static_cast<Bits
>(1) << (kBitCount - 1);
268 static const Bits kFractionBitMask = ~static_cast<Bits>(0) >>
269 (kExponentBitCount + 1);
272 static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);
286 static const uint32_t kMaxUlps = 4;
308 static RawType
Infinity() {
return ReinterpretBits(kExponentBitMask); }
311 static RawType Max();
316 const Bits&
bits()
const {
return u_.bits_; }
325 Bits
sign_bit()
const {
return kSignBitMask & u_.bits_; }
331 return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
343 if (is_nan() || rhs.
is_nan())
return false;
345 return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) <=
351 union FloatingPointUnion {
371 static Bits SignAndMagnitudeToBiased(
const Bits& sam) {
372 if (kSignBitMask & sam) {
377 return kSignBitMask | sam;
383 static Bits DistanceBetweenSignAndMagnitudeNumbers(
const Bits& sam1,
385 const Bits biased1 = SignAndMagnitudeToBiased(sam1);
386 const Bits biased2 = SignAndMagnitudeToBiased(sam2);
387 return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
390 FloatingPointUnion u_;
417 template <
typename T>
426 template <
typename T>
432 template <
typename T>
438 return &(TypeIdHelper<T>::dummy_);
456 virtual Test* CreateTest() = 0;
468 template <
class TestClass>
480 GTEST_API_ AssertionResult IsHRESULTSuccess(
const char* expr,
482 GTEST_API_ AssertionResult IsHRESULTFailure(
const char* expr,
485 #endif // GTEST_OS_WINDOWS 493 : file(a_file), line(a_line) {}
507 return a == def ? nullptr :
a;
510 template <
typename T>
522 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 529 <<
"Test can not provide both SetUpTestSuite and SetUpTestCase, please " 530 "make sure there is only one present at " 531 << filename <<
":" << line_num;
533 return test_case_fp !=
nullptr ? test_case_fp : test_suite_fp;
537 return &T::SetUpTestSuite;
543 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 550 <<
"Test can not provide both TearDownTestSuite and TearDownTestCase," 551 " please make sure there is only one present at" 552 << filename <<
":" << line_num;
554 return test_case_fp !=
nullptr ? test_case_fp : test_suite_fp;
558 return &T::TearDownTestSuite;
582 const char* test_suite_name,
const char* name,
const char* type_param,
598 TypedTestSuitePState() : registered_(
false) {}
603 bool AddTestName(
const char* file,
int line,
const char* case_name,
604 const char* test_name) {
607 "%s Test %s must be defined before " 608 "REGISTER_TYPED_TEST_SUITE_P(%s, ...).\n",
613 registered_tests_.insert(
618 bool TestExists(
const std::string& test_name)
const {
619 return registered_tests_.count(test_name) > 0;
622 const CodeLocation& GetCodeLocation(
const std::string& test_name)
const {
623 RegisteredTestsMap::const_iterator it = registered_tests_.find(test_name);
631 const char* VerifyRegisteredTestNames(
const char* test_suite_name,
632 const char* file,
int line,
633 const char* registered_tests);
636 typedef ::std::map<std::string, CodeLocation, std::less<>> RegisteredTestsMap;
639 RegisteredTestsMap registered_tests_;
643 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 645 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 651 inline const
char* SkipComma(const
char* str) {
652 const char* comma = strchr(str,
',');
653 if (comma ==
nullptr) {
664 const char* comma = strchr(str,
',');
665 return comma ==
nullptr ? str : std::string(str, comma);
670 void SplitString(const ::std::string& str,
char delimiter,
671 ::std::vector<::std::string>* dest);
676 template <
typename T>
682 template <
typename Prov
ided = DefaultNameGenerator>
687 template <
typename NameGenerator>
690 template <
typename NameGenerator,
typename Types>
692 result->push_back(NameGenerator::template GetName<typename Types::Head>(i));
693 GenerateNamesRecursively<NameGenerator>(
typename Types::Tail(), result,
697 template <
typename NameGenerator,
typename Types>
699 std::vector<std::string> result;
700 GenerateNamesRecursively<NameGenerator>(
Types(), &result, 0);
711 template <GTEST_TEMPLATE_ Fixture,
class TestSel,
typename Types>
719 const char* case_name,
const char* test_names,
int index,
720 const std::vector<std::string>& type_names =
721 GenerateNames<DefaultNameGenerator, Types>()) {
722 typedef typename Types::Head Type;
723 typedef Fixture<Type> FixtureClass;
724 typedef typename GTEST_BIND_(TestSel, Type) TestClass;
729 (std::string(prefix) + (prefix[0] ==
'\0' ?
"" :
"/") + case_name +
730 "/" + type_names[static_cast<size_t>(index)])
733 GetTypeName<Type>().c_str(),
735 code_location, GetTypeId<FixtureClass>(),
737 code_location.
file.c_str(), code_location.
line),
739 code_location.
file.c_str(), code_location.
line),
744 typename Types::Tail>::Register(prefix,
754 template <GTEST_TEMPLATE_ Fixture,
class TestSel>
758 const char* ,
const char* ,
760 const std::vector<std::string>& =
761 std::vector<std::string>() ) {
769 const char* case_name);
775 template <GTEST_TEMPLATE_ Fixture,
typename Tests,
typename Types>
779 const TypedTestSuitePState* state,
const char* case_name,
780 const char* test_names,
781 const std::vector<std::string>& type_names =
782 GenerateNames<DefaultNameGenerator, Types>()) {
784 std::string test_name =
786 if (!state->TestExists(test_name)) {
787 fprintf(stderr,
"Failed to get code location for test %s.%s at %s.",
788 case_name, test_name.c_str(),
794 const CodeLocation& test_location = state->GetCodeLocation(test_name);
796 typedef typename Tests::Head Head;
800 prefix, test_location, case_name, test_names, 0, type_names);
804 Types>::Register(prefix, code_location,
806 SkipComma(test_names),
812 template <GTEST_TEMPLATE_ Fixture,
typename Types>
816 const TypedTestSuitePState* ,
817 const char* ,
const char* ,
818 const std::vector<std::string>& =
819 std::vector<std::string>() ) {
850 operator bool()
const {
return true; }
860 explicit operator bool()
const {
return true; }
871 static const uint32_t kMaxRange = 1
u << 31;
873 explicit Random(uint32_t seed) : state_(seed) {}
875 void Reseed(uint32_t seed) { state_ = seed; }
879 uint32_t Generate(uint32_t range);
888 #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ 889 typename std::remove_const<typename std::remove_reference<T>::type>::type 894 template <
typename T>
897 template <
typename C>
898 static auto CheckDebugString(C*) ->
typename std::is_same<
899 std::string, decltype(std::declval<const C>().DebugString())>
::type;
901 static std::false_type CheckDebugString(...);
903 template <
typename C>
904 static auto CheckShortDebugString(C*) ->
typename std::is_same<
905 std::string, decltype(std::declval<const C>().ShortDebugString())>
::type;
907 static std::false_type CheckShortDebugString(...);
909 using HasDebugStringType = decltype(CheckDebugString<T>(
nullptr));
910 using HasShortDebugStringType = decltype(CheckShortDebugString<T>(
nullptr));
913 static constexpr
bool value =
914 HasDebugStringType::value && HasShortDebugStringType::value;
917 template <
typename T>
946 class Iterator = decltype(::std::declval<const C&>().begin()),
947 class = decltype(::std::declval<const C&>().end()),
948 class = decltype(++::std::declval<Iterator&>()),
949 class = decltype(*::std::declval<Iterator>()),
950 class =
typename C::const_iterator>
965 template <
typename T>
968 template <
typename U>
969 static char test(
typename U::hasher*,
typename U::reverse_iterator*);
970 template <
typename U>
971 static int test(
typename U::hasher*, ...);
972 template <
typename U>
973 static char test(...);
976 static const bool value =
sizeof(test<T>(
nullptr,
nullptr)) ==
sizeof(int);
979 template <
typename T>
982 template <
typename C,
983 bool =
sizeof(IsContainerTest<C>(0)) ==
sizeof(
IsContainer)>
986 template <
typename C>
993 template <
typename C>
995 using value_type = decltype(*std::declval<typename C::const_iterator>());
997 std::is_same<
typename std::remove_const<
1008 template <
typename C>
1017 template <
typename T,
typename U>
1018 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs);
1021 template <
typename T,
typename U>
1027 template <
typename T,
typename U,
size_t N>
1028 inline bool ArrayEq(
const T (&lhs)[N],
const U (&rhs)[N]) {
1035 template <
typename T,
typename U>
1036 bool ArrayEq(
const T* lhs,
size_t size,
const U* rhs) {
1037 for (
size_t i = 0;
i != size;
i++) {
1045 template <
typename Iter,
typename Element>
1047 for (Iter it = begin; it != end; ++it) {
1057 template <
typename T,
typename U>
1058 void CopyArray(
const T* from,
size_t size, U* to);
1061 template <
typename T,
typename U>
1067 template <
typename T,
typename U,
size_t N>
1075 template <
typename T,
typename U>
1077 for (
size_t i = 0;
i != size;
i++) {
1097 template <
typename Element>
1107 InitRef(array, count);
1112 InitCopy(array, count);
1117 (this->*rhs.clone_)(rhs.array_, rhs.size_);
1121 if (clone_ != &NativeArray::InitRef)
delete[] array_;
1125 size_t size()
const {
return size_; }
1126 const_iterator
begin()
const {
return array_; }
1127 const_iterator
end()
const {
return array_ + size_; }
1133 static_assert(!std::is_const<Element>::value,
"Type must not be const");
1134 static_assert(!std::is_reference<Element>::value,
1135 "Type must not be a reference");
1138 void InitCopy(
const Element* array,
size_t a_size) {
1143 clone_ = &NativeArray::InitCopy;
1147 void InitRef(
const Element* array,
size_t a_size) {
1150 clone_ = &NativeArray::InitRef;
1159 template <
size_t... Is>
1165 template <
bool plus_one,
typename T,
size_t sizeofT>
1167 template <
size_t... I,
size_t sizeofT>
1171 template <
size_t... I,
size_t sizeofT>
1180 :
DoubleSequence<N % 2 == 1, typename MakeIndexSequenceImpl<N / 2>::type,
1189 template <
typename... T>
1199 template <
size_t... I>
1205 template <
typename R>
1209 template <
size_t N,
typename... T>
1213 static_cast<T (*)()
>(
nullptr)...));
1218 template <
typename... T>
1221 template <
typename Derived,
size_t I>
1224 template <
typename... T,
size_t I>
1228 template <
typename Arg>
1230 : value(
std::forward<Arg>(t)) {}
1234 template <
typename Derived,
typename Idx>
1237 template <
size_t... Idx,
typename... T>
1242 template <
typename... Args>
1245 std::forward<Args>(args))... {}
1257 template <
typename F>
1258 auto Apply(F&&
f) -> decltype(std::forward<F>(
f)(this->Get<Idx>()...)) {
1259 return std::forward<F>(
f)(Get<Idx>()...);
1262 template <
typename F>
1263 auto Apply(F&&
f)
const -> decltype(std::forward<F>(
f)(this->Get<Idx>()...)) {
1264 return std::forward<F>(
f)(Get<Idx>()...);
1277 template <
typename... T>
1280 typename MakeIndexSequence<sizeof...(T)>::type> {
1286 template <
typename... Args>
1291 using FlatTuple::FlatTupleBase::Get;
1297 "INSTANTIATE_TEST_CASE_P is deprecated, please use " 1298 "INSTANTIATE_TEST_SUITE_P")
1299 constexpr
bool InstantiateTestCase_P_IsDeprecated() {
return true; }
1302 "TYPED_TEST_CASE_P is deprecated, please use " 1303 "TYPED_TEST_SUITE_P")
1304 constexpr
bool TypedTestCase_P_IsDeprecated() {
return true; }
1307 "TYPED_TEST_CASE is deprecated, please use " 1309 constexpr
bool TypedTestCaseIsDeprecated() {
return true; }
1312 "REGISTER_TYPED_TEST_CASE_P is deprecated, please use " 1313 "REGISTER_TYPED_TEST_SUITE_P")
1314 constexpr
bool RegisterTypedTestCase_P_IsDeprecated() {
return true; }
1317 "INSTANTIATE_TYPED_TEST_CASE_P is deprecated, please use " 1318 "INSTANTIATE_TYPED_TEST_SUITE_P")
1319 constexpr
bool InstantiateTypedTestCase_P_IsDeprecated() {
return true; }
1329 #pragma clang diagnostic push 1330 #pragma clang diagnostic ignored "-Wmismatched-tags" 1332 template <
typename... Ts>
1333 struct tuple_size<
testing::internal::FlatTuple<Ts...>>
1334 : std::integral_constant<size_t, sizeof...(Ts)> {};
1336 #pragma clang diagnostic pop 1340 #define GTEST_MESSAGE_AT_(file, line, message, result_type) \ 1341 ::testing::internal::AssertHelper(result_type, file, line, message) = \ 1342 ::testing::Message() 1344 #define GTEST_MESSAGE_(message, result_type) \ 1345 GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) 1347 #define GTEST_FATAL_FAILURE_(message) \ 1348 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) 1350 #define GTEST_NONFATAL_FAILURE_(message) \ 1351 GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) 1353 #define GTEST_SUCCESS_(message) \ 1354 GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) 1356 #define GTEST_SKIP_(message) \ 1357 return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip) 1364 #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ 1365 if (::testing::internal::AlwaysTrue()) { \ 1368 static_assert(true, "") // User must have a semicolon after expansion. 1370 #if GTEST_HAS_EXCEPTIONS 1373 namespace internal {
1377 const char* what()
const noexcept {
1378 return "this exception should never be thrown";
1387 #define GTEST_EXCEPTION_TYPE_(e) ::testing::internal::GetTypeName(typeid(e)) 1389 #else // GTEST_HAS_RTTI 1391 #define GTEST_EXCEPTION_TYPE_(e) \ 1392 std::string { "an std::exception-derived error" } 1394 #endif // GTEST_HAS_RTTI 1396 #define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) \ 1397 catch (typename std::conditional< \ 1398 std::is_same<typename std::remove_cv<typename std::remove_reference< \ 1399 expected_exception>::type>::type, \ 1400 std::exception>::value, \ 1401 const ::testing::internal::NeverThrown&, const std::exception&>::type \ 1403 gtest_msg.value = "Expected: " #statement \ 1404 " throws an exception of type " #expected_exception \ 1405 ".\n Actual: it throws "; \ 1406 gtest_msg.value += GTEST_EXCEPTION_TYPE_(e); \ 1407 gtest_msg.value += " with description \""; \ 1408 gtest_msg.value += e.what(); \ 1409 gtest_msg.value += "\"."; \ 1410 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 1413 #else // GTEST_HAS_EXCEPTIONS 1415 #define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) 1417 #endif // GTEST_HAS_EXCEPTIONS 1419 #define GTEST_TEST_THROW_(statement, expected_exception, fail) \ 1420 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1421 if (::testing::internal::TrueWithString gtest_msg{}) { \ 1422 bool gtest_caught_expected = false; \ 1424 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 1425 } catch (expected_exception const&) { \ 1426 gtest_caught_expected = true; \ 1428 GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) \ 1430 gtest_msg.value = "Expected: " #statement \ 1431 " throws an exception of type " #expected_exception \ 1432 ".\n Actual: it throws a different type."; \ 1433 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 1435 if (!gtest_caught_expected) { \ 1436 gtest_msg.value = "Expected: " #statement \ 1437 " throws an exception of type " #expected_exception \ 1438 ".\n Actual: it throws nothing."; \ 1439 goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ 1442 GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__) \ 1443 : fail(gtest_msg.value.c_str()) 1445 #if GTEST_HAS_EXCEPTIONS 1447 #define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \ 1448 catch (std::exception const& e) { \ 1449 gtest_msg.value = "it throws "; \ 1450 gtest_msg.value += GTEST_EXCEPTION_TYPE_(e); \ 1451 gtest_msg.value += " with description \""; \ 1452 gtest_msg.value += e.what(); \ 1453 gtest_msg.value += "\"."; \ 1454 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ 1457 #else // GTEST_HAS_EXCEPTIONS 1459 #define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() 1461 #endif // GTEST_HAS_EXCEPTIONS 1463 #define GTEST_TEST_NO_THROW_(statement, fail) \ 1464 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1465 if (::testing::internal::TrueWithString gtest_msg{}) { \ 1467 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 1469 GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \ 1471 gtest_msg.value = "it throws."; \ 1472 goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ 1475 GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__) \ 1476 : fail(("Expected: " #statement " doesn't throw an exception.\n" \ 1481 #define GTEST_TEST_ANY_THROW_(statement, fail) \ 1482 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1483 if (::testing::internal::AlwaysTrue()) { \ 1484 bool gtest_caught_any = false; \ 1486 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 1488 gtest_caught_any = true; \ 1490 if (!gtest_caught_any) { \ 1491 goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ 1494 GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__) \ 1495 : fail("Expected: " #statement \ 1496 " throws an exception.\n" \ 1497 " Actual: it doesn't.") 1502 #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ 1503 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1504 if (const ::testing::AssertionResult gtest_ar_ = \ 1505 ::testing::AssertionResult(expression)) \ 1508 fail(::testing::internal::GetBoolAssertionFailureMessage( \ 1509 gtest_ar_, text, #actual, #expected) \ 1512 #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ 1513 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1514 if (::testing::internal::AlwaysTrue()) { \ 1515 ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ 1516 GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ 1517 if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ 1518 goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ 1521 GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__) \ 1522 : fail("Expected: " #statement \ 1523 " doesn't generate new fatal " \ 1524 "failures in the current thread.\n" \ 1525 " Actual: it does.") 1528 #define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 1529 test_suite_name##_##test_name##_Test 1532 #define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \ 1533 static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1, \ 1534 "test_suite_name must not be empty"); \ 1535 static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1, \ 1536 "test_name must not be empty"); \ 1537 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 1538 : public parent_class { \ 1540 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() = default; \ 1541 ~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default; \ 1542 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 1543 (const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \ 1544 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \ 1545 const GTEST_TEST_CLASS_NAME_(test_suite_name, \ 1546 test_name) &) = delete; \ 1547 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ 1548 (GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &&) noexcept = delete; \ 1549 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \ 1550 GTEST_TEST_CLASS_NAME_(test_suite_name, \ 1551 test_name) &&) noexcept = delete; \ 1554 void TestBody() override; \ 1555 static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ 1558 ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \ 1559 test_name)::test_info_ = \ 1560 ::testing::internal::MakeAndRegisterTestInfo( \ 1561 #test_suite_name, #test_name, nullptr, nullptr, \ 1562 ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ 1563 ::testing::internal::SuiteApiResolver< \ 1564 parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__), \ 1565 ::testing::internal::SuiteApiResolver< \ 1566 parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__), \ 1567 new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \ 1568 test_suite_name, test_name)>); \ 1569 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() 1571 #endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
GTEST_API_ bool AlwaysTrue()
CodeLocation(const std::string &a_file, int a_line)
static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char *filename, int line_num)
void GenerateNamesRecursively(Types, std::vector< std::string > *result, int i)
void(*)() SetUpTestSuiteFunc
const ElemFromList< I, T... >::type & Get() const
GTEST_API_ bool SkipPrefix(const char *prefix, const char **pstr)
virtual ~TestFactoryBase()
static RawType Infinity()
auto Apply(F &&f) -> decltype(std::forward< F >(f)(this->Get< Idx >()...))
#define GTEST_DISABLE_MSC_WARNINGS_POP_()
static RawType ReinterpretBits(const Bits bits)
::std::string PrintToString(const T &value)
#define GTEST_BIND_(TmplSel, T)
auto Apply(F &&f, Tuple &&args) -> decltype(ApplyImpl(std::forward< F >(f), std::forward< Tuple >(args), MakeIndexSequence< std::tuple_size< typename std::remove_reference< Tuple >::type >::value >()))
typename std::conditional< sizeof(T) !=0, ::testing::Test, void >::type Test
IsNotContainer IsContainerTest(long)
const Element * const_iterator
FloatingPoint(const RawType &x)
typename ElemFromList< I, T... >::type value_type
Bits exponent_bits() const
FlatTupleBase(FlatTupleConstructTag, Args &&... args)
const Bits & bits() const
NativeArray(const Element *array, size_t count, RelationToSourceReference)
static bool Register(const char *prefix, const CodeLocation &code_location, const char *case_name, const char *test_names, int index, const std::vector< std::string > &type_names=GenerateNames< DefaultNameGenerator, Types >())
TrueWithString(const std::string &str)
internal::ProxyTypeList< Ts... > Types
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)
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(int skip_count)
std::string GetPrefixUntilComma(const char *str)
GTEST_API_ void RegisterTypeParameterizedTestSuite(const char *test_suite_name, CodeLocation code_location)
std::string StreamableToString(const T &streamable)
typename MakeIndexSequence< sizeof...(T)>::type IndexSequenceFor
GTEST_API_ ::std::string FormatFileLocation(const char *file, int line)
typename MakeIndexSequenceImpl< N >::type MakeIndexSequence
static std::string GetName(int i)
const_iterator end() const
static bool Register(const char *, const CodeLocation &, const char *, const char *, int, const std::vector< std::string > &=std::vector< std::string >())
void CopyArray(const T(&from)[N], U(*to)[N])
GTEST_API_ const char kStackTraceMarker[]
FloatingPoint< float > Float
FloatingPoint< double > Double
GTEST_API_ std::vector< EditType > CalculateOptimalEdits(const std::vector< std::string > &left, const std::vector< std::string > &right)
#define GTEST_CHECK_(condition)
void(*)() TearDownTestSuiteFunc
Test * CreateTest() override
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)
NativeArray(const Element *array, size_t count, RelationToSourceCopy)
NativeArray(const NativeArray &rhs)
SetUpTearDownSuiteFuncType GetNotDefaultOrNull(SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def)
ElemFromList< I, T... >::type & Get()
static bool Register(const char *, const CodeLocation &, const TypedTestSuitePState *, const char *, const char *, const std::vector< std::string > &=std::vector< std::string >())
bool operator==(const NativeArray &rhs) const
const_iterator begin() const
GTEST_API_ void RegisterTypeParameterizedTestSuiteInstantiation(const char *case_name)
FlatTupleElemBase(FlatTupleConstructTag, Arg &&t)
GTEST_API_ std::string GetBoolAssertionFailureMessage(const AssertionResult &assertion_result, const char *expression_text, const char *actual_predicate_value, const char *expected_predicate_value)
FlatTuple(FlatTupleConstructTag tag, Args &&... args)
#define GTEST_INTERNAL_DEPRECATED(message)
TrueWithString(const char *str)
static bool Register(const char *prefix, CodeLocation code_location, const TypedTestSuitePState *state, const char *case_name, const char *test_names, const std::vector< std::string > &type_names=GenerateNames< DefaultNameGenerator, Types >())
TypedTestSuitePState TypedTestCasePState
GTEST_API_ std::string AppendUserMessage(const std::string >est_msg, const Message &user_msg)
void SplitString(const ::std::string &str, char delimiter, ::std::vector<::std::string > *dest)
static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char *filename, int line_num)
TypeWithSize< sizeof(RawType)>::UInt Bits
Bits fraction_bits() const
GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251) class GTEST_API_ TypedTestSuitePState
std::is_same< typename std::remove_const< typename std::remove_reference< value_type >::type >::type, C > type
ConstCharPtr(const char *str)
fprintf(glob_prnt.io, "\)
void Reseed(uint32_t seed)
Iter ArrayAwareFind(Iter begin, Iter end, const Element &elem)
std::vector< std::string > GenerateNames()
GTEST_API_ std::string CreateUnifiedDiff(const std::vector< std::string > &left, const std::vector< std::string > &right, size_t context=2)
decltype(ElemFromListImpl< typename MakeIndexSequence< N >::type >::Apply(static_cast< T(*)()>(nullptr)...)) type
void(*)() SetUpTearDownSuiteFuncType
decltype(*std::declval< typename C::const_iterator >()) value_type
bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N])
GTEST_API_ TypeId GetTestTypeId()
std::string StripTrailingSpaces(std::string str)
auto Apply(F &&f) const -> decltype(std::forward< F >(f)(this->Get< Idx >()...))
bool AlmostEquals(const FloatingPoint &rhs) const