| Index: ui/events/ozone/evdev/touch_event_converter_ozone_unittest.cc
|
| diff --git a/ui/events/ozone/evdev/touch_event_converter_ozone_unittest.cc b/ui/events/ozone/evdev/touch_event_converter_ozone_unittest.cc
|
| deleted file mode 100644
|
| index 709b5c129d3af7c34821360af860c23d11a77fc9..0000000000000000000000000000000000000000
|
| --- a/ui/events/ozone/evdev/touch_event_converter_ozone_unittest.cc
|
| +++ /dev/null
|
| @@ -1,396 +0,0 @@
|
| -// Copyright (c) 2013 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 <errno.h>
|
| -#include <fcntl.h>
|
| -#include <linux/input.h>
|
| -#include <unistd.h>
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/posix/eintr_wrapper.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/time/time.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "ui/events/event.h"
|
| -#include "ui/events/ozone/evdev/touch_event_converter_ozone.h"
|
| -
|
| -namespace {
|
| -
|
| -static int SetNonBlocking(int fd) {
|
| - int flags = fcntl(fd, F_GETFL, 0);
|
| - if (flags == -1)
|
| - flags = 0;
|
| - return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace ui {
|
| -
|
| -class MockTouchEventConverterOzone : public TouchEventConverterOzone,
|
| - public base::MessageLoop::Dispatcher {
|
| - public:
|
| - MockTouchEventConverterOzone(int a, int b);
|
| - virtual ~MockTouchEventConverterOzone() {};
|
| -
|
| - void ConfigureReadMock(struct input_event* queue,
|
| - long read_this_many,
|
| - long queue_index);
|
| -
|
| - unsigned size() { return dispatched_events_.size(); }
|
| - TouchEvent* event(unsigned index) { return dispatched_events_[index]; }
|
| -
|
| - // Actually dispatch the event reader code.
|
| - void ReadNow() {
|
| - OnFileCanReadWithoutBlocking(read_pipe_);
|
| - base::RunLoop().RunUntilIdle();
|
| - }
|
| -
|
| - virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE;
|
| -
|
| - private:
|
| - int read_pipe_;
|
| - int write_pipe_;
|
| -
|
| - ScopedVector<TouchEvent> dispatched_events_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterOzone);
|
| -};
|
| -
|
| -MockTouchEventConverterOzone::MockTouchEventConverterOzone(int a, int b)
|
| - : TouchEventConverterOzone(a, b) {
|
| - pressure_min_ = 30;
|
| - pressure_max_ = 60;
|
| -
|
| - int fds[2];
|
| -
|
| - DCHECK(pipe(fds) >= 0) << "pipe() failed, errno: " << errno;
|
| - DCHECK(SetNonBlocking(fds[0]) == 0)
|
| - << "SetNonBlocking for pipe fd[0] failed, errno: " << errno;
|
| - DCHECK(SetNonBlocking(fds[1]) == 0)
|
| - << "SetNonBlocking for pipe fd[0] failed, errno: " << errno;
|
| - read_pipe_ = fds[0];
|
| - write_pipe_ = fds[1];
|
| -}
|
| -
|
| -bool MockTouchEventConverterOzone::Dispatch(const base::NativeEvent& event) {
|
| - ui::TouchEvent* ev = new ui::TouchEvent(event);
|
| - dispatched_events_.push_back(ev);
|
| - return true;
|
| -}
|
| -
|
| -void MockTouchEventConverterOzone::ConfigureReadMock(struct input_event* queue,
|
| - long read_this_many,
|
| - long queue_index) {
|
| - int nwrite = HANDLE_EINTR(write(write_pipe_,
|
| - queue + queue_index,
|
| - sizeof(struct input_event) * read_this_many));
|
| - DCHECK(nwrite ==
|
| - static_cast<int>(sizeof(struct input_event) * read_this_many))
|
| - << "write() failed, errno: " << errno;
|
| -}
|
| -
|
| -} // namespace ui
|
| -
|
| -// Test fixture.
|
| -class TouchEventConverterOzoneTest : public testing::Test {
|
| - public:
|
| - TouchEventConverterOzoneTest() {}
|
| -
|
| - // Overridden from testing::Test:
|
| - virtual void SetUp() OVERRIDE {
|
| - loop_ = new base::MessageLoop(base::MessageLoop::TYPE_UI);
|
| - device_ = new ui::MockTouchEventConverterOzone(-1, 2);
|
| - base::MessagePumpOzone::Current()->AddDispatcherForRootWindow(device_);
|
| - }
|
| - virtual void TearDown() OVERRIDE {
|
| - delete device_;
|
| - delete loop_;
|
| - }
|
| -
|
| - ui::MockTouchEventConverterOzone* device() { return device_; }
|
| -
|
| - private:
|
| - base::MessageLoop* loop_;
|
| - ui::MockTouchEventConverterOzone* device_;
|
| - DISALLOW_COPY_AND_ASSIGN(TouchEventConverterOzoneTest);
|
| -};
|
| -
|
| -// TODO(rjkroege): Test for valid handling of time stamps.
|
| -TEST_F(TouchEventConverterOzoneTest, TouchDown) {
|
| - ui::MockTouchEventConverterOzone* dev = device();
|
| -
|
| - struct input_event mock_kernel_queue[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue, 1, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(0u, dev->size());
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue, 2, 1);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(0u, dev->size());
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue, 3, 3);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(1u, dev->size());
|
| -
|
| - ui::TouchEvent* event = dev->event(0);
|
| - EXPECT_FALSE(event == NULL);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, event->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp());
|
| - EXPECT_EQ(42, event->x());
|
| - EXPECT_EQ(51, event->y());
|
| - EXPECT_EQ(0, event->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, event->force());
|
| - EXPECT_FLOAT_EQ(0.f, event->rotation_angle());
|
| -}
|
| -
|
| -TEST_F(TouchEventConverterOzoneTest, NoEvents) {
|
| - ui::MockTouchEventConverterOzone* dev = device();
|
| - dev->ConfigureReadMock(NULL, 0, 0);
|
| - EXPECT_EQ(0u, dev->size());
|
| -}
|
| -
|
| -TEST_F(TouchEventConverterOzoneTest, TouchMove) {
|
| - ui::MockTouchEventConverterOzone* dev = device();
|
| -
|
| - struct input_event mock_kernel_queue_press[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - struct input_event mock_kernel_queue_move1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - struct input_event mock_kernel_queue_move2[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - // Setup and discard a press.
|
| - dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(1u, dev->size());
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(2u, dev->size());
|
| - ui::TouchEvent* event = dev->event(1);
|
| - EXPECT_FALSE(event == NULL);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, event->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp());
|
| - EXPECT_EQ(42, event->x());
|
| - EXPECT_EQ(43, event->y());
|
| - EXPECT_EQ(0, event->touch_id());
|
| - EXPECT_FLOAT_EQ(2.f / 3.f, event->force());
|
| - EXPECT_FLOAT_EQ(0.f, event->rotation_angle());
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(3u, dev->size());
|
| - event = dev->event(2);
|
| - EXPECT_FALSE(event == NULL);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, event->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp());
|
| - EXPECT_EQ(42, event->x());
|
| - EXPECT_EQ(42, event->y());
|
| - EXPECT_EQ(0, event->touch_id());
|
| - EXPECT_FLOAT_EQ(2.f / 3.f, event->force());
|
| - EXPECT_FLOAT_EQ(0.f, event->rotation_angle());
|
| -}
|
| -
|
| -TEST_F(TouchEventConverterOzoneTest, TouchRelease) {
|
| - ui::MockTouchEventConverterOzone* dev = device();
|
| -
|
| - struct input_event mock_kernel_queue_press[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - struct input_event mock_kernel_queue_release[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - // Setup and discard a press.
|
| - dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(1u, dev->size());
|
| - ui::TouchEvent* event = dev->event(0);
|
| - EXPECT_FALSE(event == NULL);
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(2u, dev->size());
|
| - event = dev->event(1);
|
| - EXPECT_FALSE(event == NULL);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_RELEASED, event->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event->time_stamp());
|
| - EXPECT_EQ(42, event->x());
|
| - EXPECT_EQ(51, event->y());
|
| - EXPECT_EQ(0, event->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, event->force());
|
| - EXPECT_FLOAT_EQ(0.f, event->rotation_angle());
|
| -}
|
| -
|
| -TEST_F(TouchEventConverterOzoneTest, TwoFingerGesture) {
|
| - ui::MockTouchEventConverterOzone* dev = device();
|
| -
|
| - ui::TouchEvent* ev0;
|
| - ui::TouchEvent* ev1;
|
| -
|
| - struct input_event mock_kernel_queue_press0[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| - // Setup and discard a press.
|
| - dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(1u, dev->size());
|
| -
|
| - struct input_event mock_kernel_queue_move0[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| - // Setup and discard a move.
|
| - dev->ConfigureReadMock(mock_kernel_queue_move0, 2, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(2u, dev->size());
|
| -
|
| - struct input_event mock_kernel_queue_move0press1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0},
|
| - {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 686},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 101},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 102}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| - // Move on 0, press on 1.
|
| - dev->ConfigureReadMock(mock_kernel_queue_move0press1, 9, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(4u, dev->size());
|
| - ev0 = dev->event(2);
|
| - ev1 = dev->event(3);
|
| -
|
| - // Move
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0->time_stamp());
|
| - EXPECT_EQ(40, ev0->x());
|
| - EXPECT_EQ(51, ev0->y());
|
| - EXPECT_EQ(0, ev0->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, ev0->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev0->rotation_angle());
|
| -
|
| - // Press
|
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp());
|
| - EXPECT_EQ(101, ev1->x());
|
| - EXPECT_EQ(102, ev1->y());
|
| - EXPECT_EQ(1, ev1->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, ev1->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle());
|
| -
|
| - // Stationary 0, Moves 1.
|
| - struct input_event mock_kernel_queue_stationary0_move1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| - dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(5u, dev->size());
|
| - ev1 = dev->event(4);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp());
|
| - EXPECT_EQ(40, ev1->x());
|
| - EXPECT_EQ(102, ev1->y());
|
| - EXPECT_EQ(1, ev1->touch_id());
|
| -
|
| - EXPECT_FLOAT_EQ(.5f, ev1->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle());
|
| -
|
| - // Move 0, stationary 1.
|
| - struct input_event mock_kernel_queue_move0_stationary1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39},
|
| - {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| - dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(6u, dev->size());
|
| - ev0 = dev->event(5);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0->time_stamp());
|
| - EXPECT_EQ(39, ev0->x());
|
| - EXPECT_EQ(51, ev0->y());
|
| - EXPECT_EQ(0, ev0->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, ev0->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev0->rotation_angle());
|
| -
|
| - // Release 0, move 1.
|
| - struct input_event mock_kernel_queue_release0_move1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| - dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(8u, dev->size());
|
| - ev0 = dev->event(6);
|
| - ev1 = dev->event(7);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0->time_stamp());
|
| - EXPECT_EQ(39, ev0->x());
|
| - EXPECT_EQ(51, ev0->y());
|
| - EXPECT_EQ(0, ev0->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, ev0->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev0->rotation_angle());
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp());
|
| - EXPECT_EQ(38, ev1->x());
|
| - EXPECT_EQ(102, ev1->y());
|
| - EXPECT_EQ(1, ev1->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, ev1->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle());
|
| -
|
| - // Release 1.
|
| - struct input_event mock_kernel_queue_release1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0},
|
| - };
|
| - dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(9u, dev->size());
|
| - ev1 = dev->event(8);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1->type());
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1->time_stamp());
|
| - EXPECT_EQ(38, ev1->x());
|
| - EXPECT_EQ(102, ev1->y());
|
| - EXPECT_EQ(1, ev1->touch_id());
|
| - EXPECT_FLOAT_EQ(.5f, ev1->force());
|
| - EXPECT_FLOAT_EQ(0.f, ev1->rotation_angle());
|
| -}
|
|
|