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

Side by Side Diff: chrome/browser/chromeos/extensions/file_manager/desktop_notifications_browsertest.cc

Issue 23945002: file_manager: Move non-binding code to c/b/chromeos/file_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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/extensions/file_manager/desktop_notifications. h"
6
7 #include <gtest/gtest.h>
8 #include <string>
9
10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/notifications/notification.h"
12 #include "chrome/browser/notifications/notification_ui_manager.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/test/base/in_process_browser_test.h"
15 #include "chrome/test/base/ui_test_utils.h"
16 #include "grit/generated_resources.h"
17 #include "ui/base/l10n/l10n_util.h"
18
19 namespace file_manager {
20
21 // Add "FileManager" prefix to the class to avoid name conflicts.
22 class FileManagerDesktopNotificationsBrowserTest : public InProcessBrowserTest {
23 public:
24 FileManagerDesktopNotificationsBrowserTest() {}
25
26 virtual void CleanUpOnMainThread() OVERRIDE {
27 notifications_.reset();
28 }
29
30 protected:
31 // This must be initialized late in test startup.
32 void InitNotifications() {
33 Profile* profile = browser()->profile();
34 notifications_.reset(new DesktopNotifications(profile));
35 }
36
37 bool FindNotification(const std::string& id) {
38 return notifications_->HasNotificationForTest(id);
39 }
40
41 scoped_ptr<DesktopNotifications> notifications_;
42 };
43
44 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest, TestBasic) {
45 InitNotifications();
46 // Showing a notification adds a new notification.
47 notifications_->ShowNotification(DesktopNotifications::DEVICE, "path");
48 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest());
49 EXPECT_TRUE(FindNotification("Device_path"));
50
51 // Updating the same notification maintains the same count.
52 notifications_->ShowNotification(DesktopNotifications::DEVICE, "path");
53 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest());
54 EXPECT_TRUE(FindNotification("Device_path"));
55
56 // A new notification increases the count.
57 notifications_->ShowNotification(DesktopNotifications::DEVICE_FAIL,
58 "path");
59 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest());
60 EXPECT_TRUE(FindNotification("DeviceFail_path"));
61 EXPECT_TRUE(FindNotification("Device_path"));
62
63 // Hiding a notification removes it from our data.
64 notifications_->HideNotification(DesktopNotifications::DEVICE_FAIL,
65 "path");
66 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest());
67 EXPECT_FALSE(FindNotification("DeviceFail_path"));
68 EXPECT_TRUE(FindNotification("Device_path"));
69 };
70
71 // Note: Delayed tests use a delay time of 0 so that tasks wille execute
72 // when RunAllPendingInMessageLoop() is called.
73 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest,
74 ShowDelayedTest) {
75 InitNotifications();
76 // Adding a delayed notification does not create a notification.
77 notifications_->ShowNotificationDelayed(DesktopNotifications::DEVICE,
78 "path",
79 base::TimeDelta::FromSeconds(0));
80 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest());
81 EXPECT_FALSE(FindNotification("Device_path"));
82
83 // Running the message loop should create the notification.
84 content::RunAllPendingInMessageLoop();
85 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest());
86 EXPECT_TRUE(FindNotification("Device_path"));
87
88 // Showing a notification both immediately and delayed results in one
89 // additional notification.
90 notifications_->ShowNotificationDelayed(DesktopNotifications::DEVICE_FAIL,
91 "path",
92 base::TimeDelta::FromSeconds(0));
93 notifications_->ShowNotification(DesktopNotifications::DEVICE_FAIL,
94 "path");
95 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest());
96 EXPECT_TRUE(FindNotification("DeviceFail_path"));
97
98 // When the delayed notification is processed, it's an update, so we still
99 // only have two notifications.
100 content::RunAllPendingInMessageLoop();
101 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest());
102 EXPECT_TRUE(FindNotification("DeviceFail_path"));
103
104 // If we schedule a show for later, then hide before it becomes visible,
105 // the notification should not be added.
106 notifications_->ShowNotificationDelayed(DesktopNotifications::FORMAT_FAIL,
107 "path",
108 base::TimeDelta::FromSeconds(0));
109 notifications_->HideNotification(DesktopNotifications::FORMAT_FAIL,
110 "path");
111 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest());
112 EXPECT_TRUE(FindNotification("Device_path"));
113 EXPECT_TRUE(FindNotification("DeviceFail_path"));
114 EXPECT_FALSE(FindNotification("Format_path"));
115
116 // Even after processing messages, no new notification should be added.
117 content::RunAllPendingInMessageLoop();
118 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest());
119 EXPECT_TRUE(FindNotification("Device_path"));
120 EXPECT_TRUE(FindNotification("DeviceFail_path"));
121 EXPECT_FALSE(FindNotification("Format_path"));
122 }
123
124 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest,
125 HideDelayedTest) {
126 InitNotifications();
127 // Showing now, and scheduling a hide for later, results in one notification.
128 notifications_->ShowNotification(DesktopNotifications::DEVICE, "path");
129 notifications_->HideNotificationDelayed(DesktopNotifications::DEVICE,
130 "path",
131 base::TimeDelta::FromSeconds(0));
132 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest());
133 EXPECT_TRUE(FindNotification("Device_path"));
134
135 // Running pending messges should remove the notification.
136 content::RunAllPendingInMessageLoop();
137 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest());
138
139 // Immediate show then hide results in no notification.
140 notifications_->ShowNotification(DesktopNotifications::DEVICE_FAIL,
141 "path");
142 notifications_->HideNotification(DesktopNotifications::DEVICE_FAIL,
143 "path");
144 content::RunAllPendingInMessageLoop();
145 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest());
146
147 // Delayed hide for a notification that doesn't exist does nothing.
148 notifications_->HideNotificationDelayed(DesktopNotifications::DEVICE_FAIL,
149 "path",
150 base::TimeDelta::FromSeconds(0));
151 content::RunAllPendingInMessageLoop();
152 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest());
153 }
154
155 // Tests that showing two notifications with the same notification ids and
156 // different messages results in showing the second notification's message.
157 // This situation can be encountered while showing notifications for
158 // MountCompletedEvent.
159 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest,
160 IdenticalNotificationIds) {
161 InitNotifications();
162 notifications_->RegisterDevice("path");
163
164 notifications_->ManageNotificationsOnMountCompleted("path", "", false, false,
165 false);
166 content::RunAllPendingInMessageLoop();
167
168 EXPECT_EQ(
169 l10n_util::GetStringUTF16(IDS_DEVICE_UNKNOWN_DEFAULT_MESSAGE),
170 notifications_->GetNotificationMessageForTest("DeviceFail_path"));
171
172 notifications_->ManageNotificationsOnMountCompleted("path", "", false, false,
173 false);
174 content::RunAllPendingInMessageLoop();
175
176 EXPECT_EQ(
177 l10n_util::GetStringUTF16(IDS_MULTIPART_DEVICE_UNSUPPORTED_DEFAULT_MESSAGE),
178 notifications_->GetNotificationMessageForTest("DeviceFail_path"));
179
180 notifications_->UnregisterDevice("path");
181 }
182
183 } // namespace file_manager.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698