OLD | NEW |
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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |