From 4bd79e4f25a86f3a2a99f6af06cc43cdacc55853 Mon Sep 17 00:00:00 2001 From: "zhanyong.wan" Date: Wed, 16 Sep 2009 17:38:08 +0000 Subject: Simplifies the definition of NativeArray. Works around a VC bug in StrictMock & NiceMock. --- include/gmock/gmock-generated-nice-strict.h | 72 ++++++++++++++++-------- include/gmock/gmock-generated-nice-strict.h.pump | 24 +++++--- include/gmock/internal/gmock-internal-utils.h | 28 +++------ 3 files changed, 73 insertions(+), 51 deletions(-) (limited to 'include') diff --git a/include/gmock/gmock-generated-nice-strict.h b/include/gmock/gmock-generated-nice-strict.h index f961d796..fc9a81b5 100644 --- a/include/gmock/gmock-generated-nice-strict.h +++ b/include/gmock/gmock-generated-nice-strict.h @@ -70,42 +70,49 @@ class NiceMock : public MockClass { // We don't factor out the constructor body to a common method, as // we have to avoid a possible clash with members of MockClass. NiceMock() { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } // C++ doesn't (yet) allow inheritance of constructors, so we have // to define it for each arity. template explicit NiceMock(const A1& a1) : MockClass(a1) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template NiceMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template NiceMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4) : MockClass(a1, a2, a3, a4) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5) : MockClass(a1, a2, a3, a4, a5) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } virtual ~NiceMock() { - Mock::UnregisterCallReaction(internal::implicit_cast(this)); + ::testing::Mock::UnregisterCallReaction( + internal::implicit_cast(this)); } }; @@ -151,40 +163,47 @@ class StrictMock : public MockClass { // We don't factor out the constructor body to a common method, as // we have to avoid a possible clash with members of MockClass. StrictMock() { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template explicit StrictMock(const A1& a1) : MockClass(a1) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template StrictMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template StrictMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4) : MockClass(a1, a2, a3, a4) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5) : MockClass(a1, a2, a3, a4, a5) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template (this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } virtual ~StrictMock() { - Mock::UnregisterCallReaction(internal::implicit_cast(this)); + ::testing::Mock::UnregisterCallReaction( + internal::implicit_cast(this)); } }; diff --git a/include/gmock/gmock-generated-nice-strict.h.pump b/include/gmock/gmock-generated-nice-strict.h.pump index 580e79f0..b265c2e4 100644 --- a/include/gmock/gmock-generated-nice-strict.h.pump +++ b/include/gmock/gmock-generated-nice-strict.h.pump @@ -73,14 +73,16 @@ class NiceMock : public MockClass { // We don't factor out the constructor body to a common method, as // we have to avoid a possible clash with members of MockClass. NiceMock() { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } // C++ doesn't (yet) allow inheritance of constructors, so we have // to define it for each arity. template explicit NiceMock(const A1& a1) : MockClass(a1) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } $range i 2..n @@ -88,13 +90,15 @@ $for i [[ $range j 1..i template <$for j, [[typename A$j]]> NiceMock($for j, [[const A$j& a$j]]) : MockClass($for j, [[a$j]]) { - Mock::AllowUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::AllowUninterestingCalls( + internal::implicit_cast(this)); } ]] virtual ~NiceMock() { - Mock::UnregisterCallReaction(internal::implicit_cast(this)); + ::testing::Mock::UnregisterCallReaction( + internal::implicit_cast(this)); } }; @@ -104,25 +108,29 @@ class StrictMock : public MockClass { // We don't factor out the constructor body to a common method, as // we have to avoid a possible clash with members of MockClass. StrictMock() { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } template explicit StrictMock(const A1& a1) : MockClass(a1) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } $for i [[ $range j 1..i template <$for j, [[typename A$j]]> StrictMock($for j, [[const A$j& a$j]]) : MockClass($for j, [[a$j]]) { - Mock::FailUninterestingCalls(internal::implicit_cast(this)); + ::testing::Mock::FailUninterestingCalls( + internal::implicit_cast(this)); } ]] virtual ~StrictMock() { - Mock::UnregisterCallReaction(internal::implicit_cast(this)); + ::testing::Mock::UnregisterCallReaction( + internal::implicit_cast(this)); } }; diff --git a/include/gmock/internal/gmock-internal-utils.h b/include/gmock/internal/gmock-internal-utils.h index ee6aa1e2..39e70b3f 100644 --- a/include/gmock/internal/gmock-internal-utils.h +++ b/include/gmock/internal/gmock-internal-utils.h @@ -581,21 +581,9 @@ class NativeArray { typedef Element value_type; typedef const Element* const_iterator; - // Constructs from a native array passed by reference. - template - NativeArray(const Element (&array)[N], RelationToSource relation) { - Init(array, N, relation); - } - - // Constructs from a native array passed by a pointer and a size. - // For generality we don't artificially restrict the types of the - // pointer and the size. - template - NativeArray(const ::std::tr1::tuple& array, - RelationToSource relation) { - Init(internal::GetRawPointer(::std::tr1::get<0>(array)), - ::std::tr1::get<1>(array), - relation); + // Constructs from a native array. + NativeArray(const Element* array, size_t count, RelationToSource relation) { + Init(array, count, relation); } // Copy constructor. @@ -691,10 +679,10 @@ class StlContainerView { static const_reference ConstReference(const Element (&array)[N]) { // Ensures that Element is not a const type. testing::StaticAssertTypeEq(); - return type(array, kReference); + return type(array, N, kReference); } static type Copy(const Element (&array)[N]) { - return type(array, kCopy); + return type(array, N, kCopy); } }; @@ -710,10 +698,12 @@ class StlContainerView< ::std::tr1::tuple > { static const_reference ConstReference( const ::std::tr1::tuple& array) { - return type(array, kReference); + using ::std::tr1::get; + return type(get<0>(array), get<1>(array), kReference); } static type Copy(const ::std::tr1::tuple& array) { - return type(array, kCopy); + using ::std::tr1::get; + return type(get<0>(array), get<1>(array), kCopy); } }; -- cgit v1.2.3