window_util_unittest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Use of this source code is governed by a BSD-style license that can be
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// found in the LICENSE file.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ash/wm/window_util.h"
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ash/screen_util.h"
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ash/test/ash_test_base.h"
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ash/wm/window_state.h"
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ui/aura/window.h"
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace ash {
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace {
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstd::string GetAdjustedBounds(const gfx::Rect& visible,
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              gfx::Rect to_be_adjusted) {
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  wm::AdjustBoundsToEnsureMinimumWindowVisibility(visible, &to_be_adjusted);
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  return to_be_adjusted.ToString();
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef test::AshTestBase WindowUtilTest;
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(WindowUtilTest, CenterWindow) {
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  if (!SupportsMultipleDisplays())
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return;
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  UpdateDisplay("500x400, 600x400");
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  scoped_ptr<aura::Window> window(
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      CreateTestWindowInShellWithBounds(gfx::Rect(12, 20, 100, 100)));
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  wm::WindowState* window_state = wm::GetWindowState(window.get());
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_FALSE(window_state->bounds_changed_by_user());
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  wm::CenterWindow(window.get());
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  // Centring window is considered as a user's action.
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_TRUE(window_state->bounds_changed_by_user());
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("200,126 100x100", window->bounds().ToString());
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("200,126 100x100", window->GetBoundsInScreen().ToString());
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  window->SetBoundsInScreen(gfx::Rect(600, 0, 100, 100),
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            ScreenUtil::GetSecondaryDisplay());
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  wm::CenterWindow(window.get());
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("250,126 100x100", window->bounds().ToString());
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("750,126 100x100", window->GetBoundsInScreen().ToString());
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(WindowUtilTest, AdjustBoundsToEnsureMinimumVisibility) {
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  const gfx::Rect visible_bounds(0, 0, 100, 100);
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("0,0 90x90",
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            GetAdjustedBounds(visible_bounds, gfx::Rect(0, 0, 90, 90)));
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("0,0 100x100",
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            GetAdjustedBounds(visible_bounds, gfx::Rect(0, 0, 150, 150)));
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("-50,0 100x100",
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            GetAdjustedBounds(visible_bounds, gfx::Rect(-50, -50, 150, 150)));
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("-90,10 100x100",
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            GetAdjustedBounds(visible_bounds, gfx::Rect(-100, 10, 150, 150)));
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ("90,90 100x100",
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            GetAdjustedBounds(visible_bounds, gfx::Rect(100, 100, 150, 150)));
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  const gfx::Rect visible_bounds_right(200, 50, 100, 100);
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "210,60 90x90",
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_right, gfx::Rect(210, 60, 90, 90)));
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "210,60 100x100",
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_right, gfx::Rect(210, 60, 150, 150)));
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "110,50 100x100",
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_right, gfx::Rect(0, 0, 150, 150)));
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "290,50 100x100",
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_right, gfx::Rect(300, 20, 150, 150)));
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "110,140 100x100",
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_right, gfx::Rect(-100, 150, 150, 150)));
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  const gfx::Rect visible_bounds_left(-200, -50, 100, 100);
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "-190,-40 90x90",
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_left, gfx::Rect(-190, -40, 90, 90)));
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "-190,-40 100x100",
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_left, gfx::Rect(-190, -40, 150, 150)));
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "-250,-40 100x100",
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_left, gfx::Rect(-250, -40, 150, 150)));
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "-290,-50 100x100",
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_left, gfx::Rect(-400, -60, 150, 150)));
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  EXPECT_EQ(
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "-110,0 100x100",
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      GetAdjustedBounds(visible_bounds_left, gfx::Rect(0, 0, 150, 150)));
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}  // namespace ash
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org