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 "device/hid/hid_device_filter.h"
6#include "device/hid/hid_device_info.h"
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace device {
10
11namespace {
12
13class HidFilterTest : public testing::Test {
14 public:
15  virtual void SetUp() OVERRIDE {
16    device_info_.vendor_id = 0x046d;
17    device_info_.product_id = 0xc31c;
18
19    HidCollectionInfo collection;
20    collection.usage.usage_page = HidUsageAndPage::kPageKeyboard;
21    collection.usage.usage = 0x01;
22    device_info_.collections.push_back(collection);
23  }
24
25 protected:
26  HidDeviceInfo device_info_;
27};
28
29TEST_F(HidFilterTest, MatchAny) {
30  HidDeviceFilter filter;
31  ASSERT_TRUE(filter.Matches(device_info_));
32}
33
34TEST_F(HidFilterTest, MatchVendorId) {
35  HidDeviceFilter filter;
36  filter.SetVendorId(0x046d);
37  ASSERT_TRUE(filter.Matches(device_info_));
38}
39
40TEST_F(HidFilterTest, MatchVendorIdNegative) {
41  HidDeviceFilter filter;
42  filter.SetVendorId(0x18d1);
43  ASSERT_FALSE(filter.Matches(device_info_));
44}
45
46TEST_F(HidFilterTest, MatchProductId) {
47  HidDeviceFilter filter;
48  filter.SetVendorId(0x046d);
49  filter.SetProductId(0xc31c);
50  ASSERT_TRUE(filter.Matches(device_info_));
51}
52
53TEST_F(HidFilterTest, MatchProductIdNegative) {
54  HidDeviceFilter filter;
55  filter.SetVendorId(0x046d);
56  filter.SetProductId(0x0801);
57  ASSERT_FALSE(filter.Matches(device_info_));
58}
59
60TEST_F(HidFilterTest, MatchUsagePage) {
61  HidDeviceFilter filter;
62  filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
63  ASSERT_TRUE(filter.Matches(device_info_));
64}
65
66TEST_F(HidFilterTest, MatchUsagePageNegative) {
67  HidDeviceFilter filter;
68  filter.SetUsagePage(HidUsageAndPage::kPageLed);
69  ASSERT_FALSE(filter.Matches(device_info_));
70}
71
72TEST_F(HidFilterTest, MatchVendorAndUsagePage) {
73  HidDeviceFilter filter;
74  filter.SetVendorId(0x046d);
75  filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
76  ASSERT_TRUE(filter.Matches(device_info_));
77}
78
79TEST_F(HidFilterTest, MatchUsageAndPage) {
80  HidDeviceFilter filter;
81  filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
82  filter.SetUsage(0x01);
83  ASSERT_TRUE(filter.Matches(device_info_));
84}
85
86TEST_F(HidFilterTest, MatchUsageAndPageNegative) {
87  HidDeviceFilter filter;
88  filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
89  filter.SetUsage(0x02);
90  ASSERT_FALSE(filter.Matches(device_info_));
91}
92
93TEST_F(HidFilterTest, MatchEmptyFilterListNegative) {
94  std::vector<HidDeviceFilter> filters;
95  ASSERT_FALSE(HidDeviceFilter::MatchesAny(device_info_, filters));
96}
97
98TEST_F(HidFilterTest, MatchFilterList) {
99  std::vector<HidDeviceFilter> filters;
100  HidDeviceFilter filter;
101  filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
102  filters.push_back(filter);
103  ASSERT_TRUE(HidDeviceFilter::MatchesAny(device_info_, filters));
104}
105
106TEST_F(HidFilterTest, MatchFilterListNegative) {
107  std::vector<HidDeviceFilter> filters;
108  HidDeviceFilter filter;
109  filter.SetUsagePage(HidUsageAndPage::kPageLed);
110  filters.push_back(filter);
111  ASSERT_FALSE(HidDeviceFilter::MatchesAny(device_info_, filters));
112}
113
114}  // namespace
115
116}  // namespace device
117