overlay_transform_utils_unittest.cc 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2019 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. #include "ui/gfx/overlay_transform_utils.h"
  5. #include "cc/base/math_util.h"
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. #include "ui/gfx/geometry/rect.h"
  8. namespace gfx {
  9. namespace {
  10. TEST(OverlayTransformUtilTest, All) {
  11. const Size viewport_bounds(100, 200);
  12. const Rect original(10, 10, 50, 100);
  13. struct TestCase {
  14. OverlayTransform overlay_transform;
  15. Rect transformed;
  16. };
  17. TestCase test_cases[] = {
  18. {OVERLAY_TRANSFORM_NONE, Rect(10, 10, 50, 100)},
  19. {OVERLAY_TRANSFORM_FLIP_HORIZONTAL, Rect(40, 10, 50, 100)},
  20. {OVERLAY_TRANSFORM_FLIP_VERTICAL, Rect(10, 90, 50, 100)},
  21. {OVERLAY_TRANSFORM_ROTATE_90, Rect(90, 10, 100, 50)},
  22. {OVERLAY_TRANSFORM_ROTATE_180, Rect(40, 90, 50, 100)},
  23. {OVERLAY_TRANSFORM_ROTATE_270, Rect(10, 40, 100, 50)},
  24. };
  25. for (const auto& test_case : test_cases) {
  26. SCOPED_TRACE(test_case.overlay_transform);
  27. auto transform = OverlayTransformToTransform(test_case.overlay_transform,
  28. gfx::SizeF(viewport_bounds));
  29. EXPECT_EQ(test_case.transformed,
  30. cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform(
  31. transform, original));
  32. auto transformed_viewport_size =
  33. cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform(
  34. transform, gfx::Rect(viewport_bounds))
  35. .size();
  36. auto inverse_transform = OverlayTransformToTransform(
  37. InvertOverlayTransform(test_case.overlay_transform),
  38. gfx::SizeF(transformed_viewport_size));
  39. EXPECT_EQ(original, cc::MathUtil::MapEnclosedRectWith2dAxisAlignedTransform(
  40. inverse_transform, test_case.transformed));
  41. }
  42. }
  43. } // namespace
  44. } // namespace gfx