diff options
Diffstat (limited to 'googlemock/test/gmock-generated-matchers_test.cc')
| -rw-r--r-- | googlemock/test/gmock-generated-matchers_test.cc | 142 | 
1 files changed, 142 insertions, 0 deletions
| diff --git a/googlemock/test/gmock-generated-matchers_test.cc b/googlemock/test/gmock-generated-matchers_test.cc index 426e9545..d79cef99 100644 --- a/googlemock/test/gmock-generated-matchers_test.cc +++ b/googlemock/test/gmock-generated-matchers_test.cc @@ -64,7 +64,9 @@ using std::stringstream;  using std::vector;  using testing::_;  using testing::AllOf; +using testing::AllOfArray;  using testing::AnyOf; +using testing::AnyOfArray;  using testing::Args;  using testing::Contains;  using testing::ElementsAre; @@ -1094,6 +1096,146 @@ TEST(ContainsTest, WorksForTwoDimensionalNativeArray) {    EXPECT_THAT(a, Contains(Not(Contains(5))));  } +TEST(AllOfArrayTest, BasicForms) { +  // Iterator +  std::vector<int> v0{}; +  std::vector<int> v1{1}; +  std::vector<int> v2{2, 3}; +  std::vector<int> v3{4, 4, 4}; +  EXPECT_THAT(0, AllOfArray(v0.begin(), v0.end())); +  EXPECT_THAT(1, AllOfArray(v1.begin(), v1.end())); +  EXPECT_THAT(2, Not(AllOfArray(v1.begin(), v1.end()))); +  EXPECT_THAT(3, Not(AllOfArray(v2.begin(), v2.end()))); +  EXPECT_THAT(4, AllOfArray(v3.begin(), v3.end())); +  // Pointer +  size +  int ar[6] = {1, 2, 3, 4, 4, 4}; +  EXPECT_THAT(0, AllOfArray(ar, 0)); +  EXPECT_THAT(1, AllOfArray(ar, 1)); +  EXPECT_THAT(2, Not(AllOfArray(ar, 1))); +  EXPECT_THAT(3, Not(AllOfArray(ar + 1, 3))); +  EXPECT_THAT(4, AllOfArray(ar + 3, 3)); +  // Array +  // int ar0[0];  Not usable +  int ar1[1] = {1}; +  int ar2[2] = {2, 3}; +  int ar3[3] = {4, 4, 4}; +  // EXPECT_THAT(0, Not(AllOfArray(ar0)));  // Cannot work +  EXPECT_THAT(1, AllOfArray(ar1)); +  EXPECT_THAT(2, Not(AllOfArray(ar1))); +  EXPECT_THAT(3, Not(AllOfArray(ar2))); +  EXPECT_THAT(4, AllOfArray(ar3)); +  // Container +  EXPECT_THAT(0, AllOfArray(v0)); +  EXPECT_THAT(1, AllOfArray(v1)); +  EXPECT_THAT(2, Not(AllOfArray(v1))); +  EXPECT_THAT(3, Not(AllOfArray(v2))); +  EXPECT_THAT(4, AllOfArray(v3)); +  // Initializer +  EXPECT_THAT(0, AllOfArray<int>({}));  // Requires template arg. +  EXPECT_THAT(1, AllOfArray({1})); +  EXPECT_THAT(2, Not(AllOfArray({1}))); +  EXPECT_THAT(3, Not(AllOfArray({2, 3}))); +  EXPECT_THAT(4, AllOfArray({4, 4, 4})); +} + +TEST(AllOfArrayTest, Matchers) { +  // vector +  std::vector<Matcher<int>> matchers{Ge(1), Lt(2)}; +  EXPECT_THAT(0, Not(AllOfArray(matchers))); +  EXPECT_THAT(1, AllOfArray(matchers)); +  EXPECT_THAT(2, Not(AllOfArray(matchers))); +  // initializer_list +  EXPECT_THAT(0, Not(AllOfArray({Ge(0), Ge(1)}))); +  EXPECT_THAT(1, AllOfArray({Ge(0), Ge(1)})); +} + +TEST(AnyOfArrayTest, BasicForms) { +  // Iterator +  std::vector<int> v0{}; +  std::vector<int> v1{1}; +  std::vector<int> v2{2, 3}; +  EXPECT_THAT(0, Not(AnyOfArray(v0.begin(), v0.end()))); +  EXPECT_THAT(1, AnyOfArray(v1.begin(), v1.end())); +  EXPECT_THAT(2, Not(AnyOfArray(v1.begin(), v1.end()))); +  EXPECT_THAT(3, AnyOfArray(v2.begin(), v2.end())); +  EXPECT_THAT(4, Not(AnyOfArray(v2.begin(), v2.end()))); +  // Pointer +  size +  int ar[3] = {1, 2, 3}; +  EXPECT_THAT(0, Not(AnyOfArray(ar, 0))); +  EXPECT_THAT(1, AnyOfArray(ar, 1)); +  EXPECT_THAT(2, Not(AnyOfArray(ar, 1))); +  EXPECT_THAT(3, AnyOfArray(ar + 1, 3)); +  EXPECT_THAT(4, Not(AnyOfArray(ar + 1, 3))); +  // Array +  // int ar0[0];  Not usable +  int ar1[1] = {1}; +  int ar2[2] = {2, 3}; +  // EXPECT_THAT(0, Not(AnyOfArray(ar0)));  // Cannot work +  EXPECT_THAT(1, AnyOfArray(ar1)); +  EXPECT_THAT(2, Not(AnyOfArray(ar1))); +  EXPECT_THAT(3, AnyOfArray(ar2)); +  EXPECT_THAT(4, Not(AnyOfArray(ar2))); +  // Container +  EXPECT_THAT(0, Not(AnyOfArray(v0))); +  EXPECT_THAT(1, AnyOfArray(v1)); +  EXPECT_THAT(2, Not(AnyOfArray(v1))); +  EXPECT_THAT(3, AnyOfArray(v2)); +  EXPECT_THAT(4, Not(AnyOfArray(v2))); +  // Initializer +  EXPECT_THAT(0, Not(AnyOfArray<int>({})));  // Requires template arg. +  EXPECT_THAT(1, AnyOfArray({1})); +  EXPECT_THAT(2, Not(AnyOfArray({1}))); +  EXPECT_THAT(3, AnyOfArray({2, 3})); +  EXPECT_THAT(4, Not(AnyOfArray({2, 3}))); +} + +TEST(AnyOfArrayTest, Matchers) { +  // We negate test AllOfArrayTest.Matchers. +  // vector +  std::vector<Matcher<int>> matchers{Lt(1), Ge(2)}; +  EXPECT_THAT(0, AnyOfArray(matchers)); +  EXPECT_THAT(1, Not(AnyOfArray(matchers))); +  EXPECT_THAT(2, AnyOfArray(matchers)); +  // initializer_list +  EXPECT_THAT(0, AnyOfArray({Lt(0), Lt(1)})); +  EXPECT_THAT(1, Not(AllOfArray({Lt(0), Lt(1)}))); +} + +TEST(AnyOfArrayTest, ExplainsMatchResultCorrectly) { +  // AnyOfArray and AllOfArry use the same underlying template-template, +  // thus it is sufficient to test one here. +  const std::vector<int> v0{}; +  const std::vector<int> v1{1}; +  const std::vector<int> v2{2, 3}; +  const Matcher<int> m0 = AnyOfArray(v0); +  const Matcher<int> m1 = AnyOfArray(v1); +  const Matcher<int> m2 = AnyOfArray(v2); +  EXPECT_EQ("", Explain(m0, 0)); +  EXPECT_EQ("", Explain(m1, 1)); +  EXPECT_EQ("", Explain(m1, 2)); +  EXPECT_EQ("", Explain(m2, 3)); +  EXPECT_EQ("", Explain(m2, 4)); +  EXPECT_EQ("()", Describe(m0)); +  EXPECT_EQ("(is equal to 1)", Describe(m1)); +  EXPECT_EQ("(is equal to 2) or (is equal to 3)", Describe(m2)); +  EXPECT_EQ("()", DescribeNegation(m0)); +  EXPECT_EQ("(isn't equal to 1)", DescribeNegation(m1)); +  EXPECT_EQ("(isn't equal to 2) and (isn't equal to 3)", DescribeNegation(m2)); +  // Explain with matchers +  const Matcher<int> g1 = AnyOfArray({GreaterThan(1)}); +  const Matcher<int> g2 = AnyOfArray({GreaterThan(1), GreaterThan(2)}); +  // Explains the first positiv match and all prior negative matches... +  EXPECT_EQ("which is 1 less than 1", Explain(g1, 0)); +  EXPECT_EQ("which is the same as 1", Explain(g1, 1)); +  EXPECT_EQ("which is 1 more than 1", Explain(g1, 2)); +  EXPECT_EQ("which is 1 less than 1, and which is 2 less than 2", +            Explain(g2, 0)); +  EXPECT_EQ("which is the same as 1, and which is 1 less than 2", +            Explain(g2, 1)); +  EXPECT_EQ("which is 1 more than 1",  // Only the first +            Explain(g2, 2)); +} +  TEST(AllOfTest, HugeMatcher) {    // Verify that using AllOf with many arguments doesn't cause    // the compiler to exceed template instantiation depth limit. | 
