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 12 matching lines...) Expand all Loading... |
23 TEST(ValuesTest, TestNothrow) { | 23 TEST(ValuesTest, TestNothrow) { |
24 static_assert(std::is_nothrow_move_constructible<Value>::value, | 24 static_assert(std::is_nothrow_move_constructible<Value>::value, |
25 "IsNothrowMoveConstructible"); | 25 "IsNothrowMoveConstructible"); |
26 static_assert(std::is_nothrow_default_constructible<Value>::value, | 26 static_assert(std::is_nothrow_default_constructible<Value>::value, |
27 "IsNothrowDefaultConstructible"); | 27 "IsNothrowDefaultConstructible"); |
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( |
| 34 std::is_nothrow_constructible<Value, Value::ListStorage&&>::value, |
| 35 "IsNothrowMoveConstructibleFromList"); |
33 static_assert(std::is_nothrow_move_assignable<Value>::value, | 36 static_assert(std::is_nothrow_move_assignable<Value>::value, |
34 "IsNothrowMoveAssignable"); | 37 "IsNothrowMoveAssignable"); |
35 } | 38 } |
36 | 39 |
37 // Group of tests for the value constructors. | 40 // Group of tests for the value constructors. |
38 TEST(ValuesTest, ConstructBool) { | 41 TEST(ValuesTest, ConstructBool) { |
39 Value true_value(true); | 42 Value true_value(true); |
40 EXPECT_EQ(Value::Type::BOOLEAN, true_value.type()); | 43 EXPECT_EQ(Value::Type::BOOLEAN, true_value.type()); |
41 EXPECT_TRUE(true_value.GetBool()); | 44 EXPECT_TRUE(true_value.GetBool()); |
42 | 45 |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 auto blank = MakeUnique<Value>(); | 212 auto blank = MakeUnique<Value>(); |
210 | 213 |
211 *blank = value; | 214 *blank = value; |
212 EXPECT_EQ(Value::Type::DICTIONARY, blank->type()); | 215 EXPECT_EQ(Value::Type::DICTIONARY, blank->type()); |
213 | 216 |
214 static_cast<DictionaryValue*>(blank.get())->GetInteger("Int", ©); | 217 static_cast<DictionaryValue*>(blank.get())->GetInteger("Int", ©); |
215 EXPECT_EQ(123, copy); | 218 EXPECT_EQ(123, copy); |
216 } | 219 } |
217 | 220 |
218 TEST(ValuesTest, CopyList) { | 221 TEST(ValuesTest, CopyList) { |
219 // TODO(crbug.com/646113): Clean this up once ListValue switched to | 222 Value value(Value::ListStorage{Value(123)}); |
220 // value semantics. | |
221 int copy; | |
222 ListValue value; | |
223 value.AppendInteger(123); | |
224 | 223 |
225 ListValue copied_value(value); | 224 Value copied_value(value); |
226 copied_value.GetInteger(0, ©); | 225 EXPECT_EQ(value, copied_value); |
227 | 226 |
228 EXPECT_EQ(value.type(), copied_value.type()); | 227 Value blank; |
229 EXPECT_EQ(123, copy); | 228 blank = value; |
230 | 229 EXPECT_EQ(value, blank); |
231 auto blank = MakeUnique<Value>(); | |
232 | |
233 *blank = value; | |
234 EXPECT_EQ(Value::Type::LIST, blank->type()); | |
235 | |
236 static_cast<ListValue*>(blank.get())->GetInteger(0, ©); | |
237 EXPECT_EQ(123, copy); | |
238 } | 230 } |
239 | 231 |
240 // Group of tests for the move constructors and move-assigmnent. | 232 // Group of tests for the move constructors and move-assigmnent. |
241 TEST(ValuesTest, MoveBool) { | 233 TEST(ValuesTest, MoveBool) { |
242 Value true_value(true); | 234 Value true_value(true); |
243 Value moved_true_value(std::move(true_value)); | 235 Value moved_true_value(std::move(true_value)); |
244 EXPECT_EQ(Value::Type::BOOLEAN, moved_true_value.type()); | 236 EXPECT_EQ(Value::Type::BOOLEAN, moved_true_value.type()); |
245 EXPECT_TRUE(moved_true_value.GetBool()); | 237 EXPECT_TRUE(moved_true_value.GetBool()); |
246 | 238 |
247 Value false_value(false); | 239 Value false_value(false); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 EXPECT_EQ(Value::Type::DICTIONARY, moved_value.type()); | 318 EXPECT_EQ(Value::Type::DICTIONARY, moved_value.type()); |
327 EXPECT_EQ(123, move); | 319 EXPECT_EQ(123, move); |
328 | 320 |
329 Value blank; | 321 Value blank; |
330 | 322 |
331 blank = DictionaryValue(); | 323 blank = DictionaryValue(); |
332 EXPECT_EQ(Value::Type::DICTIONARY, blank.type()); | 324 EXPECT_EQ(Value::Type::DICTIONARY, blank.type()); |
333 } | 325 } |
334 | 326 |
335 TEST(ValuesTest, MoveList) { | 327 TEST(ValuesTest, MoveList) { |
336 // TODO(crbug.com/646113): Clean this up once ListValue switched to | 328 const Value::ListStorage list = {Value(123)}; |
337 // value semantics. | 329 Value value(list); |
338 int move; | 330 Value moved_value(std::move(value)); |
339 ListValue value; | |
340 value.AppendInteger(123); | |
341 | |
342 ListValue moved_value(std::move(value)); | |
343 moved_value.GetInteger(0, &move); | |
344 | |
345 EXPECT_EQ(Value::Type::LIST, moved_value.type()); | 331 EXPECT_EQ(Value::Type::LIST, moved_value.type()); |
346 EXPECT_EQ(123, move); | 332 EXPECT_EQ(123, moved_value.GetList().back().GetInt()); |
347 | 333 |
348 Value blank; | 334 Value blank; |
349 | 335 |
350 blank = ListValue(); | 336 blank = Value(list); |
351 EXPECT_EQ(Value::Type::LIST, blank.type()); | 337 EXPECT_EQ(Value::Type::LIST, blank.type()); |
| 338 EXPECT_EQ(123, blank.GetList().back().GetInt()); |
352 } | 339 } |
353 | 340 |
354 TEST(ValuesTest, Basic) { | 341 TEST(ValuesTest, Basic) { |
355 // Test basic dictionary getting/setting | 342 // Test basic dictionary getting/setting |
356 DictionaryValue settings; | 343 DictionaryValue settings; |
357 std::string homepage = "http://google.com"; | 344 std::string homepage = "http://google.com"; |
358 ASSERT_FALSE(settings.GetString("global.homepage", &homepage)); | 345 ASSERT_FALSE(settings.GetString("global.homepage", &homepage)); |
359 ASSERT_EQ(std::string("http://google.com"), homepage); | 346 ASSERT_EQ(std::string("http://google.com"), homepage); |
360 | 347 |
361 ASSERT_FALSE(settings.Get("global", NULL)); | 348 ASSERT_FALSE(settings.Get("global", NULL)); |
(...skipping 1156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1518 EXPECT_FALSE(main_list.GetList(7, NULL)); | 1505 EXPECT_FALSE(main_list.GetList(7, NULL)); |
1519 } | 1506 } |
1520 | 1507 |
1521 TEST(ValuesTest, SelfSwap) { | 1508 TEST(ValuesTest, SelfSwap) { |
1522 base::Value test(1); | 1509 base::Value test(1); |
1523 std::swap(test, test); | 1510 std::swap(test, test); |
1524 EXPECT_TRUE(test.GetInt() == 1); | 1511 EXPECT_TRUE(test.GetInt() == 1); |
1525 } | 1512 } |
1526 | 1513 |
1527 } // namespace base | 1514 } // namespace base |
OLD | NEW |