| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "chrome/browser/notifications/notification.h" | 9 #include "chrome/browser/notifications/notification.h" |
| 10 #include "chrome/browser/notifications/notification_test_util.h" |
| 10 #include "chrome/browser/notifications/notification_ui_manager.h" | 11 #include "chrome/browser/notifications/notification_ui_manager.h" |
| 11 #include "chrome/browser/notifications/sync_notifier/synced_notification.h" | 12 #include "chrome/browser/notifications/sync_notifier/synced_notification.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 13 #include "sync/api/sync_data.h" | 14 #include "sync/api/sync_data.h" |
| 14 #include "sync/protocol/sync.pb.h" | 15 #include "sync/protocol/sync.pb.h" |
| 15 #include "sync/protocol/synced_notification_specifics.pb.h" | 16 #include "sync/protocol/synced_notification_specifics.pb.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "ui/message_center/message_center_util.h" | 18 #include "ui/message_center/message_center_util.h" |
| 18 #include "ui/message_center/notification_types.h" | 19 #include "ui/message_center/notification_types.h" |
| 19 | 20 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 const sync_pb::CoalescedSyncedNotification_ReadState kUnread = | 74 const sync_pb::CoalescedSyncedNotification_ReadState kUnread = |
| 74 sync_pb::CoalescedSyncedNotification_ReadState_UNREAD; | 75 sync_pb::CoalescedSyncedNotification_ReadState_UNREAD; |
| 75 const sync_pb::CoalescedSyncedNotification_ReadState kDismissed = | 76 const sync_pb::CoalescedSyncedNotification_ReadState kDismissed = |
| 76 sync_pb::CoalescedSyncedNotification_ReadState_DISMISSED; | 77 sync_pb::CoalescedSyncedNotification_ReadState_DISMISSED; |
| 77 } // namespace | 78 } // namespace |
| 78 | 79 |
| 79 // Stub out the NotificationUIManager for unit testing. | 80 // Stub out the NotificationUIManager for unit testing. |
| 80 class StubNotificationUIManager : public NotificationUIManager { | 81 class StubNotificationUIManager : public NotificationUIManager { |
| 81 public: | 82 public: |
| 82 StubNotificationUIManager() | 83 StubNotificationUIManager() |
| 83 : notification_(GURL(), GURL(), string16(), string16(), NULL) {} | 84 : notification_(GURL(), |
| 85 GURL(), |
| 86 string16(), |
| 87 string16(), |
| 88 new MockNotificationDelegate("stub")) {} |
| 84 virtual ~StubNotificationUIManager() {} | 89 virtual ~StubNotificationUIManager() {} |
| 85 | 90 |
| 86 // Adds a notification to be displayed. Virtual for unit test override. | 91 // Adds a notification to be displayed. Virtual for unit test override. |
| 87 virtual void Add(const Notification& notification, Profile* profile) | 92 virtual void Add(const Notification& notification, Profile* profile) |
| 88 OVERRIDE { | 93 OVERRIDE { |
| 89 // Make a deep copy of the notification that we can inspect. | 94 // Make a deep copy of the notification that we can inspect. |
| 90 notification_ = notification; | 95 notification_ = notification; |
| 91 profile_ = profile; | 96 profile_ = profile; |
| 92 } | 97 } |
| 93 | 98 |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 | 470 |
| 466 // TODO(petewil): Improve ctor to pass in an image and type so this test can | 471 // TODO(petewil): Improve ctor to pass in an image and type so this test can |
| 467 // pass on actual data. | 472 // pass on actual data. |
| 468 TEST_F(SyncedNotificationTest, GetImageURLTest) { | 473 TEST_F(SyncedNotificationTest, GetImageURLTest) { |
| 469 std::string found_image_url = notification1_->GetImageUrl().spec(); | 474 std::string found_image_url = notification1_->GetImageUrl().spec(); |
| 470 std::string expected_image_url = kImageUrl1; | 475 std::string expected_image_url = kImageUrl1; |
| 471 | 476 |
| 472 EXPECT_EQ(expected_image_url, found_image_url); | 477 EXPECT_EQ(expected_image_url, found_image_url); |
| 473 } | 478 } |
| 474 | 479 |
| 475 // TODO(petewil): test with a multi-line body | 480 // TODO(petewil): test with a multi-line message |
| 476 TEST_F(SyncedNotificationTest, GetTextTest) { | 481 TEST_F(SyncedNotificationTest, GetTextTest) { |
| 477 std::string found_text = notification1_->GetText(); | 482 std::string found_text = notification1_->GetText(); |
| 478 std::string expected_text(kText1); | 483 std::string expected_text(kText1); |
| 479 | 484 |
| 480 EXPECT_EQ(expected_text, found_text); | 485 EXPECT_EQ(expected_text, found_text); |
| 481 } | 486 } |
| 482 | 487 |
| 483 TEST_F(SyncedNotificationTest, GetCreationTimeTest) { | 488 TEST_F(SyncedNotificationTest, GetCreationTimeTest) { |
| 484 uint64 found_time = notification1_->GetCreationTime(); | 489 uint64 found_time = notification1_->GetCreationTime(); |
| 485 EXPECT_EQ(kFakeCreationTime, found_time); | 490 EXPECT_EQ(kFakeCreationTime, found_time); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 TEST_F(SyncedNotificationTest, ShowTest) { | 578 TEST_F(SyncedNotificationTest, ShowTest) { |
| 574 | 579 |
| 575 if (!UseRichNotifications()) | 580 if (!UseRichNotifications()) |
| 576 return; | 581 return; |
| 577 | 582 |
| 578 StubNotificationUIManager notification_manager; | 583 StubNotificationUIManager notification_manager; |
| 579 | 584 |
| 580 // Call the method under test using the pre-populated data. | 585 // Call the method under test using the pre-populated data. |
| 581 notification1_->Show(¬ification_manager, NULL, NULL); | 586 notification1_->Show(¬ification_manager, NULL, NULL); |
| 582 | 587 |
| 588 const Notification notification = notification_manager.notification(); |
| 589 |
| 583 // Check the base fields of the notification. | 590 // Check the base fields of the notification. |
| 584 EXPECT_EQ(message_center::NOTIFICATION_TYPE_IMAGE, | 591 EXPECT_EQ(message_center::NOTIFICATION_TYPE_IMAGE, notification.type()); |
| 585 notification_manager.notification().type()); | 592 EXPECT_EQ(kTitle1, UTF16ToUTF8(notification.title())); |
| 586 EXPECT_EQ(kTitle1, | 593 EXPECT_EQ(kText1, UTF16ToUTF8(notification.message())); |
| 587 UTF16ToUTF8(notification_manager.notification().title())); | 594 EXPECT_EQ(kExpectedOriginUrl, notification.origin_url().spec()); |
| 588 EXPECT_EQ(kText1, | 595 EXPECT_EQ(kKey1, UTF16ToUTF8(notification.replace_id())); |
| 589 UTF16ToUTF8(notification_manager.notification().body())); | |
| 590 EXPECT_EQ(kExpectedOriginUrl, | |
| 591 notification_manager.notification().origin_url().spec()); | |
| 592 EXPECT_EQ(kIconUrl1, notification_manager.notification().icon_url().spec()); | |
| 593 EXPECT_EQ(kKey1, | |
| 594 UTF16ToUTF8(notification_manager.notification().replace_id())); | |
| 595 const DictionaryValue* actual_fields = | |
| 596 notification_manager.notification().optional_fields(); | |
| 597 | 596 |
| 598 // Check the optional fields of the notification. | 597 EXPECT_EQ(kFakeCreationTime, notification.timestamp().ToDoubleT()); |
| 599 // Make an optional fields struct like we expect, compare it with actual. | 598 EXPECT_EQ(kNotificationPriority, notification.priority()); |
| 600 DictionaryValue expected_fields; | |
| 601 expected_fields.SetDouble(message_center::kTimestampKey, kFakeCreationTime); | |
| 602 expected_fields.SetInteger(message_center::kPriorityKey, | |
| 603 kNotificationPriority); | |
| 604 expected_fields.SetString(message_center::kButtonOneTitleKey, | |
| 605 kButtonOneTitle); | |
| 606 expected_fields.SetString(message_center::kButtonOneIconUrlKey, | |
| 607 kButtonOneIconUrl); | |
| 608 expected_fields.SetString(message_center::kButtonTwoTitleKey, | |
| 609 kButtonTwoTitle); | |
| 610 expected_fields.SetString(message_center::kButtonTwoIconUrlKey, | |
| 611 kButtonTwoIconUrl); | |
| 612 | 599 |
| 613 // Fill the individual notification fields for a mutiple notification. | 600 EXPECT_EQ(UTF8ToUTF16(kButtonOneTitle), notification.buttons()[0].title); |
| 614 base::ListValue* items = new base::ListValue(); | 601 EXPECT_EQ(UTF8ToUTF16(kButtonTwoTitle), notification.buttons()[1].title); |
| 615 DictionaryValue* item1 = new DictionaryValue(); | |
| 616 DictionaryValue* item2 = new DictionaryValue(); | |
| 617 DictionaryValue* item3 = new DictionaryValue(); | |
| 618 item1->SetString(message_center::kItemTitleKey, | |
| 619 UTF8ToUTF16(kContainedTitle1)); | |
| 620 item1->SetString(message_center::kItemMessageKey, | |
| 621 UTF8ToUTF16(kContainedMessage1)); | |
| 622 item2->SetString(message_center::kItemTitleKey, | |
| 623 UTF8ToUTF16(kContainedTitle2)); | |
| 624 item2->SetString(message_center::kItemMessageKey, | |
| 625 UTF8ToUTF16(kContainedMessage2)); | |
| 626 item3->SetString(message_center::kItemTitleKey, | |
| 627 UTF8ToUTF16(kContainedTitle3)); | |
| 628 item3->SetString(message_center::kItemMessageKey, | |
| 629 UTF8ToUTF16(kContainedMessage3)); | |
| 630 items->Append(item1); | |
| 631 items->Append(item2); | |
| 632 items->Append(item3); | |
| 633 expected_fields.Set(message_center::kItemsKey, items); | |
| 634 | 602 |
| 635 EXPECT_TRUE(expected_fields.Equals(actual_fields)) | 603 EXPECT_EQ(UTF8ToUTF16(kContainedTitle1), notification.items()[0].title); |
| 636 << "Expected: " << expected_fields | 604 EXPECT_EQ(UTF8ToUTF16(kContainedTitle2), notification.items()[1].title); |
| 637 << ", but actual: " << *actual_fields; | 605 EXPECT_EQ(UTF8ToUTF16(kContainedTitle3), notification.items()[2].title); |
| 638 | 606 |
| 607 EXPECT_EQ(UTF8ToUTF16(kContainedMessage1), notification.items()[0].message); |
| 608 EXPECT_EQ(UTF8ToUTF16(kContainedMessage2), notification.items()[1].message); |
| 609 EXPECT_EQ(UTF8ToUTF16(kContainedMessage3), notification.items()[2].message); |
| 639 } | 610 } |
| 640 | 611 |
| 641 // TODO(petewil): Add a test for a notification being read and or deleted. | 612 // TODO(petewil): Add a test for a notification being read and or deleted. |
| OLD | NEW |