Improves cross-platform compatibility of gmock output. This fixes issue 135.

This commit is contained in:
vladlosev 2011-02-11 23:50:38 +00:00
parent 5b61ce3ee5
commit e5121b5a82
2 changed files with 40 additions and 12 deletions

View File

@ -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";
} }
} }

View File

@ -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