kiosk_mode_settings_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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
3// found in the LICENSE file.
4
5#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h"
6
7#include "base/bind.h"
8#include "base/message_loop.h"
9#include "base/values.h"
10#include "chrome/browser/chromeos/settings/cros_settings.h"
11#include "chrome/browser/chromeos/settings/cros_settings_names.h"
12#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
13#include "content/public/test/test_browser_thread.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace {
17
18const int kFudgeInt = 100;
19
20}
21
22namespace chromeos {
23
24class KioskModeSettingsTest : public testing::Test {
25 protected:
26  KioskModeSettingsTest()
27      : message_loop_(MessageLoop::TYPE_UI),
28        ui_thread_(content::BrowserThread::UI, &message_loop_),
29        file_thread_(content::BrowserThread::FILE, &message_loop_) {
30    CrosSettings* cros_settings = CrosSettings::Get();
31
32    // Remove the real DeviceSettingsProvider and replace it with a stub.
33    device_settings_provider_ =
34        cros_settings->GetProvider(chromeos::kReportDeviceVersionInfo);
35    EXPECT_TRUE(device_settings_provider_ != NULL);
36    EXPECT_TRUE(
37        cros_settings->RemoveSettingsProvider(device_settings_provider_));
38    cros_settings->AddSettingsProvider(&stub_settings_provider_);
39  }
40
41  ~KioskModeSettingsTest() {
42    // Restore the real DeviceSettingsProvider.
43    CrosSettings* cros_settings = CrosSettings::Get();
44    EXPECT_TRUE(
45      cros_settings->RemoveSettingsProvider(&stub_settings_provider_));
46    cros_settings->AddSettingsProvider(device_settings_provider_);
47  }
48
49  virtual void SetUp() OVERRIDE {
50    if (!KioskModeSettings::Get()->is_initialized()) {
51      KioskModeSettings::Get()->Initialize(
52          base::Bind(&KioskModeSettingsTest::SetUp,
53                     base::Unretained(this)));
54      return;
55    }
56  }
57
58  virtual void TearDown() OVERRIDE {
59    KioskModeSettings::Get()->set_initialized(false);
60  }
61
62  void ReInitialize() {
63    KioskModeSettings::Get()->set_initialized(false);
64    KioskModeSettings::Get()->Initialize(
65        base::Bind(&KioskModeSettingsTest::DoNothing,
66                   base::Unretained(this)));
67  }
68
69  void DisableKioskModeSettings() {
70    KioskModeSettings::Get()->set_initialized(false);
71  }
72
73  void DoNothing() {
74  }
75
76  MessageLoop message_loop_;
77  content::TestBrowserThread ui_thread_;
78  content::TestBrowserThread file_thread_;
79
80  CrosSettingsProvider* device_settings_provider_;
81  StubCrosSettingsProvider stub_settings_provider_;
82};
83
84TEST_F(KioskModeSettingsTest, DisabledByDefault) {
85  EXPECT_FALSE(KioskModeSettings::Get()->IsKioskModeEnabled());
86}
87
88TEST_F(KioskModeSettingsTest, InstanceAvailable) {
89  EXPECT_TRUE(KioskModeSettings::Get() != NULL);
90  EXPECT_TRUE(KioskModeSettings::Get()->is_initialized());
91}
92
93TEST_F(KioskModeSettingsTest, CheckLogoutTimeoutBounds) {
94  chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
95
96  // Check if we go over max.
97  cros_settings->SetInteger(
98      kIdleLogoutTimeout,
99      KioskModeSettings::kMaxIdleLogoutTimeout + kFudgeInt);
100  ReInitialize();
101  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
102            base::TimeDelta::FromMilliseconds(
103                KioskModeSettings::kMaxIdleLogoutTimeout));
104
105  // Check if we go under min.
106  cros_settings->SetInteger(
107      kIdleLogoutTimeout,
108      KioskModeSettings::kMinIdleLogoutTimeout - kFudgeInt);
109  ReInitialize();
110  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
111            base::TimeDelta::FromMilliseconds(
112                KioskModeSettings::kMinIdleLogoutTimeout));
113
114  // Check if we are between max and min.
115  cros_settings->SetInteger(
116      kIdleLogoutTimeout,
117      KioskModeSettings::kMaxIdleLogoutTimeout - kFudgeInt);
118  ReInitialize();
119  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
120            base::TimeDelta::FromMilliseconds(
121                KioskModeSettings::kMaxIdleLogoutTimeout - kFudgeInt));
122}
123
124TEST_F(KioskModeSettingsTest, CheckLogoutWarningDurationBounds) {
125  chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
126
127  // Check if we go over max.
128  cros_settings->SetInteger(
129      kIdleLogoutWarningDuration,
130      KioskModeSettings::kMaxIdleLogoutWarningDuration + kFudgeInt);
131  ReInitialize();
132  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
133            base::TimeDelta::FromMilliseconds(
134                KioskModeSettings::kMaxIdleLogoutWarningDuration));
135
136  // Check if we go under min.
137  cros_settings->SetInteger(
138      kIdleLogoutWarningDuration,
139      KioskModeSettings::kMinIdleLogoutWarningDuration - kFudgeInt);
140  ReInitialize();
141  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
142            base::TimeDelta::FromMilliseconds(
143                KioskModeSettings::kMinIdleLogoutWarningDuration));
144
145  // Check if we are between max and min.
146  cros_settings->SetInteger(
147      kIdleLogoutWarningDuration,
148      KioskModeSettings::kMaxIdleLogoutWarningDuration - kFudgeInt);
149  ReInitialize();
150  EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
151            base::TimeDelta::FromMilliseconds(
152                KioskModeSettings::kMaxIdleLogoutWarningDuration - kFudgeInt));
153}
154
155TEST_F(KioskModeSettingsTest, UnitializedValues) {
156  DisableKioskModeSettings();
157
158  // Time delta initializes to '0' microseconds.
159  EXPECT_LT(KioskModeSettings::Get()->GetScreensaverTimeout(),
160            base::TimeDelta());
161  EXPECT_LT(KioskModeSettings::Get()->GetIdleLogoutTimeout(),
162            base::TimeDelta());
163  EXPECT_LT(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(),
164            base::TimeDelta());
165}
166
167}  // namespace chromeos
168