173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn/* 273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Copyright (C) 2015 The Android Open Source Project 373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); 573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * you may not use this file except in compliance with the License. 673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * You may obtain a copy of the License at 773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * 1073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * Unless required by applicable law or agreed to in writing, software 1173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * distributed under the License is distributed on an "AS IS" BASIS, 1273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * See the License for the specific language governing permissions and 1473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn * limitations under the License. 1573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn */ 1673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 17dbc8c16841483f665feeb9df362551b8e9e65263Tim Kilbourn#include "InputDevice.h" 1873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 193186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include <memory> 203186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 2173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#include <linux/input.h> 2273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 2373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#include <gtest/gtest.h> 2473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 2573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#include <utils/Timers.h> 2673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 2773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#include "InputHub.h" 283186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include "InputMocks.h" 294f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn#include "MockInputHost.h" 3073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 3173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn// # of milliseconds to allow for timing measurements 3273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#define TIMING_TOLERANCE_MS 25 3373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 3473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#define MSC_ANDROID_TIME_SEC 0x6 3573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn#define MSC_ANDROID_TIME_USEC 0x7 3673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 374f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournusing ::testing::_; 384f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournusing ::testing::NiceMock; 394f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournusing ::testing::Return; 404f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbournusing ::testing::ReturnNull; 414f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 4273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournnamespace android { 4373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbournnamespace tests { 4473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 453186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournclass EvdevDeviceTest : public ::testing::Test { 463186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournprotected: 474f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn virtual void SetUp() { 484f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // Creating device identifiers and definitions should always happen. 494f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn EXPECT_CALL(mHost, createDeviceIdentifier(_, _, _, _, _)) 504f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn .WillOnce(ReturnNull()); 514f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn EXPECT_CALL(mHost, createDeviceDefinition()) 524f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn .WillOnce(Return(&mDeviceDef)); 534f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // InputMappers may cause any of these to be called, but we are not 544f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // testing these here. 554f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn ON_CALL(mHost, createInputReportDefinition()) 564f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn .WillByDefault(Return(&mReportDef)); 574f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn ON_CALL(mHost, createOutputReportDefinition()) 584f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn .WillByDefault(Return(&mReportDef)); 594f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn ON_CALL(mHost, registerDevice(_, _)) 604f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn .WillByDefault(ReturnNull()); 614f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn } 624f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 634f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn MockInputHost mHost; 644f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // Ignore uninteresting calls on the report definitions by using NiceMocks. 654f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn NiceMock<MockInputReportDefinition> mReportDef; 664f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn NiceMock<MockInputDeviceDefinition> mDeviceDef; 6773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn}; 6873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 693186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testOverrideTime) { 7073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn auto node = std::make_shared<MockInputDeviceNode>(); 714f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 7273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn ASSERT_TRUE(device != nullptr); 7373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 7473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // Send two timestamp override events before an input event. 7573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn nsecs_t when = 2ULL; 7673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent msc1 = { when, EV_MSC, MSC_ANDROID_TIME_SEC, 1 }; 7773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent msc2 = { when, EV_MSC, MSC_ANDROID_TIME_USEC, 900000 }; 7873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 7973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // Send a key down and syn. Should get the overridden timestamp. 8073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent keyDown = { when, EV_KEY, KEY_HOME, 1 }; 8173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent syn = { when, EV_SYN, SYN_REPORT, 0 }; 8273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 8373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // Send a key up, which should be at the reported timestamp. 8473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent keyUp = { when, EV_KEY, KEY_HOME, 0 }; 8573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 8673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(msc1, when); 8773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(msc2, when); 8873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(keyDown, when); 8973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(syn, when); 9073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(keyUp, when); 9173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 9273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn nsecs_t expectedWhen = s2ns(1) + us2ns(900000); 9373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn EXPECT_EQ(expectedWhen, keyDown.when); 9473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn EXPECT_EQ(expectedWhen, syn.when); 9573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn EXPECT_EQ(when, keyUp.when); 9673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn} 9773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 983186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testWrongClockCorrection) { 9973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn auto node = std::make_shared<MockInputDeviceNode>(); 1004f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 10173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn ASSERT_TRUE(device != nullptr); 10273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 10373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn auto now = systemTime(SYSTEM_TIME_MONOTONIC); 10473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 10573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // Input event that supposedly comes from 1 minute in the future. In 10673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // reality, the timestamps would be much further off. 10773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent event = { now + s2ns(60), EV_KEY, KEY_HOME, 1 }; 10873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 10973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(event, now); 11073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 11173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn EXPECT_NEAR(now, event.when, ms2ns(TIMING_TOLERANCE_MS)); 11273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn} 11373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1143186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testClockCorrectionOk) { 11573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn auto node = std::make_shared<MockInputDeviceNode>(); 1164f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 11773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn ASSERT_TRUE(device != nullptr); 11873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 11973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn auto now = systemTime(SYSTEM_TIME_MONOTONIC); 12073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 12173475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // Input event from now, but will be reported as if it came early. 12273475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn InputEvent event = { now, EV_KEY, KEY_HOME, 1 }; 12373475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 12473475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // event_time parameter is 11 seconds in the past, so it looks like we used 12573475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn // the wrong clock. 12673475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn device->processInput(event, now - s2ns(11)); 12773475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 12873475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn EXPECT_NEAR(now, event.when, ms2ns(TIMING_TOLERANCE_MS)); 12973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn} 13073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn 1313186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testN7v2Touchscreen) { 1323186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexus7v2::getElanTouchscreen()); 1334f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1343186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_TOUCH|INPUT_DEVICE_CLASS_TOUCH_MT, 1353186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn device->getInputClasses()); 1363186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1373186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1383186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testN7v2ButtonJack) { 1393186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexus7v2::getButtonJack()); 1404f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1413186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1423186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1433186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1443186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testN7v2HeadsetJack) { 1454f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // Eventually these mock device tests will all expect these calls. For now 1464f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // only the SwitchInputMapper has been implemented. 1474f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn // TODO: move this expectation out to a common function 1484f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn EXPECT_CALL(mHost, createInputReportDefinition()); 149864984c3b1680854bdfc4560f548f2dae9467bddTim Kilbourn EXPECT_CALL(mHost, createOutputReportDefinition()); 150864984c3b1680854bdfc4560f548f2dae9467bddTim Kilbourn EXPECT_CALL(mHost, freeReportDefinition(_)); 1514f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn EXPECT_CALL(mHost, registerDevice(_, _)); 1524f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 1533186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexus7v2::getHeadsetJack()); 1544f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1553186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_SWITCH, device->getInputClasses()); 1563186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1573186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1583186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testN7v2H2wButton) { 1593186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexus7v2::getH2wButton()); 1604f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1613186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1623186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1633186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1643186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testN7v2GpioKeys) { 1653186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexus7v2::getGpioKeys()); 1664f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1673186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1683186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1693186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1703186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testNexusPlayerGpioKeys) { 1713186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexusPlayer::getGpioKeys()); 1724f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1733186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1743186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1753186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1763186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testNexusPlayerMidPowerBtn) { 1773186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexusPlayer::getMidPowerBtn()); 1784f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1793186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1803186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1813186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1823186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testNexusRemote) { 1833186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexusPlayer::getNexusRemote()); 1844f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1853186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1863186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1873186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1883186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournTEST_F(EvdevDeviceTest, testAsusGamepad) { 1893186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto node = std::shared_ptr<MockInputDeviceNode>(MockNexusPlayer::getAsusGamepad()); 1904f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1913186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn EXPECT_EQ(INPUT_DEVICE_CLASS_JOYSTICK|INPUT_DEVICE_CLASS_KEYBOARD, device->getInputClasses()); 1923186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} 1933186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1944f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim KilbournTEST_F(EvdevDeviceTest, testMocks) { 1954f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto node = std::make_shared<MockInputDeviceNode>(); 1964f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn auto device = std::make_unique<EvdevDevice>(&mHost, node); 1974f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn} 1984f3145d75f5dfc87f07f8ddf6143ba77966f35e4Tim Kilbourn 19973475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn} // namespace tests 20073475a4eb2cebf06f965c58e015d06c333e71e61Tim Kilbourn} // namespace android 201