diff options
Diffstat (limited to 'googlemock/test')
| -rw-r--r-- | googlemock/test/gmock-function-mocker_test.cc | 7 | ||||
| -rw-r--r-- | googlemock/test/gmock-generated-matchers_test.cc | 53 | ||||
| -rw-r--r-- | googlemock/test/gmock-matchers_test.cc | 146 | 
3 files changed, 162 insertions, 44 deletions
diff --git a/googlemock/test/gmock-function-mocker_test.cc b/googlemock/test/gmock-function-mocker_test.cc index fbc5d5b2..55be70a8 100644 --- a/googlemock/test/gmock-function-mocker_test.cc +++ b/googlemock/test/gmock-function-mocker_test.cc @@ -101,6 +101,10 @@ class FooInterface {    virtual int TypeWithComma(const std::map<int, std::string>& a_map) = 0;    virtual int TypeWithTemplatedCopyCtor(const TemplatedCopyable<int>&) = 0; +  virtual int (*ReturnsFunctionPointer1(int))(bool) = 0; +  using fn_ptr = int (*)(bool); +  virtual fn_ptr ReturnsFunctionPointer2(int) = 0; +  #if GTEST_OS_WINDOWS    STDMETHOD_(int, CTNullary)() = 0;    STDMETHOD_(bool, CTUnary)(int x) = 0; @@ -159,6 +163,9 @@ class MockFoo : public FooInterface {    MOCK_METHOD(int, TypeWithTemplatedCopyCtor,                (const TemplatedCopyable<int>&));  // NOLINT +  MOCK_METHOD(int (*)(bool), ReturnsFunctionPointer1, (int), ()); +  MOCK_METHOD(fn_ptr, ReturnsFunctionPointer2, (int), ()); +  #if GTEST_OS_WINDOWS    MOCK_METHOD(int, CTNullary, (), (Calltype(STDMETHODCALLTYPE)));    MOCK_METHOD(bool, CTUnary, (int), (Calltype(STDMETHODCALLTYPE))); diff --git a/googlemock/test/gmock-generated-matchers_test.cc b/googlemock/test/gmock-generated-matchers_test.cc index 6c4b3000..f3f49a68 100644 --- a/googlemock/test/gmock-generated-matchers_test.cc +++ b/googlemock/test/gmock-generated-matchers_test.cc @@ -41,6 +41,8 @@  #include "gmock/gmock-generated-matchers.h" +#include <array> +#include <iterator>  #include <list>  #include <map>  #include <memory> @@ -51,8 +53,8 @@  #include <vector>  #include "gmock/gmock.h" -#include "gtest/gtest.h"  #include "gtest/gtest-spi.h" +#include "gtest/gtest.h"  namespace { @@ -195,7 +197,7 @@ TEST(ElementsAreTest, ExplainsNonTrivialMatch) {        ElementsAre(GreaterThan(1), 0, GreaterThan(2));    const int a[] = { 10, 0, 100 }; -  vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> test_vector(std::begin(a), std::end(a));    EXPECT_EQ("whose element #0 matches, which is 9 more than 1,\n"              "and whose element #2 matches, which is 98 more than 2",              Explain(m, test_vector)); @@ -280,7 +282,7 @@ TEST(ElementsAreTest, MatchesThreeElementsMixedMatchers) {  TEST(ElementsAreTest, MatchesTenElementVector) {    const int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; -  vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> test_vector(std::begin(a), std::end(a));    EXPECT_THAT(test_vector,                // The element list can contain values and/or matchers @@ -317,13 +319,10 @@ TEST(ElementsAreTest, DoesNotMatchWrongOrder) {  }  TEST(ElementsAreTest, WorksForNestedContainer) { -  const char* strings[] = { -    "Hi", -    "world" -  }; +  constexpr std::array<const char*, 2> strings = {{"Hi", "world"}};    vector<list<char> > nested; -  for (size_t i = 0; i < GTEST_ARRAY_SIZE_(strings); i++) { +  for (size_t i = 0; i < strings.size(); i++) {      nested.push_back(list<char>(strings[i], strings[i] + strlen(strings[i])));    } @@ -335,7 +334,7 @@ TEST(ElementsAreTest, WorksForNestedContainer) {  TEST(ElementsAreTest, WorksWithByRefElementMatchers) {    int a[] = { 0, 1, 2 }; -  vector<int> v(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> v(std::begin(a), std::end(a));    EXPECT_THAT(v, ElementsAre(Ref(v[0]), Ref(v[1]), Ref(v[2])));    EXPECT_THAT(v, Not(ElementsAre(Ref(v[0]), Ref(v[1]), Ref(a[2])))); @@ -343,7 +342,7 @@ TEST(ElementsAreTest, WorksWithByRefElementMatchers) {  TEST(ElementsAreTest, WorksWithContainerPointerUsingPointee) {    int a[] = { 0, 1, 2 }; -  vector<int> v(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> v(std::begin(a), std::end(a));    EXPECT_THAT(&v, Pointee(ElementsAre(0, 1, _)));    EXPECT_THAT(&v, Not(Pointee(ElementsAre(0, _, 3)))); @@ -440,7 +439,7 @@ TEST(ElementsAreTest, MakesCopyOfArguments) {  TEST(ElementsAreArrayTest, CanBeCreatedWithValueArray) {    const int a[] = { 1, 2, 3 }; -  vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> test_vector(std::begin(a), std::end(a));    EXPECT_THAT(test_vector, ElementsAreArray(a));    test_vector[2] = 0; @@ -448,20 +447,20 @@ TEST(ElementsAreArrayTest, CanBeCreatedWithValueArray) {  }  TEST(ElementsAreArrayTest, CanBeCreatedWithArraySize) { -  const char* a[] = { "one", "two", "three" }; +  std::array<const char*, 3> a = {{"one", "two", "three"}}; -  vector<std::string> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); -  EXPECT_THAT(test_vector, ElementsAreArray(a, GTEST_ARRAY_SIZE_(a))); +  vector<std::string> test_vector(std::begin(a), std::end(a)); +  EXPECT_THAT(test_vector, ElementsAreArray(a.data(), a.size())); -  const char** p = a; +  const char** p = a.data();    test_vector[0] = "1"; -  EXPECT_THAT(test_vector, Not(ElementsAreArray(p, GTEST_ARRAY_SIZE_(a)))); +  EXPECT_THAT(test_vector, Not(ElementsAreArray(p, a.size())));  }  TEST(ElementsAreArrayTest, CanBeCreatedWithoutArraySize) {    const char* a[] = { "one", "two", "three" }; -  vector<std::string> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<std::string> test_vector(std::begin(a), std::end(a));    EXPECT_THAT(test_vector, ElementsAreArray(a));    test_vector[0] = "1"; @@ -484,8 +483,8 @@ TEST(ElementsAreArrayTest, CanBeCreatedWithMatcherArray) {  TEST(ElementsAreArrayTest, CanBeCreatedWithVector) {    const int a[] = { 1, 2, 3 }; -  vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); -  const vector<int> expected(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> test_vector(std::begin(a), std::end(a)); +  const vector<int> expected(std::begin(a), std::end(a));    EXPECT_THAT(test_vector, ElementsAreArray(expected));    test_vector.push_back(4);    EXPECT_THAT(test_vector, Not(ElementsAreArray(expected))); @@ -530,9 +529,9 @@ TEST(ElementsAreArrayTest,  TEST(ElementsAreArrayTest, CanBeCreatedWithMatcherVector) {    const int a[] = { 1, 2, 3 };    const Matcher<int> kMatchers[] = { Eq(1), Eq(2), Eq(3) }; -  vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); -  const vector<Matcher<int> > expected( -      kMatchers, kMatchers + GTEST_ARRAY_SIZE_(kMatchers)); +  vector<int> test_vector(std::begin(a), std::end(a)); +  const vector<Matcher<int>> expected(std::begin(kMatchers), +                                      std::end(kMatchers));    EXPECT_THAT(test_vector, ElementsAreArray(expected));    test_vector.push_back(4);    EXPECT_THAT(test_vector, Not(ElementsAreArray(expected))); @@ -540,11 +539,11 @@ TEST(ElementsAreArrayTest, CanBeCreatedWithMatcherVector) {  TEST(ElementsAreArrayTest, CanBeCreatedWithIteratorRange) {    const int a[] = { 1, 2, 3 }; -  const vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); -  const vector<int> expected(a, a + GTEST_ARRAY_SIZE_(a)); +  const vector<int> test_vector(std::begin(a), std::end(a)); +  const vector<int> expected(std::begin(a), std::end(a));    EXPECT_THAT(test_vector, ElementsAreArray(expected.begin(), expected.end()));    // Pointers are iterators, too. -  EXPECT_THAT(test_vector, ElementsAreArray(a, a + GTEST_ARRAY_SIZE_(a))); +  EXPECT_THAT(test_vector, ElementsAreArray(std::begin(a), std::end(a)));    // The empty range of NULL pointers should also be okay.    int* const null_int = nullptr;    EXPECT_THAT(test_vector, Not(ElementsAreArray(null_int, null_int))); @@ -564,8 +563,8 @@ TEST(ElementsAreArrayTest, WorksWithNativeArray) {  TEST(ElementsAreArrayTest, SourceLifeSpan) {    const int a[] = { 1, 2, 3 }; -  vector<int> test_vector(a, a + GTEST_ARRAY_SIZE_(a)); -  vector<int> expect(a, a + GTEST_ARRAY_SIZE_(a)); +  vector<int> test_vector(std::begin(a), std::end(a)); +  vector<int> expect(std::begin(a), std::end(a));    ElementsAreArrayMatcher<int> matcher_maker =        ElementsAreArray(expect.begin(), expect.end());    EXPECT_THAT(test_vector, matcher_maker); diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc index 03735267..bc49cb62 100644 --- a/googlemock/test/gmock-matchers_test.cc +++ b/googlemock/test/gmock-matchers_test.cc @@ -41,10 +41,11 @@  #endif  #include "gmock/gmock-matchers.h" -#include "gmock/gmock-more-matchers.h"  #include <string.h>  #include <time.h> + +#include <array>  #include <deque>  #include <forward_list>  #include <functional> @@ -60,9 +61,11 @@  #include <type_traits>  #include <utility>  #include <vector> + +#include "gmock/gmock-more-matchers.h"  #include "gmock/gmock.h" -#include "gtest/gtest.h"  #include "gtest/gtest-spi.h" +#include "gtest/gtest.h"  namespace testing {  namespace gmock_matchers_test { @@ -2054,6 +2057,114 @@ TEST(PairMatchBaseTest, WorksWithMoveOnly) {    EXPECT_TRUE(matcher.Matches(pointers));  } +// Tests that IsNan() matches a NaN, with float. +TEST(IsNan, FloatMatchesNan) { +  float quiet_nan = std::numeric_limits<float>::quiet_NaN(); +  float other_nan = std::nanf("1"); +  float real_value = 1.0f; + +  Matcher<float> m = IsNan(); +  EXPECT_TRUE(m.Matches(quiet_nan)); +  EXPECT_TRUE(m.Matches(other_nan)); +  EXPECT_FALSE(m.Matches(real_value)); + +  Matcher<float&> m_ref = IsNan(); +  EXPECT_TRUE(m_ref.Matches(quiet_nan)); +  EXPECT_TRUE(m_ref.Matches(other_nan)); +  EXPECT_FALSE(m_ref.Matches(real_value)); + +  Matcher<const float&> m_cref = IsNan(); +  EXPECT_TRUE(m_cref.Matches(quiet_nan)); +  EXPECT_TRUE(m_cref.Matches(other_nan)); +  EXPECT_FALSE(m_cref.Matches(real_value)); +} + +// Tests that IsNan() matches a NaN, with double. +TEST(IsNan, DoubleMatchesNan) { +  double quiet_nan = std::numeric_limits<double>::quiet_NaN(); +  double other_nan = std::nan("1"); +  double real_value = 1.0; + +  Matcher<double> m = IsNan(); +  EXPECT_TRUE(m.Matches(quiet_nan)); +  EXPECT_TRUE(m.Matches(other_nan)); +  EXPECT_FALSE(m.Matches(real_value)); + +  Matcher<double&> m_ref = IsNan(); +  EXPECT_TRUE(m_ref.Matches(quiet_nan)); +  EXPECT_TRUE(m_ref.Matches(other_nan)); +  EXPECT_FALSE(m_ref.Matches(real_value)); + +  Matcher<const double&> m_cref = IsNan(); +  EXPECT_TRUE(m_cref.Matches(quiet_nan)); +  EXPECT_TRUE(m_cref.Matches(other_nan)); +  EXPECT_FALSE(m_cref.Matches(real_value)); +} + +// Tests that IsNan() matches a NaN, with long double. +TEST(IsNan, LongDoubleMatchesNan) { +  long double quiet_nan = std::numeric_limits<long double>::quiet_NaN(); +  long double other_nan = std::nan("1"); +  long double real_value = 1.0; + +  Matcher<long double> m = IsNan(); +  EXPECT_TRUE(m.Matches(quiet_nan)); +  EXPECT_TRUE(m.Matches(other_nan)); +  EXPECT_FALSE(m.Matches(real_value)); + +  Matcher<long double&> m_ref = IsNan(); +  EXPECT_TRUE(m_ref.Matches(quiet_nan)); +  EXPECT_TRUE(m_ref.Matches(other_nan)); +  EXPECT_FALSE(m_ref.Matches(real_value)); + +  Matcher<const long double&> m_cref = IsNan(); +  EXPECT_TRUE(m_cref.Matches(quiet_nan)); +  EXPECT_TRUE(m_cref.Matches(other_nan)); +  EXPECT_FALSE(m_cref.Matches(real_value)); +} + +// Tests that IsNan() works with Not. +TEST(IsNan, NotMatchesNan) { +  Matcher<float> mf = Not(IsNan()); +  EXPECT_FALSE(mf.Matches(std::numeric_limits<float>::quiet_NaN())); +  EXPECT_FALSE(mf.Matches(std::nanf("1"))); +  EXPECT_TRUE(mf.Matches(1.0)); + +  Matcher<double> md = Not(IsNan()); +  EXPECT_FALSE(md.Matches(std::numeric_limits<double>::quiet_NaN())); +  EXPECT_FALSE(md.Matches(std::nan("1"))); +  EXPECT_TRUE(md.Matches(1.0)); + +  Matcher<long double> mld = Not(IsNan()); +  EXPECT_FALSE(mld.Matches(std::numeric_limits<long double>::quiet_NaN())); +  EXPECT_FALSE(mld.Matches(std::nanl("1"))); +  EXPECT_TRUE(mld.Matches(1.0)); +} + +// Tests that IsNan() can describe itself. +TEST(IsNan, CanDescribeSelf) { +  Matcher<float> mf = IsNan(); +  EXPECT_EQ("is NaN", Describe(mf)); + +  Matcher<double> md = IsNan(); +  EXPECT_EQ("is NaN", Describe(md)); + +  Matcher<long double> mld = IsNan(); +  EXPECT_EQ("is NaN", Describe(mld)); +} + +// Tests that IsNan() can describe itself with Not. +TEST(IsNan, CanDescribeSelfWithNot) { +  Matcher<float> mf = Not(IsNan()); +  EXPECT_EQ("isn't NaN", Describe(mf)); + +  Matcher<double> md = Not(IsNan()); +  EXPECT_EQ("isn't NaN", Describe(md)); + +  Matcher<long double> mld = Not(IsNan()); +  EXPECT_EQ("isn't NaN", Describe(mld)); +} +  // Tests that FloatEq() matches a 2-tuple where  // FloatEq(first field) matches the second field.  TEST(FloatEq2Test, MatchesEqualArguments) { @@ -5093,14 +5204,14 @@ TEST(WhenSortedTest, WorksForStreamlike) {    // Streamlike 'container' provides only minimal iterator support.    // Its iterators are tagged with input_iterator_tag.    const int a[5] = {2, 1, 4, 5, 3}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    EXPECT_THAT(s, WhenSorted(ElementsAre(1, 2, 3, 4, 5)));    EXPECT_THAT(s, Not(WhenSorted(ElementsAre(2, 1, 4, 5, 3))));  }  TEST(WhenSortedTest, WorksForVectorConstRefMatcherOnStreamlike) {    const int a[] = {2, 1, 4, 5, 3}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    Matcher<const std::vector<int>&> vector_match = ElementsAre(1, 2, 3, 4, 5);    EXPECT_THAT(s, WhenSorted(vector_match));    EXPECT_THAT(s, Not(WhenSorted(ElementsAre(2, 1, 4, 5, 3)))); @@ -5145,7 +5256,7 @@ TEST(IsSupersetOfTest, WorksForEmpty) {  TEST(IsSupersetOfTest, WorksForStreamlike) {    const int a[5] = {1, 2, 3, 4, 5}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    vector<int> expected;    expected.push_back(1); @@ -5273,7 +5384,7 @@ TEST(IsSubsetOfTest, WorksForEmpty) {  TEST(IsSubsetOfTest, WorksForStreamlike) {    const int a[5] = {1, 2}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    vector<int> expected;    expected.push_back(1); @@ -5367,14 +5478,14 @@ TEST(IsSubsetOfTest, WorksWithMoveOnly) {  TEST(ElemensAreStreamTest, WorksForStreamlike) {    const int a[5] = {1, 2, 3, 4, 5}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    EXPECT_THAT(s, ElementsAre(1, 2, 3, 4, 5));    EXPECT_THAT(s, Not(ElementsAre(2, 1, 4, 5, 3)));  }  TEST(ElemensAreArrayStreamTest, WorksForStreamlike) {    const int a[5] = {1, 2, 3, 4, 5}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    vector<int> expected;    expected.push_back(1); @@ -5421,7 +5532,7 @@ TEST(ElementsAreTest, TakesStlContainer) {  TEST(UnorderedElementsAreArrayTest, SucceedsWhenExpected) {    const int a[] = {0, 1, 2, 3, 4}; -  std::vector<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  std::vector<int> s(std::begin(a), std::end(a));    do {      StringMatchResultListener listener;      EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAreArray(a), @@ -5432,8 +5543,8 @@ TEST(UnorderedElementsAreArrayTest, SucceedsWhenExpected) {  TEST(UnorderedElementsAreArrayTest, VectorBool) {    const bool a[] = {0, 1, 0, 1, 1};    const bool b[] = {1, 0, 1, 1, 0}; -  std::vector<bool> expected(a, a + GTEST_ARRAY_SIZE_(a)); -  std::vector<bool> actual(b, b + GTEST_ARRAY_SIZE_(b)); +  std::vector<bool> expected(std::begin(a), std::end(a)); +  std::vector<bool> actual(std::begin(b), std::end(b));    StringMatchResultListener listener;    EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAreArray(expected),                                   actual, &listener)) << listener.str(); @@ -5444,7 +5555,7 @@ TEST(UnorderedElementsAreArrayTest, WorksForStreamlike) {    // Its iterators are tagged with input_iterator_tag, and it has no    // size() or empty() methods.    const int a[5] = {2, 1, 4, 5, 3}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    ::std::vector<int> expected;    expected.push_back(1); @@ -5527,7 +5638,7 @@ TEST_F(UnorderedElementsAreTest, WorksWithUncopyable) {  TEST_F(UnorderedElementsAreTest, SucceedsWhenExpected) {    const int a[] = {1, 2, 3}; -  std::vector<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  std::vector<int> s(std::begin(a), std::end(a));    do {      StringMatchResultListener listener;      EXPECT_TRUE(ExplainMatchResult(UnorderedElementsAre(1, 2, 3), @@ -5537,7 +5648,7 @@ TEST_F(UnorderedElementsAreTest, SucceedsWhenExpected) {  TEST_F(UnorderedElementsAreTest, FailsWhenAnElementMatchesNoMatcher) {    const int a[] = {1, 2, 3}; -  std::vector<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  std::vector<int> s(std::begin(a), std::end(a));    std::vector<Matcher<int> > mv;    mv.push_back(1);    mv.push_back(2); @@ -5553,7 +5664,7 @@ TEST_F(UnorderedElementsAreTest, WorksForStreamlike) {    // Its iterators are tagged with input_iterator_tag, and it has no    // size() or empty() methods.    const int a[5] = {2, 1, 4, 5, 3}; -  Streamlike<int> s(a, a + GTEST_ARRAY_SIZE_(a)); +  Streamlike<int> s(std::begin(a), std::end(a));    EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));    EXPECT_THAT(s, Not(UnorderedElementsAre(2, 2, 3, 4, 5))); @@ -5869,8 +5980,9 @@ TEST_F(BipartiteNonSquareTest, SimpleBacktracking) {    //  :.......:    //    0 1 2    MatchMatrix g(4, 3); -  static const size_t kEdges[][2] = {{0, 2}, {1, 1}, {2, 1}, {3, 0}}; -  for (size_t i = 0; i < GTEST_ARRAY_SIZE_(kEdges); ++i) { +  constexpr std::array<std::array<size_t, 2>, 4> kEdges = { +      {{{0, 2}}, {{1, 1}}, {{2, 1}}, {{3, 0}}}}; +  for (size_t i = 0; i < kEdges.size(); ++i) {      g.SetEdge(kEdges[i][0], kEdges[i][1], true);    }    EXPECT_THAT(FindBacktrackingMaxBPM(g),  | 
