- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / panels / panel_mouse_watcher_unittest.cc
1 // Copyright (c) 2011 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 "base/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h"
7 #include "chrome/browser/ui/panels/panel_mouse_watcher.h"
8 #include "chrome/browser/ui/panels/panel_mouse_watcher_observer.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/gfx/point.h"
11
12 class TestMouseObserver : public PanelMouseWatcherObserver {
13  public:
14   TestMouseObserver() : mouse_movements_(0) {}
15   // Overridden from PanelMouseWatcherObserver:
16   virtual void OnMouseMove(const gfx::Point& mouse_position) OVERRIDE {
17     ++mouse_movements_;
18   }
19   int mouse_movements_;
20 };
21
22 class PanelMouseWatcherTest : public testing::Test {
23 };
24
25 TEST_F(PanelMouseWatcherTest, StartStopWatching) {
26   base::MessageLoop loop(base::MessageLoop::TYPE_UI);
27
28   scoped_ptr<PanelMouseWatcher> watcher(PanelMouseWatcher::Create());
29   EXPECT_FALSE(watcher->IsActive());
30
31   scoped_ptr<TestMouseObserver> user1(new TestMouseObserver());
32   scoped_ptr<TestMouseObserver> user2(new TestMouseObserver());
33
34   // No observers.
35   watcher->NotifyMouseMovement(gfx::Point(42, 101));
36   EXPECT_EQ(0, user1->mouse_movements_);
37   EXPECT_EQ(0, user2->mouse_movements_);
38
39   // Only one mouse observer.
40   watcher->AddObserver(user1.get());
41   EXPECT_TRUE(watcher->IsActive());
42   watcher->NotifyMouseMovement(gfx::Point(42, 101));
43   EXPECT_GE(user1->mouse_movements_, 1);
44   EXPECT_EQ(0, user2->mouse_movements_);
45   watcher->RemoveObserver(user1.get());
46   EXPECT_FALSE(watcher->IsActive());
47
48   // More than one mouse observer.
49   watcher->AddObserver(user1.get());
50   EXPECT_TRUE(watcher->IsActive());
51   watcher->AddObserver(user2.get());
52   watcher->NotifyMouseMovement(gfx::Point(101, 42));
53   EXPECT_GE(user1->mouse_movements_, 2);
54   EXPECT_GE(user2->mouse_movements_, 1);
55
56   // Back to one observer.
57   watcher->RemoveObserver(user1.get());
58   EXPECT_TRUE(watcher->IsActive());
59   int saved_count = user1->mouse_movements_;
60   watcher->NotifyMouseMovement(gfx::Point(1, 2));
61   EXPECT_EQ(saved_count, user1->mouse_movements_);
62   EXPECT_GE(user2->mouse_movements_, 2);
63   watcher->RemoveObserver(user2.get());
64   EXPECT_FALSE(watcher->IsActive());
65 }