blob: 9ab36005d8b9dccdb19085590b7731f87efb4256 [file] [log] [blame]
[email protected]55ad8c12014-01-17 18:24:331// Copyright 2014 The Chromium Authors. All rights reserved.
[email protected]8d625fb2012-07-18 16:40:062// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]55ad8c12014-01-17 18:24:335#include "ash/screen_util.h"
[email protected]8d625fb2012-07-18 16:40:066
[email protected]431552c2012-10-23 00:38:337#include "ash/root_window_controller.h"
[email protected]478c6c32013-03-09 02:50:588#include "ash/shelf/shelf_layout_manager.h"
9#include "ash/shelf/shelf_widget.h"
[email protected]8d625fb2012-07-18 16:40:0610#include "ash/shell.h"
11#include "ash/test/ash_test_base.h"
12#include "ash/wm/window_util.h"
13#include "ui/aura/env.h"
[email protected]8d625fb2012-07-18 16:40:0614#include "ui/aura/window.h"
[email protected]fcc51c952014-02-21 21:31:2615#include "ui/aura/window_event_dispatcher.h"
[email protected]8d625fb2012-07-18 16:40:0616#include "ui/views/widget/widget.h"
17#include "ui/views/widget/widget_delegate.h"
18
19namespace ash {
20namespace test {
[email protected]8d625fb2012-07-18 16:40:0621
[email protected]55ad8c12014-01-17 18:24:3322typedef test::AshTestBase ScreenUtilTest;
[email protected]8d625fb2012-07-18 16:40:0623
[email protected]55ad8c12014-01-17 18:24:3324TEST_F(ScreenUtilTest, Bounds) {
[email protected]e75642a2013-06-12 17:21:1825 if (!SupportsMultipleDisplays())
26 return;
27
[email protected]f634dd32012-07-23 22:49:0728 UpdateDisplay("600x600,500x500");
[email protected]478c6c32013-03-09 02:50:5829 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()->
30 SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
[email protected]8d625fb2012-07-18 16:40:0631
[email protected]a2e6af12013-01-07 21:40:3532 views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds(
33 NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100));
[email protected]8d625fb2012-07-18 16:40:0634 primary->Show();
[email protected]a2e6af12013-01-07 21:40:3535 views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds(
36 NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100));
[email protected]8d625fb2012-07-18 16:40:0637 secondary->Show();
38
39 // Maximized bounds
[email protected]7b675df612012-09-16 18:33:2040 EXPECT_EQ("0,0 600x597",
[email protected]55ad8c12014-01-17 18:24:3341 ScreenUtil::GetMaximizedWindowBoundsInParent(
[email protected]8d625fb2012-07-18 16:40:0642 primary->GetNativeView()).ToString());
[email protected]f54effe2013-09-05 01:09:0243 EXPECT_EQ("0,0 500x453",
[email protected]55ad8c12014-01-17 18:24:3344 ScreenUtil::GetMaximizedWindowBoundsInParent(
[email protected]8c0ec432013-05-10 04:33:3945 secondary->GetNativeView()).ToString());
[email protected]8d625fb2012-07-18 16:40:0646
[email protected]8d625fb2012-07-18 16:40:0647 // Display bounds
48 EXPECT_EQ("0,0 600x600",
[email protected]55ad8c12014-01-17 18:24:3349 ScreenUtil::GetDisplayBoundsInParent(
[email protected]8d625fb2012-07-18 16:40:0650 primary->GetNativeView()).ToString());
51 EXPECT_EQ("0,0 500x500",
[email protected]55ad8c12014-01-17 18:24:3352 ScreenUtil::GetDisplayBoundsInParent(
[email protected]8d625fb2012-07-18 16:40:0653 secondary->GetNativeView()).ToString());
54
55 // Work area bounds
[email protected]eefd51b22012-09-25 20:26:2456 EXPECT_EQ("0,0 600x597",
[email protected]55ad8c12014-01-17 18:24:3357 ScreenUtil::GetDisplayWorkAreaBoundsInParent(
[email protected]8d625fb2012-07-18 16:40:0658 primary->GetNativeView()).ToString());
[email protected]f54effe2013-09-05 01:09:0259 EXPECT_EQ("0,0 500x453",
[email protected]55ad8c12014-01-17 18:24:3360 ScreenUtil::GetDisplayWorkAreaBoundsInParent(
[email protected]8c0ec432013-05-10 04:33:3961 secondary->GetNativeView()).ToString());
[email protected]8d625fb2012-07-18 16:40:0662}
[email protected]8d625fb2012-07-18 16:40:0663
[email protected]805155f2013-04-10 02:11:2064// Test verifies a stable handling of secondary screen widget changes
65// (crbug.com/226132).
[email protected]55ad8c12014-01-17 18:24:3366TEST_F(ScreenUtilTest, StabilityTest) {
[email protected]e75642a2013-06-12 17:21:1867 if (!SupportsMultipleDisplays())
68 return;
69
[email protected]805155f2013-04-10 02:11:2070 UpdateDisplay("600x600,500x500");
71 views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds(
72 NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100));
73 EXPECT_EQ(Shell::GetAllRootWindows()[1],
74 secondary->GetNativeView()->GetRootWindow());
75 secondary->Show();
76 secondary->Maximize();
77 secondary->Show();
78 secondary->SetFullscreen(true);
79 secondary->Hide();
80 secondary->Close();
81}
82
[email protected]55ad8c12014-01-17 18:24:3383TEST_F(ScreenUtilTest, ConvertRect) {
[email protected]e75642a2013-06-12 17:21:1884 if (!SupportsMultipleDisplays())
85 return;
86
[email protected]f634dd32012-07-23 22:49:0787 UpdateDisplay("600x600,500x500");
[email protected]8d625fb2012-07-18 16:40:0688
[email protected]a2e6af12013-01-07 21:40:3589 views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds(
90 NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100));
[email protected]8d625fb2012-07-18 16:40:0691 primary->Show();
[email protected]a2e6af12013-01-07 21:40:3592 views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds(
93 NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100));
[email protected]8d625fb2012-07-18 16:40:0694 secondary->Show();
95
96 EXPECT_EQ(
97 "0,0 100x100",
[email protected]55ad8c12014-01-17 18:24:3398 ScreenUtil::ConvertRectFromScreen(
[email protected]8d625fb2012-07-18 16:40:0699 primary->GetNativeView(), gfx::Rect(10, 10, 100, 100)).ToString());
100 EXPECT_EQ(
101 "10,10 100x100",
[email protected]55ad8c12014-01-17 18:24:33102 ScreenUtil::ConvertRectFromScreen(
[email protected]8d625fb2012-07-18 16:40:06103 secondary->GetNativeView(), gfx::Rect(620, 20, 100, 100)).ToString());
104
105 EXPECT_EQ(
106 "40,40 100x100",
[email protected]55ad8c12014-01-17 18:24:33107 ScreenUtil::ConvertRectToScreen(
[email protected]8d625fb2012-07-18 16:40:06108 primary->GetNativeView(), gfx::Rect(30, 30, 100, 100)).ToString());
109 EXPECT_EQ(
110 "650,50 100x100",
[email protected]55ad8c12014-01-17 18:24:33111 ScreenUtil::ConvertRectToScreen(
[email protected]8d625fb2012-07-18 16:40:06112 secondary->GetNativeView(), gfx::Rect(40, 40, 100, 100)).ToString());
113}
114
115} // namespace test
116} // namespace ash