1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/keyboard/ui/container_floating_behavior.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/vector2d.h"
namespace keyboard {
TEST(ContainerFloatingBehaviorTest, AdjustSetBoundsRequest) {
ContainerFloatingBehavior floating_behavior(nullptr);
const int keyboard_width = 600;
const int keyboard_height = 70;
gfx::Rect workspace(0, 0, 1000, 600);
gfx::Rect center(100, 100, keyboard_width, keyboard_height);
gfx::Rect top_left_overlap(-30, -30, keyboard_width, keyboard_height);
gfx::Rect bottom_right_overlap(workspace.width() - 30,
workspace.height() - 30, keyboard_width,
keyboard_height);
gfx::Rect result =
floating_behavior.AdjustSetBoundsRequest(workspace, center);
ASSERT_EQ(center, result);
result =
floating_behavior.AdjustSetBoundsRequest(workspace, top_left_overlap);
ASSERT_EQ(gfx::Rect(0, 0, keyboard_width, keyboard_height), result);
result =
floating_behavior.AdjustSetBoundsRequest(workspace, bottom_right_overlap);
ASSERT_EQ(gfx::Rect(workspace.width() - keyboard_width,
workspace.height() - keyboard_height, keyboard_width,
keyboard_height),
result);
// Try to move the keyboard to the center of the primary display while it's
// in a secondary display.
gfx::Rect secondary_display(1000, -200, 1200, 800);
result = floating_behavior.AdjustSetBoundsRequest(secondary_display, center);
// It gets clipped to the far left of this display
ASSERT_EQ(gfx::Rect(1000, 100, keyboard_width, keyboard_height), result);
}
TEST(ContainerFloatingBehaviorTest, AdjustSetBoundsRequestVariousSides) {
ContainerFloatingBehavior floating_behavior(nullptr);
const int keyboard_width = 100;
const int keyboard_height = 100;
gfx::Size keyboard_size = gfx::Size(keyboard_width, keyboard_height);
gfx::Rect workspace_wide(0, 0, 1000, 500);
gfx::Rect workspace_tall(0, 0, 500, 1000);
gfx::Rect top_left(0, 0, keyboard_width, keyboard_height);
gfx::Rect top_right(900, 0, keyboard_width, keyboard_height);
gfx::Rect bottom_left(0, 400, keyboard_width, keyboard_height);
gfx::Rect bottom_right(900, 400, keyboard_width, keyboard_height);
gfx::Rect bottomish_center(450, 390, keyboard_width, keyboard_height);
floating_behavior.AdjustSetBoundsRequest(workspace_wide, top_left);
gfx::Point result = floating_behavior.GetPositionForShowingKeyboard(
keyboard_size, workspace_wide);
ASSERT_EQ(gfx::Point(0, 0), result);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_tall);
ASSERT_EQ(gfx::Point(0, 0), result);
floating_behavior.AdjustSetBoundsRequest(workspace_wide, top_right);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_wide);
ASSERT_EQ(gfx::Point(900, 0), result);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_tall);
ASSERT_EQ(gfx::Point(400, 0), result);
floating_behavior.AdjustSetBoundsRequest(workspace_wide, bottom_left);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_wide);
ASSERT_EQ(gfx::Point(0, 400), result);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_tall);
ASSERT_EQ(gfx::Point(0, 900), result);
floating_behavior.AdjustSetBoundsRequest(workspace_wide, bottom_right);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_wide);
ASSERT_EQ(gfx::Point(900, 400), result);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_tall);
ASSERT_EQ(gfx::Point(400, 900), result);
floating_behavior.AdjustSetBoundsRequest(workspace_wide, bottomish_center);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_wide);
ASSERT_EQ(gfx::Point(450, 390), result);
result = floating_behavior.GetPositionForShowingKeyboard(keyboard_size,
workspace_tall);
// rather than 400:0 for the vertical padding, use 390:10
// with 900 pixels available this ratio results in 877.5, which is truncated.
// 390 / 400 * 900 = 877.5
ASSERT_EQ(gfx::Point(200, 877), result);
}
TEST(ContainerFloatingBehaviorTest, AdjustSetBoundsRequestOverlapLeftEdge) {
ContainerFloatingBehavior floating_behavior(nullptr);
const int keyboard_width = 600;
const int keyboard_height = 70;
gfx::Rect area_to_remain_on_screen(10, 10, keyboard_width - 20,
keyboard_height - 20);
gfx::Rect workspace(0, 0, 1000, 600);
gfx::Rect left_edge_overlap(-150, 30, keyboard_width, keyboard_height);
floating_behavior.SetAreaToRemainOnScreen(area_to_remain_on_screen);
// Left edge of keyboard should go offscreen up to leftmost bound of
// area_to_remain_on_screen.
gfx::Rect result =
floating_behavior.AdjustSetBoundsRequest(workspace, left_edge_overlap);
ASSERT_EQ(gfx::Rect(area_to_remain_on_screen.x() * -1, left_edge_overlap.y(),
keyboard_width, keyboard_height),
result);
}
TEST(ContainerFloatingBehaviorTest, AdjustSetBoundsRequestOverlapTopEdge) {
ContainerFloatingBehavior floating_behavior(nullptr);
const int keyboard_width = 600;
const int keyboard_height = 70;
gfx::Rect area_to_remain_on_screen(10, 10, keyboard_width - 20,
keyboard_height - 20);
gfx::Rect workspace(0, 0, 1000, 600);
gfx::Rect top_edge_overlap(30, -40, keyboard_width, keyboard_height);
floating_behavior.SetAreaToRemainOnScreen(area_to_remain_on_screen);
// Top edge of keyboard should go offscreen up to uppermost bound of
// area_to_remain_on_screen.
gfx::Rect result =
floating_behavior.AdjustSetBoundsRequest(workspace, top_edge_overlap);
ASSERT_EQ(gfx::Rect(top_edge_overlap.x(), area_to_remain_on_screen.y() * -1,
keyboard_width, keyboard_height),
result);
}
TEST(ContainerFloatingBehaviorTest, AdjustSetBoundsRequestOverlapRightEdge) {
ContainerFloatingBehavior floating_behavior(nullptr);
const int keyboard_width = 600;
const int keyboard_height = 70;
const int inner_offset_x = 10;
gfx::Rect area_to_remain_on_screen(inner_offset_x, 10, keyboard_width - 20,
keyboard_height - 20);
gfx::Rect workspace(0, 0, 1000, 600);
gfx::Rect right_edge_overlap(workspace.width() + 30 - keyboard_width, 0,
keyboard_width, keyboard_height);
floating_behavior.SetAreaToRemainOnScreen(area_to_remain_on_screen);
// Right edge of keyboard should go offscreen up to rightmost bound of
// area_to_remain_on_screen.
gfx::Rect result =
floating_behavior.AdjustSetBoundsRequest(workspace, right_edge_overlap);
ASSERT_EQ(gfx::Rect((workspace.width() + inner_offset_x) - keyboard_width,
right_edge_overlap.y(), keyboard_width, keyboard_height),
result);
}
TEST(ContainerFloatingBehaviorTest, AdjustSetBoundsRequestBottomEdge) {
ContainerFloatingBehavior floating_behavior(nullptr);
const int keyboard_width = 600;
const int keyboard_height = 70;
const int inner_offset_y = 10;
gfx::Rect area_to_remain_on_screen(10, inner_offset_y, keyboard_width - 20,
keyboard_height - 20);
gfx::Rect workspace(0, 0, 1000, 600);
gfx::Rect bottom_edge_overlap(0, workspace.height() + 30 - keyboard_height,
keyboard_width, keyboard_height);
floating_behavior.SetAreaToRemainOnScreen(area_to_remain_on_screen);
// Bottom edge of keyboard should go offscreen up to bottommost bound of
// area_to_remain_on_screen.
gfx::Rect result =
floating_behavior.AdjustSetBoundsRequest(workspace, bottom_edge_overlap);
ASSERT_EQ(gfx::Rect(bottom_edge_overlap.x(),
(workspace.height() + inner_offset_y) - keyboard_height,
keyboard_width, keyboard_height),
result);
}
} // namespace keyboard
|