35 #include "gmock/internal/gmock-internal-utils.h"
43 #include <type_traits>
46 #include "gmock/gmock.h"
47 #include "gmock/internal/gmock-port.h"
48 #include "gtest/gtest-spi.h"
49 #include "gtest/gtest.h"
56 #define GTEST_IMPLEMENTATION_ 1
57 #include "src/gtest-internal-inl.h"
58 #undef GTEST_IMPLEMENTATION_
61 # include <sys/types.h>
73 TEST(JoinAsTupleTest, JoinsEmptyTuple) {
77 TEST(JoinAsTupleTest, JoinsOneTuple) {
78 const char*
fields[] = {
"1"};
82 TEST(JoinAsTupleTest, JoinsTwoTuple) {
83 const char*
fields[] = {
"1",
"a"};
87 TEST(JoinAsTupleTest, JoinsTenTuple) {
88 const char*
fields[] = {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"};
89 EXPECT_EQ(
"(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)",
93 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsNoWord) {
99 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsDigits) {
106 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsCamelCaseWords) {
114 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContains_SeparatedWords) {
121 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameIsMixture) {
127 TEST(PointeeOfTest, WorksForSmartPointers) {
128 CompileAssertTypesEqual<int, PointeeOf<std::unique_ptr<int> >
::type>();
130 PointeeOf<std::shared_ptr<std::string> >
::type>();
133 TEST(PointeeOfTest, WorksForRawPointers) {
139 TEST(GetRawPointerTest, WorksForSmartPointers) {
140 const char*
const raw_p1 =
new const char(
'a');
141 const std::unique_ptr<const char> p1(raw_p1);
143 double*
const raw_p2 =
new double(2.5);
144 const std::shared_ptr<double> p2(raw_p2);
148 TEST(GetRawPointerTest, WorksForRawPointers) {
158 class Derived :
public Base {};
164 TEST(KindOfTest, Integer) {
178 #if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN
184 TEST(KindOfTest, FloatingPoint) {
190 TEST(KindOfTest, Other) {
198 TEST(LosslessArithmeticConvertibleTest, BoolToBool) {
202 TEST(LosslessArithmeticConvertibleTest, BoolToInteger) {
209 TEST(LosslessArithmeticConvertibleTest, BoolToFloatingPoint) {
214 TEST(LosslessArithmeticConvertibleTest, IntegerToBool) {
219 TEST(LosslessArithmeticConvertibleTest, IntegerToInteger) {
230 signed char,
unsigned int>::
value));
234 unsigned char,
unsigned char>::
value));
238 unsigned long,
unsigned long>::
value));
242 unsigned char,
signed char>::
value));
252 TEST(LosslessArithmeticConvertibleTest, IntegerToFloatingPoint) {
258 short,
long double>::
value));
261 TEST(LosslessArithmeticConvertibleTest, FloatingPointToBool) {
266 TEST(LosslessArithmeticConvertibleTest, FloatingPointToInteger) {
272 TEST(LosslessArithmeticConvertibleTest, FloatingPointToFloatingPoint) {
285 if (sizeof(
double) == sizeof(
long double)) {
297 TEST(TupleMatchesTest, WorksForSize0) {
304 TEST(TupleMatchesTest, WorksForSize1) {
306 std::tuple<int> values1(1), values2(2);
312 TEST(TupleMatchesTest, WorksForSize2) {
313 std::tuple<Matcher<int>, Matcher<char> >
matchers(
Eq(1),
Eq(
'a'));
314 std::tuple<int, char> values1(1,
'a'), values2(1,
'b'), values3(2,
'a'),
323 TEST(TupleMatchesTest, WorksForSize5) {
324 std::tuple<Matcher<int>, Matcher<char>, Matcher<bool>,
326 Matcher<std::string> >
328 std::tuple<int, char, bool, long, std::string>
329 values1(1,
'a',
true, 2L,
"hi"), values2(1,
'a',
true, 2L,
"hello"),
330 values3(2,
'a',
true, 2L,
"hi");
338 TEST(AssertTest, SucceedsOnTrue) {
339 Assert(
true, __FILE__, __LINE__,
"This should succeed.");
340 Assert(
true, __FILE__, __LINE__);
344 TEST(AssertTest, FailsFatallyOnFalse) {
346 Assert(
false, __FILE__, __LINE__,
"This should fail.");
350 Assert(
false, __FILE__, __LINE__);
355 TEST(ExpectTest, SucceedsOnTrue) {
356 Expect(
true, __FILE__, __LINE__,
"This should succeed.");
357 Expect(
true, __FILE__, __LINE__);
361 TEST(ExpectTest, FailsNonfatallyOnFalse) {
363 Expect(
false, __FILE__, __LINE__,
"This should fail.");
364 },
"This should fail");
367 Expect(
false, __FILE__, __LINE__);
368 },
"Expectation failed");
382 TEST_F(LogIsVisibleTest, AlwaysReturnsTrueIfVerbosityIsInfo) {
388 TEST_F(LogIsVisibleTest, AlwaysReturnsFalseIfVerbosityIsError) {
394 TEST_F(LogIsVisibleTest, WorksWhenVerbosityIsWarning) {
400 #if GTEST_HAS_STREAM_REDIRECTION
416 "^\nGMOCK WARNING:\nTest log\\.\nStack trace:\n" :
417 "^\nTest log\\.\nStack trace:\n"));
426 TEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) {
436 std::string CurrentStackTrace(
int max_depth,
int skip_count)
override {
440 void UponLeavingGTest()
override {}
445 TEST(LogTest, NoSkippingStackFrameInOptMode) {
446 MockStackTraceGetter* mock_os_stack_trace_getter =
new MockStackTraceGetter;
461 int skip_count = atoi(
log.substr(expected_message.size()).c_str());
465 const int expected_skip_count = 0;
468 const int expected_skip_count = 100;
475 AllOf(
Ge(expected_skip_count),
Le(expected_skip_count + 10)));
483 TEST(LogTest, AllLogsArePrintedWhenVerbosityIsInfo) {
490 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsWarning) {
497 TEST(LogTest, NoLogsArePrintedWhenVerbosityIsError) {
504 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsInvalid) {
505 TestLogWithSeverity(
"invalid",
kInfo,
false);
506 TestLogWithSeverity(
"invalid",
kWarning,
true);
509 #endif // GTEST_HAS_STREAM_REDIRECTION
511 TEST(TypeTraitsTest, remove_reference) {
519 #if GTEST_HAS_STREAM_REDIRECTION
538 void ExpectCallLogger() {
545 TEST(ExpectCallTest, LogsWhenVerbosityIsInfo) {
547 HasSubstr(
"EXPECT_CALL(mock, TestMethod())"));
552 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsWarning) {
558 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsError) {
562 void OnCallLogger() {
568 TEST(OnCallTest, LogsWhenVerbosityIsInfo) {
570 HasSubstr(
"ON_CALL(mock, TestMethod())"));
575 TEST(OnCallTest, DoesNotLogWhenVerbosityIsWarning) {
581 TEST(OnCallTest, DoesNotLogWhenVerbosityIsError) {
585 void OnCallAnyArgumentLogger() {
591 TEST(OnCallTest, LogsAnythingArgument) {
593 HasSubstr(
"ON_CALL(mock, TestMethodArg(_)"));
596 #endif // GTEST_HAS_STREAM_REDIRECTION
600 TEST(StlContainerViewTest, WorksForStlContainer) {
601 StaticAssertTypeEq<std::vector<int>,
602 StlContainerView<std::vector<int> >
::type>();
603 StaticAssertTypeEq<const std::vector<double>&,
606 typedef std::vector<char> Chars;
616 TEST(StlContainerViewTest, WorksForStaticNativeArray) {
617 StaticAssertTypeEq<NativeArray<int>,
619 StaticAssertTypeEq<NativeArray<double>,
621 StaticAssertTypeEq<NativeArray<char[3]>,
624 StaticAssertTypeEq<const NativeArray<int>,
627 int a1[3] = { 0, 1, 2 };
643 TEST(StlContainerViewTest, WorksForDynamicNativeArray) {
644 StaticAssertTypeEq<NativeArray<int>,
645 StlContainerView<std::tuple<const int*, size_t> >
::type>();
648 StlContainerView<std::tuple<std::shared_ptr<double>,
int> >
::type>();
651 const NativeArray<int>,
654 int a1[3] = { 0, 1, 2 };
655 const int*
const p1 =
a1;
656 NativeArray<int>
a2 =
662 const NativeArray<int> a3 = StlContainerView<std::tuple<int*, size_t> >
::Copy(
679 CompileAssertTypesEqual<int, F::Result>();
680 CompileAssertTypesEqual<std::tuple<>, F::ArgumentTuple>();
681 CompileAssertTypesEqual<std::tuple<>, F::ArgumentMatcherTuple>();
682 CompileAssertTypesEqual<void(), F::MakeResultVoid>();
683 CompileAssertTypesEqual<IgnoredValue(), F::MakeResultIgnoredValue>();
689 CompileAssertTypesEqual<int, F::Result>();
691 CompileAssertTypesEqual<std::tuple<bool>, F::ArgumentTuple>();
692 CompileAssertTypesEqual<std::tuple<Matcher<bool> >,
693 F::ArgumentMatcherTuple>();
694 CompileAssertTypesEqual<void(bool), F::MakeResultVoid>();
695 CompileAssertTypesEqual<IgnoredValue(
bool),
696 F::MakeResultIgnoredValue>();
702 CompileAssertTypesEqual<int, F::Result>();
705 CompileAssertTypesEqual<std::tuple<bool, const long&>,
707 CompileAssertTypesEqual<
708 std::tuple<Matcher<bool>, Matcher<const long&> >,
709 F::ArgumentMatcherTuple>();
710 CompileAssertTypesEqual<void(bool, const long&), F::MakeResultVoid>();
711 CompileAssertTypesEqual<IgnoredValue(
bool,
const long&),
712 F::MakeResultIgnoredValue>();
715 TEST(FunctionTest, LongArgumentList) {
716 typedef Function<char(
bool,
int,
char*,
int&,
const long&)>
F;
718 CompileAssertTypesEqual<char, F::Result>();
724 CompileAssertTypesEqual<
725 std::tuple<bool, int, char*, int&, const long&>,
727 CompileAssertTypesEqual<
728 std::tuple<Matcher<bool>, Matcher<int>, Matcher<char*>, Matcher<int&>,
729 Matcher<const long&> >,
730 F::ArgumentMatcherTuple>();
731 CompileAssertTypesEqual<void(
bool,
int,
char*,
int&,
const long&),
732 F::MakeResultVoid>();
733 CompileAssertTypesEqual<
734 IgnoredValue(
bool,
int,
char*,
int&,
const long&),
735 F::MakeResultIgnoredValue>();