mirror_window_controller_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
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_MirrorCursorBasic DISABLED_MirrorCursorBasic 26#define MAYBE_MirrorCursorLocations DISABLED_MirrorCursorLocations 27#else 28#define MAYBE_MirrorCursorBasic MirrorCursorBasic 29#define MAYBE_MirrorCursorLocations MirrorCursorLocations 30#endif 31 32TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorBasic) { 33 test::MirrorWindowTestApi test_api; 34 aura::test::TestWindowDelegate test_window_delegate; 35 test_window_delegate.set_window_component(HTTOP); 36 37 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 38 display_manager->SetSoftwareMirroring(true); 39 UpdateDisplay("400x400,400x400"); 40 aura::RootWindow* root = Shell::GetInstance()->GetPrimaryRootWindow(); 41 scoped_ptr<aura::Window> window(aura::test::CreateTestWindowWithDelegate( 42 &test_window_delegate, 43 0, 44 gfx::Rect(50, 50, 100, 100), 45 root)); 46 window->Show(); 47 window->SetName("foo"); 48 49 EXPECT_TRUE(test_api.GetCursorWindow()); 50 EXPECT_EQ("50,50 100x100", window->bounds().ToString()); 51 52 aura::test::EventGenerator generator(root); 53 generator.MoveMouseTo(10, 10); 54 55 // Test if cursor movement is propertly reflected in mirror window. 56 gfx::Point hot_point = test_api.GetCursorHotPoint(); 57 gfx::Point cursor_window_origin = 58 test_api.GetCursorWindow()->bounds().origin(); 59 EXPECT_EQ("4,4", hot_point.ToString()); 60 EXPECT_EQ(10 - hot_point.x(), cursor_window_origin.x()); 61 EXPECT_EQ(10 - hot_point.y(), cursor_window_origin.y()); 62 EXPECT_EQ(ui::kCursorNull, test_api.GetCurrentCursorType()); 63 EXPECT_TRUE(test_api.GetCursorWindow()->IsVisible()); 64 65 // Test if cursor type change is propertly reflected in mirror window. 66 generator.MoveMouseTo(100, 100); 67 hot_point = test_api.GetCursorHotPoint(); 68 cursor_window_origin = test_api.GetCursorWindow()->bounds().origin(); 69 EXPECT_EQ(100 - hot_point.x(), cursor_window_origin.x()); 70 EXPECT_EQ(100 - hot_point.y(), cursor_window_origin.y()); 71 EXPECT_EQ(ui::kCursorNorthResize, test_api.GetCurrentCursorType()); 72 73 // Test if visibility change is propertly reflected in mirror window. 74 // A key event hides cursor. 75 generator.PressKey(ui::VKEY_A, 0); 76 generator.ReleaseKey(ui::VKEY_A, 0); 77 EXPECT_FALSE(test_api.GetCursorWindow()->IsVisible()); 78 79 // Mouse event makes it visible again. 80 generator.MoveMouseTo(300, 300); 81 hot_point = test_api.GetCursorHotPoint(); 82 cursor_window_origin = test_api.GetCursorWindow()->bounds().origin(); 83 EXPECT_EQ(300 - hot_point.x(), cursor_window_origin.x()); 84 EXPECT_EQ(300 - hot_point.y(), cursor_window_origin.y()); 85 EXPECT_EQ(ui::kCursorNull, test_api.GetCurrentCursorType()); 86 EXPECT_TRUE(test_api.GetCursorWindow()->IsVisible()); 87} 88 89// Make sure that the mirror cursor's location is same as 90// the source display's host location in the mirror root window's 91// coordinates. 92TEST_F(MirrorWindowControllerTest, MAYBE_MirrorCursorLocations) { 93 test::MirrorWindowTestApi test_api; 94 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 95 display_manager->SetSoftwareMirroring(true); 96 97 // Test with device scale factor. 98 UpdateDisplay("400x600*2,400x600"); 99 100 aura::RootWindow* root = Shell::GetInstance()->GetPrimaryRootWindow(); 101 aura::test::EventGenerator generator(root); 102 generator.MoveMouseToInHost(10, 20); 103 104 gfx::Point hot_point = test_api.GetCursorHotPoint(); 105 EXPECT_EQ("8,9", hot_point.ToString()); 106 gfx::Point cursor_window_origin = 107 test_api.GetCursorWindow()->bounds().origin(); 108 EXPECT_EQ(10 - hot_point.x(), cursor_window_origin.x()); 109 EXPECT_EQ(20 - hot_point.y(), cursor_window_origin.y()); 110 111 // Test with ui scale 112 UpdateDisplay("400x600*0.5,400x600"); 113 generator.MoveMouseToInHost(20, 30); 114 115 hot_point = test_api.GetCursorHotPoint(); 116 EXPECT_EQ("4,4", hot_point.ToString()); 117 cursor_window_origin = test_api.GetCursorWindow()->bounds().origin(); 118 EXPECT_EQ(20 - hot_point.x(), cursor_window_origin.x()); 119 EXPECT_EQ(30 - hot_point.y(), cursor_window_origin.y()); 120 121 // Test with rotation 122 UpdateDisplay("400x600/r,400x600"); 123 generator.MoveMouseToInHost(30, 40); 124 125 hot_point = test_api.GetCursorHotPoint(); 126 EXPECT_EQ("4,4", hot_point.ToString()); 127 cursor_window_origin = test_api.GetCursorWindow()->bounds().origin(); 128 EXPECT_EQ(30 - hot_point.x(), cursor_window_origin.x()); 129 EXPECT_EQ(40 - hot_point.y(), cursor_window_origin.y()); 130} 131 132} // namsspace internal 133} // namespace ash 134