| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/message_loop/message_loop.h" |
| #include "chrome/browser/ui/panels/panel_mouse_watcher.h" |
| #include "chrome/browser/ui/panels/panel_mouse_watcher_observer.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/gfx/point.h" |
| |
| class TestMouseObserver : public PanelMouseWatcherObserver { |
| public: |
| TestMouseObserver() : mouse_movements_(0) {} |
| // Overridden from PanelMouseWatcherObserver: |
| virtual void OnMouseMove(const gfx::Point& mouse_position) OVERRIDE { |
| ++mouse_movements_; |
| } |
| int mouse_movements_; |
| }; |
| |
| class PanelMouseWatcherTest : public testing::Test { |
| }; |
| |
| TEST_F(PanelMouseWatcherTest, StartStopWatching) { |
| base::MessageLoopForUI loop; |
| |
| scoped_ptr<PanelMouseWatcher> watcher(PanelMouseWatcher::Create()); |
| EXPECT_FALSE(watcher->IsActive()); |
| |
| scoped_ptr<TestMouseObserver> user1(new TestMouseObserver()); |
| scoped_ptr<TestMouseObserver> user2(new TestMouseObserver()); |
| |
| // No observers. |
| watcher->NotifyMouseMovement(gfx::Point(42, 101)); |
| EXPECT_EQ(0, user1->mouse_movements_); |
| EXPECT_EQ(0, user2->mouse_movements_); |
| |
| // Only one mouse observer. |
| watcher->AddObserver(user1.get()); |
| EXPECT_TRUE(watcher->IsActive()); |
| watcher->NotifyMouseMovement(gfx::Point(42, 101)); |
| EXPECT_GE(user1->mouse_movements_, 1); |
| EXPECT_EQ(0, user2->mouse_movements_); |
| watcher->RemoveObserver(user1.get()); |
| EXPECT_FALSE(watcher->IsActive()); |
| |
| // More than one mouse observer. |
| watcher->AddObserver(user1.get()); |
| EXPECT_TRUE(watcher->IsActive()); |
| watcher->AddObserver(user2.get()); |
| watcher->NotifyMouseMovement(gfx::Point(101, 42)); |
| EXPECT_GE(user1->mouse_movements_, 2); |
| EXPECT_GE(user2->mouse_movements_, 1); |
| |
| // Back to one observer. |
| watcher->RemoveObserver(user1.get()); |
| EXPECT_TRUE(watcher->IsActive()); |
| int saved_count = user1->mouse_movements_; |
| watcher->NotifyMouseMovement(gfx::Point(1, 2)); |
| EXPECT_EQ(saved_count, user1->mouse_movements_); |
| EXPECT_GE(user2->mouse_movements_, 2); |
| watcher->RemoveObserver(user2.get()); |
| EXPECT_FALSE(watcher->IsActive()); |
| } |