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 19 namespace ash { 20 namespace test { 21 22 typedef test::AshTestBase ScreenUtilTest; 23 24 TEST_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). 66 TEST_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 83 TEST_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