OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/values.h" | 5 #include "base/values.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 #include <memory> | 10 #include <memory> |
(...skipping 17 matching lines...) Expand all Loading... |
28 static_assert(std::is_nothrow_constructible<Value, std::string&&>::value, | 28 static_assert(std::is_nothrow_constructible<Value, std::string&&>::value, |
29 "IsNothrowMoveConstructibleFromString"); | 29 "IsNothrowMoveConstructibleFromString"); |
30 static_assert( | 30 static_assert( |
31 std::is_nothrow_constructible<Value, Value::BlobStorage&&>::value, | 31 std::is_nothrow_constructible<Value, Value::BlobStorage&&>::value, |
32 "IsNothrowMoveConstructibleFromBlob"); | 32 "IsNothrowMoveConstructibleFromBlob"); |
33 static_assert( | 33 static_assert( |
34 std::is_nothrow_constructible<Value, Value::ListStorage&&>::value, | 34 std::is_nothrow_constructible<Value, Value::ListStorage&&>::value, |
35 "IsNothrowMoveConstructibleFromList"); | 35 "IsNothrowMoveConstructibleFromList"); |
36 static_assert(std::is_nothrow_move_assignable<Value>::value, | 36 static_assert(std::is_nothrow_move_assignable<Value>::value, |
37 "IsNothrowMoveAssignable"); | 37 "IsNothrowMoveAssignable"); |
| 38 static_assert( |
| 39 std::is_nothrow_constructible<ListValue, Value::ListStorage&&>::value, |
| 40 "ListIsNothrowMoveConstructibleFromList"); |
38 } | 41 } |
39 | 42 |
40 // Group of tests for the value constructors. | 43 // Group of tests for the value constructors. |
41 TEST(ValuesTest, ConstructBool) { | 44 TEST(ValuesTest, ConstructBool) { |
42 Value true_value(true); | 45 Value true_value(true); |
43 EXPECT_EQ(Value::Type::BOOLEAN, true_value.type()); | 46 EXPECT_EQ(Value::Type::BOOLEAN, true_value.type()); |
44 EXPECT_TRUE(true_value.GetBool()); | 47 EXPECT_TRUE(true_value.GetBool()); |
45 | 48 |
46 Value false_value(false); | 49 Value false_value(false); |
47 EXPECT_EQ(Value::Type::BOOLEAN, false_value.type()); | 50 EXPECT_EQ(Value::Type::BOOLEAN, false_value.type()); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 TEST(ValuesTest, ConstructDict) { | 115 TEST(ValuesTest, ConstructDict) { |
113 DictionaryValue value; | 116 DictionaryValue value; |
114 EXPECT_EQ(Value::Type::DICTIONARY, value.type()); | 117 EXPECT_EQ(Value::Type::DICTIONARY, value.type()); |
115 } | 118 } |
116 | 119 |
117 TEST(ValuesTest, ConstructList) { | 120 TEST(ValuesTest, ConstructList) { |
118 ListValue value; | 121 ListValue value; |
119 EXPECT_EQ(Value::Type::LIST, value.type()); | 122 EXPECT_EQ(Value::Type::LIST, value.type()); |
120 } | 123 } |
121 | 124 |
| 125 TEST(ValuesTest, ConstructListFromStorage) { |
| 126 Value::ListStorage storage; |
| 127 storage.emplace_back("foo"); |
| 128 |
| 129 { |
| 130 ListValue value(storage); |
| 131 EXPECT_EQ(Value::Type::LIST, value.type()); |
| 132 EXPECT_EQ(1u, value.GetList().size()); |
| 133 EXPECT_EQ(Value::Type::STRING, value.GetList()[0].type()); |
| 134 EXPECT_EQ("foo", value.GetList()[0].GetString()); |
| 135 } |
| 136 |
| 137 storage.back() = base::Value("bar"); |
| 138 { |
| 139 ListValue value(std::move(storage)); |
| 140 EXPECT_EQ(Value::Type::LIST, value.type()); |
| 141 EXPECT_EQ(1u, value.GetList().size()); |
| 142 EXPECT_EQ(Value::Type::STRING, value.GetList()[0].type()); |
| 143 EXPECT_EQ("bar", value.GetList()[0].GetString()); |
| 144 } |
| 145 } |
| 146 |
122 // Group of tests for the copy constructors and copy-assigmnent. For equality | 147 // Group of tests for the copy constructors and copy-assigmnent. For equality |
123 // checks comparisons of the interesting fields are done instead of relying on | 148 // checks comparisons of the interesting fields are done instead of relying on |
124 // Equals being correct. | 149 // Equals being correct. |
125 TEST(ValuesTest, CopyBool) { | 150 TEST(ValuesTest, CopyBool) { |
126 Value true_value(true); | 151 Value true_value(true); |
127 Value copied_true_value(true_value); | 152 Value copied_true_value(true_value); |
128 EXPECT_EQ(true_value.type(), copied_true_value.type()); | 153 EXPECT_EQ(true_value.type(), copied_true_value.type()); |
129 EXPECT_EQ(true_value.GetBool(), copied_true_value.GetBool()); | 154 EXPECT_EQ(true_value.GetBool(), copied_true_value.GetBool()); |
130 | 155 |
131 Value false_value(false); | 156 Value false_value(false); |
(...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1506 EXPECT_FALSE(main_list.GetList(7, NULL)); | 1531 EXPECT_FALSE(main_list.GetList(7, NULL)); |
1507 } | 1532 } |
1508 | 1533 |
1509 TEST(ValuesTest, SelfSwap) { | 1534 TEST(ValuesTest, SelfSwap) { |
1510 base::Value test(1); | 1535 base::Value test(1); |
1511 std::swap(test, test); | 1536 std::swap(test, test); |
1512 EXPECT_TRUE(test.GetInt() == 1); | 1537 EXPECT_TRUE(test.GetInt() == 1); |
1513 } | 1538 } |
1514 | 1539 |
1515 } // namespace base | 1540 } // namespace base |
OLD | NEW |