Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: components/policy/core/common/schema_unittest.cc

Issue 2539363004: Make base::Value::TYPE a scoped enum. (Closed)
Patch Set: Rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/policy/core/common/schema.h" 5 #include "components/policy/core/common/schema.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 " \"properties\": {" 265 " \"properties\": {"
266 " \"sub\": {" 266 " \"sub\": {"
267 " \"type\": \"object\"," 267 " \"type\": \"object\","
268 " \"properties\": {" 268 " \"properties\": {"
269 " \"subsub\": { \"type\": \"string\" }" 269 " \"subsub\": { \"type\": \"string\" }"
270 " }" 270 " }"
271 " }" 271 " }"
272 " }" 272 " }"
273 "}", &error); 273 "}", &error);
274 ASSERT_TRUE(schema.valid()) << error; 274 ASSERT_TRUE(schema.valid()) << error;
275 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 275 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
276 276
277 schema = schema.GetKnownProperty("sub"); 277 schema = schema.GetKnownProperty("sub");
278 ASSERT_TRUE(schema.valid()); 278 ASSERT_TRUE(schema.valid());
279 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 279 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
280 280
281 { 281 {
282 Schema::Iterator it = schema.GetPropertiesIterator(); 282 Schema::Iterator it = schema.GetPropertiesIterator();
283 ASSERT_FALSE(it.IsAtEnd()); 283 ASSERT_FALSE(it.IsAtEnd());
284 EXPECT_STREQ("subsub", it.key()); 284 EXPECT_STREQ("subsub", it.key());
285 285
286 schema = it.schema(); 286 schema = it.schema();
287 it.Advance(); 287 it.Advance();
288 EXPECT_TRUE(it.IsAtEnd()); 288 EXPECT_TRUE(it.IsAtEnd());
289 } 289 }
290 290
291 ASSERT_TRUE(schema.valid()); 291 ASSERT_TRUE(schema.valid());
292 EXPECT_EQ(base::Value::TYPE_STRING, schema.type()); 292 EXPECT_EQ(base::Value::Type::STRING, schema.type());
293 293
294 // This test shouldn't leak nor use invalid memory. 294 // This test shouldn't leak nor use invalid memory.
295 } 295 }
296 296
297 TEST(SchemaTest, ValidSchema) { 297 TEST(SchemaTest, ValidSchema) {
298 std::string error; 298 std::string error;
299 Schema schema = Schema::Parse(kTestSchema, &error); 299 Schema schema = Schema::Parse(kTestSchema, &error);
300 ASSERT_TRUE(schema.valid()) << error; 300 ASSERT_TRUE(schema.valid()) << error;
301 301
302 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 302 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
303 EXPECT_FALSE(schema.GetProperty("invalid").valid()); 303 EXPECT_FALSE(schema.GetProperty("invalid").valid());
304 304
305 Schema sub = schema.GetProperty("Boolean"); 305 Schema sub = schema.GetProperty("Boolean");
306 ASSERT_TRUE(sub.valid()); 306 ASSERT_TRUE(sub.valid());
307 EXPECT_EQ(base::Value::TYPE_BOOLEAN, sub.type()); 307 EXPECT_EQ(base::Value::Type::BOOLEAN, sub.type());
308 308
309 sub = schema.GetProperty("Integer"); 309 sub = schema.GetProperty("Integer");
310 ASSERT_TRUE(sub.valid()); 310 ASSERT_TRUE(sub.valid());
311 EXPECT_EQ(base::Value::TYPE_INTEGER, sub.type()); 311 EXPECT_EQ(base::Value::Type::INTEGER, sub.type());
312 312
313 sub = schema.GetProperty("Null"); 313 sub = schema.GetProperty("Null");
314 ASSERT_TRUE(sub.valid()); 314 ASSERT_TRUE(sub.valid());
315 EXPECT_EQ(base::Value::TYPE_NULL, sub.type()); 315 EXPECT_EQ(base::Value::Type::NONE, sub.type());
316 316
317 sub = schema.GetProperty("Number"); 317 sub = schema.GetProperty("Number");
318 ASSERT_TRUE(sub.valid()); 318 ASSERT_TRUE(sub.valid());
319 EXPECT_EQ(base::Value::TYPE_DOUBLE, sub.type()); 319 EXPECT_EQ(base::Value::Type::DOUBLE, sub.type());
320 320
321 sub = schema.GetProperty("String"); 321 sub = schema.GetProperty("String");
322 ASSERT_TRUE(sub.valid()); 322 ASSERT_TRUE(sub.valid());
323 EXPECT_EQ(base::Value::TYPE_STRING, sub.type()); 323 EXPECT_EQ(base::Value::Type::STRING, sub.type());
324 324
325 sub = schema.GetProperty("Array"); 325 sub = schema.GetProperty("Array");
326 ASSERT_TRUE(sub.valid()); 326 ASSERT_TRUE(sub.valid());
327 ASSERT_EQ(base::Value::TYPE_LIST, sub.type()); 327 ASSERT_EQ(base::Value::Type::LIST, sub.type());
328 sub = sub.GetItems(); 328 sub = sub.GetItems();
329 ASSERT_TRUE(sub.valid()); 329 ASSERT_TRUE(sub.valid());
330 EXPECT_EQ(base::Value::TYPE_STRING, sub.type()); 330 EXPECT_EQ(base::Value::Type::STRING, sub.type());
331 331
332 sub = schema.GetProperty("ArrayOfObjects"); 332 sub = schema.GetProperty("ArrayOfObjects");
333 ASSERT_TRUE(sub.valid()); 333 ASSERT_TRUE(sub.valid());
334 ASSERT_EQ(base::Value::TYPE_LIST, sub.type()); 334 ASSERT_EQ(base::Value::Type::LIST, sub.type());
335 sub = sub.GetItems(); 335 sub = sub.GetItems();
336 ASSERT_TRUE(sub.valid()); 336 ASSERT_TRUE(sub.valid());
337 EXPECT_EQ(base::Value::TYPE_DICTIONARY, sub.type()); 337 EXPECT_EQ(base::Value::Type::DICTIONARY, sub.type());
338 Schema subsub = sub.GetProperty("one"); 338 Schema subsub = sub.GetProperty("one");
339 ASSERT_TRUE(subsub.valid()); 339 ASSERT_TRUE(subsub.valid());
340 EXPECT_EQ(base::Value::TYPE_STRING, subsub.type()); 340 EXPECT_EQ(base::Value::Type::STRING, subsub.type());
341 subsub = sub.GetProperty("two"); 341 subsub = sub.GetProperty("two");
342 ASSERT_TRUE(subsub.valid()); 342 ASSERT_TRUE(subsub.valid());
343 EXPECT_EQ(base::Value::TYPE_INTEGER, subsub.type()); 343 EXPECT_EQ(base::Value::Type::INTEGER, subsub.type());
344 subsub = sub.GetProperty("invalid"); 344 subsub = sub.GetProperty("invalid");
345 EXPECT_FALSE(subsub.valid()); 345 EXPECT_FALSE(subsub.valid());
346 346
347 sub = schema.GetProperty("ArrayOfArray"); 347 sub = schema.GetProperty("ArrayOfArray");
348 ASSERT_TRUE(sub.valid()); 348 ASSERT_TRUE(sub.valid());
349 ASSERT_EQ(base::Value::TYPE_LIST, sub.type()); 349 ASSERT_EQ(base::Value::Type::LIST, sub.type());
350 sub = sub.GetItems(); 350 sub = sub.GetItems();
351 ASSERT_TRUE(sub.valid()); 351 ASSERT_TRUE(sub.valid());
352 ASSERT_EQ(base::Value::TYPE_LIST, sub.type()); 352 ASSERT_EQ(base::Value::Type::LIST, sub.type());
353 sub = sub.GetItems(); 353 sub = sub.GetItems();
354 ASSERT_TRUE(sub.valid()); 354 ASSERT_TRUE(sub.valid());
355 EXPECT_EQ(base::Value::TYPE_STRING, sub.type()); 355 EXPECT_EQ(base::Value::Type::STRING, sub.type());
356 356
357 sub = schema.GetProperty("Object"); 357 sub = schema.GetProperty("Object");
358 ASSERT_TRUE(sub.valid()); 358 ASSERT_TRUE(sub.valid());
359 ASSERT_EQ(base::Value::TYPE_DICTIONARY, sub.type()); 359 ASSERT_EQ(base::Value::Type::DICTIONARY, sub.type());
360 subsub = sub.GetProperty("one"); 360 subsub = sub.GetProperty("one");
361 ASSERT_TRUE(subsub.valid()); 361 ASSERT_TRUE(subsub.valid());
362 EXPECT_EQ(base::Value::TYPE_BOOLEAN, subsub.type()); 362 EXPECT_EQ(base::Value::Type::BOOLEAN, subsub.type());
363 subsub = sub.GetProperty("two"); 363 subsub = sub.GetProperty("two");
364 ASSERT_TRUE(subsub.valid()); 364 ASSERT_TRUE(subsub.valid());
365 EXPECT_EQ(base::Value::TYPE_INTEGER, subsub.type()); 365 EXPECT_EQ(base::Value::Type::INTEGER, subsub.type());
366 subsub = sub.GetProperty("undeclared"); 366 subsub = sub.GetProperty("undeclared");
367 ASSERT_TRUE(subsub.valid()); 367 ASSERT_TRUE(subsub.valid());
368 EXPECT_EQ(base::Value::TYPE_STRING, subsub.type()); 368 EXPECT_EQ(base::Value::Type::STRING, subsub.type());
369 369
370 sub = schema.GetProperty("IntegerWithEnums"); 370 sub = schema.GetProperty("IntegerWithEnums");
371 ASSERT_TRUE(sub.valid()); 371 ASSERT_TRUE(sub.valid());
372 ASSERT_EQ(base::Value::TYPE_INTEGER, sub.type()); 372 ASSERT_EQ(base::Value::Type::INTEGER, sub.type());
373 373
374 sub = schema.GetProperty("IntegerWithEnumsGaps"); 374 sub = schema.GetProperty("IntegerWithEnumsGaps");
375 ASSERT_TRUE(sub.valid()); 375 ASSERT_TRUE(sub.valid());
376 ASSERT_EQ(base::Value::TYPE_INTEGER, sub.type()); 376 ASSERT_EQ(base::Value::Type::INTEGER, sub.type());
377 377
378 sub = schema.GetProperty("StringWithEnums"); 378 sub = schema.GetProperty("StringWithEnums");
379 ASSERT_TRUE(sub.valid()); 379 ASSERT_TRUE(sub.valid());
380 ASSERT_EQ(base::Value::TYPE_STRING, sub.type()); 380 ASSERT_EQ(base::Value::Type::STRING, sub.type());
381 381
382 sub = schema.GetProperty("IntegerWithRange"); 382 sub = schema.GetProperty("IntegerWithRange");
383 ASSERT_TRUE(sub.valid()); 383 ASSERT_TRUE(sub.valid());
384 ASSERT_EQ(base::Value::TYPE_INTEGER, sub.type()); 384 ASSERT_EQ(base::Value::Type::INTEGER, sub.type());
385 385
386 sub = schema.GetProperty("StringWithPattern"); 386 sub = schema.GetProperty("StringWithPattern");
387 ASSERT_TRUE(sub.valid()); 387 ASSERT_TRUE(sub.valid());
388 ASSERT_EQ(base::Value::TYPE_STRING, sub.type()); 388 ASSERT_EQ(base::Value::Type::STRING, sub.type());
389 389
390 sub = schema.GetProperty("ObjectWithPatternProperties"); 390 sub = schema.GetProperty("ObjectWithPatternProperties");
391 ASSERT_TRUE(sub.valid()); 391 ASSERT_TRUE(sub.valid());
392 ASSERT_EQ(base::Value::TYPE_DICTIONARY, sub.type()); 392 ASSERT_EQ(base::Value::Type::DICTIONARY, sub.type());
393 393
394 struct { 394 struct {
395 const char* expected_key; 395 const char* expected_key;
396 base::Value::Type expected_type; 396 base::Value::Type expected_type;
397 } kExpectedProperties[] = { 397 } kExpectedProperties[] = {
398 { "Array", base::Value::TYPE_LIST }, 398 { "Array", base::Value::Type::LIST },
399 { "ArrayOfArray", base::Value::TYPE_LIST }, 399 { "ArrayOfArray", base::Value::Type::LIST },
400 { "ArrayOfObjectOfArray", base::Value::TYPE_LIST }, 400 { "ArrayOfObjectOfArray", base::Value::Type::LIST },
401 { "ArrayOfObjects", base::Value::TYPE_LIST }, 401 { "ArrayOfObjects", base::Value::Type::LIST },
402 { "Boolean", base::Value::TYPE_BOOLEAN }, 402 { "Boolean", base::Value::Type::BOOLEAN },
403 { "Integer", base::Value::TYPE_INTEGER }, 403 { "Integer", base::Value::Type::INTEGER },
404 { "IntegerWithEnums", base::Value::TYPE_INTEGER }, 404 { "IntegerWithEnums", base::Value::Type::INTEGER },
405 { "IntegerWithEnumsGaps", base::Value::TYPE_INTEGER }, 405 { "IntegerWithEnumsGaps", base::Value::Type::INTEGER },
406 { "IntegerWithRange", base::Value::TYPE_INTEGER }, 406 { "IntegerWithRange", base::Value::Type::INTEGER },
407 { "Null", base::Value::TYPE_NULL }, 407 { "Null", base::Value::Type::NONE },
408 { "Number", base::Value::TYPE_DOUBLE }, 408 { "Number", base::Value::Type::DOUBLE },
409 { "Object", base::Value::TYPE_DICTIONARY }, 409 { "Object", base::Value::Type::DICTIONARY },
410 { "ObjectOfArray", base::Value::TYPE_DICTIONARY }, 410 { "ObjectOfArray", base::Value::Type::DICTIONARY },
411 { "ObjectOfObject", base::Value::TYPE_DICTIONARY }, 411 { "ObjectOfObject", base::Value::Type::DICTIONARY },
412 { "ObjectWithPatternProperties", base::Value::TYPE_DICTIONARY }, 412 { "ObjectWithPatternProperties", base::Value::Type::DICTIONARY },
413 { "String", base::Value::TYPE_STRING }, 413 { "String", base::Value::Type::STRING },
414 { "StringWithEnums", base::Value::TYPE_STRING }, 414 { "StringWithEnums", base::Value::Type::STRING },
415 { "StringWithPattern", base::Value::TYPE_STRING }, 415 { "StringWithPattern", base::Value::Type::STRING },
416 }; 416 };
417 Schema::Iterator it = schema.GetPropertiesIterator(); 417 Schema::Iterator it = schema.GetPropertiesIterator();
418 for (size_t i = 0; i < arraysize(kExpectedProperties); ++i) { 418 for (size_t i = 0; i < arraysize(kExpectedProperties); ++i) {
419 ASSERT_FALSE(it.IsAtEnd()); 419 ASSERT_FALSE(it.IsAtEnd());
420 EXPECT_STREQ(kExpectedProperties[i].expected_key, it.key()); 420 EXPECT_STREQ(kExpectedProperties[i].expected_key, it.key());
421 ASSERT_TRUE(it.schema().valid()); 421 ASSERT_TRUE(it.schema().valid());
422 EXPECT_EQ(kExpectedProperties[i].expected_type, it.schema().type()); 422 EXPECT_EQ(kExpectedProperties[i].expected_type, it.schema().type());
423 it.Advance(); 423 it.Advance();
424 } 424 }
425 EXPECT_TRUE(it.IsAtEnd()); 425 EXPECT_TRUE(it.IsAtEnd());
426 } 426 }
427 427
428 TEST(SchemaTest, Lookups) { 428 TEST(SchemaTest, Lookups) {
429 std::string error; 429 std::string error;
430 430
431 Schema schema = Schema::Parse("{ \"type\": \"object\" }", &error); 431 Schema schema = Schema::Parse("{ \"type\": \"object\" }", &error);
432 ASSERT_TRUE(schema.valid()) << error; 432 ASSERT_TRUE(schema.valid()) << error;
433 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 433 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
434 434
435 // This empty schema should never find named properties. 435 // This empty schema should never find named properties.
436 EXPECT_FALSE(schema.GetKnownProperty("").valid()); 436 EXPECT_FALSE(schema.GetKnownProperty("").valid());
437 EXPECT_FALSE(schema.GetKnownProperty("xyz").valid()); 437 EXPECT_FALSE(schema.GetKnownProperty("xyz").valid());
438 EXPECT_TRUE(schema.GetPropertiesIterator().IsAtEnd()); 438 EXPECT_TRUE(schema.GetPropertiesIterator().IsAtEnd());
439 439
440 schema = Schema::Parse( 440 schema = Schema::Parse(
441 "{" 441 "{"
442 " \"type\": \"object\"," 442 " \"type\": \"object\","
443 " \"properties\": {" 443 " \"properties\": {"
444 " \"Boolean\": { \"type\": \"boolean\" }" 444 " \"Boolean\": { \"type\": \"boolean\" }"
445 " }" 445 " }"
446 "}", &error); 446 "}", &error);
447 ASSERT_TRUE(schema.valid()) << error; 447 ASSERT_TRUE(schema.valid()) << error;
448 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 448 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
449 449
450 EXPECT_FALSE(schema.GetKnownProperty("").valid()); 450 EXPECT_FALSE(schema.GetKnownProperty("").valid());
451 EXPECT_FALSE(schema.GetKnownProperty("xyz").valid()); 451 EXPECT_FALSE(schema.GetKnownProperty("xyz").valid());
452 EXPECT_TRUE(schema.GetKnownProperty("Boolean").valid()); 452 EXPECT_TRUE(schema.GetKnownProperty("Boolean").valid());
453 453
454 schema = Schema::Parse( 454 schema = Schema::Parse(
455 "{" 455 "{"
456 " \"type\": \"object\"," 456 " \"type\": \"object\","
457 " \"properties\": {" 457 " \"properties\": {"
458 " \"bb\" : { \"type\": \"null\" }," 458 " \"bb\" : { \"type\": \"null\" },"
459 " \"aa\" : { \"type\": \"boolean\" }," 459 " \"aa\" : { \"type\": \"boolean\" },"
460 " \"abab\" : { \"type\": \"string\" }," 460 " \"abab\" : { \"type\": \"string\" },"
461 " \"ab\" : { \"type\": \"number\" }," 461 " \"ab\" : { \"type\": \"number\" },"
462 " \"aba\" : { \"type\": \"integer\" }" 462 " \"aba\" : { \"type\": \"integer\" }"
463 " }" 463 " }"
464 "}", &error); 464 "}", &error);
465 ASSERT_TRUE(schema.valid()) << error; 465 ASSERT_TRUE(schema.valid()) << error;
466 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 466 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
467 467
468 EXPECT_FALSE(schema.GetKnownProperty("").valid()); 468 EXPECT_FALSE(schema.GetKnownProperty("").valid());
469 EXPECT_FALSE(schema.GetKnownProperty("xyz").valid()); 469 EXPECT_FALSE(schema.GetKnownProperty("xyz").valid());
470 470
471 struct { 471 struct {
472 const char* expected_key; 472 const char* expected_key;
473 base::Value::Type expected_type; 473 base::Value::Type expected_type;
474 } kExpectedKeys[] = { 474 } kExpectedKeys[] = {
475 { "aa", base::Value::TYPE_BOOLEAN }, 475 { "aa", base::Value::Type::BOOLEAN },
476 { "ab", base::Value::TYPE_DOUBLE }, 476 { "ab", base::Value::Type::DOUBLE },
477 { "aba", base::Value::TYPE_INTEGER }, 477 { "aba", base::Value::Type::INTEGER },
478 { "abab", base::Value::TYPE_STRING }, 478 { "abab", base::Value::Type::STRING },
479 { "bb", base::Value::TYPE_NULL }, 479 { "bb", base::Value::Type::NONE },
480 }; 480 };
481 for (size_t i = 0; i < arraysize(kExpectedKeys); ++i) { 481 for (size_t i = 0; i < arraysize(kExpectedKeys); ++i) {
482 Schema sub = schema.GetKnownProperty(kExpectedKeys[i].expected_key); 482 Schema sub = schema.GetKnownProperty(kExpectedKeys[i].expected_key);
483 ASSERT_TRUE(sub.valid()); 483 ASSERT_TRUE(sub.valid());
484 EXPECT_EQ(kExpectedKeys[i].expected_type, sub.type()); 484 EXPECT_EQ(kExpectedKeys[i].expected_type, sub.type());
485 } 485 }
486 } 486 }
487 487
488 TEST(SchemaTest, Wrap) { 488 TEST(SchemaTest, Wrap) {
489 const internal::SchemaNode kSchemas[] = { 489 const internal::SchemaNode kSchemas[] = {
490 { base::Value::TYPE_DICTIONARY, 0 }, // 0: root node 490 { base::Value::Type::DICTIONARY, 0 }, // 0: root node
491 { base::Value::TYPE_BOOLEAN, -1 }, // 1 491 { base::Value::Type::BOOLEAN, -1 }, // 1
492 { base::Value::TYPE_INTEGER, -1 }, // 2 492 { base::Value::Type::INTEGER, -1 }, // 2
493 { base::Value::TYPE_DOUBLE, -1 }, // 3 493 { base::Value::Type::DOUBLE, -1 }, // 3
494 { base::Value::TYPE_STRING, -1 }, // 4 494 { base::Value::Type::STRING, -1 }, // 4
495 { base::Value::TYPE_LIST, 4 }, // 5: list of strings. 495 { base::Value::Type::LIST, 4 }, // 5: list of strings.
496 { base::Value::TYPE_LIST, 5 }, // 6: list of lists of strings. 496 { base::Value::Type::LIST, 5 }, // 6: list of lists of strings.
497 { base::Value::TYPE_INTEGER, 0 }, // 7: integer enumerations. 497 { base::Value::Type::INTEGER, 0 }, // 7: integer enumerations.
498 { base::Value::TYPE_INTEGER, 1 }, // 8: ranged integers. 498 { base::Value::Type::INTEGER, 1 }, // 8: ranged integers.
499 { base::Value::TYPE_STRING, 2 }, // 9: string enumerations. 499 { base::Value::Type::STRING, 2 }, // 9: string enumerations.
500 { base::Value::TYPE_STRING, 3 }, // 10: string with pattern. 500 { base::Value::Type::STRING, 3 }, // 10: string with pattern.
501 }; 501 };
502 502
503 const internal::PropertyNode kPropertyNodes[] = { 503 const internal::PropertyNode kPropertyNodes[] = {
504 { "Boolean", 1 }, // 0 504 { "Boolean", 1 }, // 0
505 { "Integer", 2 }, // 1 505 { "Integer", 2 }, // 1
506 { "Number", 3 }, // 2 506 { "Number", 3 }, // 2
507 { "String", 4 }, // 3 507 { "String", 4 }, // 3
508 { "List", 5 }, // 4 508 { "List", 5 }, // 4
509 { "IntEnum", 7 }, // 5 509 { "IntEnum", 7 }, // 5
510 { "RangedInt", 8 }, // 6 510 { "RangedInt", 8 }, // 6
(...skipping 28 matching lines...) Expand all
539 kSchemas, 539 kSchemas,
540 kPropertyNodes, 540 kPropertyNodes,
541 kProperties, 541 kProperties,
542 kRestriction, 542 kRestriction,
543 kIntEnums, 543 kIntEnums,
544 kStringEnums, 544 kStringEnums,
545 }; 545 };
546 546
547 Schema schema = Schema::Wrap(&kData); 547 Schema schema = Schema::Wrap(&kData);
548 ASSERT_TRUE(schema.valid()); 548 ASSERT_TRUE(schema.valid());
549 EXPECT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 549 EXPECT_EQ(base::Value::Type::DICTIONARY, schema.type());
550 550
551 struct { 551 struct {
552 const char* key; 552 const char* key;
553 base::Value::Type type; 553 base::Value::Type type;
554 } kExpectedProperties[] = { 554 } kExpectedProperties[] = {
555 { "Boolean", base::Value::TYPE_BOOLEAN }, 555 { "Boolean", base::Value::Type::BOOLEAN },
556 { "Integer", base::Value::TYPE_INTEGER }, 556 { "Integer", base::Value::Type::INTEGER },
557 { "Number", base::Value::TYPE_DOUBLE }, 557 { "Number", base::Value::Type::DOUBLE },
558 { "String", base::Value::TYPE_STRING }, 558 { "String", base::Value::Type::STRING },
559 { "List", base::Value::TYPE_LIST }, 559 { "List", base::Value::Type::LIST },
560 { "IntEnum", base::Value::TYPE_INTEGER }, 560 { "IntEnum", base::Value::Type::INTEGER },
561 { "RangedInt", base::Value::TYPE_INTEGER }, 561 { "RangedInt", base::Value::Type::INTEGER },
562 { "StrEnum", base::Value::TYPE_STRING }, 562 { "StrEnum", base::Value::Type::STRING },
563 { "StrPat", base::Value::TYPE_STRING }, 563 { "StrPat", base::Value::Type::STRING },
564 }; 564 };
565 565
566 Schema::Iterator it = schema.GetPropertiesIterator(); 566 Schema::Iterator it = schema.GetPropertiesIterator();
567 for (size_t i = 0; i < arraysize(kExpectedProperties); ++i) { 567 for (size_t i = 0; i < arraysize(kExpectedProperties); ++i) {
568 ASSERT_FALSE(it.IsAtEnd()); 568 ASSERT_FALSE(it.IsAtEnd());
569 EXPECT_STREQ(kExpectedProperties[i].key, it.key()); 569 EXPECT_STREQ(kExpectedProperties[i].key, it.key());
570 Schema sub = it.schema(); 570 Schema sub = it.schema();
571 ASSERT_TRUE(sub.valid()); 571 ASSERT_TRUE(sub.valid());
572 EXPECT_EQ(kExpectedProperties[i].type, sub.type()); 572 EXPECT_EQ(kExpectedProperties[i].type, sub.type());
573 573
574 if (sub.type() == base::Value::TYPE_LIST) { 574 if (sub.type() == base::Value::Type::LIST) {
575 Schema items = sub.GetItems(); 575 Schema items = sub.GetItems();
576 ASSERT_TRUE(items.valid()); 576 ASSERT_TRUE(items.valid());
577 EXPECT_EQ(base::Value::TYPE_STRING, items.type()); 577 EXPECT_EQ(base::Value::Type::STRING, items.type());
578 } 578 }
579 579
580 it.Advance(); 580 it.Advance();
581 } 581 }
582 EXPECT_TRUE(it.IsAtEnd()); 582 EXPECT_TRUE(it.IsAtEnd());
583 583
584 Schema sub = schema.GetAdditionalProperties(); 584 Schema sub = schema.GetAdditionalProperties();
585 ASSERT_TRUE(sub.valid()); 585 ASSERT_TRUE(sub.valid());
586 ASSERT_EQ(base::Value::TYPE_LIST, sub.type()); 586 ASSERT_EQ(base::Value::Type::LIST, sub.type());
587 Schema subsub = sub.GetItems(); 587 Schema subsub = sub.GetItems();
588 ASSERT_TRUE(subsub.valid()); 588 ASSERT_TRUE(subsub.valid());
589 ASSERT_EQ(base::Value::TYPE_LIST, subsub.type()); 589 ASSERT_EQ(base::Value::Type::LIST, subsub.type());
590 Schema subsubsub = subsub.GetItems(); 590 Schema subsubsub = subsub.GetItems();
591 ASSERT_TRUE(subsubsub.valid()); 591 ASSERT_TRUE(subsubsub.valid());
592 ASSERT_EQ(base::Value::TYPE_STRING, subsubsub.type()); 592 ASSERT_EQ(base::Value::Type::STRING, subsubsub.type());
593 593
594 SchemaList schema_list = schema.GetPatternProperties("barr"); 594 SchemaList schema_list = schema.GetPatternProperties("barr");
595 ASSERT_EQ(1u, schema_list.size()); 595 ASSERT_EQ(1u, schema_list.size());
596 sub = schema_list[0]; 596 sub = schema_list[0];
597 ASSERT_TRUE(sub.valid()); 597 ASSERT_TRUE(sub.valid());
598 EXPECT_EQ(base::Value::TYPE_STRING, sub.type()); 598 EXPECT_EQ(base::Value::Type::STRING, sub.type());
599 599
600 EXPECT_TRUE(schema.GetPatternProperties("ba").empty()); 600 EXPECT_TRUE(schema.GetPatternProperties("ba").empty());
601 EXPECT_TRUE(schema.GetPatternProperties("bar+$").empty()); 601 EXPECT_TRUE(schema.GetPatternProperties("bar+$").empty());
602 } 602 }
603 603
604 TEST(SchemaTest, Validate) { 604 TEST(SchemaTest, Validate) {
605 std::string error; 605 std::string error;
606 Schema schema = Schema::Parse(kTestSchema, &error); 606 Schema schema = Schema::Parse(kTestSchema, &error);
607 ASSERT_TRUE(schema.valid()) << error; 607 ASSERT_TRUE(schema.valid()) << error;
608 608
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 " \"properties\": {" 994 " \"properties\": {"
995 " \"name\": { \"type\": \"string\" }," 995 " \"name\": { \"type\": \"string\" },"
996 " \"url\": { \"type\": \"string\" }," 996 " \"url\": { \"type\": \"string\" },"
997 " \"children\": { \"$ref\": \"ListOfBookmarks\" }" 997 " \"children\": { \"$ref\": \"ListOfBookmarks\" }"
998 " }" 998 " }"
999 " }" 999 " }"
1000 " }" 1000 " }"
1001 " }" 1001 " }"
1002 "}", &error); 1002 "}", &error);
1003 ASSERT_TRUE(schema.valid()) << error; 1003 ASSERT_TRUE(schema.valid()) << error;
1004 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 1004 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
1005 1005
1006 Schema parent = schema.GetKnownProperty("bookmarks"); 1006 Schema parent = schema.GetKnownProperty("bookmarks");
1007 ASSERT_TRUE(parent.valid()); 1007 ASSERT_TRUE(parent.valid());
1008 ASSERT_EQ(base::Value::TYPE_LIST, parent.type()); 1008 ASSERT_EQ(base::Value::Type::LIST, parent.type());
1009 1009
1010 // Check the recursive type a number of times. 1010 // Check the recursive type a number of times.
1011 for (int i = 0; i < 10; ++i) { 1011 for (int i = 0; i < 10; ++i) {
1012 Schema items = parent.GetItems(); 1012 Schema items = parent.GetItems();
1013 ASSERT_TRUE(items.valid()); 1013 ASSERT_TRUE(items.valid());
1014 ASSERT_EQ(base::Value::TYPE_DICTIONARY, items.type()); 1014 ASSERT_EQ(base::Value::Type::DICTIONARY, items.type());
1015 1015
1016 Schema prop = items.GetKnownProperty("name"); 1016 Schema prop = items.GetKnownProperty("name");
1017 ASSERT_TRUE(prop.valid()); 1017 ASSERT_TRUE(prop.valid());
1018 ASSERT_EQ(base::Value::TYPE_STRING, prop.type()); 1018 ASSERT_EQ(base::Value::Type::STRING, prop.type());
1019 1019
1020 prop = items.GetKnownProperty("url"); 1020 prop = items.GetKnownProperty("url");
1021 ASSERT_TRUE(prop.valid()); 1021 ASSERT_TRUE(prop.valid());
1022 ASSERT_EQ(base::Value::TYPE_STRING, prop.type()); 1022 ASSERT_EQ(base::Value::Type::STRING, prop.type());
1023 1023
1024 prop = items.GetKnownProperty("children"); 1024 prop = items.GetKnownProperty("children");
1025 ASSERT_TRUE(prop.valid()); 1025 ASSERT_TRUE(prop.valid());
1026 ASSERT_EQ(base::Value::TYPE_LIST, prop.type()); 1026 ASSERT_EQ(base::Value::Type::LIST, prop.type());
1027 1027
1028 parent = prop; 1028 parent = prop;
1029 } 1029 }
1030 } 1030 }
1031 1031
1032 TEST(SchemaTest, UnorderedReferences) { 1032 TEST(SchemaTest, UnorderedReferences) {
1033 // Verifies that references and IDs can come in any order. 1033 // Verifies that references and IDs can come in any order.
1034 std::string error; 1034 std::string error;
1035 Schema schema = Schema::Parse( 1035 Schema schema = Schema::Parse(
1036 "{" 1036 "{"
1037 " \"type\": \"object\"," 1037 " \"type\": \"object\","
1038 " \"properties\": {" 1038 " \"properties\": {"
1039 " \"a\": { \"$ref\": \"shared\" }," 1039 " \"a\": { \"$ref\": \"shared\" },"
1040 " \"b\": { \"$ref\": \"shared\" }," 1040 " \"b\": { \"$ref\": \"shared\" },"
1041 " \"c\": { \"$ref\": \"shared\" }," 1041 " \"c\": { \"$ref\": \"shared\" },"
1042 " \"d\": { \"$ref\": \"shared\" }," 1042 " \"d\": { \"$ref\": \"shared\" },"
1043 " \"e\": {" 1043 " \"e\": {"
1044 " \"type\": \"boolean\"," 1044 " \"type\": \"boolean\","
1045 " \"id\": \"shared\"" 1045 " \"id\": \"shared\""
1046 " }," 1046 " },"
1047 " \"f\": { \"$ref\": \"shared\" }," 1047 " \"f\": { \"$ref\": \"shared\" },"
1048 " \"g\": { \"$ref\": \"shared\" }," 1048 " \"g\": { \"$ref\": \"shared\" },"
1049 " \"h\": { \"$ref\": \"shared\" }," 1049 " \"h\": { \"$ref\": \"shared\" },"
1050 " \"i\": { \"$ref\": \"shared\" }" 1050 " \"i\": { \"$ref\": \"shared\" }"
1051 " }" 1051 " }"
1052 "}", &error); 1052 "}", &error);
1053 ASSERT_TRUE(schema.valid()) << error; 1053 ASSERT_TRUE(schema.valid()) << error;
1054 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 1054 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
1055 1055
1056 for (char c = 'a'; c <= 'i'; ++c) { 1056 for (char c = 'a'; c <= 'i'; ++c) {
1057 Schema sub = schema.GetKnownProperty(std::string(1, c)); 1057 Schema sub = schema.GetKnownProperty(std::string(1, c));
1058 ASSERT_TRUE(sub.valid()) << c; 1058 ASSERT_TRUE(sub.valid()) << c;
1059 ASSERT_EQ(base::Value::TYPE_BOOLEAN, sub.type()) << c; 1059 ASSERT_EQ(base::Value::Type::BOOLEAN, sub.type()) << c;
1060 } 1060 }
1061 } 1061 }
1062 1062
1063 TEST(SchemaTest, AdditionalPropertiesReference) { 1063 TEST(SchemaTest, AdditionalPropertiesReference) {
1064 // Verifies that "additionalProperties" can be a reference. 1064 // Verifies that "additionalProperties" can be a reference.
1065 std::string error; 1065 std::string error;
1066 Schema schema = Schema::Parse( 1066 Schema schema = Schema::Parse(
1067 "{" 1067 "{"
1068 " \"type\": \"object\"," 1068 " \"type\": \"object\","
1069 " \"properties\": {" 1069 " \"properties\": {"
1070 " \"policy\": {" 1070 " \"policy\": {"
1071 " \"type\": \"object\"," 1071 " \"type\": \"object\","
1072 " \"properties\": {" 1072 " \"properties\": {"
1073 " \"foo\": {" 1073 " \"foo\": {"
1074 " \"type\": \"boolean\"," 1074 " \"type\": \"boolean\","
1075 " \"id\": \"FooId\"" 1075 " \"id\": \"FooId\""
1076 " }" 1076 " }"
1077 " }," 1077 " },"
1078 " \"additionalProperties\": { \"$ref\": \"FooId\" }" 1078 " \"additionalProperties\": { \"$ref\": \"FooId\" }"
1079 " }" 1079 " }"
1080 " }" 1080 " }"
1081 "}", &error); 1081 "}", &error);
1082 ASSERT_TRUE(schema.valid()) << error; 1082 ASSERT_TRUE(schema.valid()) << error;
1083 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 1083 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
1084 1084
1085 Schema policy = schema.GetKnownProperty("policy"); 1085 Schema policy = schema.GetKnownProperty("policy");
1086 ASSERT_TRUE(policy.valid()); 1086 ASSERT_TRUE(policy.valid());
1087 ASSERT_EQ(base::Value::TYPE_DICTIONARY, policy.type()); 1087 ASSERT_EQ(base::Value::Type::DICTIONARY, policy.type());
1088 1088
1089 Schema foo = policy.GetKnownProperty("foo"); 1089 Schema foo = policy.GetKnownProperty("foo");
1090 ASSERT_TRUE(foo.valid()); 1090 ASSERT_TRUE(foo.valid());
1091 EXPECT_EQ(base::Value::TYPE_BOOLEAN, foo.type()); 1091 EXPECT_EQ(base::Value::Type::BOOLEAN, foo.type());
1092 1092
1093 Schema additional = policy.GetAdditionalProperties(); 1093 Schema additional = policy.GetAdditionalProperties();
1094 ASSERT_TRUE(additional.valid()); 1094 ASSERT_TRUE(additional.valid());
1095 EXPECT_EQ(base::Value::TYPE_BOOLEAN, additional.type()); 1095 EXPECT_EQ(base::Value::Type::BOOLEAN, additional.type());
1096 1096
1097 Schema x = policy.GetProperty("x"); 1097 Schema x = policy.GetProperty("x");
1098 ASSERT_TRUE(x.valid()); 1098 ASSERT_TRUE(x.valid());
1099 EXPECT_EQ(base::Value::TYPE_BOOLEAN, x.type()); 1099 EXPECT_EQ(base::Value::Type::BOOLEAN, x.type());
1100 } 1100 }
1101 1101
1102 TEST(SchemaTest, ItemsReference) { 1102 TEST(SchemaTest, ItemsReference) {
1103 // Verifies that "items" can be a reference. 1103 // Verifies that "items" can be a reference.
1104 std::string error; 1104 std::string error;
1105 Schema schema = Schema::Parse( 1105 Schema schema = Schema::Parse(
1106 "{" 1106 "{"
1107 " \"type\": \"object\"," 1107 " \"type\": \"object\","
1108 " \"properties\": {" 1108 " \"properties\": {"
1109 " \"foo\": {" 1109 " \"foo\": {"
1110 " \"type\": \"boolean\"," 1110 " \"type\": \"boolean\","
1111 " \"id\": \"FooId\"" 1111 " \"id\": \"FooId\""
1112 " }," 1112 " },"
1113 " \"list\": {" 1113 " \"list\": {"
1114 " \"type\": \"array\"," 1114 " \"type\": \"array\","
1115 " \"items\": { \"$ref\": \"FooId\" }" 1115 " \"items\": { \"$ref\": \"FooId\" }"
1116 " }" 1116 " }"
1117 " }" 1117 " }"
1118 "}", &error); 1118 "}", &error);
1119 ASSERT_TRUE(schema.valid()) << error; 1119 ASSERT_TRUE(schema.valid()) << error;
1120 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema.type()); 1120 ASSERT_EQ(base::Value::Type::DICTIONARY, schema.type());
1121 1121
1122 Schema foo = schema.GetKnownProperty("foo"); 1122 Schema foo = schema.GetKnownProperty("foo");
1123 ASSERT_TRUE(foo.valid()); 1123 ASSERT_TRUE(foo.valid());
1124 EXPECT_EQ(base::Value::TYPE_BOOLEAN, foo.type()); 1124 EXPECT_EQ(base::Value::Type::BOOLEAN, foo.type());
1125 1125
1126 Schema list = schema.GetKnownProperty("list"); 1126 Schema list = schema.GetKnownProperty("list");
1127 ASSERT_TRUE(list.valid()); 1127 ASSERT_TRUE(list.valid());
1128 ASSERT_EQ(base::Value::TYPE_LIST, list.type()); 1128 ASSERT_EQ(base::Value::Type::LIST, list.type());
1129 1129
1130 Schema items = list.GetItems(); 1130 Schema items = list.GetItems();
1131 ASSERT_TRUE(items.valid()); 1131 ASSERT_TRUE(items.valid());
1132 ASSERT_EQ(base::Value::TYPE_BOOLEAN, items.type()); 1132 ASSERT_EQ(base::Value::Type::BOOLEAN, items.type());
1133 } 1133 }
1134 1134
1135 TEST(SchemaTest, EnumerationRestriction) { 1135 TEST(SchemaTest, EnumerationRestriction) {
1136 // Enum attribute is a list. 1136 // Enum attribute is a list.
1137 EXPECT_TRUE(ParseFails(SchemaObjectWrapper( 1137 EXPECT_TRUE(ParseFails(SchemaObjectWrapper(
1138 "{" 1138 "{"
1139 " \"type\": \"string\"," 1139 " \"type\": \"string\","
1140 " \"enum\": 12" 1140 " \"enum\": 12"
1141 "}"))); 1141 "}")));
1142 1142
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 1177
1178 EXPECT_FALSE(ParseFails(SchemaObjectWrapper( 1178 EXPECT_FALSE(ParseFails(SchemaObjectWrapper(
1179 "{" 1179 "{"
1180 " \"type\": \"integer\"," 1180 " \"type\": \"integer\","
1181 " \"minimum\": 10," 1181 " \"minimum\": 10,"
1182 " \"maximum\": 20" 1182 " \"maximum\": 20"
1183 "}"))); 1183 "}")));
1184 } 1184 }
1185 1185
1186 } // namespace policy 1186 } // namespace policy
OLDNEW
« no previous file with comments | « components/policy/core/common/schema_internal.h ('k') | components/policy/tools/generate_policy_source.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698