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

Side by Side Diff: chrome/browser/extensions/api/alarms/alarms_api_unittest.cc

Issue 10217018: Alarm resolution changed to minutes and minimum delay added. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Sinked. Created 8 years, 7 months 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 (c) 2012 The Chromium Authors. All rights reserved. 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 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 // This file tests the chrome.alarms extension API. 5 // This file tests the chrome.alarms extension API.
6 6
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "chrome/browser/browser_process_impl.h" 8 #include "chrome/browser/browser_process_impl.h"
9 #include "chrome/browser/extensions/api/alarms/alarm_manager.h" 9 #include "chrome/browser/extensions/api/alarms/alarm_manager.h"
10 #include "chrome/browser/extensions/api/alarms/alarms_api.h" 10 #include "chrome/browser/extensions/api/alarms/alarms_api.h"
(...skipping 29 matching lines...) Expand all
40 BrowserWithTestWindowTest::SetUp(); 40 BrowserWithTestWindowTest::SetUp();
41 41
42 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( 42 TestExtensionSystem* system = static_cast<TestExtensionSystem*>(
43 ExtensionSystem::Get(browser()->profile())); 43 ExtensionSystem::Get(browser()->profile()));
44 system->CreateAlarmManager(); 44 system->CreateAlarmManager();
45 alarm_manager_ = system->alarm_manager(); 45 alarm_manager_ = system->alarm_manager();
46 46
47 alarm_delegate_ = new AlarmDelegate(); 47 alarm_delegate_ = new AlarmDelegate();
48 alarm_manager_->set_delegate(alarm_delegate_); 48 alarm_manager_->set_delegate(alarm_delegate_);
49 49
50 extension_ = utils::CreateEmptyExtension(); 50 extension_ = utils::CreateEmptyExtensionWithLocation(Extension::LOAD);
51 } 51 }
52 52
53 base::Value* RunFunctionWithExtension( 53 base::Value* RunFunctionWithExtension(
54 UIThreadExtensionFunction* function, const std::string& args) { 54 UIThreadExtensionFunction* function, const std::string& args) {
55 function->set_extension(extension_.get()); 55 function->set_extension(extension_.get());
56 return utils::RunFunctionAndReturnResult(function, args, browser()); 56 return utils::RunFunctionAndReturnResult(function, args, browser());
57 } 57 }
58 58
59 base::DictionaryValue* RunFunctionAndReturnDict( 59 base::DictionaryValue* RunFunctionAndReturnDict(
60 UIThreadExtensionFunction* function, const std::string& args) { 60 UIThreadExtensionFunction* function, const std::string& args) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 list.push_back(alarm); 94 list.push_back(alarm);
95 } 95 }
96 return list; 96 return list;
97 } 97 }
98 98
99 // Creates up to 3 alarms using the extension API. 99 // Creates up to 3 alarms using the extension API.
100 void CreateAlarms(size_t num_alarms) { 100 void CreateAlarms(size_t num_alarms) {
101 CHECK(num_alarms <= 3); 101 CHECK(num_alarms <= 3);
102 102
103 const char* kCreateArgs[] = { 103 const char* kCreateArgs[] = {
104 "[null, {\"delayInSeconds\": 1, \"repeating\": true}]", 104 "[null, {\"delayInMinutes\": 0.001, \"repeating\": true}]",
105 "[\"7\", {\"delayInSeconds\": 7, \"repeating\": true}]", 105 "[\"7\", {\"delayInMinutes\": 7, \"repeating\": true}]",
106 "[\"0\", {\"delayInSeconds\": 0}]" 106 "[\"0\", {\"delayInMinutes\": 0}]"
107 }; 107 };
108 for (size_t i = 0; i < num_alarms; ++i) { 108 for (size_t i = 0; i < num_alarms; ++i) {
109 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict( 109 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
110 new AlarmsCreateFunction(), kCreateArgs[i])); 110 new AlarmsCreateFunction(), kCreateArgs[i]));
111 EXPECT_FALSE(result.get()); 111 EXPECT_FALSE(result.get());
112 } 112 }
113 } 113 }
114 114
115 protected: 115 protected:
116 AlarmManager* alarm_manager_; 116 AlarmManager* alarm_manager_;
117 AlarmDelegate* alarm_delegate_; 117 AlarmDelegate* alarm_delegate_;
118 scoped_refptr<Extension> extension_; 118 scoped_refptr<Extension> extension_;
119 }; 119 };
120 120
121 } // namespace 121 } // namespace
122 122
123 TEST_F(ExtensionAlarmsTest, Create) { 123 TEST_F(ExtensionAlarmsTest, Create) {
124 // Create 1 non-repeating alarm. 124 // Create 1 non-repeating alarm.
125 RunFunction(new AlarmsCreateFunction(), "[null, {\"delayInSeconds\": 0}]"); 125 RunFunction(new AlarmsCreateFunction(), "[null, {\"delayInMinutes\": 0}]");
126 126
127 const AlarmManager::Alarm* alarm = 127 const AlarmManager::Alarm* alarm =
128 alarm_manager_->GetAlarm(extension_->id(), ""); 128 alarm_manager_->GetAlarm(extension_->id(), "");
129 ASSERT_TRUE(alarm); 129 ASSERT_TRUE(alarm);
130 EXPECT_EQ("", alarm->name); 130 EXPECT_EQ("", alarm->name);
131 EXPECT_EQ(0, alarm->delay_in_seconds); 131 EXPECT_EQ(0, alarm->delay_in_minutes);
132 EXPECT_FALSE(alarm->repeating); 132 EXPECT_FALSE(alarm->repeating);
133 133
134 // Now wait for the alarm to fire. Our test delegate will quit the 134 // Now wait for the alarm to fire. Our test delegate will quit the
135 // MessageLoop when that happens. 135 // MessageLoop when that happens.
136 MessageLoop::current()->Run(); 136 MessageLoop::current()->Run();
137 137
138 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size()); 138 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size());
139 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]); 139 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
140 140
141 // Ensure the alarm is gone. 141 // Ensure the alarm is gone.
142 { 142 {
143 const AlarmManager::AlarmList* alarms = 143 const AlarmManager::AlarmList* alarms =
144 alarm_manager_->GetAllAlarms(extension_->id()); 144 alarm_manager_->GetAllAlarms(extension_->id());
145 ASSERT_FALSE(alarms); 145 ASSERT_FALSE(alarms);
146 } 146 }
147 } 147 }
148 148
149 TEST_F(ExtensionAlarmsTest, CreateRepeating) { 149 TEST_F(ExtensionAlarmsTest, CreateRepeating) {
150 // Create 1 repeating alarm. 150 // Create 1 repeating alarm.
151 // TODO(mpcmoplete): Use a shorter delay if we switch to allow fractions.
152 // A repeating timer with a 0-second delay fires infinitely.
153 RunFunction(new AlarmsCreateFunction(), 151 RunFunction(new AlarmsCreateFunction(),
154 "[null, {\"delayInSeconds\": 1, \"repeating\": true}]"); 152 "[null, {\"delayInMinutes\": 0.001, \"repeating\": true}]");
155 153
156 const AlarmManager::Alarm* alarm = 154 const AlarmManager::Alarm* alarm =
157 alarm_manager_->GetAlarm(extension_->id(), ""); 155 alarm_manager_->GetAlarm(extension_->id(), "");
158 ASSERT_TRUE(alarm); 156 ASSERT_TRUE(alarm);
159 EXPECT_EQ("", alarm->name); 157 EXPECT_EQ("", alarm->name);
160 EXPECT_EQ(1, alarm->delay_in_seconds); 158 EXPECT_EQ(0.001, alarm->delay_in_minutes);
161 EXPECT_TRUE(alarm->repeating); 159 EXPECT_TRUE(alarm->repeating);
162 160
163 // Now wait for the alarm to fire. Our test delegate will quit the 161 // Now wait for the alarm to fire. Our test delegate will quit the
164 // MessageLoop when that happens. 162 // MessageLoop when that happens.
165 MessageLoop::current()->Run(); 163 MessageLoop::current()->Run();
166 164
167 // Wait again, and ensure the alarm fires again. 165 // Wait again, and ensure the alarm fires again.
168 MessageLoop::current()->Run(); 166 MessageLoop::current()->Run();
169 167
170 ASSERT_EQ(2u, alarm_delegate_->alarms_seen.size()); 168 ASSERT_EQ(2u, alarm_delegate_->alarms_seen.size());
171 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]); 169 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
172 } 170 }
173 171
174 TEST_F(ExtensionAlarmsTest, CreateDupe) { 172 TEST_F(ExtensionAlarmsTest, CreateDupe) {
175 // Create 2 duplicate alarms. The first should be overridden. 173 // Create 2 duplicate alarms. The first should be overridden.
176 RunFunction(new AlarmsCreateFunction(), "[\"dup\", {\"delayInSeconds\": 1}]"); 174 RunFunction(new AlarmsCreateFunction(), "[\"dup\", {\"delayInMinutes\": 1}]");
177 RunFunction(new AlarmsCreateFunction(), "[\"dup\", {\"delayInSeconds\": 7}]"); 175 RunFunction(new AlarmsCreateFunction(), "[\"dup\", {\"delayInMinutes\": 7}]");
178 176
179 { 177 {
180 const AlarmManager::AlarmList* alarms = 178 const AlarmManager::AlarmList* alarms =
181 alarm_manager_->GetAllAlarms(extension_->id()); 179 alarm_manager_->GetAllAlarms(extension_->id());
182 ASSERT_TRUE(alarms); 180 ASSERT_TRUE(alarms);
183 EXPECT_EQ(1u, alarms->size()); 181 EXPECT_EQ(1u, alarms->size());
184 EXPECT_EQ(7, (*alarms)[0]->delay_in_seconds); 182 EXPECT_EQ(7, (*alarms)[0]->delay_in_minutes);
185 } 183 }
186 } 184 }
187 185
186 TEST_F(ExtensionAlarmsTest, CreateDelayBelowMinimum) {
187 // Create an alarm with delay below the minimum accepted value.
188 std::string error = RunFunctionAndReturnError(new AlarmsCreateFunction(),
189 "[\"negative\", {\"delayInMinutes\": -0.2}]");
190 EXPECT_FALSE(error.empty());
191 }
192
188 TEST_F(ExtensionAlarmsTest, Get) { 193 TEST_F(ExtensionAlarmsTest, Get) {
189 // Create 2 alarms, and make sure we can query them. 194 // Create 2 alarms, and make sure we can query them.
190 CreateAlarms(2); 195 CreateAlarms(2);
191 196
192 // Get the default one. 197 // Get the default one.
193 { 198 {
194 AlarmManager::Alarm alarm; 199 AlarmManager::Alarm alarm;
195 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict( 200 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
196 new AlarmsGetFunction(), "[null]")); 201 new AlarmsGetFunction(), "[null]"));
197 ASSERT_TRUE(result.get()); 202 ASSERT_TRUE(result.get());
198 EXPECT_TRUE(AlarmManager::Alarm::Populate(*result, &alarm)); 203 EXPECT_TRUE(AlarmManager::Alarm::Populate(*result, &alarm));
199 EXPECT_EQ("", alarm.name); 204 EXPECT_EQ("", alarm.name);
200 EXPECT_EQ(1, alarm.delay_in_seconds); 205 EXPECT_EQ(0.001, alarm.delay_in_minutes);
201 EXPECT_TRUE(alarm.repeating); 206 EXPECT_TRUE(alarm.repeating);
202 } 207 }
203 208
204 // Get "7". 209 // Get "7".
205 { 210 {
206 AlarmManager::Alarm alarm; 211 AlarmManager::Alarm alarm;
207 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict( 212 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
208 new AlarmsGetFunction(), "[\"7\"]")); 213 new AlarmsGetFunction(), "[\"7\"]"));
209 ASSERT_TRUE(result.get()); 214 ASSERT_TRUE(result.get());
210 EXPECT_TRUE(AlarmManager::Alarm::Populate(*result, &alarm)); 215 EXPECT_TRUE(AlarmManager::Alarm::Populate(*result, &alarm));
211 EXPECT_EQ("7", alarm.name); 216 EXPECT_EQ("7", alarm.name);
212 EXPECT_EQ(7, alarm.delay_in_seconds); 217 EXPECT_EQ(7, alarm.delay_in_minutes);
213 EXPECT_TRUE(alarm.repeating); 218 EXPECT_TRUE(alarm.repeating);
214 } 219 }
215 220
216 // Get a non-existent one. 221 // Get a non-existent one.
217 { 222 {
218 std::string error = RunFunctionAndReturnError( 223 std::string error = RunFunctionAndReturnError(
219 new AlarmsGetFunction(), "[\"nobody\"]"); 224 new AlarmsGetFunction(), "[\"nobody\"]");
220 EXPECT_FALSE(error.empty()); 225 EXPECT_FALSE(error.empty());
221 } 226 }
222 } 227 }
(...skipping 14 matching lines...) Expand all
237 scoped_ptr<base::ListValue> result(RunFunctionAndReturnList( 242 scoped_ptr<base::ListValue> result(RunFunctionAndReturnList(
238 new AlarmsGetAllFunction(), "[null]")); 243 new AlarmsGetAllFunction(), "[null]"));
239 AlarmManager::AlarmList alarms = ToAlarmList(result.get()); 244 AlarmManager::AlarmList alarms = ToAlarmList(result.get());
240 EXPECT_EQ(2u, alarms.size()); 245 EXPECT_EQ(2u, alarms.size());
241 246
242 // Test the "7" alarm. 247 // Test the "7" alarm.
243 AlarmManager::Alarm* alarm = alarms[0].get(); 248 AlarmManager::Alarm* alarm = alarms[0].get();
244 if (alarm->name != "7") 249 if (alarm->name != "7")
245 alarm = alarms[1].get(); 250 alarm = alarms[1].get();
246 EXPECT_EQ("7", alarm->name); 251 EXPECT_EQ("7", alarm->name);
247 EXPECT_EQ(7, alarm->delay_in_seconds); 252 EXPECT_EQ(7, alarm->delay_in_minutes);
248 EXPECT_TRUE(alarm->repeating); 253 EXPECT_TRUE(alarm->repeating);
249 } 254 }
250 } 255 }
251 256
252 TEST_F(ExtensionAlarmsTest, Clear) { 257 TEST_F(ExtensionAlarmsTest, Clear) {
253 // Clear a non-existent one. 258 // Clear a non-existent one.
254 { 259 {
255 std::string error = RunFunctionAndReturnError( 260 std::string error = RunFunctionAndReturnError(
256 new AlarmsClearFunction(), "[\"nobody\"]"); 261 new AlarmsClearFunction(), "[\"nobody\"]");
257 EXPECT_FALSE(error.empty()); 262 EXPECT_FALSE(error.empty());
258 } 263 }
259 264
260 // Create 3 alarms. 265 // Create 3 alarms.
261 CreateAlarms(3); 266 CreateAlarms(3);
262 267
263 // Clear all but the 1-second one. 268 // Clear all but the 0.001-minute alarm.
264 { 269 {
265 RunFunction(new AlarmsClearFunction(), "[\"7\"]"); 270 RunFunction(new AlarmsClearFunction(), "[\"7\"]");
266 RunFunction(new AlarmsClearFunction(), "[\"0\"]"); 271 RunFunction(new AlarmsClearFunction(), "[\"0\"]");
267 272
268 const AlarmManager::AlarmList* alarms = 273 const AlarmManager::AlarmList* alarms =
269 alarm_manager_->GetAllAlarms(extension_->id()); 274 alarm_manager_->GetAllAlarms(extension_->id());
270 ASSERT_TRUE(alarms); 275 ASSERT_TRUE(alarms);
271 EXPECT_EQ(1u, alarms->size()); 276 EXPECT_EQ(1u, alarms->size());
272 EXPECT_EQ(1, (*alarms)[0]->delay_in_seconds); 277 EXPECT_EQ(0.001, (*alarms)[0]->delay_in_minutes);
273 } 278 }
274 279
275 // Now wait for the alarms to fire, and ensure the cancelled alarms don't 280 // Now wait for the alarms to fire, and ensure the cancelled alarms don't
276 // fire. 281 // fire.
277 MessageLoop::current()->Run(); 282 MessageLoop::current()->Run();
278 283
279 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size()); 284 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size());
280 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]); 285 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
281 286
282 // Ensure the 1-second alarm is still there, since its repeating. 287 // Ensure the 0.001-minute alarm is still there, since it's repeating.
283 { 288 {
284 const AlarmManager::AlarmList* alarms = 289 const AlarmManager::AlarmList* alarms =
285 alarm_manager_->GetAllAlarms(extension_->id()); 290 alarm_manager_->GetAllAlarms(extension_->id());
286 ASSERT_TRUE(alarms); 291 ASSERT_TRUE(alarms);
287 EXPECT_EQ(1u, alarms->size()); 292 EXPECT_EQ(1u, alarms->size());
288 EXPECT_EQ(1, (*alarms)[0]->delay_in_seconds); 293 EXPECT_EQ(0.001, (*alarms)[0]->delay_in_minutes);
289 } 294 }
290 } 295 }
291 296
292 TEST_F(ExtensionAlarmsTest, ClearAll) { 297 TEST_F(ExtensionAlarmsTest, ClearAll) {
293 // ClearAll with no alarms set. 298 // ClearAll with no alarms set.
294 { 299 {
295 scoped_ptr<base::Value> result(RunFunctionWithExtension( 300 scoped_ptr<base::Value> result(RunFunctionWithExtension(
296 new AlarmsClearAllFunction(), "[]")); 301 new AlarmsClearAllFunction(), "[]"));
297 EXPECT_FALSE(result.get()); 302 EXPECT_FALSE(result.get());
298 } 303 }
(...skipping 10 matching lines...) Expand all
309 // Clear them. 314 // Clear them.
310 { 315 {
311 RunFunction(new AlarmsClearAllFunction(), "[]"); 316 RunFunction(new AlarmsClearAllFunction(), "[]");
312 const AlarmManager::AlarmList* alarms = 317 const AlarmManager::AlarmList* alarms =
313 alarm_manager_->GetAllAlarms(extension_->id()); 318 alarm_manager_->GetAllAlarms(extension_->id());
314 ASSERT_FALSE(alarms); 319 ASSERT_FALSE(alarms);
315 } 320 }
316 } 321 }
317 322
318 } // namespace extensions 323 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/alarms/alarms_api.cc ('k') | chrome/browser/extensions/extension_function_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698