15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string>
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/settings/cros_settings_names.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace chromeos {
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace {
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void Fail() {
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Should never be called.
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FAIL();
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class StubCrosSettingsProviderTest : public testing::Test {
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected:
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  StubCrosSettingsProviderTest()
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      : provider_(new StubCrosSettingsProvider(
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          base::Bind(&StubCrosSettingsProviderTest::FireObservers,
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     base::Unretained(this)))) {
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~StubCrosSettingsProviderTest() {
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Reset the observer notification count.
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    observer_count_.clear();
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void AssertPref(const std::string& prefName, const base::Value* value) {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const base::Value* pref = provider_->Get(prefName);
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ASSERT_TRUE(pref);
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ASSERT_TRUE(pref->Equals(value));
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void ExpectObservers(const std::string& prefName, int count) {
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    EXPECT_EQ(observer_count_[prefName], count);
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void FireObservers(const std::string& path) {
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    observer_count_[path]++;
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<StubCrosSettingsProvider> provider_;
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::map<std::string, int> observer_count_;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(StubCrosSettingsProviderTest, HandlesSettings) {
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // HandlesSettings should return false for unknown settings.
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(provider_->HandlesSetting(kDeviceOwner));
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_FALSE(provider_->HandlesSetting("no.such.setting"));
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(StubCrosSettingsProviderTest, Defaults) {
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Verify default values.
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const base::FundamentalValue kTrueValue(true);
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AssertPref(kAccountsPrefAllowGuest, &kTrueValue);
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AssertPref(kAccountsPrefAllowNewUser, &kTrueValue);
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AssertPref(kAccountsPrefShowUserNamesOnSignIn, &kTrueValue);
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AssertPref(kAccountsPrefSupervisedUsersEnabled, &kTrueValue);
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(StubCrosSettingsProviderTest, Set) {
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setting value and reading it afterwards returns the same value.
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::StringValue owner_value("me@owner");
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  provider_->Set(kDeviceOwner, owner_value);
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AssertPref(kDeviceOwner, &owner_value);
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ExpectObservers(kDeviceOwner, 1);
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(StubCrosSettingsProviderTest, SetMissing) {
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Setting is missing initially but is added by |Set|.
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::StringValue pref_value("testing");
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_FALSE(provider_->Get(kReleaseChannel));
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  provider_->Set(kReleaseChannel, pref_value);
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AssertPref(kReleaseChannel, &pref_value);
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ExpectObservers(kReleaseChannel, 1);
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
92TEST_F(StubCrosSettingsProviderTest, PrepareTrustedValues) {
93  // Should return immediately without invoking the callback.
94  CrosSettingsProvider::TrustedStatus trusted =
95      provider_->PrepareTrustedValues(base::Bind(&Fail));
96  EXPECT_EQ(CrosSettingsProvider::TRUSTED, trusted);
97}
98
99}  // namespace chromeos
100