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