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.
5 #include "ui/message_center/message_center_impl.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/message_center/message_center.h"
13 #include "ui/message_center/notification_types.h"
15 namespace message_center
{
18 class MessageCenterImplTest
: public testing::Test
,
19 public MessageCenterObserver
{
21 MessageCenterImplTest() {}
23 virtual void SetUp() OVERRIDE
{
24 MessageCenter::Initialize();
25 message_center_
= MessageCenter::Get();
26 loop_
.reset(new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT
));
27 run_loop_
.reset(new base::RunLoop());
28 closure_
= run_loop_
->QuitClosure();
31 virtual void TearDown() OVERRIDE
{
34 message_center_
= NULL
;
35 MessageCenter::Shutdown();
38 MessageCenter
* message_center() const { return message_center_
; }
39 base::RunLoop
* run_loop() const { return run_loop_
.get(); }
40 base::Closure
closure() const { return closure_
; }
43 MessageCenter
* message_center_
;
44 scoped_ptr
<base::MessageLoop
> loop_
;
45 scoped_ptr
<base::RunLoop
> run_loop_
;
46 base::Closure closure_
;
48 DISALLOW_COPY_AND_ASSIGN(MessageCenterImplTest
);
55 class MockPopupTimersController
: public PopupTimersController
{
57 MockPopupTimersController(MessageCenter
* message_center
,
58 base::Closure quit_closure
)
59 : PopupTimersController(message_center
),
60 timer_finished_(false),
61 quit_closure_(quit_closure
) {}
62 virtual ~MockPopupTimersController() {}
64 virtual void TimerFinished(const std::string
& id
) OVERRIDE
{
65 LOG(INFO
) << "In timer finished for id " << id
;
66 base::MessageLoop::current()->PostTask(FROM_HERE
, quit_closure_
);
67 timer_finished_
= true;
71 bool timer_finished() const { return timer_finished_
; }
72 const std::string
& last_id() const { return last_id_
; }
77 base::Closure quit_closure_
;
80 TEST_F(MessageCenterImplTest
, PopupTimersEmptyController
) {
81 scoped_ptr
<PopupTimersController
> popup_timers_controller
=
82 make_scoped_ptr(new PopupTimersController(message_center()));
84 // Test that all functions succed without any timers created.
85 popup_timers_controller
->PauseAll();
86 popup_timers_controller
->StartAll();
87 popup_timers_controller
->CancelAll();
88 popup_timers_controller
->TimerFinished("unknown");
89 popup_timers_controller
->PauseTimer("unknown");
90 popup_timers_controller
->CancelTimer("unknown");
93 TEST_F(MessageCenterImplTest
, PopupTimersControllerStartTimer
) {
94 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
96 new MockPopupTimersController(message_center(), closure()));
97 popup_timers_controller
->StartTimer("test",
98 base::TimeDelta::FromMilliseconds(1));
100 EXPECT_TRUE(popup_timers_controller
->timer_finished());
103 TEST_F(MessageCenterImplTest
, PopupTimersControllerPauseTimer
) {
104 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
106 new MockPopupTimersController(message_center(), closure()));
107 popup_timers_controller
->StartTimer("test",
108 base::TimeDelta::FromMilliseconds(1));
109 popup_timers_controller
->PauseTimer("test");
110 run_loop()->RunUntilIdle();
112 EXPECT_FALSE(popup_timers_controller
->timer_finished());
115 TEST_F(MessageCenterImplTest
, PopupTimersControllerCancelTimer
) {
116 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
118 new MockPopupTimersController(message_center(), closure()));
119 popup_timers_controller
->StartTimer("test",
120 base::TimeDelta::FromMilliseconds(1));
121 popup_timers_controller
->CancelTimer("test");
122 run_loop()->RunUntilIdle();
124 EXPECT_FALSE(popup_timers_controller
->timer_finished());
127 TEST_F(MessageCenterImplTest
, PopupTimersControllerPauseAllTimers
) {
128 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
130 new MockPopupTimersController(message_center(), closure()));
131 popup_timers_controller
->StartTimer("test",
132 base::TimeDelta::FromMilliseconds(1));
133 popup_timers_controller
->PauseAll();
134 run_loop()->RunUntilIdle();
136 EXPECT_FALSE(popup_timers_controller
->timer_finished());
139 TEST_F(MessageCenterImplTest
, PopupTimersControllerStartAllTimers
) {
140 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
142 new MockPopupTimersController(message_center(), closure()));
143 popup_timers_controller
->StartTimer("test",
144 base::TimeDelta::FromMilliseconds(1));
145 popup_timers_controller
->PauseAll();
146 popup_timers_controller
->StartAll();
149 EXPECT_TRUE(popup_timers_controller
->timer_finished());
152 TEST_F(MessageCenterImplTest
, PopupTimersControllerStartMultipleTimers
) {
153 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
155 new MockPopupTimersController(message_center(), closure()));
156 popup_timers_controller
->StartTimer("test",
157 base::TimeDelta::FromMilliseconds(5));
158 popup_timers_controller
->StartTimer("test2",
159 base::TimeDelta::FromMilliseconds(1));
160 popup_timers_controller
->StartTimer("test3",
161 base::TimeDelta::FromMilliseconds(3));
162 popup_timers_controller
->PauseAll();
163 popup_timers_controller
->StartAll();
166 EXPECT_EQ(popup_timers_controller
->last_id(), "test2");
167 EXPECT_TRUE(popup_timers_controller
->timer_finished());
170 TEST_F(MessageCenterImplTest
, PopupTimersControllerStartMultipleTimersPause
) {
171 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
173 new MockPopupTimersController(message_center(), closure()));
174 popup_timers_controller
->StartTimer("test",
175 base::TimeDelta::FromMilliseconds(5));
176 popup_timers_controller
->StartTimer("test2",
177 base::TimeDelta::FromMilliseconds(1));
178 popup_timers_controller
->StartTimer("test3",
179 base::TimeDelta::FromMilliseconds(3));
180 popup_timers_controller
->PauseTimer("test2");
184 EXPECT_EQ(popup_timers_controller
->last_id(), "test3");
185 EXPECT_TRUE(popup_timers_controller
->timer_finished());
188 TEST_F(MessageCenterImplTest
, PopupTimersControllerResetTimer
) {
189 scoped_ptr
<MockPopupTimersController
> popup_timers_controller
=
191 new MockPopupTimersController(message_center(), closure()));
192 popup_timers_controller
->StartTimer("test",
193 base::TimeDelta::FromMilliseconds(5));
194 popup_timers_controller
->StartTimer("test2",
195 base::TimeDelta::FromMilliseconds(1));
196 popup_timers_controller
->StartTimer("test3",
197 base::TimeDelta::FromMilliseconds(3));
198 popup_timers_controller
->PauseTimer("test2");
199 popup_timers_controller
->ResetTimer("test",
200 base::TimeDelta::FromMilliseconds(2));
204 EXPECT_EQ(popup_timers_controller
->last_id(), "test");
205 EXPECT_TRUE(popup_timers_controller
->timer_finished());
208 } // namespace internal
210 } // namespace message_center