summaryrefslogtreecommitdiffstats
path: root/device/hid/hid_device_filter_unittest.cc
diff options
context:
space:
mode:
authorreillyg <reillyg@chromium.org>2014-08-28 22:52:48 -0700
committerCommit bot <commit-bot@chromium.org>2014-08-29 05:53:46 +0000
commitf4dc9d143de2350fc4879c178059737997944016 (patch)
treede808301f613297af60b8ce5bdee43cc2b511264 /device/hid/hid_device_filter_unittest.cc
parent3a05d24b124114e117c2d81592edbd14bbcf1b1c (diff)
downloadchromium_src-f4dc9d143de2350fc4879c178059737997944016.zip
chromium_src-f4dc9d143de2350fc4879c178059737997944016.tar.gz
chromium_src-f4dc9d143de2350fc4879c178059737997944016.tar.bz2
Add more generic filters to the chrome.hid.getDevices API.
Instead of specifying each of the USB vendor and product ID pairs an app has permission to open this API extension allows filtering of devices by vendor and product IDs as well as HID usage pages and usages. The 'vendorId' and 'productId' properties of GetDevicesOptions are still supported for backwards compatibility. BUG= Review URL: https://codereview.chromium.org/514923002 Cr-Commit-Position: refs/heads/master@{#292577}
Diffstat (limited to 'device/hid/hid_device_filter_unittest.cc')
-rw-r--r--device/hid/hid_device_filter_unittest.cc116
1 files changed, 116 insertions, 0 deletions
diff --git a/device/hid/hid_device_filter_unittest.cc b/device/hid/hid_device_filter_unittest.cc
new file mode 100644
index 0000000..599dda4
--- /dev/null
+++ b/device/hid/hid_device_filter_unittest.cc
@@ -0,0 +1,116 @@
+// Copyright 2014 The Chromium 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 "device/hid/hid_device_filter.h"
+#include "device/hid/hid_device_info.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace device {
+
+namespace {
+
+class HidFilterTest : public testing::Test {
+ public:
+ virtual void SetUp() OVERRIDE {
+ device_info_.vendor_id = 0x046d;
+ device_info_.product_id = 0xc31c;
+
+ HidCollectionInfo collection;
+ collection.usage.usage_page = HidUsageAndPage::kPageKeyboard;
+ collection.usage.usage = 0x01;
+ device_info_.collections.push_back(collection);
+ }
+
+ protected:
+ HidDeviceInfo device_info_;
+};
+
+TEST_F(HidFilterTest, MatchAny) {
+ HidDeviceFilter filter;
+ ASSERT_TRUE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchVendorId) {
+ HidDeviceFilter filter;
+ filter.SetVendorId(0x046d);
+ ASSERT_TRUE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchVendorIdNegative) {
+ HidDeviceFilter filter;
+ filter.SetVendorId(0x18d1);
+ ASSERT_FALSE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchProductId) {
+ HidDeviceFilter filter;
+ filter.SetVendorId(0x046d);
+ filter.SetProductId(0xc31c);
+ ASSERT_TRUE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchProductIdNegative) {
+ HidDeviceFilter filter;
+ filter.SetVendorId(0x046d);
+ filter.SetProductId(0x0801);
+ ASSERT_FALSE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchUsagePage) {
+ HidDeviceFilter filter;
+ filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
+ ASSERT_TRUE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchUsagePageNegative) {
+ HidDeviceFilter filter;
+ filter.SetUsagePage(HidUsageAndPage::kPageLed);
+ ASSERT_FALSE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchVendorAndUsagePage) {
+ HidDeviceFilter filter;
+ filter.SetVendorId(0x046d);
+ filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
+ ASSERT_TRUE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchUsageAndPage) {
+ HidDeviceFilter filter;
+ filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
+ filter.SetUsage(0x01);
+ ASSERT_TRUE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchUsageAndPageNegative) {
+ HidDeviceFilter filter;
+ filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
+ filter.SetUsage(0x02);
+ ASSERT_FALSE(filter.Matches(device_info_));
+}
+
+TEST_F(HidFilterTest, MatchEmptyFilterListNegative) {
+ std::vector<HidDeviceFilter> filters;
+ ASSERT_FALSE(HidDeviceFilter::MatchesAny(device_info_, filters));
+}
+
+TEST_F(HidFilterTest, MatchFilterList) {
+ std::vector<HidDeviceFilter> filters;
+ HidDeviceFilter filter;
+ filter.SetUsagePage(HidUsageAndPage::kPageKeyboard);
+ filters.push_back(filter);
+ ASSERT_TRUE(HidDeviceFilter::MatchesAny(device_info_, filters));
+}
+
+TEST_F(HidFilterTest, MatchFilterListNegative) {
+ std::vector<HidDeviceFilter> filters;
+ HidDeviceFilter filter;
+ filter.SetUsagePage(HidUsageAndPage::kPageLed);
+ filters.push_back(filter);
+ ASSERT_FALSE(HidDeviceFilter::MatchesAny(device_info_, filters));
+}
+
+} // namespace
+
+} // namespace device