• Home
  • Raw
  • Download

Lines Matching +full:set +full:- +full:value

2 // Use of this source code is governed by a BSD-style license that can be
30 #include "third_party/abseil-cpp/absl/types/optional.h"
31 #include "third_party/perfetto/include/perfetto/test/traced_value_test_support.h" // no-presubmit-
37 // `Value` should have a (relatively) small size to avoid creating excess
57 static_assert(std::is_same_v<std::integral_constant<size_t, sizeof(Value)>, in TEST()
59 "base::Value has an unexpected size!"); in TEST()
64 static_assert(std::is_nothrow_move_constructible_v<Value>, in TEST()
66 static_assert(std::is_nothrow_default_constructible_v<Value>, in TEST()
68 static_assert(std::is_nothrow_constructible_v<Value, std::string&&>, in TEST()
70 static_assert(std::is_nothrow_constructible_v<Value, Value::BlobStorage&&>, in TEST()
72 static_assert(std::is_nothrow_move_assignable_v<Value>, in TEST()
77 Value value; in TEST() local
78 EXPECT_EQ(Value::Type::NONE, value.type()); in TEST()
79 EXPECT_EQ(absl::nullopt, value.GetIfBool()); in TEST()
80 EXPECT_EQ(absl::nullopt, value.GetIfInt()); in TEST()
81 EXPECT_EQ(absl::nullopt, value.GetIfDouble()); in TEST()
82 EXPECT_EQ(nullptr, value.GetIfString()); in TEST()
83 EXPECT_EQ(nullptr, value.GetIfBlob()); in TEST()
86 // Group of tests for the value constructors.
88 Value true_value(true); in TEST()
89 EXPECT_EQ(Value::Type::BOOLEAN, true_value.type()); in TEST()
93 Value false_value(false); in TEST()
94 EXPECT_EQ(Value::Type::BOOLEAN, false_value.type()); in TEST()
100 static_assert(!std::is_constructible_v<Value, int*>, ""); in TEST()
101 static_assert(!std::is_constructible_v<Value, const int*>, ""); in TEST()
102 static_assert(!std::is_constructible_v<Value, wchar_t*>, ""); in TEST()
103 static_assert(!std::is_constructible_v<Value, const wchar_t*>, ""); in TEST()
105 static_assert(std::is_constructible_v<Value, char*>, ""); in TEST()
106 static_assert(std::is_constructible_v<Value, const char*>, ""); in TEST()
107 static_assert(std::is_constructible_v<Value, char16_t*>, ""); in TEST()
108 static_assert(std::is_constructible_v<Value, const char16_t*>, ""); in TEST()
112 Value value(-37); in TEST() local
113 EXPECT_EQ(Value::Type::INTEGER, value.type()); in TEST()
114 EXPECT_THAT(value.GetIfInt(), testing::Optional(-37)); in TEST()
115 EXPECT_EQ(-37, value.GetInt()); in TEST()
117 EXPECT_THAT(value.GetIfDouble(), testing::Optional(-37.0)); in TEST()
118 EXPECT_EQ(-37.0, value.GetDouble()); in TEST()
122 Value value(-4.655); in TEST() local
123 EXPECT_EQ(Value::Type::DOUBLE, value.type()); in TEST()
124 EXPECT_THAT(value.GetIfDouble(), testing::Optional(-4.655)); in TEST()
125 EXPECT_EQ(-4.655, value.GetDouble()); in TEST()
130 Value value(str); in TEST() local
131 EXPECT_EQ(Value::Type::STRING, value.type()); in TEST()
132 EXPECT_THAT(value.GetIfString(), testing::Pointee(std::string("foobar"))); in TEST()
133 EXPECT_EQ("foobar", value.GetString()); in TEST()
138 Value value{StringPiece(str)}; in TEST() local
139 EXPECT_EQ(Value::Type::STRING, value.type()); in TEST()
140 EXPECT_THAT(value.GetIfString(), testing::Pointee(std::string("foobar"))); in TEST()
141 EXPECT_EQ("foobar", value.GetString()); in TEST()
146 Value value(std::move(str)); in TEST() local
147 EXPECT_EQ(Value::Type::STRING, value.type()); in TEST()
148 EXPECT_THAT(value.GetIfString(), testing::Pointee(std::string("foobar"))); in TEST()
149 EXPECT_EQ("foobar", value.GetString()); in TEST()
154 Value value(str.c_str()); in TEST() local
155 EXPECT_EQ(Value::Type::STRING, value.type()); in TEST()
156 EXPECT_THAT(value.GetIfString(), testing::Pointee(std::string("foobar"))); in TEST()
157 EXPECT_EQ("foobar", value.GetString()); in TEST()
162 Value value{StringPiece16(str)}; in TEST() local
163 EXPECT_EQ(Value::Type::STRING, value.type()); in TEST()
164 EXPECT_THAT(value.GetIfString(), testing::Pointee(std::string("foobar"))); in TEST()
165 EXPECT_EQ("foobar", value.GetString()); in TEST()
169 Value::BlobStorage blob = {0xF, 0x0, 0x0, 0xB, 0xA, 0x2}; in TEST()
170 Value value(blob); in TEST() local
171 EXPECT_EQ(Value::Type::BINARY, value.type()); in TEST()
172 EXPECT_THAT(value.GetIfBlob(), testing::Pointee(blob)); in TEST()
173 EXPECT_EQ(blob, value.GetBlob()); in TEST()
177 Value::Dict value; in TEST() local
178 EXPECT_EQ(Value::Type::DICT, Value(std::move(value)).type()); in TEST()
182 Value::Dict dict; in TEST()
183 dict.Set("foo", "bar"); in TEST()
185 Value value(dict.Clone()); in TEST() local
186 EXPECT_EQ(Value::Type::DICT, value.type()); in TEST()
187 EXPECT_TRUE(value.GetIfDict()); in TEST()
188 EXPECT_TRUE(value.GetDict().FindString("foo")); in TEST()
189 EXPECT_EQ("bar", *value.GetDict().FindString("foo")); in TEST()
192 dict.Set("foo", "baz"); in TEST()
194 Value value(std::move(dict)); in TEST() local
195 EXPECT_EQ(Value::Type::DICT, value.type()); in TEST()
196 EXPECT_TRUE(value.GetIfDict()); in TEST()
197 EXPECT_TRUE(value.GetDict().FindString("foo")); in TEST()
198 EXPECT_EQ("baz", *value.GetDict().FindString("foo")); in TEST()
203 Value value(Value::List{}); in TEST() local
204 EXPECT_EQ(Value::Type::LIST, value.type()); in TEST()
208 Value::List list; in TEST()
212 // This will only work if `Value::List::value_type` is defined. in TEST()
214 [](const Value& value) { return value.GetBool(); }, in TEST() argument
219 Value::List list; in TEST()
222 Value value(list.Clone()); in TEST() local
223 EXPECT_EQ(Value::Type::LIST, value.type()); in TEST()
224 EXPECT_EQ(1u, value.GetList().size()); in TEST()
225 EXPECT_EQ(Value::Type::STRING, value.GetList()[0].type()); in TEST()
226 EXPECT_EQ("foo", value.GetList()[0].GetString()); in TEST()
229 list.back() = base::Value("bar"); in TEST()
231 Value value(std::move(list)); in TEST() local
232 EXPECT_EQ(Value::Type::LIST, value.type()); in TEST()
233 EXPECT_EQ(1u, value.GetList().size()); in TEST()
234 EXPECT_EQ(Value::Type::STRING, value.GetList()[0].type()); in TEST()
235 EXPECT_EQ("bar", value.GetList()[0].GetString()); in TEST()
240 Value value; in TEST() local
241 ASSERT_EQ(value.type(), Value::Type::NONE); in TEST()
242 EXPECT_DEATH_IF_SUPPORTED(value.GetBool(), ""); in TEST()
243 EXPECT_DEATH_IF_SUPPORTED(value.GetInt(), ""); in TEST()
244 EXPECT_DEATH_IF_SUPPORTED(value.GetDouble(), ""); in TEST()
245 EXPECT_DEATH_IF_SUPPORTED(value.GetString(), ""); in TEST()
246 EXPECT_DEATH_IF_SUPPORTED(value.GetBlob(), ""); in TEST()
249 // Group of tests for the copy constructors and copy-assigmnent. For equality
253 Value true_value(true); in TEST()
254 Value copied_true_value(true_value.Clone()); in TEST()
258 Value false_value(false); in TEST()
259 Value copied_false_value(false_value.Clone()); in TEST()
263 Value blank; in TEST()
275 Value value(74); in TEST() local
276 Value copied_value(value.Clone()); in TEST()
277 EXPECT_EQ(value.type(), copied_value.type()); in TEST()
278 EXPECT_EQ(value.GetInt(), copied_value.GetInt()); in TEST()
280 Value blank; in TEST()
282 blank = value.Clone(); in TEST()
283 EXPECT_EQ(value.type(), blank.type()); in TEST()
284 EXPECT_EQ(value.GetInt(), blank.GetInt()); in TEST()
288 Value value(74.896); in TEST() local
289 Value copied_value(value.Clone()); in TEST()
290 EXPECT_EQ(value.type(), copied_value.type()); in TEST()
291 EXPECT_EQ(value.GetDouble(), copied_value.GetDouble()); in TEST()
293 Value blank; in TEST()
295 blank = value.Clone(); in TEST()
296 EXPECT_EQ(value.type(), blank.type()); in TEST()
297 EXPECT_EQ(value.GetDouble(), blank.GetDouble()); in TEST()
301 Value value("foobar"); in TEST() local
302 Value copied_value(value.Clone()); in TEST()
303 EXPECT_EQ(value.type(), copied_value.type()); in TEST()
304 EXPECT_EQ(value.GetString(), copied_value.GetString()); in TEST()
306 Value blank; in TEST()
308 blank = value.Clone(); in TEST()
309 EXPECT_EQ(value.type(), blank.type()); in TEST()
310 EXPECT_EQ(value.GetString(), blank.GetString()); in TEST()
314 Value value(Value::BlobStorage({0xF, 0x0, 0x0, 0xB, 0xA, 0x2})); in TEST() local
315 Value copied_value(value.Clone()); in TEST()
316 EXPECT_EQ(value.type(), copied_value.type()); in TEST()
317 EXPECT_EQ(value.GetBlob(), copied_value.GetBlob()); in TEST()
319 Value blank; in TEST()
321 blank = value.Clone(); in TEST()
322 EXPECT_EQ(value.type(), blank.type()); in TEST()
323 EXPECT_EQ(value.GetBlob(), blank.GetBlob()); in TEST()
327 Value::Dict dict; in TEST()
328 dict.Set("Int", 123); in TEST()
329 Value value(std::move(dict)); in TEST() local
331 Value copied_value(value.Clone()); in TEST()
332 EXPECT_EQ(value, copied_value); in TEST()
334 Value blank; in TEST()
335 blank = value.Clone(); in TEST()
336 EXPECT_EQ(value, blank); in TEST()
340 Value::List list; in TEST()
342 Value value(std::move(list)); in TEST() local
344 Value copied_value(value.Clone()); in TEST()
345 EXPECT_EQ(value, copied_value); in TEST()
347 Value blank; in TEST()
348 blank = value.Clone(); in TEST()
349 EXPECT_EQ(value, blank); in TEST()
352 // Group of tests for the move constructors and move-assigmnent.
354 Value true_value(true); in TEST()
355 Value moved_true_value(std::move(true_value)); in TEST()
356 EXPECT_EQ(Value::Type::BOOLEAN, moved_true_value.type()); in TEST()
359 Value false_value(false); in TEST()
360 Value moved_false_value(std::move(false_value)); in TEST()
361 EXPECT_EQ(Value::Type::BOOLEAN, moved_false_value.type()); in TEST()
364 Value blank; in TEST()
366 blank = Value(true); in TEST()
367 EXPECT_EQ(Value::Type::BOOLEAN, blank.type()); in TEST()
370 blank = Value(false); in TEST()
371 EXPECT_EQ(Value::Type::BOOLEAN, blank.type()); in TEST()
376 Value value(74); in TEST() local
377 Value moved_value(std::move(value)); in TEST()
378 EXPECT_EQ(Value::Type::INTEGER, moved_value.type()); in TEST()
381 Value blank; in TEST()
383 blank = Value(47); in TEST()
384 EXPECT_EQ(Value::Type::INTEGER, blank.type()); in TEST()
389 Value value(74.896); in TEST() local
390 Value moved_value(std::move(value)); in TEST()
391 EXPECT_EQ(Value::Type::DOUBLE, moved_value.type()); in TEST()
394 Value blank; in TEST()
396 blank = Value(654.38); in TEST()
397 EXPECT_EQ(Value::Type::DOUBLE, blank.type()); in TEST()
402 Value value("foobar"); in TEST() local
403 Value moved_value(std::move(value)); in TEST()
404 EXPECT_EQ(Value::Type::STRING, moved_value.type()); in TEST()
407 Value blank; in TEST()
409 blank = Value("foobar"); in TEST()
410 EXPECT_EQ(Value::Type::STRING, blank.type()); in TEST()
415 const Value::BlobStorage buffer = {0xF, 0x0, 0x0, 0xB, 0xA, 0x2}; in TEST()
416 Value value(buffer); in TEST() local
417 Value moved_value(std::move(value)); in TEST()
418 EXPECT_EQ(Value::Type::BINARY, moved_value.type()); in TEST()
421 Value blank; in TEST()
423 blank = Value(buffer); in TEST()
424 EXPECT_EQ(Value::Type::BINARY, blank.type()); in TEST()
429 Value::Dict dict; in TEST()
430 dict.Set("Int", 123); in TEST()
432 Value value(std::move(dict)); in TEST() local
433 Value moved_value(std::move(value)); in TEST()
434 EXPECT_EQ(Value::Type::DICT, moved_value.type()); in TEST()
435 EXPECT_EQ(123, moved_value.GetDict().Find("Int")->GetInt()); in TEST()
439 Value::Dict dict; in TEST()
440 dict.Set("Int", 123); in TEST()
442 Value blank; in TEST()
443 blank = Value(std::move(dict)); in TEST()
444 EXPECT_EQ(Value::Type::DICT, blank.type()); in TEST()
445 EXPECT_EQ(123, blank.GetDict().Find("Int")->GetInt()); in TEST()
449 std::vector<std::pair<std::string, Value>> values; in TEST()
452 Value blank; in TEST()
453 blank = Value(Value::Dict(std::make_move_iterator(values.begin()), in TEST()
455 EXPECT_EQ(Value::Type::DICT, blank.type()); in TEST()
456 EXPECT_EQ(123, blank.GetDict().Find("Int")->GetInt()); in TEST()
460 Value::List list; in TEST()
462 Value value(list.Clone()); in TEST() local
463 Value moved_value(std::move(value)); in TEST()
464 EXPECT_EQ(Value::Type::LIST, moved_value.type()); in TEST()
467 Value blank; in TEST()
468 blank = Value(std::move(list)); in TEST()
469 EXPECT_EQ(Value::Type::LIST, blank.type()); in TEST()
474 Value::List list; in TEST()
501 list.Append(Value()); in TEST()
504 list.Append(Value::Dict()); in TEST()
507 list.Append(Value::List()); in TEST()
512 Value::List list; in TEST()
513 const Value::List& const_list = list; in TEST()
515 auto iter = list.Insert(list.end(), Value(true)); in TEST()
519 iter = list.Insert(const_list.begin(), Value(123)); in TEST()
523 iter = list.Insert(list.begin() + 1, Value("Hello world!")); in TEST()
529 auto list = base::Value::List().Append("Hello world!"); in TEST()
549 Value::List list; in TEST()
550 const Value::List& const_list = list; in TEST()
552 list.Append(Value(true)); in TEST()
553 list.Append(Value(123)); in TEST()
554 list.Append(Value("Hello world!")); in TEST()
573 // a value of another type).
575 Value::Dict root; in TEST()
578 Value::Dict* foo_dict = root.EnsureDict("foo"); in TEST()
579 EXPECT_TRUE(foo_dict->empty()); in TEST()
580 foo_dict->Set("a", "b"); in TEST()
584 std::string* a_string = root.EnsureDict("foo")->FindString("a"); in TEST()
588 // Use EnsureDict() to overwrite an existing non-dictionary value. in TEST()
589 root.Set("bar", 3); in TEST()
590 Value::Dict* bar_dict = root.EnsureDict("bar"); in TEST()
591 EXPECT_TRUE(bar_dict->empty()); in TEST()
592 bar_dict->Set("b", "c"); in TEST()
597 std::string* b_string = bar_dict->FindString("b"); in TEST()
603 // matchining value exists, return an existing list, create a list overwriting
604 // a value of another type).
606 Value::Dict root; in TEST()
609 Value::List* foo_list = root.EnsureList("foo"); in TEST()
610 EXPECT_TRUE(foo_list->empty()); in TEST()
611 foo_list->Append("a"); in TEST()
616 ASSERT_EQ(1u, foo_list->size()); in TEST()
617 EXPECT_EQ((*foo_list)[0], Value("a")); in TEST()
619 // Use EnsureList() to overwrite an existing non-list value. in TEST()
620 root.Set("bar", 3); in TEST()
621 Value::List* bar_list = root.EnsureList("bar"); in TEST()
622 EXPECT_TRUE(bar_list->empty()); in TEST()
623 bar_list->Append("b"); in TEST()
628 ASSERT_EQ(1u, bar_list->size()); in TEST()
629 EXPECT_EQ((*bar_list)[0], Value("b")); in TEST()
636 Value::Dict dict; in TEST()
640 Value::Dict& a_dict = dict.Set("a", Value::Dict())->GetDict(); in TEST()
643 Value::Dict& b_dict = a_dict.Set("b", Value::Dict())->GetDict(); in TEST()
646 b_dict.Set("c", true); in TEST()
647 const Value* value = dict.FindByDottedPath("a.b.c"); in TEST() local
648 ASSERT_NE(nullptr, value); in TEST()
649 EXPECT_TRUE(value->GetBool()); in TEST()
653 Value::Dict dict; in TEST()
655 Value* c = dict.SetByDottedPath("a.b.c", Value()); in TEST()
658 Value::Dict* a = dict.FindDict("a"); in TEST()
660 EXPECT_EQ(1U, a->size()); in TEST()
662 Value::Dict* b = a->FindDict("b"); in TEST()
664 EXPECT_EQ(1U, b->size()); in TEST()
666 EXPECT_EQ(c, b->Find("c")); in TEST()
670 Value::Dict dict = in TEST()
671 Value::Dict() in TEST()
672 .SetByDottedPath("nested.dictionary.null", Value()) in TEST()
676 .SetByDottedPath("nested.dictionary.string", "value") in TEST()
677 .SetByDottedPath("nested.dictionary.u16-string", u"u16-value") in TEST()
678 .SetByDottedPath("nested.dictionary.std-string", in TEST()
679 std::string("std-value")) in TEST()
680 .SetByDottedPath("nested.dictionary.blob", Value::BlobStorage({1, 2})) in TEST()
682 Value::List().Append("value in list")) in TEST()
684 Value::Dict().Set("key", "value")); in TEST()
686 Value::Dict expected = in TEST()
687 Value::Dict() // in TEST()
688 .Set("nested", in TEST()
689 base::Value::Dict() // in TEST()
690 .Set("dictionary", in TEST()
691 base::Value::Dict() in TEST()
692 .Set("null", Value()) in TEST()
693 .Set("bool", false) in TEST()
694 .Set("int", 42) in TEST()
695 .Set("double", 1.2) in TEST()
696 .Set("string", "value") in TEST()
697 .Set("u16-string", u"u16-value") in TEST()
698 .Set("std-string", std::string("std-value")) in TEST()
699 .Set("blob", Value::BlobStorage({1, 2})) in TEST()
700 .Set("list", Value::List().Append("value in list")) in TEST()
701 .Set("dict", Value::Dict().Set("key", "value")))); in TEST()
707 Value::Dict dict; in TEST()
709 Value* abc = dict.Set("a.b.c", Value()); in TEST()
720 Value::List list; in TEST()
721 const Value::List& const_list = list; in TEST()
727 EXPECT_EQ(Value(1), list.front()); in TEST()
728 EXPECT_EQ(Value(1), const_list.front()); in TEST()
732 Value::List list; in TEST()
733 const Value::List& const_list = list; in TEST()
740 Value::List list; in TEST()
741 const Value::List& const_list = list; in TEST()
747 EXPECT_EQ(Value(3), list.back()); in TEST()
748 EXPECT_EQ(Value(3), const_list.back()); in TEST()
752 Value::List list; in TEST()
753 const Value::List& const_list = list; in TEST()
760 Value::List list; in TEST()
767 EXPECT_EQ(list[0], Value(1)); in TEST()
768 EXPECT_EQ(list[1], Value(3)); in TEST()
769 EXPECT_EQ(*next_it, Value(3)); in TEST()
774 Value::List list; in TEST()
782 EXPECT_EQ(list[0], Value(1)); in TEST()
783 EXPECT_EQ(list[1], Value(4)); in TEST()
784 EXPECT_EQ(*next_it, Value(4)); in TEST()
789 EXPECT_EQ(list[0], Value(1)); in TEST()
790 EXPECT_EQ(list[1], Value(4)); in TEST()
791 EXPECT_EQ(*next_it, Value(4)); in TEST()
796 EXPECT_EQ(list[0], Value(1)); in TEST()
807 Value::List list; in TEST()
813 EXPECT_EQ(2u, list.EraseValue(Value(2))); in TEST()
818 EXPECT_EQ(1u, list.EraseValue(Value(1))); in TEST()
822 EXPECT_EQ(1u, list.EraseValue(Value(3))); in TEST()
825 EXPECT_EQ(0u, list.EraseValue(Value(3))); in TEST()
829 Value::List list; in TEST()
835 EXPECT_EQ(3u, list.EraseIf([](const auto& val) { return val >= Value(2); })); in TEST()
846 Value::List list; in TEST()
864 Value::Dict dict; in TEST()
865 dict.Set("foo", "bar"); in TEST()
866 Value value(std::move(dict)); in TEST() local
867 EXPECT_NE(nullptr, value.GetDict().Find("foo")); in TEST()
868 EXPECT_EQ(nullptr, value.GetDict().Find("baz")); in TEST()
872 Value::Dict dict; in TEST()
873 dict.Set("foo", "bar"); in TEST()
874 Value* found = dict.Find("foo"); in TEST()
876 EXPECT_EQ("bar", found->GetString()); in TEST()
878 *found = Value(123); in TEST()
879 EXPECT_EQ(123, dict.Find("foo")->GetInt()); in TEST()
883 Value::Dict dict; in TEST()
884 dict.Set("foo", "bar"); in TEST()
885 const Value value(std::move(dict)); in TEST() local
886 EXPECT_NE(nullptr, value.GetDict().Find("foo")); in TEST()
887 EXPECT_EQ(nullptr, value.GetDict().Find("baz")); in TEST()
891 Value::Dict dict; in TEST()
892 dict.Set("null", Value()); in TEST()
893 dict.Set("bool", false); in TEST()
894 dict.Set("int", 0); in TEST()
895 dict.Set("double", 0.0); in TEST()
896 dict.Set("string", std::string()); in TEST()
897 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
898 dict.Set("list", Value::List()); in TEST()
899 dict.Set("dict", Value::Dict()); in TEST()
912 Value::Dict dict; in TEST()
913 dict.Set("null", Value()); in TEST()
914 dict.Set("bool", false); in TEST()
915 dict.Set("int", 0); in TEST()
916 dict.Set("double", 0.0); in TEST()
917 dict.Set("string", std::string()); in TEST()
918 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
919 dict.Set("list", Value::List()); in TEST()
920 dict.Set("dict", Value::Dict()); in TEST()
933 Value::Dict dict; in TEST()
934 dict.Set("null", Value()); in TEST()
935 dict.Set("bool", false); in TEST()
936 dict.Set("int", 0); in TEST()
937 dict.Set("double", 0.0); in TEST()
938 dict.Set("string", std::string()); in TEST()
939 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
940 dict.Set("list", Value::List()); in TEST()
941 dict.Set("dict", Value::Dict()); in TEST()
954 Value::Dict dict; in TEST()
955 dict.Set("string", "foo"); in TEST()
959 Value::Dict expected_dict; in TEST()
960 expected_dict.Set("string", "bar"); in TEST()
964 Value value(std::move(dict)); in TEST() local
965 Value expected_value(std::move(expected_dict)); in TEST()
966 EXPECT_EQ(expected_value, value); in TEST()
970 Value::Dict dict; in TEST()
971 dict.Set("null", Value()); in TEST()
972 dict.Set("bool", false); in TEST()
973 dict.Set("int", 0); in TEST()
974 dict.Set("double", 0.0); in TEST()
975 dict.Set("string", std::string()); in TEST()
976 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
977 dict.Set("list", Value::List()); in TEST()
978 dict.Set("dict", Value::Dict()); in TEST()
991 Value::Dict dict; in TEST()
992 dict.Set("null", Value()); in TEST()
993 dict.Set("bool", false); in TEST()
994 dict.Set("int", 0); in TEST()
995 dict.Set("double", 0.0); in TEST()
996 dict.Set("string", std::string()); in TEST()
997 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
998 dict.Set("list", Value::List()); in TEST()
999 dict.Set("dict", Value::Dict()); in TEST()
1012 Value::Dict dict; in TEST()
1013 dict.Set("null", Value()); in TEST()
1014 dict.Set("bool", false); in TEST()
1015 dict.Set("int", 0); in TEST()
1016 dict.Set("double", 0.0); in TEST()
1017 dict.Set("string", std::string()); in TEST()
1018 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
1019 dict.Set("list", Value::List()); in TEST()
1020 dict.Set("dict", Value::Dict()); in TEST()
1033 Value::Dict dict; in TEST()
1034 dict.Set("null", Value()); in TEST()
1035 dict.Set("bool", false); in TEST()
1036 dict.Set("int", 0); in TEST()
1037 dict.Set("double", 0.0); in TEST()
1038 dict.Set("string", std::string()); in TEST()
1039 dict.Set("blob", Value(Value::BlobStorage())); in TEST()
1040 dict.Set("list", Value::List()); in TEST()
1041 dict.Set("dict", Value::Dict()); in TEST()
1043 Value::Dict dict2; in TEST()
1044 dict2.Set(StringPiece("null"), Value(Value::Type::NONE)); in TEST()
1045 dict2.Set(StringPiece("bool"), Value(Value::Type::BOOLEAN)); in TEST()
1046 dict2.Set(std::string("int"), Value(Value::Type::INTEGER)); in TEST()
1047 dict2.Set(std::string("double"), Value(Value::Type::DOUBLE)); in TEST()
1048 dict2.Set(std::string("string"), Value(Value::Type::STRING)); in TEST()
1049 dict2.Set("blob", Value(Value::Type::BINARY)); in TEST()
1050 dict2.Set("list", Value(Value::Type::LIST)); in TEST()
1051 dict2.Set("dict", Value(Value::Type::DICT)); in TEST()
1054 EXPECT_EQ(Value(std::move(dict)), Value(std::move(dict2))); in TEST()
1058 absl::optional<bool> value; in TEST() local
1060 Value::Dict dict; in TEST()
1061 dict.Set("true_key", true); in TEST()
1062 dict.Set("false_key", false); in TEST()
1064 value = dict.FindBool("true_key"); in TEST()
1065 ASSERT_TRUE(value); in TEST()
1066 ASSERT_TRUE(*value); in TEST()
1068 value = dict.FindBool("false_key"); in TEST()
1069 ASSERT_TRUE(value); in TEST()
1070 ASSERT_FALSE(*value); in TEST()
1072 value = dict.FindBool("missing_key"); in TEST()
1073 ASSERT_FALSE(value); in TEST()
1077 absl::optional<int> value; in TEST() local
1079 Value::Dict dict; in TEST()
1080 dict.Set("one_key", 1); in TEST()
1081 dict.Set("minus_one_key", -1); in TEST()
1083 value = dict.FindInt("one_key"); in TEST()
1084 ASSERT_TRUE(value); in TEST()
1085 ASSERT_EQ(1, *value); in TEST()
1087 value = dict.FindInt("minus_one_key"); in TEST()
1088 ASSERT_TRUE(value); in TEST()
1089 ASSERT_EQ(-1, *value); in TEST()
1091 value = dict.FindInt("missing_key"); in TEST()
1092 ASSERT_FALSE(value); in TEST()
1096 Value::Dict dict; in TEST()
1097 dict.Set("one_key", 1.0); in TEST()
1098 dict.Set("minus_one_key", -1.0); in TEST()
1099 dict.Set("pi_key", 3.1415); in TEST()
1101 const Value* value; in TEST() local
1103 value = dict.Find("one_key"); in TEST()
1104 ASSERT_TRUE(value); in TEST()
1105 EXPECT_TRUE(value->is_double()); in TEST()
1106 EXPECT_EQ(1.0, value->GetDouble()); in TEST()
1108 value = dict.Find("minus_one_key"); in TEST()
1109 ASSERT_TRUE(value); in TEST()
1110 EXPECT_TRUE(value->is_double()); in TEST()
1111 EXPECT_EQ(-1.0, value->GetDouble()); in TEST()
1113 value = dict.Find("pi_key"); in TEST()
1114 ASSERT_TRUE(value); in TEST()
1115 EXPECT_TRUE(value->is_double()); in TEST()
1116 EXPECT_EQ(3.1415, value->GetDouble()); in TEST()
1120 Value::Dict dict; in TEST()
1121 dict.Set("one_key", "one"); in TEST()
1122 dict.Set("hello_key", "hello world"); in TEST()
1125 dict.Set("movable_key", std::move(movable_value)); in TEST()
1128 const std::string* value; in TEST() local
1130 value = dict.FindString("one_key"); in TEST()
1131 ASSERT_TRUE(value); in TEST()
1132 ASSERT_EQ("one", *value); in TEST()
1134 value = dict.FindString("hello_key"); in TEST()
1135 ASSERT_TRUE(value); in TEST()
1136 ASSERT_EQ("hello world", *value); in TEST()
1138 value = dict.FindString("movable_key"); in TEST()
1139 ASSERT_TRUE(value); in TEST()
1140 ASSERT_EQ("movable_value", *value); in TEST()
1142 value = dict.FindString("missing_key"); in TEST()
1143 ASSERT_FALSE(value); in TEST()
1147 Value::Dict dict = Value::Dict() in TEST()
1148 .Set("null", Value()) in TEST()
1149 .Set("bool", false) in TEST()
1150 .Set("int", 42) in TEST()
1151 .Set("double", 1.2) in TEST()
1152 .Set("string", "value") in TEST()
1153 .Set("u16-string", u"u16-value") in TEST()
1154 .Set("std-string", std::string("std-value")) in TEST()
1155 .Set("blob", Value::BlobStorage({1, 2})) in TEST()
1156 .Set("list", Value::List().Append("value in list")) in TEST()
1157 .Set("dict", Value::Dict().Set("key", "value")); in TEST()
1159 Value::Dict expected; in TEST()
1160 expected.Set("null", Value()); in TEST()
1161 expected.Set("bool", false); in TEST()
1162 expected.Set("int", 42); in TEST()
1163 expected.Set("double", 1.2); in TEST()
1164 expected.Set("string", "value"); in TEST()
1165 expected.Set("u16-string", u"u16-value"); in TEST()
1166 expected.Set("std-string", std::string("std-value")); in TEST()
1167 expected.Set("blob", Value::BlobStorage({1, 2})); in TEST()
1168 Value::List nested_list; in TEST()
1169 nested_list.Append("value in list"); in TEST()
1170 expected.Set("list", std::move(nested_list)); in TEST()
1171 Value::Dict nested_dict; in TEST()
1172 nested_dict.Set("key", "value"); in TEST()
1173 expected.Set("dict", std::move(nested_dict)); in TEST()
1180 Value::Dict foo; in TEST()
1181 foo.Set("bar", Value(123)); in TEST()
1183 Value::Dict root; in TEST()
1184 root.Set("foo", std::move(foo)); in TEST()
1187 Value* found = root.FindByDottedPath("foo.notfound"); in TEST()
1193 EXPECT_TRUE(found->is_int()); in TEST()
1194 EXPECT_EQ(123, found->GetInt()); in TEST()
1198 Value::Dict root; in TEST()
1200 Value* inserted = root.SetByDottedPath("one.two", Value(123)); in TEST()
1201 Value* found = root.FindByDottedPath("one.two"); in TEST()
1203 EXPECT_EQ(found->type(), Value::Type::INTEGER); in TEST()
1205 EXPECT_EQ(123, found->GetInt()); in TEST()
1207 inserted = root.SetByDottedPath("foo.bar", Value(123)); in TEST()
1210 EXPECT_EQ(found->type(), Value::Type::INTEGER); in TEST()
1212 EXPECT_EQ(123, found->GetInt()); in TEST()
1214 // Overwrite with a different value. in TEST()
1215 root.SetByDottedPath("foo.bar", Value("hello")); in TEST()
1218 EXPECT_EQ(found->type(), Value::Type::STRING); in TEST()
1219 EXPECT_EQ("hello", found->GetString()); in TEST()
1221 // Can't change existing non-dictionary keys to dictionaries. in TEST()
1222 found = root.SetByDottedPath("foo.bar.baz", Value(123)); in TEST()
1227 Value::Dict root; in TEST()
1228 Value* inserted = root.SetByDottedPath("foo.bar", true); in TEST()
1229 Value* found = root.FindByDottedPath("foo.bar"); in TEST()
1232 ASSERT_TRUE(found->is_bool()); in TEST()
1233 EXPECT_TRUE(found->GetBool()); in TEST()
1235 // Overwrite with a different value. in TEST()
1239 ASSERT_TRUE(found->is_bool()); in TEST()
1240 EXPECT_FALSE(found->GetBool()); in TEST()
1242 // Can't change existing non-dictionary keys. in TEST()
1247 Value::Dict root; in TEST()
1248 Value* inserted = root.SetByDottedPath("foo.bar", 123); in TEST()
1249 Value* found = root.FindByDottedPath("foo.bar"); in TEST()
1252 ASSERT_TRUE(found->is_int()); in TEST()
1253 EXPECT_EQ(123, found->GetInt()); in TEST()
1255 // Overwrite with a different value. in TEST()
1259 ASSERT_TRUE(found->is_int()); in TEST()
1260 EXPECT_EQ(234, found->GetInt()); in TEST()
1262 // Can't change existing non-dictionary keys. in TEST()
1267 Value::Dict root; in TEST()
1268 Value* inserted = root.SetByDottedPath("foo.bar", 1.23); in TEST()
1269 Value* found = root.FindByDottedPath("foo.bar"); in TEST()
1272 ASSERT_TRUE(found->is_double()); in TEST()
1273 EXPECT_EQ(1.23, found->GetDouble()); in TEST()
1275 // Overwrite with a different value. in TEST()
1279 ASSERT_TRUE(found->is_double()); in TEST()
1280 EXPECT_EQ(2.34, found->GetDouble()); in TEST()
1282 // Can't change existing non-dictionary keys. in TEST()
1287 Value::Dict root; in TEST()
1288 Value* inserted = root.SetByDottedPath("foo.bar", "hello world"); in TEST()
1289 Value* found = root.FindByDottedPath("foo.bar"); in TEST()
1292 ASSERT_TRUE(found->is_string()); in TEST()
1293 EXPECT_EQ("hello world", found->GetString()); in TEST()
1295 // Overwrite with a different value. in TEST()
1299 ASSERT_TRUE(found->is_string()); in TEST()
1300 EXPECT_EQ("bonjour monde", found->GetString()); in TEST()
1306 // Can't change existing non-dictionary keys. in TEST()
1311 Value::Dict root; in TEST()
1312 root.Set("one", Value(123)); in TEST()
1325 Value::Dict root; in TEST()
1326 root.Set("one", Value(123)); in TEST()
1332 EXPECT_EQ(Value(123), root.Extract("one")); in TEST()
1339 Value::Dict root; in TEST()
1340 root.SetByDottedPath("one.two.three", Value(123)); in TEST()
1354 root.SetByDottedPath("one.two.three", Value(123)); in TEST()
1355 root.SetByDottedPath("one.two.four", Value(124)); in TEST()
1358 // Intermediate non-empty dictionaries should be kept. in TEST()
1365 Value::Dict root; in TEST()
1366 root.SetByDottedPath("one.two.three", Value(123)); in TEST()
1372 EXPECT_EQ(Value(123), root.ExtractByDottedPath("one.two.three")); in TEST()
1380 root.SetByDottedPath("one.two.three", Value(123)); in TEST()
1381 root.SetByDottedPath("one.two.four", Value(124)); in TEST()
1383 EXPECT_EQ(Value(123), root.ExtractByDottedPath("one.two.three")); in TEST()
1384 // Intermediate non-empty dictionaries should be kept. in TEST()
1392 Value::Dict settings; in TEST()
1396 settings.Set("global", Value(true)); in TEST()
1399 settings.SetByDottedPath("global.homepage", Value("http://scurvy.com")); in TEST()
1409 Value::List new_toolbar_bookmarks; in TEST()
1412 Value::List* toolbar_bookmarks = in TEST()
1416 Value::Dict new_bookmark; in TEST()
1417 new_bookmark.Set("name", Value("Froogle")); in TEST()
1418 new_bookmark.Set("url", Value("http://froogle.com")); in TEST()
1419 toolbar_bookmarks->Append(std::move(new_bookmark)); in TEST()
1421 Value* bookmark_list = settings.FindByDottedPath("global.toolbar.bookmarks"); in TEST()
1423 ASSERT_EQ(1U, bookmark_list->GetList().size()); in TEST()
1424 Value* bookmark = &bookmark_list->GetList()[0]; in TEST()
1426 ASSERT_TRUE(bookmark->is_dict()); in TEST()
1427 const std::string* bookmark_name = bookmark->GetDict().FindString("name"); in TEST()
1430 const std::string* bookmark_url = bookmark->GetDict().FindString("url"); in TEST()
1436 Value::List mixed_list; in TEST()
1455 Value::List list = Value::List() in TEST()
1456 .Append(Value()) in TEST()
1460 .Append("value") in TEST()
1461 .Append(u"u16-value") in TEST()
1462 .Append(std::string("std-value")) in TEST()
1463 .Append(Value::BlobStorage({1, 2})) in TEST()
1464 .Append(Value::List().Append("value in list")) in TEST()
1465 .Append(Value::Dict().Set("key", "value")); in TEST()
1467 Value::List expected; in TEST()
1468 expected.Append(Value()); in TEST()
1472 expected.Append("value"); in TEST()
1473 expected.Append(u"u16-value"); in TEST()
1474 expected.Append(std::string("std-value")); in TEST()
1475 expected.Append(Value::BlobStorage({1, 2})); in TEST()
1476 Value::List nested_list; in TEST()
1477 nested_list.Append("value in list"); in TEST()
1479 Value::Dict nested_dict; in TEST()
1480 nested_dict.Set("key", "value"); in TEST()
1487 Value::List list_with_capacity = in TEST()
1488 Value::List::with_capacity(3).Append(true).Append(42).Append(88.8); in TEST()
1495 Value binary(Value::Type::BINARY); in TEST()
1498 // Test the common case of a non-empty buffer in TEST()
1499 Value::BlobStorage buffer(15); in TEST()
1501 binary = Value(std::move(buffer)); in TEST()
1508 binary = Value(Value::BlobStorage(stack_buffer, stack_buffer + 42)); in TEST()
1519 std::unique_ptr<Value> narrow_value(new Value("narrow")); in TEST()
1521 ASSERT_TRUE(narrow_value->is_string()); in TEST()
1522 std::unique_ptr<Value> utf16_value(new Value(u"utf16")); in TEST()
1524 ASSERT_TRUE(utf16_value->is_string()); in TEST()
1526 ASSERT_TRUE(narrow_value->is_string()); in TEST()
1527 ASSERT_EQ(std::string("narrow"), narrow_value->GetString()); in TEST()
1529 ASSERT_TRUE(utf16_value->is_string()); in TEST()
1530 ASSERT_EQ(std::string("utf16"), utf16_value->GetString()); in TEST()
1535 Value::Dict dict; in TEST()
1536 dict.Set(key, Value()); in TEST()
1547 Value::Dict dict; in TEST()
1548 Value* blank_ptr = dict.Set("foo.bar", Value()); in TEST()
1549 EXPECT_EQ(Value::Type::NONE, blank_ptr->type()); in TEST()
1553 Value::Dict dict; in TEST()
1554 Value* blank_ptr = dict.Set("foo.bar", Value()); in TEST()
1555 EXPECT_EQ(Value::Type::NONE, blank_ptr->type()); in TEST()
1559 Value::Dict dict; in TEST()
1560 Value* int_ptr = dict.Set("foo.bar", 42); in TEST()
1561 EXPECT_EQ(Value::Type::INTEGER, int_ptr->type()); in TEST()
1562 EXPECT_EQ(42, int_ptr->GetInt()); in TEST()
1566 Value::Dict dict; in TEST()
1567 Value* string_ptr = dict.Set("foo.bar", "foo"); in TEST()
1568 EXPECT_EQ(Value::Type::STRING, string_ptr->type()); in TEST()
1569 EXPECT_EQ("foo", string_ptr->GetString()); in TEST()
1573 Value::Dict dict; in TEST()
1574 Value* string16_ptr = dict.Set("foo.bar", u"baz"); in TEST()
1575 EXPECT_EQ(Value::Type::STRING, string16_ptr->type()); in TEST()
1576 EXPECT_EQ("baz", string16_ptr->GetString()); in TEST()
1580 Value::Dict dict; in TEST()
1581 Value* dict_ptr = dict.Set("foo.bar", Value::Dict()); in TEST()
1582 EXPECT_EQ(Value::Type::DICT, dict_ptr->type()); in TEST()
1586 Value::Dict dict; in TEST()
1587 Value* list_ptr = dict.Set("foo.bar", Value::List()); in TEST()
1588 EXPECT_EQ(Value::Type::LIST, list_ptr->type()); in TEST()
1593 Value original_null; in TEST()
1594 Value original_bool(true); in TEST()
1595 Value original_int(42); in TEST()
1596 Value original_double(3.14); in TEST()
1597 Value original_string("hello"); in TEST()
1598 Value original_string16(u"hello16"); in TEST()
1599 Value original_binary(Value::BlobStorage(42, '!')); in TEST()
1601 Value::List list; in TEST()
1604 Value original_list(std::move(list)); in TEST()
1606 Value original_dict(Value::Dict() in TEST()
1607 .Set("null", original_null.Clone()) in TEST()
1608 .Set("bool", original_bool.Clone()) in TEST()
1609 .Set("int", original_int.Clone()) in TEST()
1610 .Set("double", original_double.Clone()) in TEST()
1611 .Set("string", original_string.Clone()) in TEST()
1612 .Set("string16", original_string16.Clone()) in TEST()
1613 .Set("binary", original_binary.Clone()) in TEST()
1614 .Set("list", original_list.Clone())); in TEST()
1616 Value copy_value = original_dict.Clone(); in TEST()
1617 const Value::Dict& copy_dict = copy_value.GetDict(); in TEST()
1630 Value value("foo"); in TEST() local
1631 std::string taken = std::move(value).TakeString(); in TEST()
1635 // Check that the value can still be used after `TakeString()` was called, as
1636 // long as a new value was assigned to it.
1638 Value value("foo"); in TEST() local
1639 std::string taken = std::move(value).TakeString(); in TEST()
1641 value = Value(false); in TEST()
1642 EXPECT_EQ(value, Value(false)); in TEST()
1646 Value::Dict dict; in TEST()
1647 dict.Set("foo", 123); in TEST()
1648 Value value(std::move(dict)); in TEST() local
1649 Value clone = value.Clone(); in TEST()
1651 Value::Dict taken = std::move(value).TakeDict(); in TEST()
1655 // Check that the value can still be used after `TakeDict()` was called, as long
1656 // as a new value was assigned to it.
1658 Value::Dict dict; in TEST()
1659 dict.Set("foo", 123); in TEST()
1660 Value value(std::move(dict)); in TEST() local
1661 Value::Dict taken = std::move(value).TakeDict(); in TEST()
1663 value = Value(false); in TEST()
1664 EXPECT_EQ(value, Value(false)); in TEST()
1668 Value::List list; in TEST()
1671 Value value(std::move(list)); in TEST() local
1672 Value clone = value.Clone(); in TEST()
1674 Value::List taken = std::move(value).TakeList(); in TEST()
1678 // Check that the value can still be used after `TakeList()` was called, as long
1679 // as a new value was assigned to it.
1681 Value::List list; in TEST()
1683 Value value(std::move(list)); in TEST() local
1684 Value::List taken = std::move(value).TakeList(); in TEST()
1686 value = Value(false); in TEST()
1687 EXPECT_EQ(value, Value(false)); in TEST()
1691 std::vector<Value> values; in TEST()
1700 base::Value::Dict dict; in TEST()
1701 dict.Set("hello", "world"); in TEST()
1703 base::Value::Dict dict2; in TEST()
1704 dict2.Set("world", "hello"); in TEST()
1706 base::Value::List list; in TEST()
1710 base::Value::List list2; in TEST()
1715 for (const Value& outer_value : values) { in TEST()
1716 for (const Value& inner_value : values) { in TEST()
1736 !std::is_same_v<T, Value::BlobStorage>) { in TEST()
1752 // A copy of a Value should also compare equal to itself. in TEST()
1753 Value copied_value = outer_value.Clone(); in TEST()
1764 EXPECT_EQ("hello world", base::Value("hello world")); in TEST()
1765 EXPECT_EQ(base::Value("hello world"), "hello world"); in TEST()
1766 EXPECT_NE("hello world", base::Value(true)); in TEST()
1767 EXPECT_NE(base::Value(true), "hello world"); in TEST()
1771 auto null1 = std::make_unique<Value>(); in TEST()
1772 auto null2 = std::make_unique<Value>(); in TEST()
1776 Value boolean(false); in TEST()
1779 Value::Dict dv; in TEST()
1780 dv.Set("a", false); in TEST()
1781 dv.Set("b", 2); in TEST()
1782 dv.Set("c", 2.5); in TEST()
1783 dv.Set("d1", "string"); in TEST()
1784 dv.Set("d2", u"http://google.com"); in TEST()
1785 dv.Set("e", Value()); in TEST()
1787 Value::Dict copy = dv.Clone(); in TEST()
1790 Value::List list; in TEST()
1791 list.Append(Value()); in TEST()
1792 list.Append(Value(Value::Type::DICT)); in TEST()
1793 Value::List list_copy(list.Clone()); in TEST()
1795 Value* list_weak = dv.Set("f", std::move(list)); in TEST()
1797 copy.Set("f", std::move(list_copy)); in TEST()
1800 list_weak->GetList().Append(true); in TEST()
1807 copy.Set("aa", false); in TEST()
1813 Value null1; in TEST()
1814 Value null2; in TEST()
1823 Value bool1(false); in TEST()
1824 Value bool2(true); in TEST()
1833 Value int1(1); in TEST()
1834 Value int2(2); in TEST()
1843 Value double1(1.0); in TEST()
1844 Value double2(2.0); in TEST()
1853 Value string1("1"); in TEST()
1854 Value string2("2"); in TEST()
1863 Value binary1(Value::BlobStorage{0x01}); in TEST()
1864 Value binary2(Value::BlobStorage{0x02}); in TEST()
1873 Value::List null_list1; in TEST()
1874 Value::List null_list2; in TEST()
1883 Value::List int_list1; in TEST()
1884 Value::List int_list2; in TEST()
1895 Value::Dict null_dict1; in TEST()
1896 Value::Dict null_dict2; in TEST()
1905 Value::Dict int_dict1; in TEST()
1906 Value::Dict int_dict2; in TEST()
1907 int_dict1.Set("key", 1); in TEST()
1908 int_dict2.Set("key", 2); in TEST()
1917 std::vector<Value> values; in TEST()
1939 Value::Dict base; in TEST()
1940 base.Set("base_key", "base_key_value_base"); in TEST()
1941 base.Set("collide_key", "collide_key_value_base"); in TEST()
1942 Value::Dict base_sub_dict; in TEST()
1943 base_sub_dict.Set("sub_base_key", "sub_base_key_value_base"); in TEST()
1944 base_sub_dict.Set("sub_collide_key", "sub_collide_key_value_base"); in TEST()
1945 base.Set("sub_dict_key", std::move(base_sub_dict)); in TEST()
1947 Value::Dict merge; in TEST()
1948 merge.Set("merge_key", "merge_key_value_merge"); in TEST()
1949 merge.Set("collide_key", "collide_key_value_merge"); in TEST()
1950 Value::Dict merge_sub_dict; in TEST()
1951 merge_sub_dict.Set("sub_merge_key", "sub_merge_key_value_merge"); in TEST()
1952 merge_sub_dict.Set("sub_collide_key", "sub_collide_key_value_merge"); in TEST()
1953 merge.Set("sub_dict_key", std::move(merge_sub_dict)); in TEST()
1960 EXPECT_EQ("base_key_value_base", *base_key_value); // Base value preserved. in TEST()
1968 Value::Dict* res_sub_dict = base.FindDict("sub_dict_key"); in TEST()
1970 EXPECT_EQ(3U, res_sub_dict->size()); in TEST()
1972 res_sub_dict->FindString("sub_base_key"); in TEST()
1976 res_sub_dict->FindString("sub_collide_key"); in TEST()
1981 res_sub_dict->FindString("sub_merge_key"); in TEST()
1987 Value::Dict dict; in TEST()
1988 for (Value::Dict::iterator it = dict.begin(); it != dict.end(); ++it) { in TEST()
1992 Value value1("value1"); in TEST()
1993 dict.Set("key1", value1.Clone()); in TEST()
1995 for (Value::Dict::iterator it = dict.begin(); it != dict.end(); ++it) { in TEST()
1997 EXPECT_EQ("key1", it->first); in TEST()
1998 EXPECT_EQ(value1, it->second); in TEST()
2003 Value value2("value2"); in TEST()
2004 dict.Set("key2", value2.Clone()); in TEST()
2006 for (Value::Dict::iterator it = dict.begin(); it != dict.end(); ++it) { in TEST()
2007 if (it->first == "key1") { in TEST()
2009 EXPECT_EQ(value1, it->second); in TEST()
2011 } else if (it->first == "key2") { in TEST()
2013 EXPECT_EQ(value2, it->second); in TEST()
2024 Value::Dict dict; in TEST()
2025 dict.Set("key", Value("initial value")); in TEST()
2027 // Because the non-const dict iterates over <const std::string&, Value&> in TEST()
2028 // pairs, it's possible to alter iterated-over values in place even when in TEST()
2029 // "copying" the key-value pair: in TEST()
2040 Value::Dict dict; in TEST()
2045 Value value1("value1"); in TEST()
2046 dict.Set("key1", value1.Clone()); in TEST()
2056 Value value2("value2"); in TEST()
2057 dict.Set("key2", value2.Clone()); in TEST()
2077 base::Value test(1); in TEST()
2083 std::unique_ptr<Value> dict = std::make_unique<Value>(Value::Type::DICT); in TEST()
2084 dict->GetDict().Set("name", "Froogle"); in TEST()
2085 dict->GetDict().Set("url", "http://froogle.com"); in TEST()
2086 Value dict_copy = dict->Clone(); in TEST()
2088 Value dict_converted = Value::FromUniquePtrValue(std::move(dict)); in TEST()
2091 std::unique_ptr<Value> val = in TEST()
2092 Value::ToUniquePtrValue(std::move(dict_converted)); in TEST()
2097 Value::Dict dict; in TEST()
2098 dict.SetByDottedPath("foo.bar", "value"); in TEST()
2102 Value::Dict expected_dict; in TEST()
2109 Value value("value"); in TEST() local
2110 value.GetString() = "new_value"; in TEST()
2111 EXPECT_EQ("new_value", value.GetString()); in TEST()
2116 EXPECT_EQ(perfetto::TracedValueToString(Value(false)), "false"); in TEST()
2117 EXPECT_EQ(perfetto::TracedValueToString(Value(1)), "1"); in TEST()
2118 EXPECT_EQ(perfetto::TracedValueToString(Value(1.5)), "1.5"); in TEST()
2119 EXPECT_EQ(perfetto::TracedValueToString(Value("value")), "value"); in TEST()
2120 EXPECT_EQ(perfetto::TracedValueToString(Value(Value::Type::NONE)), "<none>"); in TEST()
2122 Value::List list; in TEST()
2127 EXPECT_EQ(perfetto::TracedValueToString(Value(std::move(list))), "[2,3]"); in TEST()
2130 Value::Dict dict; in TEST()
2132 dict.Set("key", "value"); in TEST()
2133 EXPECT_EQ(perfetto::TracedValueToString(dict), "{key:value}"); in TEST()
2134 EXPECT_EQ(perfetto::TracedValueToString(Value(std::move(dict))), in TEST()
2135 "{key:value}"); in TEST()
2168 Value::Dict dict; in TEST()
2169 dict.Set("hello", "world"); in TEST()
2171 EXPECT_EQ(dict, absl::get<std::reference_wrapper<const Value::Dict>>( in TEST()
2175 Value::List list; in TEST()
2179 EXPECT_EQ(list, absl::get<std::reference_wrapper<const Value::List>>( in TEST()
2186 Value val(true); in TEST()
2191 Value val(25); in TEST()
2196 Value val(3.14); in TEST()
2202 Value val("hello world"); in TEST()
2207 Value::Dict dict; in TEST()
2208 dict.Set("hello", "world"); in TEST()
2209 Value val(dict.Clone()); in TEST()
2211 EXPECT_EQ(dict, absl::get<std::reference_wrapper<const Value::Dict>>( in TEST()
2215 Value::List list; in TEST()
2218 Value val(list.Clone()); in TEST()
2220 EXPECT_EQ(list, absl::get<std::reference_wrapper<const Value::List>>( in TEST()
2227 Value val(true); in TEST()
2228 Value to_val = ValueView(val).ToValue(); in TEST()
2232 Value val(25); in TEST()
2233 Value to_val = ValueView(val).ToValue(); in TEST()
2237 Value val(3.14); in TEST()
2238 Value to_val = ValueView(val).ToValue(); in TEST()
2242 Value val("hello world"); in TEST()
2243 Value to_val = ValueView(val).ToValue(); in TEST()
2247 Value::Dict dict; in TEST()
2248 dict.Set("hello", "world"); in TEST()
2249 Value val(dict.Clone()); in TEST()
2250 Value to_val = ValueView(val).ToValue(); in TEST()
2254 Value::List list; in TEST()
2257 Value val(list.Clone()); in TEST()
2258 Value to_val = ValueView(val).ToValue(); in TEST()