| Index: chrome/browser/policy/policy_prefs_browsertest.cc
|
| diff --git a/chrome/browser/policy/policy_prefs_browsertest.cc b/chrome/browser/policy/policy_prefs_browsertest.cc
|
| index 1dd1dd06dfa6f3bda42a22748132ac6b7a3b3ba9..65dfcf1e44c22e47c3a2e3c994322d0d87eb4634 100644
|
| --- a/chrome/browser/policy/policy_prefs_browsertest.cc
|
| +++ b/chrome/browser/policy/policy_prefs_browsertest.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include <algorithm>
|
| +#include <iterator>
|
| #include <map>
|
| #include <sstream>
|
| #include <string>
|
| @@ -12,6 +13,7 @@
|
| #include "base/file_util.h"
|
| #include "base/files/file_path.h"
|
| #include "base/json/json_reader.h"
|
| +#include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/prefs/pref_service.h"
|
| @@ -30,6 +32,7 @@
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| +#include "components/policy/core/common/schema.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "policy/policy_constants.h"
|
| @@ -209,12 +212,16 @@ class PolicyTestCases {
|
| ADD_FAILURE() << "Error parsing policy_test_cases.json: " << error_string;
|
| return;
|
| }
|
| - const PolicyDefinitionList* list = GetChromePolicyDefinitionList();
|
| - for (const PolicyDefinitionList::Entry* policy = list->begin;
|
| - policy != list->end; ++policy) {
|
| - PolicyTestCase* policy_test_case = GetPolicyTestCase(dict, policy->name);
|
| + Schema chrome_schema = Schema::Wrap(GetChromeSchemaData());
|
| + if (!chrome_schema.valid()) {
|
| + ADD_FAILURE();
|
| + return;
|
| + }
|
| + for (Schema::Iterator it = chrome_schema.GetPropertiesIterator();
|
| + !it.IsAtEnd(); it.Advance()) {
|
| + PolicyTestCase* policy_test_case = GetPolicyTestCase(dict, it.key());
|
| if (policy_test_case)
|
| - (*policy_test_cases_)[policy->name] = policy_test_case;
|
| + (*policy_test_cases_)[it.key()] = policy_test_case;
|
| }
|
| }
|
|
|
| @@ -379,11 +386,90 @@ void VerifyControlledSettingIndicators(Browser* browser,
|
|
|
| } // namespace
|
|
|
| +// A forward iterator that iterates over the Chrome policy names, using the
|
| +// Chrome schema data.
|
| +class TestCaseIterator
|
| + : public std::iterator<std::forward_iterator_tag, const char*> {
|
| + public:
|
| + static TestCaseIterator GetBegin() {
|
| + Schema chrome_schema = Schema::Wrap(GetChromeSchemaData());
|
| + CHECK(chrome_schema.valid());
|
| + return TestCaseIterator(chrome_schema.GetPropertiesIterator());
|
| + }
|
| +
|
| + static TestCaseIterator GetEnd() {
|
| + return TestCaseIterator();
|
| + }
|
| +
|
| + TestCaseIterator() {}
|
| +
|
| + explicit TestCaseIterator(const Schema::Iterator& it)
|
| + : it_(it.IsAtEnd() ? NULL : new Schema::Iterator(it)) {}
|
| +
|
| + TestCaseIterator(const TestCaseIterator& other)
|
| + : it_(other.it_ ? new Schema::Iterator(*other.it_) : NULL) {}
|
| +
|
| + ~TestCaseIterator() {}
|
| +
|
| + TestCaseIterator& operator=(const TestCaseIterator& other) {
|
| + it_.reset(other.it_ ? new Schema::Iterator(*other.it_) : NULL);
|
| + return *this;
|
| + }
|
| +
|
| + bool Equals(const TestCaseIterator& other) const {
|
| + // Assume that both iterators are working with the same Schema; therefore
|
| + // the key()s returned are the same.
|
| + if (!it_ || !other.it_)
|
| + return !it_ && !other.it_;
|
| + return it_->key() == other.it_->key();
|
| + }
|
| +
|
| + bool operator==(const TestCaseIterator& other) const {
|
| + return Equals(other);
|
| + }
|
| +
|
| + bool operator !=(const TestCaseIterator& other) const {
|
| + return !Equals(other);
|
| + }
|
| +
|
| + const char* operator*() const {
|
| + if (!it_) {
|
| + NOTREACHED();
|
| + return NULL;
|
| + }
|
| + return it_->key();
|
| + }
|
| +
|
| + TestCaseIterator& Advance() {
|
| + if (it_) {
|
| + it_->Advance();
|
| + if (it_->IsAtEnd())
|
| + it_.reset();
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| + return *this;
|
| + }
|
| +
|
| + TestCaseIterator& operator++() {
|
| + return Advance();
|
| + }
|
| +
|
| + TestCaseIterator operator++(int) {
|
| + TestCaseIterator current = *this;
|
| + Advance();
|
| + return current;
|
| + }
|
| +
|
| + private:
|
| + scoped_ptr<Schema::Iterator> it_;
|
| +};
|
| +
|
| // Base class for tests that change policy and are parameterized with a policy
|
| // definition.
|
| class PolicyPrefsTest
|
| : public InProcessBrowserTest,
|
| - public testing::WithParamInterface<PolicyDefinitionList::Entry> {
|
| + public testing::WithParamInterface<const char*> {
|
| protected:
|
| virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
|
| EXPECT_CALL(provider_, IsInitializationComplete(_))
|
| @@ -411,20 +497,22 @@ TEST(PolicyPrefsTestCoverageTest, AllPoliciesHaveATestCase) {
|
| // This test fails when a policy is added to
|
| // chrome/app/policy/policy_templates.json but a test case is not added to
|
| // chrome/test/data/policy/policy_test_cases.json.
|
| + Schema chrome_schema = Schema::Wrap(GetChromeSchemaData());
|
| + ASSERT_TRUE(chrome_schema.valid());
|
| +
|
| PolicyTestCases policy_test_cases;
|
| - const PolicyDefinitionList* list = GetChromePolicyDefinitionList();
|
| - for (const PolicyDefinitionList::Entry* policy = list->begin;
|
| - policy != list->end; ++policy) {
|
| - EXPECT_TRUE(ContainsKey(policy_test_cases.map(), policy->name))
|
| - << "Missing policy test case for: " << policy->name;
|
| + for (Schema::Iterator it = chrome_schema.GetPropertiesIterator();
|
| + !it.IsAtEnd(); it.Advance()) {
|
| + EXPECT_TRUE(ContainsKey(policy_test_cases.map(), it.key()))
|
| + << "Missing policy test case for: " << it.key();
|
| }
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, PolicyToPrefsMapping) {
|
| // Verifies that policies make their corresponding preferences become managed,
|
| // and that the user can't override that setting.
|
| - const PolicyTestCase* test_case = policy_test_cases_.Get(GetParam().name);
|
| - ASSERT_TRUE(test_case) << "PolicyTestCase not found for " << GetParam().name;
|
| + const PolicyTestCase* test_case = policy_test_cases_.Get(GetParam());
|
| + ASSERT_TRUE(test_case) << "PolicyTestCase not found for " << GetParam();
|
| const ScopedVector<PrefMapping>& pref_mappings = test_case->pref_mappings();
|
| if (!test_case->IsSupported() || pref_mappings.empty())
|
| return;
|
| @@ -469,9 +557,9 @@ IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
|
| // Verifies that controlled setting indicators correctly show whether a pref's
|
| // value is recommended or enforced by a corresponding policy.
|
| const PolicyTestCase* policy_test_case =
|
| - policy_test_cases_.Get(GetParam().name);
|
| + policy_test_cases_.Get(GetParam());
|
| ASSERT_TRUE(policy_test_case) << "PolicyTestCase not found for "
|
| - << GetParam().name;
|
| + << GetParam();
|
| const ScopedVector<PrefMapping>& pref_mappings =
|
| policy_test_case->pref_mappings();
|
| if (!policy_test_case->IsSupported() || pref_mappings.empty())
|
| @@ -564,10 +652,9 @@ IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
|
| }
|
| }
|
|
|
| -INSTANTIATE_TEST_CASE_P(
|
| - PolicyPrefsTestInstance,
|
| - PolicyPrefsTest,
|
| - testing::ValuesIn(GetChromePolicyDefinitionList()->begin,
|
| - GetChromePolicyDefinitionList()->end));
|
| +INSTANTIATE_TEST_CASE_P(PolicyPrefsTestInstance,
|
| + PolicyPrefsTest,
|
| + testing::ValuesIn(TestCaseIterator::GetBegin(),
|
| + TestCaseIterator::GetEnd()));
|
|
|
| } // namespace policy
|
|
|