1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <errno.h> 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <fcntl.h> 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <linux/input.h> 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <unistd.h> 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <vector> 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/scoped_vector.h" 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/posix/eintr_wrapper.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/run_loop.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/base/events/event.h" 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ui/base/ozone/evdev/touch_event_converter_ozone.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace { 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)static int SetNonBlocking(int fd) { 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int flags = fcntl(fd, F_GETFL, 0); 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (flags == -1) 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) flags = 0; 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return fcntl(fd, F_SETFL, flags | O_NONBLOCK); 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace ui { 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class MockTouchEventConverterOzone : public TouchEventConverterOzone, 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public base::MessageLoop::Dispatcher { 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MockTouchEventConverterOzone(int a, int b); 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~MockTouchEventConverterOzone() {}; 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void ConfigureReadMock(struct input_event* queue, 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) long read_this_many, 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) long queue_index); 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) unsigned size() { return dispatched_events_.size(); } 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TouchEvent* event(unsigned index) { return dispatched_events_[index]; } 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Actually dispatch the event reader code. 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void ReadNow() { 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OnFileCanReadWithoutBlocking(read_pipe_); 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE; 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int read_pipe_; 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int write_pipe_; 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ScopedVector<TouchEvent> dispatched_events_; 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterOzone); 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)MockTouchEventConverterOzone::MockTouchEventConverterOzone(int a, int b) 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : TouchEventConverterOzone(a, b) { 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pressure_min_ = 30; 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) pressure_max_ = 60; 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int fds[2]; 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(pipe(fds) >= 0) << "pipe() failed, errno: " << errno; 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(SetNonBlocking(fds[0]) == 0) 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) << "SetNonBlocking for pipe fd[0] failed, errno: " << errno; 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(SetNonBlocking(fds[1]) == 0) 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) << "SetNonBlocking for pipe fd[0] failed, errno: " << errno; 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) read_pipe_ = fds[0]; 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) write_pipe_ = fds[1]; 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool MockTouchEventConverterOzone::Dispatch(const base::NativeEvent& event) { 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::TouchEvent* ev = new ui::TouchEvent(event); 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dispatched_events_.push_back(ev); 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void MockTouchEventConverterOzone::ConfigureReadMock(struct input_event* queue, 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) long read_this_many, 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) long queue_index) { 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int nwrite = HANDLE_EINTR(write(write_pipe_, 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) queue + queue_index, 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sizeof(struct input_event) * read_this_many)); 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(nwrite == 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static_cast<int>(sizeof(struct input_event) * read_this_many)) 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) << "write() failed, errno: " << errno; 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace ui 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Test fixture. 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class TouchEventConverterOzoneTest : public testing::Test { 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TouchEventConverterOzoneTest() {} 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Overridden from testing::Test: 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetUp() OVERRIDE { 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) loop_ = new base::MessageLoop(base::MessageLoop::TYPE_UI); 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) device_ = new ui::MockTouchEventConverterOzone(-1, 2); 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessagePumpOzone::Current()->AddDispatcherForRootWindow(device_); 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void TearDown() OVERRIDE { 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delete device_; 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delete loop_; 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* device() { return device_; } 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop* loop_; 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* device_; 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TouchEventConverterOzoneTest); 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// TODO(rjkroege): Test for valid handling of time stamps. 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(TouchEventConverterOzoneTest, TouchDown) { 126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* dev = device(); 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue[] = { 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue, 1, 0); 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0u, dev->size()); 139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue, 2, 1); 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0u, dev->size()); 143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue, 3, 3); 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1u, dev->size()); 147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::TouchEvent* event = dev->event(0); 149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(event == NULL); 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_PRESSED, event->type()); 152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp()); 153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(42, event->x()); 154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(51, event->y()); 155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, event->touch_id()); 156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, event->force()); 157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, event->rotation_angle()); 158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 160868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(TouchEventConverterOzoneTest, NoEvents) { 161868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* dev = device(); 162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(NULL, 0, 0); 163868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0u, dev->size()); 164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(TouchEventConverterOzoneTest, TouchMove) { 167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* dev = device(); 168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_press[] = { 170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_move1[] = { 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50}, 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_move2[] = { 184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Setup and discard a press. 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1u, dev->size()); 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0); 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(2u, dev->size()); 195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::TouchEvent* event = dev->event(1); 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(event == NULL); 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_MOVED, event->type()); 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp()); 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(42, event->x()); 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(43, event->y()); 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, event->touch_id()); 203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(2.f / 3.f, event->force()); 204868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, event->rotation_angle()); 205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0); 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(3u, dev->size()); 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) event = dev->event(2); 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(event == NULL); 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_MOVED, event->type()); 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp()); 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(42, event->x()); 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(42, event->y()); 216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, event->touch_id()); 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(2.f / 3.f, event->force()); 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, event->rotation_angle()); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(TouchEventConverterOzoneTest, TouchRelease) { 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* dev = device(); 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_press[] = { 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 230868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_release[] = { 233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Setup and discard a press. 237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); 238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1u, dev->size()); 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::TouchEvent* event = dev->event(0); 241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(event == NULL); 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0); 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(2u, dev->size()); 246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) event = dev->event(1); 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(event == NULL); 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_RELEASED, event->type()); 250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp()); 251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(42, event->x()); 252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(51, event->y()); 253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, event->touch_id()); 254868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, event->force()); 255868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, event->rotation_angle()); 256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(TouchEventConverterOzoneTest, TwoFingerGesture) { 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::MockTouchEventConverterOzone* dev = device(); 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::TouchEvent* ev0; 262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::TouchEvent* ev1; 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 264868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_press0[] = { 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 268868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Setup and discard a press. 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1u, dev->size()); 275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_move0[] = { 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Setup and discard a move. 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_move0, 2, 0); 281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 282868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(2u, dev->size()); 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 284868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_move0press1[] = { 285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, 286868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 686}, 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 101}, 290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 102}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Move on 0, press on 1. 293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_move0press1, 9, 0); 294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(4u, dev->size()); 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev0 = dev->event(2); 297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev1 = dev->event(3); 298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Move 300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0->type()); 301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0->time_stamp()); 302868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(40, ev0->x()); 303868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(51, ev0->y()); 304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, ev0->touch_id()); 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev0->force()); 306868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev0->rotation_angle()); 307868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 308868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Press 309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1->type()); 310868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp()); 311868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(101, ev1->x()); 312868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(102, ev1->y()); 313868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, ev1->touch_id()); 314868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev1->force()); 315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle()); 316868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 317868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Stationary 0, Moves 1. 318868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_stationary0_move1[] = { 319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 320868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 321868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); 322868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 323868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(5u, dev->size()); 324868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev1 = dev->event(4); 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1->type()); 327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp()); 328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(40, ev1->x()); 329868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(102, ev1->y()); 330868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, ev1->touch_id()); 331868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 332868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev1->force()); 333868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle()); 334868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 335868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Move 0, stationary 1. 336868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_move0_stationary1[] = { 337868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39}, 338868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_SYN, SYN_REPORT, 0} 339868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 340868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 342868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(6u, dev->size()); 343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev0 = dev->event(5); 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0->type()); 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0->time_stamp()); 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(39, ev0->x()); 348868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(51, ev0->y()); 349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, ev0->touch_id()); 350868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev0->force()); 351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev0->rotation_angle()); 352868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 353868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Release 0, move 1. 354868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_release0_move1[] = { 355868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, 356868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 357868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 358868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); 359868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 360868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(8u, dev->size()); 361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev0 = dev->event(6); 362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev1 = dev->event(7); 363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 364868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0->type()); 365868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0->time_stamp()); 366868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(39, ev0->x()); 367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(51, ev0->y()); 368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, ev0->touch_id()); 369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev0->force()); 370868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev0->rotation_angle()); 371868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 372868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1->type()); 373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp()); 374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(38, ev1->x()); 375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(102, ev1->y()); 376868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, ev1->touch_id()); 377868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev1->force()); 378868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle()); 379868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 380868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Release 1. 381868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) struct input_event mock_kernel_queue_release1[] = { 382868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, 383868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 384868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); 385868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dev->ReadNow(); 386868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(9u, dev->size()); 387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev1 = dev->event(8); 388868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1->type()); 390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp()); 391868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(38, ev1->x()); 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(102, ev1->y()); 393868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, ev1->touch_id()); 394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(.5f, ev1->force()); 395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle()); 396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 397