mirror_window_controller_unittest.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
1// Copyright (c) 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 "ash/display/mirror_window_controller.h" 6 7#include "ash/display/display_manager.h" 8#include "ash/shell.h" 9#include "ash/test/ash_test_base.h" 10#include "ash/test/mirror_window_test_api.h" 11#include "ui/aura/root_window.h" 12#include "ui/aura/test/event_generator.h" 13#include "ui/aura/test/test_window_delegate.h" 14#include "ui/aura/test/test_windows.h" 15#include "ui/aura/window.h" 16#include "ui/base/hit_test.h" 17 18namespace ash { 19namespace internal { 20 21typedef test::AshTestBase MirrorWindowControllerTest; 22 23#if defined(OS_WIN) 24// Software mirroring does not work on win. 25#define MAYBE_MirrorCursor DISABLED_MirrorCursor 26#else 27#define MAYBE_MirrorCursor MirrorCursor 28#endif 29 30TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursor) { 31 test::MirrorWindowTestApi test_api; 32 aura::test::TestWindowDelegate test_window_delegate; 33 test_window_delegate.set_window_component(HTTOP); 34 35 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 36 display_manager->SetSoftwareMirroring(true); 37 UpdateDisplay("400x400,400x400"); 38 aura::RootWindow* root = Shell::GetInstance()->GetPrimaryRootWindow(); 39 scoped_ptr<aura::Window> window(aura::test::CreateTestWindowWithDelegate( 40 &test_window_delegate, 41 0, 42 gfx::Rect(50, 50, 100, 100), 43 root)); 44 window->Show(); 45 window->SetName("foo"); 46 47 EXPECT_TRUE(test_api.GetCursorWindow()); 48 EXPECT_EQ("50,50 100x100", window->bounds().ToString()); 49 50 aura::test::EventGenerator generator(root); 51 generator.MoveMouseTo(10, 10); 52 53 // Test if cursor movement is propertly reflected in mirror window. 54 gfx::Point hot_point = test_api.GetCursorHotPoint(); 55 gfx::Point cursor_window_origin = 56 test_api.GetCursorWindow()->bounds().origin(); 57 EXPECT_EQ(10 - hot_point.x(), cursor_window_origin.x()); 58 EXPECT_EQ(10 - hot_point.y(), cursor_window_origin.y()); 59 EXPECT_EQ(ui::kCursorNull, test_api.GetCurrentCursorType()); 60 EXPECT_TRUE(test_api.GetCursorWindow()->IsVisible()); 61 62 // Test if cursor type change is propertly reflected in mirror window. 63 generator.MoveMouseTo(100, 100); 64 hot_point = test_api.GetCursorHotPoint(); 65 cursor_window_origin = test_api.GetCursorWindow()->bounds().origin(); 66 EXPECT_EQ(100 - hot_point.x(), cursor_window_origin.x()); 67 EXPECT_EQ(100 - hot_point.y(), cursor_window_origin.y()); 68 EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType()); 69 70 // Test if visibility change is propertly reflected in mirror window. 71 // A key event hides cursor. 72 generator.PressKey(ui::VKEY_A, 0); 73 generator.ReleaseKey(ui::VKEY_A, 0); 74 EXPECT_FALSE(test_api.GetCursorWindow()->IsVisible()); 75 76 // Mouse event makes it visible again. 77 generator.MoveMouseTo(300, 300); 78 hot_point = test_api.GetCursorHotPoint(); 79 cursor_window_origin = test_api.GetCursorWindow()->bounds().origin(); 80 EXPECT_EQ(300 - hot_point.x(), cursor_window_origin.x()); 81 EXPECT_EQ(300 - hot_point.y(), cursor_window_origin.y()); 82 EXPECT_EQ(ui::kCursorNull, test_api.GetCurrentCursorType()); 83 EXPECT_TRUE(test_api.GetCursorWindow()->IsVisible()); 84} 85 86} // namsspace internal 87} // namespace ash 88