35 #include "gmock/internal/gmock-internal-utils.h"
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(JoinAsKeyValueTupleTest, JoinsEmptyTuple) {
77 TEST(JoinAsKeyValueTupleTest, JoinsOneTuple) {
81 TEST(JoinAsKeyValueTupleTest, JoinsTwoTuple) {
85 TEST(JoinAsKeyValueTupleTest, JoinsTenTuple) {
87 "(a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10)",
88 JoinAsKeyValueTuple({
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j"},
89 {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"}));
92 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsNoWord) {
98 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsDigits) {
105 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContainsCamelCaseWords) {
113 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameContains_SeparatedWords) {
120 TEST(ConvertIdentifierNameToWordsTest, WorksWhenNameIsMixture) {
126 TEST(GetRawPointerTest, WorksForSmartPointers) {
127 const char*
const raw_p1 =
new const char(
'a');
128 const std::unique_ptr<const char> p1(raw_p1);
130 double*
const raw_p2 =
new double(2.5);
131 const std::shared_ptr<double> p2(raw_p2);
135 TEST(GetRawPointerTest, WorksForRawPointers) {
142 TEST(GetRawPointerTest, WorksForStdReferenceWrapper) {
151 class Derived :
public Base {};
157 TEST(KindOfTest, Integer) {
171 #if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN
177 TEST(KindOfTest, FloatingPoint) {
183 TEST(KindOfTest, Other) {
191 TEST(LosslessArithmeticConvertibleTest, BoolToBool) {
195 TEST(LosslessArithmeticConvertibleTest, BoolToInteger) {
202 TEST(LosslessArithmeticConvertibleTest, BoolToFloatingPoint) {
207 TEST(LosslessArithmeticConvertibleTest, IntegerToBool) {
212 TEST(LosslessArithmeticConvertibleTest, IntegerToInteger) {
224 signed char,
unsigned int>::
value));
228 unsigned char,
unsigned char>::
value));
232 unsigned long,
unsigned long>::
value));
236 unsigned char,
signed char>::
value));
246 TEST(LosslessArithmeticConvertibleTest, IntegerToFloatingPoint) {
252 short,
long double>::
value));
255 TEST(LosslessArithmeticConvertibleTest, FloatingPointToBool) {
260 TEST(LosslessArithmeticConvertibleTest, FloatingPointToInteger) {
266 TEST(LosslessArithmeticConvertibleTest, FloatingPointToFloatingPoint) {
279 if (sizeof(
double) == sizeof(
long double)) {
291 TEST(TupleMatchesTest, WorksForSize0) {
298 TEST(TupleMatchesTest, WorksForSize1) {
300 std::tuple<int> values1(1), values2(2);
306 TEST(TupleMatchesTest, WorksForSize2) {
307 std::tuple<Matcher<int>, Matcher<char> >
matchers(
Eq(1),
Eq(
'a'));
308 std::tuple<int, char> values1(1,
'a'), values2(1,
'b'), values3(2,
'a'),
317 TEST(TupleMatchesTest, WorksForSize5) {
318 std::tuple<Matcher<int>, Matcher<char>, Matcher<bool>,
320 Matcher<std::string> >
322 std::tuple<int, char, bool, long, std::string>
323 values1(1,
'a',
true, 2L,
"hi"), values2(1,
'a',
true, 2L,
"hello"),
324 values3(2,
'a',
true, 2L,
"hi");
332 TEST(AssertTest, SucceedsOnTrue) {
333 Assert(
true, __FILE__, __LINE__,
"This should succeed.");
334 Assert(
true, __FILE__, __LINE__);
338 TEST(AssertTest, FailsFatallyOnFalse) {
340 Assert(
false, __FILE__, __LINE__,
"This should fail.");
344 Assert(
false, __FILE__, __LINE__);
349 TEST(ExpectTest, SucceedsOnTrue) {
350 Expect(
true, __FILE__, __LINE__,
"This should succeed.");
351 Expect(
true, __FILE__, __LINE__);
355 TEST(ExpectTest, FailsNonfatallyOnFalse) {
357 Expect(
false, __FILE__, __LINE__,
"This should fail.");
358 },
"This should fail");
361 Expect(
false, __FILE__, __LINE__);
362 },
"Expectation failed");
376 TEST_F(LogIsVisibleTest, AlwaysReturnsTrueIfVerbosityIsInfo) {
382 TEST_F(LogIsVisibleTest, AlwaysReturnsFalseIfVerbosityIsError) {
388 TEST_F(LogIsVisibleTest, WorksWhenVerbosityIsWarning) {
394 #if GTEST_HAS_STREAM_REDIRECTION
410 "^\nGMOCK WARNING:\nTest log\\.\nStack trace:\n" :
411 "^\nTest log\\.\nStack trace:\n"));
420 TEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) {
430 std::string CurrentStackTrace(
int max_depth,
int skip_count)
override {
434 void UponLeavingGTest()
override {}
439 TEST(LogTest, NoSkippingStackFrameInOptMode) {
440 MockStackTraceGetter* mock_os_stack_trace_getter =
new MockStackTraceGetter;
456 int skip_count = atoi(
log.substr(expected_message.size()).c_str());
460 const int expected_skip_count = 0;
463 const int expected_skip_count = 100;
470 AllOf(
Ge(expected_skip_count),
Le(expected_skip_count + 10)));
478 TEST(LogTest, AllLogsArePrintedWhenVerbosityIsInfo) {
485 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsWarning) {
492 TEST(LogTest, NoLogsArePrintedWhenVerbosityIsError) {
499 TEST(LogTest, OnlyWarningsArePrintedWhenVerbosityIsInvalid) {
500 TestLogWithSeverity(
"invalid",
kInfo,
false);
501 TestLogWithSeverity(
"invalid",
kWarning,
true);
521 void ExpectCallLogger() {
528 TEST(ExpectCallTest, LogsWhenVerbosityIsInfo) {
530 HasSubstr(
"EXPECT_CALL(mock, TestMethod())"));
535 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsWarning) {
541 TEST(ExpectCallTest, DoesNotLogWhenVerbosityIsError) {
545 void OnCallLogger() {
551 TEST(OnCallTest, LogsWhenVerbosityIsInfo) {
553 HasSubstr(
"ON_CALL(mock, TestMethod())"));
558 TEST(OnCallTest, DoesNotLogWhenVerbosityIsWarning) {
564 TEST(OnCallTest, DoesNotLogWhenVerbosityIsError) {
568 void OnCallAnyArgumentLogger() {
574 TEST(OnCallTest, LogsAnythingArgument) {
576 HasSubstr(
"ON_CALL(mock, TestMethodArg(_)"));
579 #endif // GTEST_HAS_STREAM_REDIRECTION
583 TEST(StlContainerViewTest, WorksForStlContainer) {
584 StaticAssertTypeEq<std::vector<int>,
585 StlContainerView<std::vector<int> >
::type>();
586 StaticAssertTypeEq<const std::vector<double>&,
589 typedef std::vector<char> Chars;
599 TEST(StlContainerViewTest, WorksForStaticNativeArray) {
600 StaticAssertTypeEq<NativeArray<int>,
602 StaticAssertTypeEq<NativeArray<double>,
604 StaticAssertTypeEq<NativeArray<char[3]>,
607 StaticAssertTypeEq<const NativeArray<int>,
610 int a1[3] = { 0, 1, 2 };
626 TEST(StlContainerViewTest, WorksForDynamicNativeArray) {
627 StaticAssertTypeEq<NativeArray<int>,
628 StlContainerView<std::tuple<const int*, size_t> >
::type>();
631 StlContainerView<std::tuple<std::shared_ptr<double>,
int> >
::type>();
634 const NativeArray<int>,
637 int a1[3] = { 0, 1, 2 };
638 const int*
const p1 =
a1;
639 NativeArray<int>
a2 =
645 const NativeArray<int> a3 = StlContainerView<std::tuple<int*, size_t> >
::Copy(
666 EXPECT_TRUE((std::is_same<IgnoredValue(), F::MakeResultIgnoredValue>::
value));
676 std::is_same<std::tuple<Matcher<bool>>, F::ArgumentMatcherTuple>::
value));
679 F::MakeResultIgnoredValue>::
value));
688 EXPECT_TRUE((std::is_same<std::tuple<bool, const long&>,
689 F::ArgumentTuple>::
value));
691 (std::is_same<std::tuple<Matcher<bool>, Matcher<const long&>>,
692 F::ArgumentMatcherTuple>::
value));
694 F::MakeResultVoid>::
value));
695 EXPECT_TRUE((std::is_same<IgnoredValue(
bool,
const long&),
696 F::MakeResultIgnoredValue>::
value));
699 TEST(FunctionTest, LongArgumentList) {
700 typedef Function<char(
bool,
int,
char*,
int&,
const long&)>
F;
709 (std::is_same<std::tuple<bool, int, char*, int&, const long&>,
710 F::ArgumentTuple>::
value));
713 std::tuple<Matcher<bool>, Matcher<int>, Matcher<char*>, Matcher<int&>,
714 Matcher<const long&>>,
715 F::ArgumentMatcherTuple>::
value));
717 (std::is_same<
void(
bool,
int,
char*,
int&,
const long&),
718 F::MakeResultVoid>::
value));
720 std::is_same<IgnoredValue(
bool,
int,
char*,
int&,
const long&),
721 F::MakeResultIgnoredValue>::
value));
749 R
"(TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
750 IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
751 dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
752 dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
753 ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=)";
755 "Man is distinguished, not only by his reason, but by this singular "
756 "passion from other animals, which is a lust of the mind, that by a "
757 "perseverance of delight in the continued and indefatigable generation "
758 "of knowledge, exceeds the short vehemence of any carnal pleasure.";