Allows {Unordered,}ElementsAreArray() to accept any STL-style container as the parameter.

This commit is contained in:
kosak 2014-07-28 20:01:28 +00:00
parent a9e02a9178
commit 06678924fa
2 changed files with 37 additions and 11 deletions

View File

@ -3444,7 +3444,7 @@ GTEST_API_ string FormatMatcherDescription(bool negation,
// ElementsAreArray(first, last) // ElementsAreArray(first, last)
// ElementsAreArray(pointer, count) // ElementsAreArray(pointer, count)
// ElementsAreArray(array) // ElementsAreArray(array)
// ElementsAreArray(vector) // ElementsAreArray(container)
// ElementsAreArray({ e1, e2, ..., en }) // ElementsAreArray({ e1, e2, ..., en })
// //
// The ElementsAreArray() functions are like ElementsAre(...), except // The ElementsAreArray() functions are like ElementsAre(...), except
@ -3476,10 +3476,10 @@ inline internal::ElementsAreArrayMatcher<T> ElementsAreArray(
return ElementsAreArray(array, N); return ElementsAreArray(array, N);
} }
template <typename T, typename A> template <typename Container>
inline internal::ElementsAreArrayMatcher<T> ElementsAreArray( inline internal::ElementsAreArrayMatcher<typename Container::value_type>
const ::std::vector<T, A>& vec) { ElementsAreArray(const Container& container) {
return ElementsAreArray(vec.begin(), vec.end()); return ElementsAreArray(container.begin(), container.end());
} }
#if GTEST_HAS_STD_INITIALIZER_LIST_ #if GTEST_HAS_STD_INITIALIZER_LIST_
@ -3493,7 +3493,7 @@ ElementsAreArray(::std::initializer_list<T> xs) {
// UnorderedElementsAreArray(first, last) // UnorderedElementsAreArray(first, last)
// UnorderedElementsAreArray(pointer, count) // UnorderedElementsAreArray(pointer, count)
// UnorderedElementsAreArray(array) // UnorderedElementsAreArray(array)
// UnorderedElementsAreArray(vector) // UnorderedElementsAreArray(container)
// UnorderedElementsAreArray({ e1, e2, ..., en }) // UnorderedElementsAreArray({ e1, e2, ..., en })
// //
// The UnorderedElementsAreArray() functions are like // The UnorderedElementsAreArray() functions are like
@ -3518,10 +3518,11 @@ UnorderedElementsAreArray(const T (&array)[N]) {
return UnorderedElementsAreArray(array, N); return UnorderedElementsAreArray(array, N);
} }
template <typename T, typename A> template <typename Container>
inline internal::UnorderedElementsAreArrayMatcher<T> inline internal::UnorderedElementsAreArrayMatcher<
UnorderedElementsAreArray(const ::std::vector<T, A>& vec) { typename Container::value_type>
return UnorderedElementsAreArray(vec.begin(), vec.end()); UnorderedElementsAreArray(const Container& container) {
return UnorderedElementsAreArray(container.begin(), container.end());
} }
#if GTEST_HAS_STD_INITIALIZER_LIST_ #if GTEST_HAS_STD_INITIALIZER_LIST_

View File

@ -4651,6 +4651,19 @@ TEST(ElementsAreTest, WorksWithUncopyable) {
EXPECT_THAT(objs, ElementsAre(UncopyableIs(-3), Truly(ValueIsPositive))); EXPECT_THAT(objs, ElementsAre(UncopyableIs(-3), Truly(ValueIsPositive)));
} }
TEST(ElementsAreTest, TakesStlContainer) {
const int actual[] = {3, 1, 2};
::std::list<int> expected;
expected.push_back(3);
expected.push_back(1);
expected.push_back(2);
EXPECT_THAT(actual, ElementsAreArray(expected));
expected.push_back(4);
EXPECT_THAT(actual, Not(ElementsAreArray(expected)));
}
// Tests for UnorderedElementsAreArray() // Tests for UnorderedElementsAreArray()
TEST(UnorderedElementsAreArrayTest, SucceedsWhenExpected) { TEST(UnorderedElementsAreArrayTest, SucceedsWhenExpected) {
@ -4692,6 +4705,19 @@ TEST(UnorderedElementsAreArrayTest, WorksForStreamlike) {
EXPECT_THAT(s, Not(UnorderedElementsAreArray(expected))); EXPECT_THAT(s, Not(UnorderedElementsAreArray(expected)));
} }
TEST(UnorderedElementsAreArrayTest, TakesStlContainer) {
const int actual[] = {3, 1, 2};
::std::list<int> expected;
expected.push_back(1);
expected.push_back(2);
expected.push_back(3);
EXPECT_THAT(actual, UnorderedElementsAreArray(expected));
expected.push_back(4);
EXPECT_THAT(actual, Not(UnorderedElementsAreArray(expected)));
}
#if GTEST_HAS_STD_INITIALIZER_LIST_ #if GTEST_HAS_STD_INITIALIZER_LIST_
TEST(UnorderedElementsAreArrayTest, TakesInitializerList) { TEST(UnorderedElementsAreArrayTest, TakesInitializerList) {
@ -5464,4 +5490,3 @@ TEST(PointwiseTest, AllowsMonomorphicInnerMatcher) {
} // namespace gmock_matchers_test } // namespace gmock_matchers_test
} // namespace testing } // namespace testing