| // Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights |
| // reserved. Use of this source code is governed by a BSD-style license that |
| // can be found in the LICENSE file. |
| |
| #include "cef/libcef/browser/geometry_util.h" |
| #include "tests/gtest/include/gtest/gtest.h" |
| |
| #include "ui/gfx/geometry/rect.h" |
| |
| namespace { |
| |
| constexpr int kScreenWidth = 1024; |
| constexpr int kScreenHeight = 768; |
| const gfx::Rect kMainScreen(0, 0, kScreenWidth, kScreenHeight); |
| const gfx::Rect kLeftScreen(-1024, 0, kScreenWidth, kScreenHeight); |
| |
| #define EXPECT_RECT_EQ(rect1, rect2) \ |
| EXPECT_EQ(rect1.x(), rect2.x()); \ |
| EXPECT_EQ(rect1.y(), rect2.y()); \ |
| EXPECT_EQ(rect1.width(), rect2.width()); \ |
| EXPECT_EQ(rect1.height(), rect2.height()) |
| |
| } // namespace |
| |
| TEST(GeometryUtil, MakeVisibleOnScreenRect_RectSizeIsBiggerThanScreen) { |
| const gfx::Rect rect{400, 500, 1500, 800}; |
| |
| auto result = MakeVisibleOnScreenRect(rect, kMainScreen); |
| |
| EXPECT_EQ(result.x(), 0); |
| EXPECT_EQ(result.width(), kMainScreen.width()); |
| EXPECT_EQ(result.y(), 0); |
| EXPECT_EQ(result.height(), kMainScreen.height()); |
| } |
| |
| TEST(GeometryUtil, MakeVisibleOnScreenRect_RightBorderIsOutsideTheScreen) { |
| const gfx::Rect rect{600, 400, 500, 300}; |
| |
| auto result = MakeVisibleOnScreenRect(rect, kMainScreen); |
| |
| EXPECT_EQ(result.x(), 524); |
| EXPECT_EQ(result.width(), rect.width()); |
| EXPECT_EQ(result.y(), rect.y()); |
| EXPECT_EQ(result.height(), rect.height()); |
| } |
| |
| TEST(GeometryUtil, MakeVisibleOnScreenRect_LeftBorderIsOutsideTheScreen) { |
| const gfx::Rect rect{-400, 400, 500, 300}; |
| |
| auto result = MakeVisibleOnScreenRect(rect, kMainScreen); |
| |
| EXPECT_EQ(result.x(), 0); |
| EXPECT_EQ(result.width(), rect.width()); |
| EXPECT_EQ(result.y(), rect.y()); |
| EXPECT_EQ(result.height(), rect.height()); |
| } |
| |
| TEST(GeometryUtil, MakeVisibleOnScreenRect_BottomBorderIsOutsideTheScreen) { |
| const gfx::Rect rect{600, 500, 300, 300}; |
| |
| auto result = MakeVisibleOnScreenRect(rect, kMainScreen); |
| |
| EXPECT_EQ(result.x(), 600); |
| EXPECT_EQ(result.width(), rect.width()); |
| EXPECT_EQ(result.y(), 468); |
| EXPECT_EQ(result.height(), rect.height()); |
| } |
| |
| TEST(GeometryUtil, MakeVisibleOnScreenRect_RectIsVisibleOnTheLeftScreen) { |
| const gfx::Rect rect{-500, 300, 300, 300}; |
| |
| auto result = MakeVisibleOnScreenRect(rect, kLeftScreen); |
| |
| EXPECT_RECT_EQ(result, rect); |
| } |
| |
| TEST(GeometryUtil, MakeVisibleOnScreenRect_RectSizeIsBiggerThanLeftScreen) { |
| const gfx::Rect rect{-500, 300, 3000, 3000}; |
| |
| auto result = MakeVisibleOnScreenRect(rect, kLeftScreen); |
| |
| EXPECT_RECT_EQ(result, kLeftScreen); |
| } |
| |
| TEST(GeometryUtil, SubtractOverlayFromBoundingBox_Square_NoIntersect_NoInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{0, 0, 10, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 10); |
| |
| EXPECT_RECT_EQ(bounds, result); |
| } |
| |
| TEST(GeometryUtil, SubtractOverlayFromBoundingBox_Square_Contains_NoInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{5, 5, 85, 85}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 10); |
| |
| EXPECT_RECT_EQ(bounds, result); |
| } |
| |
| TEST(GeometryUtil, SubtractOverlayFromBoundingBox_Square_AllClose_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{12, 12, 76, 76}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| // When all sides are close, inset from the top. |
| const gfx::Rect expected_bounds{10, 88, 80, 2}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_Square_TopAndLeftClose_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{12, 12, 30, 30}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| // When top and left sides are close, inset from the top. |
| const gfx::Rect expected_bounds{10, 42, 80, 48}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_Square_TopAndRightClose_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{58, 12, 30, 30}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| // When top and right sides are close, inset from the top. |
| const gfx::Rect expected_bounds{10, 42, 80, 48}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_Square_BottomAndLeftClose_BottomInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{12, 58, 30, 30}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| // When bottom and left sides are close, inset from the botom. |
| const gfx::Rect expected_bounds{10, 10, 80, 48}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_Square_BottomAndRightClose_BottomInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{58, 58, 30, 30}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| // When bottom and right sides are close, inset from the botom. |
| const gfx::Rect expected_bounds{10, 10, 80, 48}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_TopAndLeftExact_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 10, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 0); |
| |
| const gfx::Rect expected_bounds{10, 15, 80, 75}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_TopIntersectLeftExact_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 7, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{10, 12, 80, 78}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_TopInsideLeftExact_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 12, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{10, 17, 80, 73}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_TopTooFarInsideLeftExact_NoInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 16, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| EXPECT_RECT_EQ(bounds, result); |
| } |
| |
| TEST(GeometryUtil, SubtractOverlayFromBoundingBox_WideRect_Oversized_TopInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{5, 5, 85, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 10); |
| |
| const gfx::Rect expected_bounds{10, 15, 80, 75}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_BottomAndLeftExact_BottomInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 85, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 0); |
| |
| const gfx::Rect expected_bounds{10, 10, 80, 75}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST( |
| GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_BottomInsideLeftExact_BottomInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 83, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{10, 10, 80, 73}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST( |
| GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_BottomIntersectLeftExact_BottomInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 87, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{10, 10, 80, 77}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST( |
| GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_BottomTooFarInsideLeftExact_NoInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 77, 10, 5}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| EXPECT_RECT_EQ(bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_WideRect_Oversized_BottomInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{5, 85, 85, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 10); |
| |
| const gfx::Rect expected_bounds{10, 10, 80, 75}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopAndLeftExact_LeftInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{10, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 0); |
| |
| const gfx::Rect expected_bounds{15, 10, 75, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopExactLeftIntersect_LeftInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{7, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{12, 10, 78, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopExactLeftInside_LeftInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{12, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{17, 10, 73, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopExactLeftTooFarInside_NoInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{16, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| EXPECT_RECT_EQ(bounds, result); |
| } |
| |
| TEST(GeometryUtil, SubtractOverlayFromBoundingBox_TallRect_Oversize_LeftInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{5, 5, 10, 85}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 10); |
| |
| const gfx::Rect expected_bounds{15, 10, 75, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopAndRightExact_RightInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{85, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 0); |
| |
| const gfx::Rect expected_bounds{10, 10, 75, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopExactRightInside_RightInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{83, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{10, 10, 73, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST( |
| GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopExactRightIntersect_RightInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{87, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| const gfx::Rect expected_bounds{10, 10, 77, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |
| |
| TEST( |
| GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_TopExactRightTooFarInside_NoInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{77, 10, 5, 10}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 5); |
| |
| EXPECT_RECT_EQ(bounds, result); |
| } |
| |
| TEST(GeometryUtil, |
| SubtractOverlayFromBoundingBox_TallRect_Oversize_RightInset) { |
| const gfx::Rect bounds{10, 10, 80, 80}; |
| const gfx::Rect overlay{85, 5, 10, 85}; |
| auto result = SubtractOverlayFromBoundingBox(bounds, overlay, 10); |
| |
| const gfx::Rect expected_bounds{10, 10, 75, 80}; |
| EXPECT_RECT_EQ(expected_bounds, result); |
| } |