Improves cross-platform compatibility of gmock output. This fixes issue 135.
This commit is contained in:
parent
5b61ce3ee5
commit
e5121b5a82
|
@ -575,7 +575,7 @@ class ExpectationBase {
|
||||||
|
|
||||||
// Describes the source file location of this expectation.
|
// Describes the source file location of this expectation.
|
||||||
void DescribeLocationTo(::std::ostream* os) const {
|
void DescribeLocationTo(::std::ostream* os) const {
|
||||||
*os << file() << ":" << line() << ": ";
|
*os << FormatFileLocation(file(), line()) << " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Describes how many times a function call matching this
|
// Describes how many times a function call matching this
|
||||||
|
@ -1527,7 +1527,7 @@ class FunctionMockerBase : public UntypedFunctionMockerBase {
|
||||||
"returning default value.\n");
|
"returning default value.\n");
|
||||||
} else {
|
} else {
|
||||||
*os << "taking default action specified at:\n"
|
*os << "taking default action specified at:\n"
|
||||||
<< spec->file() << ":" << spec->line() << ":\n";
|
<< FormatFileLocation(spec->file(), spec->line()) << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "gmock/internal/gmock-port.h"
|
#include "gmock/internal/gmock-port.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
#include "gtest/gtest-spi.h"
|
#include "gtest/gtest-spi.h"
|
||||||
|
#include "gtest/internal/gtest-port.h"
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
@ -88,6 +89,7 @@ using testing::Ne;
|
||||||
using testing::Return;
|
using testing::Return;
|
||||||
using testing::Sequence;
|
using testing::Sequence;
|
||||||
using testing::internal::ExpectationTester;
|
using testing::internal::ExpectationTester;
|
||||||
|
using testing::internal::FormatFileLocation;
|
||||||
using testing::internal::g_gmock_mutex;
|
using testing::internal::g_gmock_mutex;
|
||||||
using testing::internal::kErrorVerbosity;
|
using testing::internal::kErrorVerbosity;
|
||||||
using testing::internal::kInfoVerbosity;
|
using testing::internal::kInfoVerbosity;
|
||||||
|
@ -797,6 +799,19 @@ TEST(ExpectCallTest, NthMatchTakesNthAction) {
|
||||||
EXPECT_EQ(3, b.DoB());
|
EXPECT_EQ(3, b.DoB());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tests that the WillRepeatedly() action is taken when the WillOnce(...)
|
||||||
|
// list is exhausted.
|
||||||
|
TEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) {
|
||||||
|
MockB b;
|
||||||
|
EXPECT_CALL(b, DoB())
|
||||||
|
.WillOnce(Return(1))
|
||||||
|
.WillRepeatedly(Return(2));
|
||||||
|
|
||||||
|
EXPECT_EQ(1, b.DoB());
|
||||||
|
EXPECT_EQ(2, b.DoB());
|
||||||
|
EXPECT_EQ(2, b.DoB());
|
||||||
|
}
|
||||||
|
|
||||||
#if GTEST_HAS_STREAM_REDIRECTION
|
#if GTEST_HAS_STREAM_REDIRECTION
|
||||||
|
|
||||||
// Tests that the default action is taken when the WillOnce(...) list is
|
// Tests that the default action is taken when the WillOnce(...) list is
|
||||||
|
@ -832,21 +847,34 @@ TEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) {
|
||||||
" - returning default value."));
|
" - returning default value."));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // GTEST_HAS_STREAM_REDIRECTION
|
TEST(FunctionMockerTest, ReportsExpectCallLocationForExhausedActions) {
|
||||||
|
|
||||||
// Tests that the WillRepeatedly() action is taken when the WillOnce(...)
|
|
||||||
// list is exhausted.
|
|
||||||
TEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) {
|
|
||||||
MockB b;
|
MockB b;
|
||||||
EXPECT_CALL(b, DoB())
|
std::string expect_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
|
||||||
.WillOnce(Return(1))
|
EXPECT_CALL(b, DoB()).Times(AnyNumber()).WillOnce(Return(1));
|
||||||
.WillRepeatedly(Return(2));
|
|
||||||
|
|
||||||
EXPECT_EQ(1, b.DoB());
|
EXPECT_EQ(1, b.DoB());
|
||||||
EXPECT_EQ(2, b.DoB());
|
|
||||||
EXPECT_EQ(2, b.DoB());
|
CaptureStdout();
|
||||||
|
EXPECT_EQ(0, b.DoB());
|
||||||
|
const String output = GetCapturedStdout();
|
||||||
|
// The warning message should contain the call location.
|
||||||
|
EXPECT_PRED_FORMAT2(IsSubstring, expect_call_location, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(FunctionMockerTest, ReportsDefaultActionLocationOfUninterestingCalls) {
|
||||||
|
std::string on_call_location;
|
||||||
|
CaptureStdout();
|
||||||
|
{
|
||||||
|
MockB b;
|
||||||
|
on_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
|
||||||
|
ON_CALL(b, DoB(_)).WillByDefault(Return(0));
|
||||||
|
b.DoB(0);
|
||||||
|
}
|
||||||
|
EXPECT_PRED_FORMAT2(IsSubstring, on_call_location, GetCapturedStdout());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // GTEST_HAS_STREAM_REDIRECTION
|
||||||
|
|
||||||
// Tests that an uninteresting call performs the default action.
|
// Tests that an uninteresting call performs the default action.
|
||||||
TEST(UninterestingCallTest, DoesDefaultAction) {
|
TEST(UninterestingCallTest, DoesDefaultAction) {
|
||||||
// When there is an ON_CALL() statement, the action specified by it
|
// When there is an ON_CALL() statement, the action specified by it
|
||||||
|
|
Loading…
Reference in New Issue
Block a user