Add value_type to base::Value::List.
Using testing::Each() requires that the underlying container exposes
value_type as STL containers do. This CL adds it.
Fixed: 1342677
Change-Id: I4e11411aee7c021635d0ddb02836dd7d5cf53867
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3750979
Reviewed-by: Francois Pierre Doray <fdoray@chromium.org>
Commit-Queue: Jan Keitel <jkeitel@google.com>
Cr-Commit-Position: refs/heads/main@{#1022647}
diff --git a/base/values.h b/base/values.h
index 1ab03a8..dd2654a 100644
--- a/base/values.h
+++ b/base/values.h
@@ -570,6 +570,7 @@
public:
using iterator = CheckedContiguousIterator<Value>;
using const_iterator = CheckedContiguousConstIterator<Value>;
+ using value_type = Value;
List();
diff --git a/base/values_unittest.cc b/base/values_unittest.cc
index a1dea28..d220174 100644
--- a/base/values_unittest.cc
+++ b/base/values_unittest.cc
@@ -217,6 +217,17 @@
EXPECT_EQ(Value::Type::LIST, value.type());
}
+TEST(ValuesTest, UseTestingEachOnValueList) {
+ Value::List list;
+ list.Append(true);
+ list.Append(true);
+
+ // This will only work if `Value::List::value_type` is defined.
+ EXPECT_THAT(list, testing::Each(testing::ResultOf(
+ [](const Value& value) { return value.GetBool(); },
+ testing::Eq(true))));
+}
+
TEST(ValuesTest, ConstructListFromValueList) {
Value::List list;
list.Append("foo");