| Index: ui/views/corewm/cursor_manager_unittest.cc
|
| diff --git a/ui/views/corewm/cursor_manager_unittest.cc b/ui/views/corewm/cursor_manager_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f5eb9e436b2b11b1aedb53e2489f5dd31d47898e
|
| --- /dev/null
|
| +++ b/ui/views/corewm/cursor_manager_unittest.cc
|
| @@ -0,0 +1,243 @@
|
| +// Copyright (c) 2013 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 "ui/views/corewm/cursor_manager.h"
|
| +
|
| +#include "ui/views/corewm/native_cursor_manager.h"
|
| +#include "ui/views/test/views_test_base.h"
|
| +
|
| +namespace {
|
| +
|
| +class TestingCursorManager : public views::corewm::NativeCursorManager {
|
| + public:
|
| + gfx::NativeCursor current_cursor() { return cursor_; }
|
| +
|
| + // Overridden from views::corewm::NativeCursorManager:
|
| + virtual void SetDeviceScaleFactor(
|
| + float device_scale_factor,
|
| + views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {}
|
| +
|
| + virtual void SetCursor(
|
| + gfx::NativeCursor cursor,
|
| + views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| + cursor_ = cursor;
|
| + delegate->CommitCursor(cursor);
|
| + }
|
| +
|
| + virtual void SetVisibility(
|
| + bool visible,
|
| + views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| + delegate->CommitVisibility(visible);
|
| + }
|
| +
|
| + virtual void SetMouseEventsEnabled(
|
| + bool enabled,
|
| + views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| + delegate->CommitMouseEventsEnabled(enabled);
|
| + }
|
| +
|
| + private:
|
| + gfx::NativeCursor cursor_;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class CursorManagerTest : public views::ViewsTestBase {
|
| + protected:
|
| + CursorManagerTest()
|
| + : delegate_(new TestingCursorManager),
|
| + cursor_manager_(scoped_ptr<views::corewm::NativeCursorManager>(
|
| + delegate_)) {
|
| + }
|
| +
|
| + gfx::NativeCursor current_cursor() { return delegate_->current_cursor(); }
|
| +
|
| + TestingCursorManager* delegate_;
|
| + views::corewm::CursorManager cursor_manager_;
|
| +};
|
| +
|
| +TEST_F(CursorManagerTest, ShowHideCursor) {
|
| + cursor_manager_.SetCursor(ui::kCursorCopy);
|
| + EXPECT_EQ(ui::kCursorCopy, current_cursor().native_type());
|
| +
|
| + cursor_manager_.ShowCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + cursor_manager_.HideCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + // The current cursor does not change even when the cursor is not shown.
|
| + EXPECT_EQ(ui::kCursorCopy, current_cursor().native_type());
|
| +
|
| + // Check if cursor visibility is locked.
|
| + cursor_manager_.LockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + cursor_manager_.ShowCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| +
|
| + cursor_manager_.LockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + cursor_manager_.HideCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| +
|
| + // Checks setting visiblity while cursor is locked does not affect the
|
| + // subsequent uses of UnlockCursor.
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.HideCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| +
|
| + cursor_manager_.ShowCursor();
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| +
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.ShowCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| +
|
| + cursor_manager_.HideCursor();
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| +}
|
| +
|
| +// Verifies that LockCursor/UnlockCursor work correctly with
|
| +// EnableMouseEvents and DisableMouseEvents
|
| +TEST_F(CursorManagerTest, EnableDisableMouseEvents) {
|
| + cursor_manager_.SetCursor(ui::kCursorCopy);
|
| + EXPECT_EQ(ui::kCursorCopy, current_cursor().native_type());
|
| +
|
| + cursor_manager_.EnableMouseEvents();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + // The current cursor does not change even when the cursor is not shown.
|
| + EXPECT_EQ(ui::kCursorCopy, current_cursor().native_type());
|
| +
|
| + // Check if cursor enable state is locked.
|
| + cursor_manager_.LockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.EnableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + cursor_manager_.LockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + // Checks enabling cursor while cursor is locked does not affect the
|
| + // subsequent uses of UnlockCursor.
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.DisableMouseEvents();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + cursor_manager_.EnableMouseEvents();
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.EnableMouseEvents();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + cursor_manager_.DisableMouseEvents();
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| +}
|
| +
|
| +TEST_F(CursorManagerTest, IsMouseEventsEnabled) {
|
| + cursor_manager_.EnableMouseEvents();
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| +}
|
| +
|
| +// Verifies that the mouse events enable state changes correctly when
|
| +// ShowCursor/HideCursor and EnableMouseEvents/DisableMouseEvents are used
|
| +// together.
|
| +TEST_F(CursorManagerTest, ShowAndEnable) {
|
| + // Changing the visibility of the cursor does not affect the enable state.
|
| + cursor_manager_.EnableMouseEvents();
|
| + cursor_manager_.ShowCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.HideCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.ShowCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + // When mouse events are disabled, it also gets invisible.
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + // When mouse events are enabled, it restores the visibility state.
|
| + cursor_manager_.EnableMouseEvents();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + cursor_manager_.ShowCursor();
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.EnableMouseEvents();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + cursor_manager_.HideCursor();
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.EnableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
|
| +
|
| + // When mouse events are disabled, ShowCursor is ignored.
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.ShowCursor();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| + cursor_manager_.DisableMouseEvents();
|
| + EXPECT_FALSE(cursor_manager_.IsCursorVisible());
|
| + EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
|
| +}
|
| +
|
| +// Verifies that calling DisableMouseEvents multiple times in a row makes no
|
| +// difference compared with calling it once.
|
| +// This is a regression test for http://crbug.com/169404.
|
| +TEST_F(CursorManagerTest, MultipleDisableMouseEvents) {
|
| + cursor_manager_.DisableMouseEvents();
|
| + cursor_manager_.DisableMouseEvents();
|
| + cursor_manager_.EnableMouseEvents();
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| +}
|
| +
|
| +// Verifies that calling EnableMouseEvents multiple times in a row makes no
|
| +// difference compared with calling it once.
|
| +TEST_F(CursorManagerTest, MultipleEnableMouseEvents) {
|
| + cursor_manager_.DisableMouseEvents();
|
| + cursor_manager_.EnableMouseEvents();
|
| + cursor_manager_.EnableMouseEvents();
|
| + cursor_manager_.LockCursor();
|
| + cursor_manager_.UnlockCursor();
|
| + EXPECT_TRUE(cursor_manager_.IsCursorVisible());
|
| +}
|
|
|