|
|
|
@ -849,6 +849,190 @@ ElementsAreArray(const T (&array)[N]) { |
|
|
|
|
return internal::ElementsAreArrayMatcher<T>(array, N); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// AllOf(m1, m2, ..., mk) matches any value that matches all of the given
|
|
|
|
|
// sub-matchers.
|
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, Matcher2> |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2) { |
|
|
|
|
return internal::BothOfMatcher<Matcher1, Matcher2>(m1, m2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
Matcher3> > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, Matcher4> > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, internal::BothOfMatcher<Matcher4, |
|
|
|
|
Matcher5> > > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4, m5)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, internal::BothOfMatcher<Matcher4, |
|
|
|
|
internal::BothOfMatcher<Matcher5, Matcher6> > > > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4, m5, m6)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, internal::BothOfMatcher<Matcher4, |
|
|
|
|
internal::BothOfMatcher<Matcher5, internal::BothOfMatcher<Matcher6, |
|
|
|
|
Matcher7> > > > > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4, m5, m6, m7)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7, |
|
|
|
|
typename Matcher8> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, internal::BothOfMatcher<Matcher4, |
|
|
|
|
internal::BothOfMatcher<Matcher5, internal::BothOfMatcher<Matcher6, |
|
|
|
|
internal::BothOfMatcher<Matcher7, Matcher8> > > > > > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7, Matcher8 m8) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4, m5, m6, m7, m8)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7, |
|
|
|
|
typename Matcher8, typename Matcher9> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, internal::BothOfMatcher<Matcher4, |
|
|
|
|
internal::BothOfMatcher<Matcher5, internal::BothOfMatcher<Matcher6, |
|
|
|
|
internal::BothOfMatcher<Matcher7, internal::BothOfMatcher<Matcher8, |
|
|
|
|
Matcher9> > > > > > > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7, Matcher8 m8, Matcher9 m9) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4, m5, m6, m7, m8, m9)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7, |
|
|
|
|
typename Matcher8, typename Matcher9, typename Matcher10> |
|
|
|
|
inline internal::BothOfMatcher<Matcher1, internal::BothOfMatcher<Matcher2, |
|
|
|
|
internal::BothOfMatcher<Matcher3, internal::BothOfMatcher<Matcher4, |
|
|
|
|
internal::BothOfMatcher<Matcher5, internal::BothOfMatcher<Matcher6, |
|
|
|
|
internal::BothOfMatcher<Matcher7, internal::BothOfMatcher<Matcher8, |
|
|
|
|
internal::BothOfMatcher<Matcher9, Matcher10> > > > > > > > > |
|
|
|
|
AllOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7, Matcher8 m8, Matcher9 m9, Matcher10 m10) { |
|
|
|
|
return AllOf(m1, AllOf(m2, m3, m4, m5, m6, m7, m8, m9, m10)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given
|
|
|
|
|
// sub-matchers.
|
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, Matcher2> |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2) { |
|
|
|
|
return internal::EitherOfMatcher<Matcher1, Matcher2>(m1, m2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
Matcher3> > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, Matcher4> > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, internal::EitherOfMatcher<Matcher4, |
|
|
|
|
Matcher5> > > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4, m5)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, internal::EitherOfMatcher<Matcher4, |
|
|
|
|
internal::EitherOfMatcher<Matcher5, Matcher6> > > > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4, m5, m6)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, internal::EitherOfMatcher<Matcher4, |
|
|
|
|
internal::EitherOfMatcher<Matcher5, internal::EitherOfMatcher<Matcher6, |
|
|
|
|
Matcher7> > > > > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4, m5, m6, m7)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7, |
|
|
|
|
typename Matcher8> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, internal::EitherOfMatcher<Matcher4, |
|
|
|
|
internal::EitherOfMatcher<Matcher5, internal::EitherOfMatcher<Matcher6, |
|
|
|
|
internal::EitherOfMatcher<Matcher7, Matcher8> > > > > > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7, Matcher8 m8) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4, m5, m6, m7, m8)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7, |
|
|
|
|
typename Matcher8, typename Matcher9> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, internal::EitherOfMatcher<Matcher4, |
|
|
|
|
internal::EitherOfMatcher<Matcher5, internal::EitherOfMatcher<Matcher6, |
|
|
|
|
internal::EitherOfMatcher<Matcher7, internal::EitherOfMatcher<Matcher8, |
|
|
|
|
Matcher9> > > > > > > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7, Matcher8 m8, Matcher9 m9) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4, m5, m6, m7, m8, m9)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename Matcher1, typename Matcher2, typename Matcher3, |
|
|
|
|
typename Matcher4, typename Matcher5, typename Matcher6, typename Matcher7, |
|
|
|
|
typename Matcher8, typename Matcher9, typename Matcher10> |
|
|
|
|
inline internal::EitherOfMatcher<Matcher1, internal::EitherOfMatcher<Matcher2, |
|
|
|
|
internal::EitherOfMatcher<Matcher3, internal::EitherOfMatcher<Matcher4, |
|
|
|
|
internal::EitherOfMatcher<Matcher5, internal::EitherOfMatcher<Matcher6, |
|
|
|
|
internal::EitherOfMatcher<Matcher7, internal::EitherOfMatcher<Matcher8, |
|
|
|
|
internal::EitherOfMatcher<Matcher9, Matcher10> > > > > > > > > |
|
|
|
|
AnyOf(Matcher1 m1, Matcher2 m2, Matcher3 m3, Matcher4 m4, Matcher5 m5, |
|
|
|
|
Matcher6 m6, Matcher7 m7, Matcher8 m8, Matcher9 m9, Matcher10 m10) { |
|
|
|
|
return AnyOf(m1, AnyOf(m2, m3, m4, m5, m6, m7, m8, m9, m10)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace testing
|
|
|
|
|
|
|
|
|
|
// The MATCHER* family of macros can be used in a namespace scope to
|
|
|
|
|