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

Side by Side Diff: base/values_unittest.cc

Issue 6074003: Handle policy refresh internally in ConfigurationPolicyPrefStore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nit Created 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <limits> 5 #include <limits>
6 6
7 #include "base/scoped_ptr.h" 7 #include "base/scoped_ptr.h"
8 #include "base/string16.h" 8 #include "base/string16.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 class ValuesTest: public testing::Test { 13 class ValuesTest : public testing::Test {
14 protected:
15 void CompareDictionariesAndCheckResult(
16 const DictionaryValue* dict1,
17 const DictionaryValue* dict2,
18 const char* expected_paths[],
19 size_t expected_paths_count) {
20 std::vector<std::string> differing_paths;
21 std::vector<std::string> expected_paths_vector(expected_paths,
22 expected_paths+expected_paths_count);
23 // All comparisons should be commutative, check dict1 against dict2
24 // and vice-versa.
25 dict1->GetDifferingPaths(dict2, &differing_paths);
26 ASSERT_EQ(expected_paths_count, differing_paths.size());
27 EXPECT_TRUE(equal(differing_paths.begin(), differing_paths.end(),
28 expected_paths_vector.begin()));
29 dict2->GetDifferingPaths(dict1, &differing_paths);
30 ASSERT_EQ(expected_paths_count, differing_paths.size());
31 EXPECT_TRUE(equal(differing_paths.begin(), differing_paths.end(),
32 expected_paths_vector.begin()));
33 }
34 }; 14 };
35 15
36 TEST_F(ValuesTest, Basic) { 16 TEST_F(ValuesTest, Basic) {
37 // Test basic dictionary getting/setting 17 // Test basic dictionary getting/setting
38 DictionaryValue settings; 18 DictionaryValue settings;
39 std::string homepage = "http://google.com"; 19 std::string homepage = "http://google.com";
40 ASSERT_FALSE(settings.GetString("global.homepage", &homepage)); 20 ASSERT_FALSE(settings.GetString("global.homepage", &homepage));
41 ASSERT_EQ(std::string("http://google.com"), homepage); 21 ASSERT_EQ(std::string("http://google.com"), homepage);
42 22
43 ASSERT_FALSE(settings.Get("global", NULL)); 23 ASSERT_FALSE(settings.Get("global", NULL));
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 EXPECT_TRUE(res_sub_dict->GetString("sub_base_key", &sub_base_key_value)); 623 EXPECT_TRUE(res_sub_dict->GetString("sub_base_key", &sub_base_key_value));
644 EXPECT_EQ("sub_base_key_value_base", sub_base_key_value); // Preserved. 624 EXPECT_EQ("sub_base_key_value_base", sub_base_key_value); // Preserved.
645 std::string sub_collide_key_value; 625 std::string sub_collide_key_value;
646 EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key", 626 EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key",
647 &sub_collide_key_value)); 627 &sub_collide_key_value));
648 EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced. 628 EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced.
649 std::string sub_merge_key_value; 629 std::string sub_merge_key_value;
650 EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value)); 630 EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value));
651 EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in. 631 EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in.
652 } 632 }
653
654 TEST_F(ValuesTest, GetDifferingPaths) {
655 scoped_ptr<DictionaryValue> dict1(new DictionaryValue());
656 scoped_ptr<DictionaryValue> dict2(new DictionaryValue());
657 std::vector<std::string> differing_paths;
658
659 // Test comparing empty dictionaries.
660 dict1->GetDifferingPaths(dict2.get(), &differing_paths);
661 EXPECT_EQ(differing_paths.size(), 0UL);
662
663 // Compare an empty dictionary with various non-empty dictionaries.
664 static const char* expected_paths1[] = {
665 "segment1"
666 };
667 dict1->SetString("segment1", "value1");
668 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths1,
669 arraysize(expected_paths1));
670
671 static const char* expected_paths2[] = {
672 "segment1",
673 "segment2",
674 "segment2.segment3"
675 };
676 dict1->SetString("segment2.segment3", "value2");
677 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths2,
678 arraysize(expected_paths2));
679
680 static const char* expected_paths3[] = {
681 "segment1",
682 "segment2",
683 "segment2.segment3",
684 "segment4",
685 "segment4.segment5"
686 };
687 dict1->SetString("segment4.segment5", "value3");
688 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths3,
689 arraysize(expected_paths3));
690
691 // Now various tests with two populated dictionaries.
692 static const char* expected_paths4[] = {
693 "segment1",
694 "segment2",
695 "segment2.segment3",
696 "segment4",
697 "segment4.segment5"
698 };
699 dict2->Set("segment2", new DictionaryValue());
700 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths4,
701 arraysize(expected_paths4));
702
703 static const char* expected_paths5[] = {
704 "segment1",
705 "segment4",
706 "segment4.segment5"
707 };
708 dict2->SetString("segment2.segment3", "value2");
709 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths5,
710 arraysize(expected_paths5));
711
712 dict2->SetBoolean("segment2.segment3", true);
713 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths4,
714 arraysize(expected_paths4));
715
716 // Test two identical dictionaries.
717 dict2.reset(static_cast<DictionaryValue*>(dict1->DeepCopy()));
718 dict2->GetDifferingPaths(dict1.get(), &differing_paths);
719 EXPECT_EQ(differing_paths.size(), 0UL);
720
721 // Test a deep dictionary structure.
722 static const char* expected_paths6[] = {
723 "s1",
724 "s1.s2",
725 "s1.s2.s3",
726 "s1.s2.s3.s4",
727 "s1.s2.s3.s4.s5"
728 };
729 dict1.reset(new DictionaryValue());
730 dict2.reset(new DictionaryValue());
731 dict1->Set("s1.s2.s3.s4.s5", new DictionaryValue());
732 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths6,
733 arraysize(expected_paths6));
734
735 // Make sure disjoint dictionaries generate the right differing path list.
736 static const char* expected_paths7[] = {
737 "a",
738 "b",
739 "c",
740 "d"
741 };
742 dict1.reset(new DictionaryValue());
743 dict1->SetBoolean("a", true);
744 dict1->SetBoolean("c", true);
745 dict2.reset(new DictionaryValue());
746 dict1->SetBoolean("b", true);
747 dict1->SetBoolean("d", true);
748 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths7,
749 arraysize(expected_paths7));
750
751 // For code coverage completeness. Make sure that all branches
752 // that were not covered are executed.
753 static const char* expected_paths8[] = {
754 "s1",
755 "s1.s2"
756 };
757 dict1.reset(new DictionaryValue());
758 dict1->Set("s1.s2", new DictionaryValue());
759 dict2.reset(new DictionaryValue());
760 dict2->SetInteger("s1", 1);
761 CompareDictionariesAndCheckResult(dict1.get(), dict2.get(), expected_paths8,
762 arraysize(expected_paths8));
763 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698