52 #define GTEST_IMPLEMENTATION_ 1
54 #undef GTEST_IMPLEMENTATION_
57 # include <sys/types.h>
60 class ProtocolMessage;
71 TEST(JoinAsTupleTest, JoinsEmptyTuple) {
75 TEST(JoinAsTupleTest, JoinsOneTuple) {
76 const char*
fields[] = {
"1"};
80 TEST(JoinAsTupleTest, JoinsTwoTuple) {
81 const char*
fields[] = {
"1",
"a"};
85 TEST(JoinAsTupleTest, JoinsTenTuple) {
86 const char*
fields[] = {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"};
87 EXPECT_EQ(
"(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)",
91 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsNoWord) {
97 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsDigits) {
104 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsCamelCaseWords) {
112 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContains_SeparatedWords) {
119 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameIsMixture) {
125 TEST(PointeeOfTest, WorksForSmartPointers) {
126 CompileAssertTypesEqual<int, PointeeOf<std::unique_ptr<int> >
::type>();
128 PointeeOf<std::shared_ptr<std::string> >
::type>();
131 TEST(PointeeOfTest, WorksForRawPointers) {
137 TEST(GetRawPointerTest, WorksForSmartPointers) {
138 const char*
const raw_p1 =
new const char(
'a');
139 const std::unique_ptr<const char> p1(raw_p1);
141 double*
const raw_p2 =
new double(2.5);
142 const std::shared_ptr<double> p2(raw_p2);
146 TEST(GetRawPointerTest, WorksForRawPointers) {
156 class Derived :
public Base {};
162 TEST(KindOfTest, Integer) {
176 #if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN
182 TEST(KindOfTest, FloatingPoint) {
188 TEST(KindOfTest, Other) {
196 TEST(LosslessArithmeticConvertibleTest, BoolToBool) {
200 TEST(LosslessArithmeticConvertibleTest, BoolToInteger) {
207 TEST(LosslessArithmeticConvertibleTest, BoolToFloatingPoint) {
212 TEST(LosslessArithmeticConvertibleTest, IntegerToBool) {
217 TEST(LosslessArithmeticConvertibleTest, IntegerToInteger) {
228 signed char,
unsigned int>::
value));
232 unsigned char,
unsigned char>::
value));
236 unsigned long,
unsigned long>::
value));
240 unsigned char,
signed char>::
value));
250 TEST(LosslessArithmeticConvertibleTest, IntegerToFloatingPoint) {
256 short,
long double>::
value));
259 TEST(LosslessArithmeticConvertibleTest, FloatingPointToBool) {
264 TEST(LosslessArithmeticConvertibleTest, FloatingPointToInteger) {
270 TEST(LosslessArithmeticConvertibleTest, FloatingPointToFloatingPoint) {
283 if (sizeof(
double) == sizeof(
long double)) {
295 TEST(TupleMatchesTest, WorksForSize0) {
296 std::tuple<> matchers;
302 TEST(TupleMatchesTest, WorksForSize1) {
303 std::tuple<Matcher<int> > matchers(Eq(1));
304 std::tuple<int> values1(1), values2(2);
310 TEST(TupleMatchesTest, WorksForSize2) {
311 std::tuple<Matcher<int>, Matcher<char> > matchers(Eq(1), Eq(
'a'));
312 std::tuple<int, char> values1(1,
'a'), values2(1,
'b'), values3(2,
'a'),
321 TEST(TupleMatchesTest, WorksForSize5) {
322 std::tuple<Matcher<int>, Matcher<char>, Matcher<bool>,
324 Matcher<std::string> >
325 matchers(Eq(1), Eq(
'a'), Eq(
true), Eq(2L), Eq(
"hi"));
326 std::tuple<int, char, bool, long, std::string>
327 values1(1,
'a',
true, 2L,
"hi"), values2(1,
'a',
true, 2L,
"hello"),
328 values3(2,
'a',
true, 2L,
"hi");
336 TEST(AssertTest, SucceedsOnTrue) {
337 Assert(
true, __FILE__, __LINE__,
"This should succeed.");
338 Assert(
true, __FILE__, __LINE__);
342 TEST(AssertTest, FailsFatallyOnFalse) {
344 Assert(
false, __FILE__, __LINE__,
"This should fail.");
348 Assert(
false, __FILE__, __LINE__);
353 TEST(ExpectTest, SucceedsOnTrue) {
354 Expect(
true, __FILE__, __LINE__,
"This should succeed.");
355 Expect(
true, __FILE__, __LINE__);
359 TEST(ExpectTest, FailsNonfatallyOnFalse) {
361 Expect(
false, __FILE__, __LINE__,
"This should fail.");
362 },
"This should fail");
365 Expect(
false, __FILE__, __LINE__);
366 },
"Expectation failed");
380 TEST_F(LogIsVisibleTest, AlwaysReturnsTrueIfVerbosityIsInfo) {
386 TEST_F(LogIsVisibleTest, AlwaysReturnsFalseIfVerbosityIsError) {
392 TEST_F(LogIsVisibleTest, WorksWhenVerbosityIsWarning) {
398 #if GTEST_HAS_STREAM_REDIRECTION
414 "^\nGMOCK WARNING:\nTest log\\.\nStack trace:\n" :
415 "^\nTest log\\.\nStack trace:\n"));
424 TEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) {
433 struct MockStackTraceGetter : testing::internal::OsStackTraceGetterInterface {
434 std::string CurrentStackTrace(
int max_depth,
int skip_count)
override {
438 void UponLeavingGTest()
override {}
443 TEST(LogTest, NoSkippingStackFrameInOptMode) {
444 MockStackTraceGetter* mock_os_stack_trace_getter =
new MockStackTraceGetter;
445 GetUnitTestImpl()->set_os_stack_trace_getter(mock_os_stack_trace_getter);
459 int skip_count = atoi(log.substr(expected_message.size()).c_str());
463 const int expected_skip_count = 0;
466 const int expected_skip_count = 100;
473 AllOf(Ge(expected_skip_count), Le(expected_skip_count + 10)));
476 GetUnitTestImpl()->set_os_stack_trace_getter(
nullptr);
481 TEST(LogTest, AllLogsArePrintedWhenVerbosityIsInfo) {
488 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsWarning) {
495 TEST(LogTest, NoLogsArePrintedWhenVerbosityIsError) {
502 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsInvalid) {
503 TestLogWithSeverity(
"invalid",
kInfo,
false);
504 TestLogWithSeverity(
"invalid",
kWarning,
true);
507 #endif // GTEST_HAS_STREAM_REDIRECTION
517 TEST(TypeTraitsTest, is_reference) {
523 TEST(TypeTraitsTest, type_equals) {
530 TEST(TypeTraitsTest, remove_reference) {
538 #if GTEST_HAS_STREAM_REDIRECTION
557 void ExpectCallLogger() {
564 TEST(ExpectCallTest, LogsWhenVerbosityIsInfo) {
566 HasSubstr(
"EXPECT_CALL(mock, TestMethod())"));
571 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsWarning) {
577 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsError) {
581 void OnCallLogger() {
587 TEST(OnCallTest, LogsWhenVerbosityIsInfo) {
589 HasSubstr(
"ON_CALL(mock, TestMethod())"));
594 TEST(OnCallTest, DoesNotLogWhenVerbosityIsWarning) {
600 TEST(OnCallTest, DoesNotLogWhenVerbosityIsError) {
604 void OnCallAnyArgumentLogger() {
610 TEST(OnCallTest, LogsAnythingArgument) {
612 HasSubstr(
"ON_CALL(mock, TestMethodArg(_)"));
615 #endif // GTEST_HAS_STREAM_REDIRECTION
619 TEST(StlContainerViewTest, WorksForStlContainer) {
620 StaticAssertTypeEq<std::vector<int>,
621 StlContainerView<std::vector<int> >
::type>();
622 StaticAssertTypeEq<const std::vector<double>&,
623 StlContainerView<std::vector<double> >::const_reference>();
625 typedef std::vector<char> Chars;
635 TEST(StlContainerViewTest, WorksForStaticNativeArray) {
636 StaticAssertTypeEq<NativeArray<int>,
638 StaticAssertTypeEq<NativeArray<double>,
640 StaticAssertTypeEq<NativeArray<char[3]>,
643 StaticAssertTypeEq<const NativeArray<int>,
646 int a1[3] = { 0, 1, 2 };
662 TEST(StlContainerViewTest, WorksForDynamicNativeArray) {
663 StaticAssertTypeEq<NativeArray<int>,
664 StlContainerView<std::tuple<const int*, size_t> >
::type>();
667 StlContainerView<std::tuple<std::shared_ptr<double>,
int> >
::type>();
670 const NativeArray<int>,
671 StlContainerView<std::tuple<const int*, int> >::const_reference>();
673 int a1[3] = { 0, 1, 2 };
674 const int*
const p1 = a1;
675 NativeArray<int> a2 =
676 StlContainerView<std::tuple<const int*, int> >::ConstReference(
677 std::make_tuple(p1, 3));
681 const NativeArray<int> a3 = StlContainerView<std::tuple<int*, size_t> >::Copy(
682 std::make_tuple(
static_cast<int*
>(a1), 3));
698 CompileAssertTypesEqual<int, F::Result>();
699 CompileAssertTypesEqual<std::tuple<>, F::ArgumentTuple>();
700 CompileAssertTypesEqual<std::tuple<>, F::ArgumentMatcherTuple>();
701 CompileAssertTypesEqual<void(), F::MakeResultVoid>();
702 CompileAssertTypesEqual<IgnoredValue(), F::MakeResultIgnoredValue>();
708 CompileAssertTypesEqual<int, F::Result>();
710 CompileAssertTypesEqual<std::tuple<bool>, F::ArgumentTuple>();
711 CompileAssertTypesEqual<std::tuple<Matcher<bool> >,
712 F::ArgumentMatcherTuple>();
713 CompileAssertTypesEqual<void(bool), F::MakeResultVoid>();
714 CompileAssertTypesEqual<IgnoredValue(
bool),
715 F::MakeResultIgnoredValue>();
719 typedef Function<int(
bool,
const long&)>
F;
721 CompileAssertTypesEqual<int, F::Result>();
724 CompileAssertTypesEqual<std::tuple<bool, const long&>,
726 CompileAssertTypesEqual<
727 std::tuple<Matcher<bool>, Matcher<const long&> >,
728 F::ArgumentMatcherTuple>();
729 CompileAssertTypesEqual<void(bool, const long&), F::MakeResultVoid>();
730 CompileAssertTypesEqual<IgnoredValue(
bool,
const long&),
731 F::MakeResultIgnoredValue>();
734 TEST(FunctionTest, LongArgumentList) {
735 typedef Function<char(
bool,
int,
char*,
int&,
const long&)>
F;
737 CompileAssertTypesEqual<char, F::Result>();
743 CompileAssertTypesEqual<
744 std::tuple<bool, int, char*, int&, const long&>,
746 CompileAssertTypesEqual<
747 std::tuple<Matcher<bool>, Matcher<int>, Matcher<char*>, Matcher<int&>,
748 Matcher<const long&> >,
749 F::ArgumentMatcherTuple>();
750 CompileAssertTypesEqual<
void(
bool,
int,
char*,
int&,
const long&),
751 F::MakeResultVoid>();
752 CompileAssertTypesEqual<
753 IgnoredValue(
bool,
int,
char*,
int&,
const long&),
754 F::MakeResultIgnoredValue>();