Home | History | Annotate | Download | only in touch
      1 // Copyright 2014 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 
      5 #include <vector>
      6 
      7 #include "ash/display/display_info.h"
      8 #include "ash/touch/touchscreen_util.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 namespace ash {
     12 
     13 class TouchscreenUtilTest : public testing::Test {
     14  public:
     15   TouchscreenUtilTest() {}
     16   virtual ~TouchscreenUtilTest() {}
     17 
     18   virtual void SetUp() OVERRIDE {
     19     // Internal display will always match to internal touchscreen. If internal
     20     // touchscreen can't be detected, it is then associated to a touch screen
     21     // with matching size.
     22     {
     23       DisplayInfo display(1, std::string(), false);
     24       DisplayMode mode(gfx::Size(1920, 1080), 60.0, false, true);
     25       mode.native = true;
     26       std::vector<DisplayMode> modes(1, mode);
     27       display.set_display_modes(modes);
     28       displays_.push_back(display);
     29       gfx::Display::SetInternalDisplayId(1);
     30     }
     31 
     32     {
     33       DisplayInfo display(2, std::string(), false);
     34       DisplayMode mode(gfx::Size(800, 600), 60.0, false, true);
     35       mode.native = true;
     36       std::vector<DisplayMode> modes(1, mode);
     37       display.set_display_modes(modes);
     38       displays_.push_back(display);
     39     }
     40 
     41     // Display without native mode. Must not be matched to any touch screen.
     42     {
     43       DisplayInfo display(3, std::string(), false);
     44       displays_.push_back(display);
     45     }
     46 
     47     {
     48       DisplayInfo display(4, std::string(), false);
     49       DisplayMode mode(gfx::Size(1024, 768), 60.0, false, true);
     50       mode.native = true;
     51       std::vector<DisplayMode> modes(1, mode);
     52       display.set_display_modes(modes);
     53       displays_.push_back(display);
     54     }
     55   }
     56 
     57   virtual void TearDown() OVERRIDE {
     58     displays_.clear();
     59   }
     60 
     61  protected:
     62   std::vector<DisplayInfo> displays_;
     63 
     64  private:
     65   DISALLOW_COPY_AND_ASSIGN(TouchscreenUtilTest);
     66 };
     67 
     68 TEST_F(TouchscreenUtilTest, NoTouchscreens) {
     69   std::vector<ui::TouchscreenDevice> devices;
     70   AssociateTouchscreens(&displays_, devices);
     71 
     72   for (size_t i = 0; i < displays_.size(); ++i)
     73     EXPECT_EQ(ui::TouchscreenDevice::kInvalidId,
     74               displays_[i].touch_device_id());
     75 }
     76 
     77 TEST_F(TouchscreenUtilTest, OneToOneMapping) {
     78   std::vector<ui::TouchscreenDevice> devices;
     79   devices.push_back(ui::TouchscreenDevice(1, gfx::Size(800, 600), false));
     80   devices.push_back(ui::TouchscreenDevice(2, gfx::Size(1024, 768), false));
     81 
     82   AssociateTouchscreens(&displays_, devices);
     83 
     84   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
     85   EXPECT_EQ(1, displays_[1].touch_device_id());
     86   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
     87   EXPECT_EQ(2, displays_[3].touch_device_id());
     88 }
     89 
     90 TEST_F(TouchscreenUtilTest, MapToCorrectDisplaySize) {
     91   std::vector<ui::TouchscreenDevice> devices;
     92   devices.push_back(ui::TouchscreenDevice(2, gfx::Size(1024, 768), false));
     93 
     94   AssociateTouchscreens(&displays_, devices);
     95 
     96   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
     97   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[1].touch_device_id());
     98   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
     99   EXPECT_EQ(2, displays_[3].touch_device_id());
    100 }
    101 
    102 TEST_F(TouchscreenUtilTest, MapWhenSizeDiffersByOne) {
    103   std::vector<ui::TouchscreenDevice> devices;
    104   devices.push_back(ui::TouchscreenDevice(1, gfx::Size(801, 600), false));
    105   devices.push_back(ui::TouchscreenDevice(2, gfx::Size(1023, 768), false));
    106 
    107   AssociateTouchscreens(&displays_, devices);
    108 
    109   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
    110   EXPECT_EQ(1, displays_[1].touch_device_id());
    111   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
    112   EXPECT_EQ(2, displays_[3].touch_device_id());
    113 }
    114 
    115 TEST_F(TouchscreenUtilTest, MapWhenSizesDoNotMatch) {
    116   std::vector<ui::TouchscreenDevice> devices;
    117   devices.push_back(ui::TouchscreenDevice(1, gfx::Size(1022, 768), false));
    118   devices.push_back(ui::TouchscreenDevice(2, gfx::Size(802, 600), false));
    119 
    120   AssociateTouchscreens(&displays_, devices);
    121 
    122   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
    123   EXPECT_EQ(1, displays_[1].touch_device_id());
    124   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
    125   EXPECT_EQ(2, displays_[3].touch_device_id());
    126 }
    127 
    128 TEST_F(TouchscreenUtilTest, MapInternalTouchscreen) {
    129   std::vector<ui::TouchscreenDevice> devices;
    130   devices.push_back(ui::TouchscreenDevice(1, gfx::Size(1920, 1080), false));
    131   devices.push_back(ui::TouchscreenDevice(2, gfx::Size(9999, 888), true));
    132 
    133   AssociateTouchscreens(&displays_, devices);
    134 
    135   // Internal touchscreen is always mapped to internal display.
    136   EXPECT_EQ(2, displays_[0].touch_device_id());
    137   EXPECT_EQ(1, displays_[1].touch_device_id());
    138   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
    139   EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[3].touch_device_id());
    140 }
    141 
    142 }  // namespace ash
    143