15912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 25912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Copyright (C) 2010 The Android Open Source Project 35912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 45912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 55912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * you may not use this file except in compliance with the License. 65912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * You may obtain a copy of the License at 75912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 85912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 95912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Unless required by applicable law or agreed to in writing, software 115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * See the License for the specific language governing permissions and 145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * limitations under the License. 155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include "TestHelpers.h" 185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <unistd.h> 205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <sys/mman.h> 215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <time.h> 225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <cutils/ashmem.h> 245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <gtest/gtest.h> 255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/InputTransport.h> 265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Timers.h> 275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/StopWatch.h> 285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownnamespace android { 305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass InputPublisherAndConsumerTest : public testing::Test { 325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprotected: 335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown sp<InputChannel> serverChannel, clientChannel; 345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputPublisher* mPublisher; 355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputConsumer* mConsumer; 365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PreallocatedInputEventFactory mEventFactory; 375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown virtual void SetUp() { 395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t result = InputChannel::openInputChannelPair(String8("channel name"), 405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown serverChannel, clientChannel); 415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown mPublisher = new InputPublisher(serverChannel); 435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown mConsumer = new InputConsumer(clientChannel); 445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown virtual void TearDown() { 475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown if (mPublisher) { 485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown delete mPublisher; 495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown mPublisher = NULL; 505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown if (mConsumer) { 535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown delete mConsumer; 545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown mConsumer = NULL; 555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown serverChannel.clear(); 585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown clientChannel.clear(); 595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void PublishAndConsumeKeyEvent(); 625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void PublishAndConsumeMotionEvent(); 635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(InputPublisherAndConsumerTest, GetChannel_ReturnsTheChannel) { 665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(serverChannel.get(), mPublisher->getChannel().get()); 675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(clientChannel.get(), mConsumer->getChannel().get()); 685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownvoid InputPublisherAndConsumerTest::PublishAndConsumeKeyEvent() { 715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t status; 725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const uint32_t seq = 15; 745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t deviceId = 1; 755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t source = AINPUT_SOURCE_KEYBOARD; 765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t action = AKEY_EVENT_ACTION_DOWN; 775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t flags = AKEY_EVENT_FLAG_FROM_SYSTEM; 785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t keyCode = AKEYCODE_ENTER; 795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t scanCode = 13; 805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t metaState = AMETA_ALT_LEFT_ON | AMETA_ALT_ON; 815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t repeatCount = 1; 825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const nsecs_t downTime = 3; 835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const nsecs_t eventTime = 4; 845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mPublisher->publishKeyEvent(seq, deviceId, source, action, flags, 865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown keyCode, scanCode, metaState, repeatCount, downTime, eventTime); 875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher publishKeyEvent should return OK"; 895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint32_t consumeSeq; 915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputEvent* event; 925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mConsumer->consume(&mEventFactory, true /*consumeBatches*/, -1, &consumeSeq, &event); 935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer consume should return OK"; 955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_TRUE(event != NULL) 975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer should have returned non-NULL event"; 985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_EVENT_TYPE_KEY, event->getType()) 995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer should have returned a key event"; 1005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyEvent* keyEvent = static_cast<KeyEvent*>(event); 1025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(seq, consumeSeq); 1035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(deviceId, keyEvent->getDeviceId()); 1045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(source, keyEvent->getSource()); 1055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(action, keyEvent->getAction()); 1065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(flags, keyEvent->getFlags()); 1075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(keyCode, keyEvent->getKeyCode()); 1085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(scanCode, keyEvent->getScanCode()); 1095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(metaState, keyEvent->getMetaState()); 1105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(repeatCount, keyEvent->getRepeatCount()); 1115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(downTime, keyEvent->getDownTime()); 1125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(eventTime, keyEvent->getEventTime()); 1135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mConsumer->sendFinishedSignal(seq, true); 1155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 1165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer sendFinishedSignal should return OK"; 1175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint32_t finishedSeq = 0; 1195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool handled = false; 1205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mPublisher->receiveFinishedSignal(&finishedSeq, &handled); 1215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 1225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher receiveFinishedSignal should return OK"; 1235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(seq, finishedSeq) 1245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher receiveFinishedSignal should have returned the original sequence number"; 1255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_TRUE(handled) 1265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher receiveFinishedSignal should have set handled to consumer's reply"; 1275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 1285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownvoid InputPublisherAndConsumerTest::PublishAndConsumeMotionEvent() { 1305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t status; 1315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const uint32_t seq = 15; 1335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t deviceId = 1; 1345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t source = AINPUT_SOURCE_TOUCHSCREEN; 1355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t action = AMOTION_EVENT_ACTION_MOVE; 136b03f103fd40d9028731a81e87a817a3e3bd07fa4Michael Wright const int32_t actionButton = 0; 1375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t flags = AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED; 1385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t edgeFlags = AMOTION_EVENT_EDGE_FLAG_TOP; 1395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t metaState = AMETA_ALT_LEFT_ON | AMETA_ALT_ON; 1405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const int32_t buttonState = AMOTION_EVENT_BUTTON_PRIMARY; 1415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float xOffset = -10; 1425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float yOffset = -20; 1435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float xPrecision = 0.25; 1445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const float yPrecision = 0.5; 1455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const nsecs_t downTime = 3; 1465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const size_t pointerCount = 3; 1475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const nsecs_t eventTime = 4; 1485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerProperties pointerProperties[pointerCount]; 1495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords pointerCoords[pointerCount]; 1505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown for (size_t i = 0; i < pointerCount; i++) { 1515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[i].clear(); 1525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[i].id = (i + 2) % pointerCount; 1535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[i].toolType = AMOTION_EVENT_TOOL_TYPE_FINGER; 1545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].clear(); 1565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_X, 100 * i); 1575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_Y, 200 * i); 1585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 0.5 * i); 1595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 0.7 * i); 1605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 1.5 * i); 1615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 1.7 * i); 1625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 2.5 * i); 1635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 2.7 * i); 1645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 3.5 * i); 1655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 1665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 167b03f103fd40d9028731a81e87a817a3e3bd07fa4Michael Wright status = mPublisher->publishMotionEvent(seq, deviceId, source, action, actionButton, 168b03f103fd40d9028731a81e87a817a3e3bd07fa4Michael Wright flags, edgeFlags, metaState, buttonState, xOffset, yOffset, xPrecision, yPrecision, 1695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown downTime, eventTime, pointerCount, 1705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties, pointerCoords); 1715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 1725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher publishMotionEvent should return OK"; 1735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint32_t consumeSeq; 1755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputEvent* event; 1765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mConsumer->consume(&mEventFactory, true /*consumeBatches*/, -1, &consumeSeq, &event); 1775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 1785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer consume should return OK"; 1795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_TRUE(event != NULL) 1815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer should have returned non-NULL event"; 1825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(AINPUT_EVENT_TYPE_MOTION, event->getType()) 1835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer should have returned a motion event"; 1845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown MotionEvent* motionEvent = static_cast<MotionEvent*>(event); 1865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(seq, consumeSeq); 1875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(deviceId, motionEvent->getDeviceId()); 1885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(source, motionEvent->getSource()); 1895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(action, motionEvent->getAction()); 1905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(flags, motionEvent->getFlags()); 1915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(edgeFlags, motionEvent->getEdgeFlags()); 1925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(metaState, motionEvent->getMetaState()); 1935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(buttonState, motionEvent->getButtonState()); 1945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(xPrecision, motionEvent->getXPrecision()); 1955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(yPrecision, motionEvent->getYPrecision()); 1965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(downTime, motionEvent->getDownTime()); 1975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(eventTime, motionEvent->getEventTime()); 1985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCount, motionEvent->getPointerCount()); 1995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(0U, motionEvent->getHistorySize()); 2005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown for (size_t i = 0; i < pointerCount; i++) { 2025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown SCOPED_TRACE(i); 2035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerProperties[i].id, motionEvent->getPointerId(i)); 2045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerProperties[i].toolType, motionEvent->getToolType(i)); 2055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X), 2075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getRawX(i)); 2085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y), 2095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getRawY(i)); 2105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X) + xOffset, 2115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getX(i)); 2125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y) + yOffset, 2135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getY(i)); 2145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE), 2155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getPressure(i)); 2165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE), 2175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getSize(i)); 2185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR), 2195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getTouchMajor(i)); 2205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR), 2215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getTouchMinor(i)); 2225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR), 2235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getToolMajor(i)); 2245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR), 2255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getToolMinor(i)); 2265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION), 2275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown motionEvent->getOrientation(i)); 2285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 2295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mConsumer->sendFinishedSignal(seq, false); 2315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 2325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "consumer sendFinishedSignal should return OK"; 2335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint32_t finishedSeq = 0; 2355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool handled = true; 2365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status = mPublisher->receiveFinishedSignal(&finishedSeq, &handled); 2375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(OK, status) 2385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher receiveFinishedSignal should return OK"; 2395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(seq, finishedSeq) 2405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher receiveFinishedSignal should have returned the original sequence number"; 2415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_FALSE(handled) 2425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher receiveFinishedSignal should have set handled to consumer's reply"; 2435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(InputPublisherAndConsumerTest, PublishKeyEvent_EndToEnd) { 2465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeKeyEvent()); 2475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_EndToEnd) { 2505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent()); 2515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_WhenPointerCountLessThan1_ReturnsError) { 2545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t status; 2555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const size_t pointerCount = 0; 2565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerProperties pointerProperties[pointerCount]; 2575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords pointerCoords[pointerCount]; 2585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 259b03f103fd40d9028731a81e87a817a3e3bd07fa4Michael Wright status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCount, pointerProperties, pointerCoords); 2615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(BAD_VALUE, status) 2625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher publishMotionEvent should return BAD_VALUE"; 2635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_WhenPointerCountGreaterThanMax_ReturnsError) { 2665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t status; 2675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const size_t pointerCount = MAX_POINTERS + 1; 2685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerProperties pointerProperties[pointerCount]; 2695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown PointerCoords pointerCoords[pointerCount]; 2705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown for (size_t i = 0; i < pointerCount; i++) { 2715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerProperties[i].clear(); 2725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCoords[i].clear(); 2735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 2745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 275b03f103fd40d9028731a81e87a817a3e3bd07fa4Michael Wright status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown pointerCount, pointerProperties, pointerCoords); 2775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_EQ(BAD_VALUE, status) 2785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown << "publisher publishMotionEvent should return BAD_VALUE"; 2795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff BrownTEST_F(InputPublisherAndConsumerTest, PublishMultipleEvents_EndToEnd) { 2825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent()); 2835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeKeyEvent()); 2845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent()); 2855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent()); 2865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ASSERT_NO_FATAL_FAILURE(PublishAndConsumeKeyEvent()); 2875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} 2885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 2895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} // namespace android 290