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 #include "base/json/json_reader.h" | 5 #include "base/json/json_reader.h" |
6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
7 #include "base/string_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
8 #include "base/time.h" | 8 #include "base/time.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 base::JSONReader::Read(json))); | 110 base::JSONReader::Read(json))); |
111 | 111 |
112 // Check that prefs are set correctly. | 112 // Check that prefs are set correctly. |
113 web_resource_service_->UnpackLogoSignal(*(test_json.get())); | 113 web_resource_service_->UnpackLogoSignal(*(test_json.get())); |
114 logo_start = prefs->GetDouble(prefs::kNtpCustomLogoStart); | 114 logo_start = prefs->GetDouble(prefs::kNtpCustomLogoStart); |
115 EXPECT_EQ(logo_start, 0); // date value reset to 0; | 115 EXPECT_EQ(logo_start, 0); // date value reset to 0; |
116 logo_end = prefs->GetDouble(prefs::kNtpCustomLogoEnd); | 116 logo_end = prefs->GetDouble(prefs::kNtpCustomLogoEnd); |
117 EXPECT_EQ(logo_end, 0); // date value reset to 0; | 117 EXPECT_EQ(logo_end, 0); // date value reset to 0; |
118 } | 118 } |
119 | 119 |
120 class NotificationPromoTestDelegate : public NotificationPromo::Delegate { | 120 class NotificationPromoTest { |
121 public: | 121 public: |
122 explicit NotificationPromoTestDelegate(Profile* profile) | 122 explicit NotificationPromoTest(Profile* profile) |
123 : profile_(profile), | 123 : profile_(profile), |
124 prefs_(profile->GetPrefs()), | 124 prefs_(profile->GetPrefs()), |
125 notification_promo_(NULL), | 125 notification_promo_(profile), |
126 received_notification_(false), | 126 received_notification_(false), |
127 should_receive_notification_(false), | |
128 build_targeted_(true), | |
129 start_(0.0), | 127 start_(0.0), |
130 end_(0.0), | 128 end_(0.0), |
131 num_groups_(0), | 129 num_groups_(0), |
132 initial_segment_(0), | 130 initial_segment_(0), |
133 increment_(1), | 131 increment_(1), |
134 time_slice_(0), | 132 time_slice_(0), |
135 max_group_(0), | 133 max_group_(0), |
136 max_views_(0), | 134 max_views_(0), |
137 closed_(false), | 135 closed_(false), |
138 build_(PromoResourceService::NO_BUILD), | |
139 platform_(NotificationPromo::PLATFORM_NONE), | |
140 current_platform_(NotificationPromo::CurrentPlatform()), | |
141 gplus_required_(false) { | 136 gplus_required_(false) { |
142 } | 137 } |
143 | 138 |
144 void Init(NotificationPromo* notification_promo, | 139 void Init(const std::string& json, |
145 const std::string& json, | |
146 const std::string& promo_text, | 140 const std::string& promo_text, |
147 double start, double end, | 141 double start, double end, |
148 int num_groups, int initial_segment, int increment, | 142 int num_groups, int initial_segment, int increment, |
149 int time_slice, int max_group, int max_views, | 143 int time_slice, int max_group, int max_views, |
150 int build, int platform, bool gplus_required) { | 144 bool gplus_required) { |
151 notification_promo_ = notification_promo; | |
152 | |
153 Value* value(base::JSONReader::Read(json)); | 145 Value* value(base::JSONReader::Read(json)); |
154 ASSERT_TRUE(value); | 146 ASSERT_TRUE(value); |
155 DictionaryValue* dict = NULL; | 147 DictionaryValue* dict = NULL; |
156 value->GetAsDictionary(&dict); | 148 value->GetAsDictionary(&dict); |
157 ASSERT_TRUE(dict); | 149 ASSERT_TRUE(dict); |
158 test_json_.reset(dict); | 150 test_json_.reset(dict); |
159 | 151 |
160 promo_text_ = promo_text; | 152 promo_text_ = promo_text; |
161 | 153 |
162 start_ = start; | 154 start_ = start; |
163 end_ = end; | 155 end_ = end; |
164 | 156 |
165 num_groups_ = num_groups; | 157 num_groups_ = num_groups; |
166 initial_segment_ = initial_segment; | 158 initial_segment_ = initial_segment; |
167 increment_ = increment; | 159 increment_ = increment; |
168 time_slice_ = time_slice; | 160 time_slice_ = time_slice; |
169 max_group_ = max_group; | 161 max_group_ = max_group; |
170 | 162 |
171 max_views_ = max_views; | 163 max_views_ = max_views; |
172 | 164 |
173 build_ = build; | |
174 platform_ = platform; | |
175 | |
176 gplus_required_ = gplus_required; | 165 gplus_required_ = gplus_required; |
177 | 166 |
178 closed_ = false; | 167 closed_ = false; |
179 received_notification_ = false; | 168 received_notification_ = false; |
180 } | 169 } |
181 | 170 |
182 // NotificationPromo::Delegate implementation. | 171 void InitPromoFromJson(bool should_receive_notification) { |
183 virtual void OnNotificationParsed(double start, double end, | 172 notification_promo_.InitFromJson(*test_json_); |
184 bool new_notification) { | 173 EXPECT_EQ(should_receive_notification, |
185 if (should_receive_notification_) { | 174 notification_promo_.new_notification()); |
186 EXPECT_EQ(notification_promo_->StartTimeForGroup(), start); | |
187 EXPECT_EQ(notification_promo_->end_, end); | |
188 } | |
189 | |
190 received_notification_ = new_notification; | |
191 EXPECT_TRUE(received_notification_ == should_receive_notification_); | |
192 } | |
193 | |
194 virtual bool IsBuildAllowed(int builds_targeted) const { | |
195 EXPECT_EQ(builds_targeted, build_); | |
196 return build_targeted_; | |
197 } | |
198 | |
199 virtual int CurrentPlatform() const { | |
200 return current_platform_; | |
201 } | |
202 | |
203 void InitPromoFromJson(bool should_receive_notification, bool legacy) { | |
204 should_receive_notification_ = should_receive_notification; | |
205 received_notification_ = false; | |
206 if (legacy) | |
207 notification_promo_->InitFromJsonLegacy(*test_json_); | |
208 else | |
209 notification_promo_->InitFromJson(*test_json_); | |
210 EXPECT_TRUE(received_notification_ == should_receive_notification); | |
211 | 175 |
212 // Test the fields. | 176 // Test the fields. |
213 TestNotification(); | 177 TestNotification(); |
214 TestPrefs(); | 178 TestPrefs(); |
215 } | 179 } |
216 | 180 |
217 void TestNotification() { | 181 void TestNotification() { |
218 // Check values. | 182 // Check values. |
219 EXPECT_EQ(notification_promo_->promo_text_, promo_text_); | 183 EXPECT_EQ(notification_promo_.promo_text_, promo_text_); |
220 | 184 |
221 EXPECT_EQ(notification_promo_->start_, start_); | 185 EXPECT_EQ(notification_promo_.start_, start_); |
222 EXPECT_EQ(notification_promo_->end_, end_); | 186 EXPECT_EQ(notification_promo_.end_, end_); |
223 | 187 |
224 EXPECT_EQ(notification_promo_->num_groups_, num_groups_); | 188 EXPECT_EQ(notification_promo_.num_groups_, num_groups_); |
225 EXPECT_EQ(notification_promo_->initial_segment_, initial_segment_); | 189 EXPECT_EQ(notification_promo_.initial_segment_, initial_segment_); |
226 EXPECT_EQ(notification_promo_->increment_, increment_); | 190 EXPECT_EQ(notification_promo_.increment_, increment_); |
227 EXPECT_EQ(notification_promo_->time_slice_, time_slice_); | 191 EXPECT_EQ(notification_promo_.time_slice_, time_slice_); |
228 EXPECT_EQ(notification_promo_->max_group_, max_group_); | 192 EXPECT_EQ(notification_promo_.max_group_, max_group_); |
229 | 193 |
230 EXPECT_EQ(notification_promo_->max_views_, max_views_); | 194 EXPECT_EQ(notification_promo_.max_views_, max_views_); |
231 EXPECT_EQ(notification_promo_->closed_, closed_); | 195 EXPECT_EQ(notification_promo_.closed_, closed_); |
232 | 196 |
233 // Check group within bounds. | 197 // Check group within bounds. |
234 EXPECT_GE(notification_promo_->group_, 0); | 198 EXPECT_GE(notification_promo_.group_, 0); |
235 EXPECT_LT(notification_promo_->group_, num_groups_); | 199 EXPECT_LT(notification_promo_.group_, num_groups_); |
236 | 200 |
237 // Views should be 0 for now. | 201 // Views should be 0 for now. |
238 EXPECT_EQ(notification_promo_->views_, 0); | 202 EXPECT_EQ(notification_promo_.views_, 0); |
239 | 203 |
240 EXPECT_EQ(notification_promo_->build_, build_); | 204 EXPECT_EQ(notification_promo_.gplus_required_, gplus_required_); |
241 EXPECT_EQ(notification_promo_->platform_, platform_); | |
242 | |
243 EXPECT_EQ(notification_promo_->gplus_required_, gplus_required_); | |
244 } | 205 } |
245 | 206 |
246 void TestPrefs() { | 207 void TestPrefs() { |
247 EXPECT_EQ(prefs_->GetString(prefs::kNtpPromoLine), promo_text_); | 208 EXPECT_EQ(prefs_->GetString(prefs::kNtpPromoLine), promo_text_); |
248 | 209 |
249 EXPECT_EQ(prefs_->GetDouble(prefs::kNtpPromoStart), start_); | 210 EXPECT_EQ(prefs_->GetDouble(prefs::kNtpPromoStart), start_); |
250 EXPECT_EQ(prefs_->GetDouble(prefs::kNtpPromoEnd), end_); | 211 EXPECT_EQ(prefs_->GetDouble(prefs::kNtpPromoEnd), end_); |
251 | 212 |
252 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoNumGroups), num_groups_); | 213 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoNumGroups), num_groups_); |
253 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoInitialSegment), | 214 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoInitialSegment), |
254 initial_segment_); | 215 initial_segment_); |
255 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoIncrement), increment_); | 216 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoIncrement), increment_); |
256 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoGroupTimeSlice), time_slice_); | 217 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoGroupTimeSlice), time_slice_); |
257 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoGroupMax), max_group_); | 218 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoGroupMax), max_group_); |
258 | 219 |
259 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoViewsMax), max_views_); | 220 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoViewsMax), max_views_); |
260 EXPECT_EQ(prefs_->GetBoolean(prefs::kNtpPromoClosed), closed_); | 221 EXPECT_EQ(prefs_->GetBoolean(prefs::kNtpPromoClosed), closed_); |
261 | 222 |
262 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoGroup), | 223 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoGroup), |
263 notification_promo_ ? notification_promo_->group_: 0); | 224 notification_promo_.group_); |
264 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoViews), 0); | 225 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoViews), 0); |
265 | 226 |
266 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoBuild), build_); | |
267 EXPECT_EQ(prefs_->GetInteger(prefs::kNtpPromoPlatform), platform_); | |
268 | |
269 EXPECT_EQ(prefs_->GetBoolean(prefs::kNtpPromoGplusRequired), | 227 EXPECT_EQ(prefs_->GetBoolean(prefs::kNtpPromoGplusRequired), |
270 gplus_required_); | 228 gplus_required_); |
271 } | 229 } |
272 | 230 |
273 // Create a new NotificationPromo from prefs and compare to current | 231 // Create a new NotificationPromo from prefs and compare to current |
274 // notification. | 232 // notification. |
275 void TestInitFromPrefs() { | 233 void TestInitFromPrefs() { |
276 scoped_refptr<NotificationPromo> prefs_notification_promo = | 234 NotificationPromo prefs_notification_promo(profile_); |
277 NotificationPromo::Create(profile_, this); | 235 prefs_notification_promo.InitFromPrefs(); |
278 prefs_notification_promo->InitFromPrefs(); | |
279 | 236 |
280 EXPECT_EQ(notification_promo_->prefs_, | 237 EXPECT_EQ(notification_promo_.prefs_, |
281 prefs_notification_promo->prefs_); | 238 prefs_notification_promo.prefs_); |
282 EXPECT_EQ(notification_promo_->delegate_, | 239 EXPECT_EQ(notification_promo_.promo_text_, |
283 prefs_notification_promo->delegate_); | 240 prefs_notification_promo.promo_text_); |
284 EXPECT_EQ(notification_promo_->promo_text_, | 241 EXPECT_EQ(notification_promo_.start_, |
285 prefs_notification_promo->promo_text_); | 242 prefs_notification_promo.start_); |
286 EXPECT_EQ(notification_promo_->start_, | 243 EXPECT_EQ(notification_promo_.end_, |
287 prefs_notification_promo->start_); | 244 prefs_notification_promo.end_); |
288 EXPECT_EQ(notification_promo_->end_, | 245 EXPECT_EQ(notification_promo_.num_groups_, |
289 prefs_notification_promo->end_); | 246 prefs_notification_promo.num_groups_); |
290 EXPECT_EQ(notification_promo_->num_groups_, | 247 EXPECT_EQ(notification_promo_.initial_segment_, |
291 prefs_notification_promo->num_groups_); | 248 prefs_notification_promo.initial_segment_); |
292 EXPECT_EQ(notification_promo_->initial_segment_, | 249 EXPECT_EQ(notification_promo_.increment_, |
293 prefs_notification_promo->initial_segment_); | 250 prefs_notification_promo.increment_); |
294 EXPECT_EQ(notification_promo_->increment_, | 251 EXPECT_EQ(notification_promo_.time_slice_, |
295 prefs_notification_promo->increment_); | 252 prefs_notification_promo.time_slice_); |
296 EXPECT_EQ(notification_promo_->time_slice_, | 253 EXPECT_EQ(notification_promo_.max_group_, |
297 prefs_notification_promo->time_slice_); | 254 prefs_notification_promo.max_group_); |
298 EXPECT_EQ(notification_promo_->max_group_, | 255 EXPECT_EQ(notification_promo_.max_views_, |
299 prefs_notification_promo->max_group_); | 256 prefs_notification_promo.max_views_); |
300 EXPECT_EQ(notification_promo_->max_views_, | 257 EXPECT_EQ(notification_promo_.group_, |
301 prefs_notification_promo->max_views_); | 258 prefs_notification_promo.group_); |
302 EXPECT_EQ(notification_promo_->group_, | 259 EXPECT_EQ(notification_promo_.views_, |
303 prefs_notification_promo->group_); | 260 prefs_notification_promo.views_); |
304 EXPECT_EQ(notification_promo_->views_, | 261 EXPECT_EQ(notification_promo_.closed_, |
305 prefs_notification_promo->views_); | 262 prefs_notification_promo.closed_); |
306 EXPECT_EQ(notification_promo_->closed_, | 263 EXPECT_EQ(notification_promo_.gplus_required_, |
307 prefs_notification_promo->closed_); | 264 prefs_notification_promo.gplus_required_); |
308 EXPECT_EQ(notification_promo_->build_, | |
309 prefs_notification_promo->build_); | |
310 EXPECT_EQ(notification_promo_->platform_, | |
311 prefs_notification_promo->platform_); | |
312 EXPECT_EQ(notification_promo_->gplus_required_, | |
313 prefs_notification_promo->gplus_required_); | |
314 } | 265 } |
315 | 266 |
316 void TestGroup() { | 267 void TestGroup() { |
317 // Test out of range groups. | 268 // Test out of range groups. |
318 const int incr = num_groups_ / 20; | 269 const int incr = num_groups_ / 20; |
319 for (int i = max_group_; i < num_groups_; i += incr) { | 270 for (int i = max_group_; i < num_groups_; i += incr) { |
320 notification_promo_->group_ = i; | 271 notification_promo_.group_ = i; |
321 EXPECT_FALSE(notification_promo_->CanShow()); | 272 EXPECT_FALSE(notification_promo_.CanShow()); |
322 } | 273 } |
323 | 274 |
324 // Test in-range groups. | 275 // Test in-range groups. |
325 for (int i = 0; i < max_group_; i += incr) { | 276 for (int i = 0; i < max_group_; i += incr) { |
326 notification_promo_->group_ = i; | 277 notification_promo_.group_ = i; |
327 EXPECT_TRUE(notification_promo_->CanShow()); | 278 EXPECT_TRUE(notification_promo_.CanShow()); |
328 } | 279 } |
329 } | 280 } |
330 | 281 |
331 void TestViews() { | 282 void TestViews() { |
332 // Test out of range views. | 283 // Test out of range views. |
333 for (int i = max_views_; i < max_views_ * 2; ++i) { | 284 for (int i = max_views_; i < max_views_ * 2; ++i) { |
334 notification_promo_->views_ = i; | 285 notification_promo_.views_ = i; |
335 EXPECT_FALSE(notification_promo_->CanShow()); | 286 EXPECT_FALSE(notification_promo_.CanShow()); |
336 } | 287 } |
337 | 288 |
338 // Test in range views. | 289 // Test in range views. |
339 for (int i = 0; i < max_views_; ++i) { | 290 for (int i = 0; i < max_views_; ++i) { |
340 notification_promo_->views_ = i; | 291 notification_promo_.views_ = i; |
341 EXPECT_TRUE(notification_promo_->CanShow()); | 292 EXPECT_TRUE(notification_promo_.CanShow()); |
342 } | 293 } |
343 } | 294 } |
344 | 295 |
345 void TestBuild() { | 296 void TestClosed() { |
346 build_targeted_ = false; | 297 notification_promo_.closed_ = true; |
347 EXPECT_FALSE(notification_promo_->CanShow()); | 298 EXPECT_FALSE(notification_promo_.CanShow()); |
348 | 299 |
349 build_targeted_ = true; | 300 notification_promo_.closed_ = false; |
350 EXPECT_TRUE(notification_promo_->CanShow()); | 301 EXPECT_TRUE(notification_promo_.CanShow()); |
351 } | |
352 | |
353 void TestOnePlatform(int current_platform, bool expected) { | |
354 current_platform_ = current_platform; | |
355 EXPECT_EQ(expected, notification_promo_->CanShow()); | |
356 } | |
357 | |
358 void TestPlatformSet(int target_platform, bool expected_win, | |
359 bool expected_mac, bool expected_linux, bool expected_chromeos) { | |
360 notification_promo_->platform_ = target_platform; | |
361 TestOnePlatform(NotificationPromo::PLATFORM_WIN, expected_win); | |
362 TestOnePlatform(NotificationPromo::PLATFORM_MAC, expected_mac); | |
363 TestOnePlatform(NotificationPromo::PLATFORM_LINUX, expected_linux); | |
364 TestOnePlatform(NotificationPromo::PLATFORM_CHROMEOS, expected_chromeos); | |
365 } | |
366 | |
367 void TestPlatforms() { | |
368 int target_platform; | |
369 | |
370 // Windows and Mac only - test real current platform. | |
371 target_platform = 3; | |
372 notification_promo_->platform_ = target_platform; | |
373 bool expected = false; | |
374 #if defined(OS_WIN) || defined(OS_MACOSX) | |
375 expected = true; | |
376 #endif | |
377 EXPECT_EQ(expected, notification_promo_->CanShow()); | |
378 | |
379 // Windows only. | |
380 target_platform = 1; | |
381 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_WIN); | |
382 TestPlatformSet(target_platform, true, false, false, false); | |
383 | |
384 // Mac only. | |
385 target_platform = 2; | |
386 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_MAC); | |
387 TestPlatformSet(target_platform, false, true, false, false); | |
388 | |
389 // Linux only. | |
390 target_platform = 4; | |
391 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_LINUX); | |
392 TestPlatformSet(target_platform, false, false, true, false); | |
393 | |
394 // ChromeOS only. | |
395 target_platform = 8; | |
396 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_CHROMEOS); | |
397 TestPlatformSet(target_platform, false, false, false, true); | |
398 | |
399 // Non-Windows. | |
400 target_platform = 14; | |
401 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_ALL | |
402 & ~NotificationPromo::PLATFORM_WIN); | |
403 TestPlatformSet(target_platform, false, true, true, true); | |
404 | |
405 // Non-Mac. | |
406 target_platform = 13; | |
407 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_ALL | |
408 & ~NotificationPromo::PLATFORM_MAC); | |
409 TestPlatformSet(target_platform, true, false, true, true); | |
410 | |
411 // Non-Linux. | |
412 target_platform = 11; | |
413 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_ALL | |
414 & ~NotificationPromo::PLATFORM_LINUX); | |
415 TestPlatformSet(target_platform, true, true, false, true); | |
416 | |
417 // Non-ChromeOS. | |
418 target_platform = 7; | |
419 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_ALL | |
420 & ~NotificationPromo::PLATFORM_CHROMEOS); | |
421 TestPlatformSet(target_platform, true, true, true, false); | |
422 | |
423 // Windows and Mac. | |
424 target_platform = 3; | |
425 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_WIN | |
426 | NotificationPromo::PLATFORM_MAC); | |
427 TestPlatformSet(target_platform, true, true, false, false); | |
428 | |
429 // Windows and Linux. | |
430 target_platform = 5; | |
431 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_WIN | |
432 | NotificationPromo::PLATFORM_LINUX); | |
433 TestPlatformSet(target_platform, true, false, true, false); | |
434 | |
435 // Windows and ChromeOS. | |
436 target_platform = 9; | |
437 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_WIN | |
438 | NotificationPromo::PLATFORM_CHROMEOS); | |
439 TestPlatformSet(target_platform, true, false, false, true); | |
440 | |
441 // Mac and Linux. | |
442 target_platform = 6; | |
443 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_MAC | |
444 | NotificationPromo::PLATFORM_LINUX); | |
445 TestPlatformSet(target_platform, false, true, true, false); | |
446 | |
447 // Mac and ChromeOS. | |
448 target_platform = 10; | |
449 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_MAC | |
450 | NotificationPromo::PLATFORM_CHROMEOS); | |
451 TestPlatformSet(target_platform, false, true, false, true); | |
452 | |
453 // Linux and ChromeOS. | |
454 target_platform = 12; | |
455 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_LINUX | |
456 | NotificationPromo::PLATFORM_CHROMEOS); | |
457 TestPlatformSet(target_platform, false, false, true, true); | |
458 | |
459 // Disabled. | |
460 target_platform = 0; | |
461 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_NONE); | |
462 TestPlatformSet(target_platform, false, false, false, false); | |
463 | |
464 // All platforms. | |
465 target_platform = 15; | |
466 EXPECT_EQ(target_platform, NotificationPromo::PLATFORM_ALL); | |
467 TestPlatformSet(target_platform, true, true, true, true); | |
468 } | |
469 | |
470 void TestClosed() { | |
471 notification_promo_->closed_ = true; | |
472 EXPECT_FALSE(notification_promo_->CanShow()); | |
473 | |
474 notification_promo_->closed_ = false; | |
475 EXPECT_TRUE(notification_promo_->CanShow()); | |
476 } | 302 } |
477 | 303 |
478 void TestPromoText() { | 304 void TestPromoText() { |
479 notification_promo_->promo_text_.clear(); | 305 notification_promo_.promo_text_.clear(); |
480 EXPECT_FALSE(notification_promo_->CanShow()); | 306 EXPECT_FALSE(notification_promo_.CanShow()); |
481 | 307 |
482 notification_promo_->promo_text_ = promo_text_; | 308 notification_promo_.promo_text_ = promo_text_; |
483 EXPECT_TRUE(notification_promo_->CanShow()); | 309 EXPECT_TRUE(notification_promo_.CanShow()); |
484 } | 310 } |
485 | 311 |
486 void TestTime() { | 312 void TestTime() { |
487 const double now = base::Time::Now().ToDoubleT(); | 313 const double now = base::Time::Now().ToDoubleT(); |
488 const double qhour = 15 * 60; | 314 const double qhour = 15 * 60; |
489 | 315 |
490 notification_promo_->group_ = 0; // For simplicity. | 316 notification_promo_.group_ = 0; // For simplicity. |
491 | 317 |
492 notification_promo_->start_ = now - qhour; | 318 notification_promo_.start_ = now - qhour; |
493 notification_promo_->end_ = now + qhour; | 319 notification_promo_.end_ = now + qhour; |
494 EXPECT_TRUE(notification_promo_->CanShow()); | 320 EXPECT_TRUE(notification_promo_.CanShow()); |
495 | 321 |
496 // Start time has not arrived. | 322 // Start time has not arrived. |
497 notification_promo_->start_ = now + qhour; | 323 notification_promo_.start_ = now + qhour; |
498 notification_promo_->end_ = now + qhour; | 324 notification_promo_.end_ = now + qhour; |
499 EXPECT_FALSE(notification_promo_->CanShow()); | 325 EXPECT_FALSE(notification_promo_.CanShow()); |
500 | 326 |
501 // End time has past. | 327 // End time has past. |
502 notification_promo_->start_ = now - qhour; | 328 notification_promo_.start_ = now - qhour; |
503 notification_promo_->end_ = now - qhour; | 329 notification_promo_.end_ = now - qhour; |
504 EXPECT_FALSE(notification_promo_->CanShow()); | 330 EXPECT_FALSE(notification_promo_.CanShow()); |
505 | 331 |
506 notification_promo_->start_ = start_; | 332 notification_promo_.start_ = start_; |
507 notification_promo_->end_ = end_; | 333 notification_promo_.end_ = end_; |
508 EXPECT_TRUE(notification_promo_->CanShow()); | 334 EXPECT_TRUE(notification_promo_.CanShow()); |
509 } | 335 } |
510 | 336 |
511 void TestIncrement() { | 337 void TestIncrement() { |
512 const double now = base::Time::Now().ToDoubleT(); | 338 const double now = base::Time::Now().ToDoubleT(); |
513 const double slice = 60; | 339 const double slice = 60; |
514 | 340 |
515 notification_promo_->num_groups_ = 18; | 341 notification_promo_.num_groups_ = 18; |
516 notification_promo_->initial_segment_ = 5; | 342 notification_promo_.initial_segment_ = 5; |
517 notification_promo_->increment_ = 3; | 343 notification_promo_.increment_ = 3; |
518 notification_promo_->time_slice_ = slice; | 344 notification_promo_.time_slice_ = slice; |
519 | 345 |
520 notification_promo_->start_ = now - 1; | 346 notification_promo_.start_ = now - 1; |
521 notification_promo_->end_ = now + slice; | 347 notification_promo_.end_ = now + slice; |
522 | 348 |
523 // Test initial segment. | 349 // Test initial segment. |
524 notification_promo_->group_ = 4; | 350 notification_promo_.group_ = 4; |
525 EXPECT_TRUE(notification_promo_->CanShow()); | 351 EXPECT_TRUE(notification_promo_.CanShow()); |
526 notification_promo_->group_ = 5; | 352 notification_promo_.group_ = 5; |
527 EXPECT_FALSE(notification_promo_->CanShow()); | 353 EXPECT_FALSE(notification_promo_.CanShow()); |
528 | 354 |
529 // Test first increment. | 355 // Test first increment. |
530 notification_promo_->start_ -= slice; | 356 notification_promo_.start_ -= slice; |
531 notification_promo_->group_ = 7; | 357 notification_promo_.group_ = 7; |
532 EXPECT_TRUE(notification_promo_->CanShow()); | 358 EXPECT_TRUE(notification_promo_.CanShow()); |
533 notification_promo_->group_ = 8; | 359 notification_promo_.group_ = 8; |
534 EXPECT_FALSE(notification_promo_->CanShow()); | 360 EXPECT_FALSE(notification_promo_.CanShow()); |
535 | 361 |
536 // Test second increment. | 362 // Test second increment. |
537 notification_promo_->start_ -= slice; | 363 notification_promo_.start_ -= slice; |
538 notification_promo_->group_ = 10; | 364 notification_promo_.group_ = 10; |
539 EXPECT_TRUE(notification_promo_->CanShow()); | 365 EXPECT_TRUE(notification_promo_.CanShow()); |
540 notification_promo_->group_ = 11; | 366 notification_promo_.group_ = 11; |
541 EXPECT_FALSE(notification_promo_->CanShow()); | 367 EXPECT_FALSE(notification_promo_.CanShow()); |
542 | 368 |
543 // Test penultimate increment. | 369 // Test penultimate increment. |
544 notification_promo_->start_ -= 2 * slice; | 370 notification_promo_.start_ -= 2 * slice; |
545 notification_promo_->group_ = 16; | 371 notification_promo_.group_ = 16; |
546 EXPECT_TRUE(notification_promo_->CanShow()); | 372 EXPECT_TRUE(notification_promo_.CanShow()); |
547 notification_promo_->group_ = 17; | 373 notification_promo_.group_ = 17; |
548 EXPECT_FALSE(notification_promo_->CanShow()); | 374 EXPECT_FALSE(notification_promo_.CanShow()); |
549 | 375 |
550 // Test last increment. | 376 // Test last increment. |
551 notification_promo_->start_ -= slice; | 377 notification_promo_.start_ -= slice; |
552 EXPECT_TRUE(notification_promo_->CanShow()); | 378 EXPECT_TRUE(notification_promo_.CanShow()); |
553 } | 379 } |
554 | 380 |
555 void TestGplus() { | 381 void TestGplus() { |
556 notification_promo_->gplus_required_ = true; | 382 notification_promo_.gplus_required_ = true; |
557 | 383 |
558 // Test G+ required. | 384 // Test G+ required. |
559 notification_promo_->prefs_->SetBoolean(prefs::kIsGooglePlusUser, true); | 385 notification_promo_.prefs_->SetBoolean(prefs::kIsGooglePlusUser, true); |
560 EXPECT_TRUE(notification_promo_->CanShow()); | 386 EXPECT_TRUE(notification_promo_.CanShow()); |
561 notification_promo_->prefs_->SetBoolean(prefs::kIsGooglePlusUser, false); | 387 notification_promo_.prefs_->SetBoolean(prefs::kIsGooglePlusUser, false); |
562 EXPECT_FALSE(notification_promo_->CanShow()); | 388 EXPECT_FALSE(notification_promo_.CanShow()); |
563 | 389 |
564 notification_promo_->gplus_required_ = false; | 390 notification_promo_.gplus_required_ = false; |
565 | 391 |
566 // Test G+ not required. | 392 // Test G+ not required. |
567 notification_promo_->prefs_->SetBoolean(prefs::kIsGooglePlusUser, true); | 393 notification_promo_.prefs_->SetBoolean(prefs::kIsGooglePlusUser, true); |
568 EXPECT_TRUE(notification_promo_->CanShow()); | 394 EXPECT_TRUE(notification_promo_.CanShow()); |
569 notification_promo_->prefs_->SetBoolean(prefs::kIsGooglePlusUser, false); | 395 notification_promo_.prefs_->SetBoolean(prefs::kIsGooglePlusUser, false); |
570 EXPECT_TRUE(notification_promo_->CanShow()); | 396 EXPECT_TRUE(notification_promo_.CanShow()); |
571 } | 397 } |
572 | 398 |
573 private: | 399 private: |
574 Profile* profile_; | 400 Profile* profile_; |
575 PrefService* prefs_; | 401 PrefService* prefs_; |
576 NotificationPromo* notification_promo_; | 402 NotificationPromo notification_promo_; |
577 bool received_notification_; | 403 bool received_notification_; |
578 bool should_receive_notification_; | |
579 bool build_targeted_; | |
580 scoped_ptr<DictionaryValue> test_json_; | 404 scoped_ptr<DictionaryValue> test_json_; |
581 | 405 |
582 std::string promo_text_; | 406 std::string promo_text_; |
583 | 407 |
584 double start_; | 408 double start_; |
585 double end_; | 409 double end_; |
586 | 410 |
587 int num_groups_; | 411 int num_groups_; |
588 int initial_segment_; | 412 int initial_segment_; |
589 int increment_; | 413 int increment_; |
590 int time_slice_; | 414 int time_slice_; |
591 int max_group_; | 415 int max_group_; |
592 | 416 |
593 int max_views_; | 417 int max_views_; |
594 | 418 |
595 bool closed_; | 419 bool closed_; |
596 | 420 |
597 int build_; | |
598 int platform_; | |
599 int current_platform_; | |
600 | |
601 bool gplus_required_; | 421 bool gplus_required_; |
602 }; | 422 }; |
603 | 423 |
604 TEST_F(PromoResourceServiceTest, NotificationPromoTestLegacy) { | |
605 // Check that prefs are set correctly. | |
606 PrefService* prefs = profile_.GetPrefs(); | |
607 ASSERT_TRUE(prefs != NULL); | |
608 | |
609 NotificationPromoTestDelegate delegate(&profile_); | |
610 scoped_refptr<NotificationPromo> notification_promo = | |
611 NotificationPromo::Create(&profile_, &delegate); | |
612 | |
613 // Make sure prefs are unset. | |
614 delegate.TestPrefs(); | |
615 | |
616 // Set up start and end dates and promo line in a Dictionary as if parsed | |
617 // from the service. | |
618 delegate.Init(notification_promo, | |
619 "{ " | |
620 " \"topic\": {" | |
621 " \"answers\": [" | |
622 " {" | |
623 " \"name\": \"promo_start\"," | |
624 " \"question\": \"3:2:5:10:15:0\"," | |
625 " \"tooltip\": \"Eat more pie!\"," | |
626 " \"inproduct\": \"31/01/10 01:00 GMT\"" | |
627 " }," | |
628 " {" | |
629 " \"name\": \"promo_end\"," | |
630 " \"inproduct\": \"31/01/14 01:00 GMT\"" | |
631 " }" | |
632 " ]" | |
633 " }" | |
634 "}", | |
635 "Eat more pie!", | |
636 1264899600, // unix epoch for Jan 31 2010 0100 GMT. | |
637 1391130000, // unix epoch for Jan 31 2012 0100 GMT. | |
638 100, 0, 1, 2, 5, 10, 3, 15, false); | |
639 | |
640 delegate.InitPromoFromJson(true, true); | |
641 | |
642 // Second time should not trigger a notification. | |
643 delegate.InitPromoFromJson(false, true); | |
644 | |
645 delegate.TestInitFromPrefs(); | |
646 | |
647 // Test various conditions of CanShow. | |
648 // TestGroup Has the side effect of setting us to a passing group. | |
649 delegate.TestGroup(); | |
650 delegate.TestViews(); | |
651 delegate.TestBuild(); | |
652 delegate.TestClosed(); | |
653 delegate.TestPromoText(); | |
654 delegate.TestTime(); | |
655 delegate.TestPlatforms(); | |
656 } | |
657 | |
658 TEST_F(PromoResourceServiceTest, NotificationPromoTest) { | 424 TEST_F(PromoResourceServiceTest, NotificationPromoTest) { |
659 // Check that prefs are set correctly. | 425 // Check that prefs are set correctly. |
660 PrefService* prefs = profile_.GetPrefs(); | 426 PrefService* prefs = profile_.GetPrefs(); |
661 ASSERT_TRUE(prefs != NULL); | 427 ASSERT_TRUE(prefs != NULL); |
662 | 428 |
663 NotificationPromoTestDelegate delegate(&profile_); | 429 NotificationPromoTest promo_test(&profile_); |
664 scoped_refptr<NotificationPromo> notification_promo = | |
665 NotificationPromo::Create(&profile_, &delegate); | |
666 | 430 |
667 // Make sure prefs are unset. | 431 // Make sure prefs are unset. |
668 delegate.TestPrefs(); | 432 promo_test.TestPrefs(); |
669 | 433 |
670 // Set up start and end dates and promo line in a Dictionary as if parsed | 434 // Set up start and end dates and promo line in a Dictionary as if parsed |
671 // from the service. | 435 // from the service. |
672 delegate.Init(notification_promo, | 436 promo_test.Init("{" |
673 "{" | 437 " \"ntp_notification_promo\":" |
674 " \"ntp_notification_promo\":" | 438 " {" |
675 " {" | 439 " \"date\":" |
676 " \"date\":" | 440 " [" |
677 " [" | 441 " {" |
678 " {" | 442 " \"start\":\"15 Jan 2012 10:50:85 PST\"," |
679 " \"start\":\"15 Jan 2012 10:50:85 PST\"," | 443 " \"end\":\"7 Jan 2013 5:40:75 PST\"" |
680 " \"end\":\"7 Jan 2013 5:40:75 PST\"" | 444 " }" |
681 " }" | 445 " ]," |
682 " ]," | 446 " \"strings\":" |
683 " \"strings\":" | 447 " {" |
684 " {" | 448 " \"NTP4_HOW_DO_YOU_FEEL_ABOUT_CHROME\":" |
685 " \"NTP4_HOW_DO_YOU_FEEL_ABOUT_CHROME\":" | 449 " \"What do you think of Chrome?\"" |
686 " \"What do you think of Chrome?\"" | 450 " }," |
687 " }," | 451 " \"grouping\":" |
688 " \"grouping\":" | 452 " {" |
689 " {" | 453 " \"buckets\":1000," |
690 " \"buckets\":1000," | 454 " \"segment\":200," |
691 " \"segment\":200," | 455 " \"increment\":100," |
692 " \"increment\":100," | 456 " \"increment_frequency\":3600," |
693 " \"increment_frequency\":3600," | 457 " \"increment_max\":400" |
694 " \"increment_max\":400" | 458 " }," |
695 " }," | 459 " \"payload\":" |
696 " \"payload\":" | 460 " {" |
697 " {" | 461 " \"days_active\":7," |
698 " \"days_active\":7," | 462 " \"install_age_days\":21," |
699 " \"install_age_days\":21," | 463 " \"gplus_required\":false" |
700 " \"gplus_required\":false" | 464 " }," |
701 " }," | 465 " \"max_views\":30" |
702 " \"max_views\":30" | 466 " }" |
703 " }" | 467 "}", |
704 "}", | 468 "What do you think of Chrome?", |
705 "What do you think of Chrome?", | 469 1326653485, // unix epoch for 15 Jan 2012 10:50:85 PST. |
706 1326653485, // unix epoch for 15 Jan 2012 10:50:85 PST. | 470 1357566075, // unix epoch for 7 Jan 2013 5:40:75 PST. |
707 1357566075, // unix epoch for 7 Jan 2013 5:40:75 PST. | 471 1000, 200, 100, 3600, 400, 30, false); |
708 1000, 200, 100, 3600, 400, 30, 15, 15, false); | |
709 | 472 |
710 delegate.InitPromoFromJson(true, false); | 473 promo_test.InitPromoFromJson(true); |
711 | 474 |
712 // Second time should not trigger a notification. | 475 // Second time should not trigger a notification. |
713 delegate.InitPromoFromJson(false, false); | 476 promo_test.InitPromoFromJson(false); |
714 | 477 |
715 delegate.TestInitFromPrefs(); | 478 promo_test.TestInitFromPrefs(); |
716 | 479 |
717 // Test various conditions of CanShow. | 480 // Test various conditions of CanShow. |
718 // TestGroup Has the side effect of setting us to a passing group. | 481 // TestGroup Has the side effect of setting us to a passing group. |
719 delegate.TestGroup(); | 482 promo_test.TestGroup(); |
720 delegate.TestViews(); | 483 promo_test.TestViews(); |
721 delegate.TestBuild(); | 484 promo_test.TestClosed(); |
722 delegate.TestClosed(); | 485 promo_test.TestPromoText(); |
723 delegate.TestPromoText(); | 486 promo_test.TestTime(); |
724 delegate.TestTime(); | 487 promo_test.TestIncrement(); |
725 delegate.TestIncrement(); | 488 promo_test.TestGplus(); |
726 delegate.TestPlatforms(); | |
727 delegate.TestGplus(); | |
728 } | |
729 | |
730 TEST_F(PromoResourceServiceTest, NotificationPromoTestFail) { | |
731 // Check that prefs are set correctly. | |
732 PrefService* prefs = profile_.GetPrefs(); | |
733 ASSERT_TRUE(prefs != NULL); | |
734 | |
735 NotificationPromoTestDelegate delegate(&profile_); | |
736 scoped_refptr<NotificationPromo> notification_promo = | |
737 NotificationPromo::Create(&profile_, &delegate); | |
738 | |
739 // Set up start and end dates and promo line in a Dictionary as if parsed | |
740 // from the service. | |
741 delegate.Init(notification_promo, | |
742 "{ " | |
743 " \"topic\": {" | |
744 " \"answers\": [" | |
745 " {" | |
746 " \"name\": \"promo_start\"," | |
747 " \"question\": \"12:8:10:20:15\"," | |
748 " \"tooltip\": \"Happy 3rd Birthday!\"," | |
749 " \"inproduct\": \"09/15/10 05:00 PDT\"" | |
750 " }," | |
751 " {" | |
752 " \"name\": \"promo_end\"," | |
753 " \"inproduct\": \"09/30/10 05:00 PDT\"" | |
754 " }" | |
755 " ]" | |
756 " }" | |
757 "}", | |
758 "Happy 3rd Birthday!", | |
759 1284552000, // unix epoch for Sep 15 2010 0500 PDT. | |
760 1285848000, // unix epoch for Sep 30 2010 0500 PDT. | |
761 100, 0, 1, 8, 10, 20, 12, 15, false); | |
762 | |
763 delegate.InitPromoFromJson(true, true); | |
764 | |
765 // Second time should not trigger a notification. | |
766 delegate.InitPromoFromJson(false, true); | |
767 | |
768 delegate.TestInitFromPrefs(); | |
769 | |
770 // Should fail because out of time bounds. | |
771 EXPECT_FALSE(notification_promo->CanShow()); | |
772 } | |
773 | |
774 TEST_F(PromoResourceServiceTest, GetNextQuestionValueTest) { | |
775 const std::string question("0:-100:2048:0:0:0:2a"); | |
776 const int question_vec[] = { 0, -100, 2048, 0, 0, 0}; | |
777 size_t index = 0; | |
778 bool err = false; | |
779 | |
780 for (size_t i = 0; i < arraysize(question_vec); ++i) { | |
781 EXPECT_EQ(question_vec[i], | |
782 NotificationPromo::GetNextQuestionValue(question, &index, &err)); | |
783 EXPECT_FALSE(err); | |
784 } | |
785 EXPECT_EQ(NotificationPromo::GetNextQuestionValue(question, &index, &err), 0); | |
786 EXPECT_TRUE(err); | |
787 } | 489 } |
788 | 490 |
789 TEST_F(PromoResourceServiceTest, PromoServerURLTest) { | 491 TEST_F(PromoResourceServiceTest, PromoServerURLTest) { |
790 GURL promo_server_url = NotificationPromo::PromoServerURL(); | 492 GURL promo_server_url = NotificationPromo::PromoServerURL(); |
791 EXPECT_FALSE(promo_server_url.is_empty()); | 493 EXPECT_FALSE(promo_server_url.is_empty()); |
| 494 EXPECT_TRUE(promo_server_url.SchemeIs("https")); |
792 // TODO(achuith): Test this better. | 495 // TODO(achuith): Test this better. |
793 } | 496 } |
794 | 497 |
795 TEST_F(PromoResourceServiceTest, UnpackWebStoreSignal) { | 498 TEST_F(PromoResourceServiceTest, UnpackWebStoreSignal) { |
796 web_resource_service_->set_channel(chrome::VersionInfo::CHANNEL_DEV); | 499 web_resource_service_->set_channel(chrome::VersionInfo::CHANNEL_DEV); |
797 | 500 |
798 std::string json = "{ " | 501 std::string json = "{ " |
799 " \"topic\": {" | 502 " \"topic\": {" |
800 " \"answers\": [" | 503 " \"answers\": [" |
801 " {" | 504 " {" |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1055 EXPECT_TRUE(PromoResourceService::IsBuildTargeted(stable, 7)); | 758 EXPECT_TRUE(PromoResourceService::IsBuildTargeted(stable, 7)); |
1056 EXPECT_TRUE(PromoResourceService::IsBuildTargeted(stable, 15)); | 759 EXPECT_TRUE(PromoResourceService::IsBuildTargeted(stable, 15)); |
1057 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, 8)); | 760 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, 8)); |
1058 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, 11)); | 761 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, 11)); |
1059 EXPECT_TRUE(PromoResourceService::IsBuildTargeted(stable, 12)); | 762 EXPECT_TRUE(PromoResourceService::IsBuildTargeted(stable, 12)); |
1060 | 763 |
1061 // invalid | 764 // invalid |
1062 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, -1)); | 765 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, -1)); |
1063 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, INT_MAX)); | 766 EXPECT_FALSE(PromoResourceService::IsBuildTargeted(stable, INT_MAX)); |
1064 } | 767 } |
OLD | NEW |