1// Copyright 2014 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/screen_util.h" 6 7#include "ash/root_window_controller.h" 8#include "ash/shelf/shelf_layout_manager.h" 9#include "ash/shelf/shelf_widget.h" 10#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" 14#include "ui/aura/window.h" 15#include "ui/aura/window_event_dispatcher.h" 16#include "ui/views/widget/widget.h" 17#include "ui/views/widget/widget_delegate.h" 18 19namespace ash { 20namespace test { 21 22typedef test::AshTestBase ScreenUtilTest; 23 24TEST_F(ScreenUtilTest, Bounds) { 25 if (!SupportsMultipleDisplays()) 26 return; 27 28 UpdateDisplay("600x600,500x500"); 29 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> 30 SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); 31 32 views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds( 33 NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100)); 34 primary->Show(); 35 views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds( 36 NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100)); 37 secondary->Show(); 38 39 // Maximized bounds 40 EXPECT_EQ("0,0 600x597", 41 ScreenUtil::GetMaximizedWindowBoundsInParent( 42 primary->GetNativeView()).ToString()); 43 EXPECT_EQ("0,0 500x453", 44 ScreenUtil::GetMaximizedWindowBoundsInParent( 45 secondary->GetNativeView()).ToString()); 46 47 // Display bounds 48 EXPECT_EQ("0,0 600x600", 49 ScreenUtil::GetDisplayBoundsInParent( 50 primary->GetNativeView()).ToString()); 51 EXPECT_EQ("0,0 500x500", 52 ScreenUtil::GetDisplayBoundsInParent( 53 secondary->GetNativeView()).ToString()); 54 55 // Work area bounds 56 EXPECT_EQ("0,0 600x597", 57 ScreenUtil::GetDisplayWorkAreaBoundsInParent( 58 primary->GetNativeView()).ToString()); 59 EXPECT_EQ("0,0 500x453", 60 ScreenUtil::GetDisplayWorkAreaBoundsInParent( 61 secondary->GetNativeView()).ToString()); 62} 63 64// Test verifies a stable handling of secondary screen widget changes 65// (crbug.com/226132). 66TEST_F(ScreenUtilTest, StabilityTest) { 67 if (!SupportsMultipleDisplays()) 68 return; 69 70 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 83TEST_F(ScreenUtilTest, ConvertRect) { 84 if (!SupportsMultipleDisplays()) 85 return; 86 87 UpdateDisplay("600x600,500x500"); 88 89 views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds( 90 NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100)); 91 primary->Show(); 92 views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds( 93 NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100)); 94 secondary->Show(); 95 96 EXPECT_EQ( 97 "0,0 100x100", 98 ScreenUtil::ConvertRectFromScreen( 99 primary->GetNativeView(), gfx::Rect(10, 10, 100, 100)).ToString()); 100 EXPECT_EQ( 101 "10,10 100x100", 102 ScreenUtil::ConvertRectFromScreen( 103 secondary->GetNativeView(), gfx::Rect(620, 20, 100, 100)).ToString()); 104 105 EXPECT_EQ( 106 "40,40 100x100", 107 ScreenUtil::ConvertRectToScreen( 108 primary->GetNativeView(), gfx::Rect(30, 30, 100, 100)).ToString()); 109 EXPECT_EQ( 110 "650,50 100x100", 111 ScreenUtil::ConvertRectToScreen( 112 secondary->GetNativeView(), gfx::Rect(40, 40, 100, 100)).ToString()); 113} 114 115} // namespace test 116} // namespace ash 117