Googletest export

Add tuple version of Optional() matches. This allows Optional() to be used in Pointwise matchers.

PiperOrigin-RevId: 265110864
This commit is contained in:
Abseil Team
2019-08-23 15:30:05 -04:00
committed by Xiaoyi Zhang
parent db1b739943
commit ed2eef6543
2 changed files with 84 additions and 2 deletions

View File

@@ -6387,7 +6387,7 @@ class SampleOptional {
explicit SampleOptional(T value)
: value_(std::move(value)), has_value_(true) {}
SampleOptional() : value_(), has_value_(false) {}
operator bool() const { return has_value_; }
explicit operator bool() const { return has_value_; }
const T& operator*() const { return value_; }
private:
@@ -6427,6 +6427,39 @@ TEST(OptionalTest, WorksWithMoveOnly) {
EXPECT_TRUE(m.Matches(SampleOptional<std::unique_ptr<int>>(nullptr)));
}
TEST(OptionalTest, TupleDescribesSelf) {
const Matcher<std::tuple<SampleOptional<int>, int>> m = Optional(Eq());
EXPECT_EQ("are optionals where the values are an equal pair", Describe(m));
}
TEST(OptionalTest, TupleExplainsSelf) {
const Matcher<std::tuple<SampleOptional<int>, int>> m = Optional(Eq());
EXPECT_EQ("which match",
Explain(m, std::make_tuple(SampleOptional<int>(1), 1)));
EXPECT_EQ("whose values don't match",
Explain(m, std::make_tuple(SampleOptional<int>(1), 2)));
}
TEST(OptionalTest, TupleMatchesNonEmpty) {
const Matcher<std::tuple<SampleOptional<int>, int>> m1 = Optional(Eq());
const Matcher<std::tuple<SampleOptional<int>, int>> m2 = Optional(Lt());
EXPECT_TRUE(m1.Matches(std::make_tuple(SampleOptional<int>(1), 1)));
EXPECT_FALSE(m1.Matches(std::make_tuple(SampleOptional<int>(1), 2)));
EXPECT_FALSE(m2.Matches(std::make_tuple(SampleOptional<int>(1), 1)));
EXPECT_TRUE(m2.Matches(std::make_tuple(SampleOptional<int>(1), 2)));
}
TEST(OptionalTest, TupleDoesNotMatchNullopt) {
const Matcher<std::tuple<SampleOptional<int>, int>> m1 = Optional(Eq());
EXPECT_FALSE(m1.Matches(std::make_tuple(SampleOptional<int>(), 1)));
}
TEST(OptionalTest, TupleWorksInPointwise) {
std::vector<SampleOptional<int>> v = {
SampleOptional<int>(1), SampleOptional<int>(2), SampleOptional<int>(3)};
EXPECT_THAT(v, Pointwise(Optional(Eq()), {1, 2, 3}));
}
class SampleVariantIntString {
public:
SampleVariantIntString(int i) : i_(i), has_int_(true) {}