cast_touch_device_manager_unittest.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Copyright 2018 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 "chromecast/browser/cast_touch_device_manager.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. #include "ui/events/devices/device_data_manager.h"
  7. #include "ui/events/devices/device_hotplug_event_observer.h"
  8. #include "ui/gfx/geometry/rect.h"
  9. namespace {
  10. constexpr int64_t kDisplayId = 1;
  11. constexpr int kTouchDeviceId = 100;
  12. } // namespace
  13. class CastTouchDeviceManagerTest : public testing::Test {
  14. public:
  15. CastTouchDeviceManagerTest() {}
  16. void SetUp() override {
  17. ui::DeviceDataManager::CreateInstance();
  18. touch_device_manager_ =
  19. std::make_unique<chromecast::shell::CastTouchDeviceManager>();
  20. }
  21. void TearDown() override {
  22. touch_device_manager_.reset();
  23. ui::DeviceDataManager::DeleteInstance();
  24. }
  25. ui::DeviceHotplugEventObserver* GetHotplugObserver() {
  26. return ui::DeviceDataManager::GetInstance();
  27. }
  28. protected:
  29. std::unique_ptr<chromecast::shell::CastTouchDeviceManager>
  30. touch_device_manager_;
  31. };
  32. TEST_F(CastTouchDeviceManagerTest, CheckOneToOneMapping) {
  33. std::vector<ui::TouchscreenDevice> touchscreens;
  34. const gfx::Size display_size = gfx::Size(1280, 720);
  35. touch_device_manager_->OnDisplayConfigured(
  36. kDisplayId, display::Display::ROTATE_0, gfx::Rect(display_size));
  37. touchscreens.push_back(ui::TouchscreenDevice(kTouchDeviceId,
  38. ui::INPUT_DEVICE_INTERNAL,
  39. "Touchscreen", display_size, 1));
  40. GetHotplugObserver()->OnTouchscreenDevicesUpdated(touchscreens);
  41. // 1:1 mapping for touch coordinates to display coordinates.
  42. {
  43. float x = display_size.width(), y = display_size.height();
  44. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  45. &x, &y);
  46. EXPECT_EQ(display_size.width(), x);
  47. EXPECT_EQ(display_size.height(), y);
  48. }
  49. {
  50. float x = display_size.width(), y = 0;
  51. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  52. &x, &y);
  53. EXPECT_EQ(display_size.width(), x);
  54. EXPECT_EQ(0, y);
  55. }
  56. {
  57. float x = 0, y = display_size.height();
  58. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  59. &x, &y);
  60. EXPECT_EQ(0, x);
  61. EXPECT_EQ(display_size.height(), y);
  62. }
  63. {
  64. float x = display_size.width() / 2, y = display_size.height() / 2;
  65. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(1, &x, &y);
  66. EXPECT_EQ(display_size.width() / 2, x);
  67. EXPECT_EQ(display_size.height() / 2, y);
  68. }
  69. }
  70. TEST_F(CastTouchDeviceManagerTest, CheckMappingWithLargerTouchscreen) {
  71. std::vector<ui::TouchscreenDevice> touchscreens;
  72. const gfx::Size display_size = gfx::Size(1280, 720);
  73. touch_device_manager_->OnDisplayConfigured(
  74. kDisplayId, display::Display::ROTATE_0, gfx::Rect(display_size));
  75. touchscreens.push_back(ui::TouchscreenDevice(
  76. kTouchDeviceId, ui::INPUT_DEVICE_INTERNAL, "Touchscreen",
  77. gfx::ScaleToRoundedSize(display_size, 2, 2), 1));
  78. GetHotplugObserver()->OnTouchscreenDevicesUpdated(touchscreens);
  79. // Touch screen is twice the size, so transformed events will be half the
  80. // reported value.
  81. {
  82. float x = display_size.width(), y = display_size.height();
  83. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  84. &x, &y);
  85. EXPECT_EQ(display_size.width() / 2, x);
  86. EXPECT_EQ(display_size.height() / 2, y);
  87. }
  88. {
  89. float x = display_size.width(), y = 0;
  90. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  91. &x, &y);
  92. EXPECT_EQ(display_size.width() / 2, x);
  93. EXPECT_EQ(0, y);
  94. }
  95. {
  96. float x = 0, y = display_size.height();
  97. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  98. &x, &y);
  99. EXPECT_EQ(0, x);
  100. EXPECT_EQ(display_size.height() / 2, y);
  101. }
  102. {
  103. float x = display_size.width() / 2, y = display_size.height() / 2;
  104. ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
  105. &x, &y);
  106. EXPECT_EQ(display_size.width() / 4, x);
  107. EXPECT_EQ(display_size.height() / 4, y);
  108. }
  109. }