Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2853b7ae authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

Use a FakePointerController for InputReaderIntegrationTests

InputReaderIntegrationTests uses the real EventHub when running on a
device, which means the test is affected by the input devices connected
to the test device.

If the test device has a cursor connected to it, the test will try to
obtain a FakePointerController from the FakeInputReaderPolicy. If the
pointer controller is not set, then the null pointer that is return will
cause a NPE. We set the PointerController when setting up the
integration tests.

Here, we also remove the need to have a per-device PointerController in
the tests, because there should only be one PointerController that's
shared by all input devices.

Bug: 195058024
Test: forrest test run with CL
Change-Id: I937c6fead36cf648ca38e8a0d0d662b2188fb241
parent eed5ed29
Loading
Loading
Loading
Loading
+16 −12
Original line number Original line Diff line number Diff line
@@ -205,7 +205,7 @@ class FakeInputReaderPolicy : public InputReaderPolicyInterface {
    std::condition_variable mDevicesChangedCondition;
    std::condition_variable mDevicesChangedCondition;


    InputReaderConfiguration mConfig;
    InputReaderConfiguration mConfig;
    std::unordered_map<int32_t, std::shared_ptr<FakePointerController>> mPointerControllers;
    std::shared_ptr<FakePointerController> mPointerController;
    std::vector<InputDeviceInfo> mInputDevices GUARDED_BY(mLock);
    std::vector<InputDeviceInfo> mInputDevices GUARDED_BY(mLock);
    bool mInputDevicesChanged GUARDED_BY(mLock){false};
    bool mInputDevicesChanged GUARDED_BY(mLock){false};
    std::vector<DisplayViewport> mViewports;
    std::vector<DisplayViewport> mViewports;
@@ -291,8 +291,8 @@ public:


    void removeDisabledDevice(int32_t deviceId) { mConfig.disabledDevices.erase(deviceId); }
    void removeDisabledDevice(int32_t deviceId) { mConfig.disabledDevices.erase(deviceId); }


    void setPointerController(int32_t deviceId, std::shared_ptr<FakePointerController> controller) {
    void setPointerController(std::shared_ptr<FakePointerController> controller) {
        mPointerControllers.insert_or_assign(deviceId, std::move(controller));
        mPointerController = std::move(controller);
    }
    }


    const InputReaderConfiguration* getReaderConfiguration() const {
    const InputReaderConfiguration* getReaderConfiguration() const {
@@ -357,8 +357,9 @@ private:
        *outConfig = mConfig;
        *outConfig = mConfig;
    }
    }


    std::shared_ptr<PointerControllerInterface> obtainPointerController(int32_t deviceId) override {
    std::shared_ptr<PointerControllerInterface> obtainPointerController(
        return mPointerControllers[deviceId];
            int32_t /*deviceId*/) override {
        return mPointerController;
    }
    }


    void notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) override {
    void notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) override {
@@ -2132,8 +2133,12 @@ protected:
    sp<FakeInputReaderPolicy> mFakePolicy;
    sp<FakeInputReaderPolicy> mFakePolicy;
    sp<InputReaderInterface> mReader;
    sp<InputReaderInterface> mReader;


    std::shared_ptr<FakePointerController> mFakePointerController;

    void SetUp() override {
    void SetUp() override {
        mFakePolicy = new FakeInputReaderPolicy();
        mFakePolicy = new FakeInputReaderPolicy();
        mFakePointerController = std::make_shared<FakePointerController>();
        mFakePolicy->setPointerController(mFakePointerController);
        mTestListener = new TestInputListener(2000ms /*eventHappenedTimeout*/,
        mTestListener = new TestInputListener(2000ms /*eventHappenedTimeout*/,
                                              30ms /*eventDidNotHappenTimeout*/);
                                              30ms /*eventDidNotHappenTimeout*/);


@@ -3825,7 +3830,7 @@ protected:
        InputMapperTest::SetUp();
        InputMapperTest::SetUp();


        mFakePointerController = std::make_shared<FakePointerController>();
        mFakePointerController = std::make_shared<FakePointerController>();
        mFakePolicy->setPointerController(mDevice->getId(), mFakePointerController);
        mFakePolicy->setPointerController(mFakePointerController);
    }
    }


    void testMotionRotation(CursorInputMapper& mapper, int32_t originalX, int32_t originalY,
    void testMotionRotation(CursorInputMapper& mapper, int32_t originalX, int32_t originalY,
@@ -7614,7 +7619,7 @@ TEST_F(MultiTouchInputMapperTest, Process_Pointer_ShouldHandleDisplayId) {
    fakePointerController->setBounds(0, 0, DISPLAY_WIDTH - 1, DISPLAY_HEIGHT - 1);
    fakePointerController->setBounds(0, 0, DISPLAY_WIDTH - 1, DISPLAY_HEIGHT - 1);
    fakePointerController->setPosition(100, 200);
    fakePointerController->setPosition(100, 200);
    fakePointerController->setButtonState(0);
    fakePointerController->setButtonState(0);
    mFakePolicy->setPointerController(mDevice->getId(), fakePointerController);
    mFakePolicy->setPointerController(fakePointerController);


    mFakePolicy->setDefaultPointerDisplayId(SECONDARY_DISPLAY_ID);
    mFakePolicy->setDefaultPointerDisplayId(SECONDARY_DISPLAY_ID);
    prepareSecondaryDisplay(ViewportType::EXTERNAL);
    prepareSecondaryDisplay(ViewportType::EXTERNAL);
@@ -7767,8 +7772,7 @@ TEST_F(MultiTouchInputMapperTest, Process_Pointer_ShowTouches) {
    // Setup PointerController.
    // Setup PointerController.
    std::shared_ptr<FakePointerController> fakePointerController =
    std::shared_ptr<FakePointerController> fakePointerController =
            std::make_shared<FakePointerController>();
            std::make_shared<FakePointerController>();
    mFakePolicy->setPointerController(mDevice->getId(), fakePointerController);
    mFakePolicy->setPointerController(fakePointerController);
    mFakePolicy->setPointerController(SECOND_DEVICE_ID, fakePointerController);


    // Setup policy for associated displays and show touches.
    // Setup policy for associated displays and show touches.
    const uint8_t hdmi1 = 0;
    const uint8_t hdmi1 = 0;
@@ -8590,7 +8594,7 @@ TEST_F(MultiTouchInputMapperTest, Process_TouchpadCapture) {
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_LEFT, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_LEFT, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_TOUCH, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_TOUCH, 0, AKEYCODE_UNKNOWN, 0);
    mFakePolicy->setPointerCapture(true);
    mFakePolicy->setPointerCapture(true);
    mFakePolicy->setPointerController(mDevice->getId(), fakePointerController);
    mFakePolicy->setPointerController(fakePointerController);
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();


    // captured touchpad should be a touchpad source
    // captured touchpad should be a touchpad source
@@ -8740,7 +8744,7 @@ TEST_F(MultiTouchInputMapperTest, Process_UnCapturedTouchpadPointer) {
    prepareAxes(POSITION | ID | SLOT);
    prepareAxes(POSITION | ID | SLOT);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_LEFT, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_LEFT, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_TOUCH, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_TOUCH, 0, AKEYCODE_UNKNOWN, 0);
    mFakePolicy->setPointerController(mDevice->getId(), fakePointerController);
    mFakePolicy->setPointerController(fakePointerController);
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();
    // run uncaptured pointer tests - pushes out generic events
    // run uncaptured pointer tests - pushes out generic events
    // FINGER 0 DOWN
    // FINGER 0 DOWN
@@ -8780,7 +8784,7 @@ TEST_F(MultiTouchInputMapperTest, WhenCapturedAndNotCaptured_GetSources) {
    prepareDisplay(DISPLAY_ORIENTATION_0);
    prepareDisplay(DISPLAY_ORIENTATION_0);
    prepareAxes(POSITION | ID | SLOT);
    prepareAxes(POSITION | ID | SLOT);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_LEFT, 0, AKEYCODE_UNKNOWN, 0);
    mFakeEventHub->addKey(EVENTHUB_ID, BTN_LEFT, 0, AKEYCODE_UNKNOWN, 0);
    mFakePolicy->setPointerController(mDevice->getId(), fakePointerController);
    mFakePolicy->setPointerController(fakePointerController);
    mFakePolicy->setPointerCapture(false);
    mFakePolicy->setPointerCapture(false);
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();
    MultiTouchInputMapper& mapper = addMapperAndConfigure<MultiTouchInputMapper>();