| Index: content/common/input/input_param_traits_unittest.cc
|
| diff --git a/content/common/input/input_param_traits_unittest.cc b/content/common/input/input_param_traits_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5e826cbfc3f23d7c49986d024f86542bbf6291cd
|
| --- /dev/null
|
| +++ b/content/common/input/input_param_traits_unittest.cc
|
| @@ -0,0 +1,207 @@
|
| +// 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 "content/common/input/input_param_traits.h"
|
| +
|
| +#include "content/common/input/event_packet.h"
|
| +#include "content/common/input/generic_input_event.h"
|
| +#include "content/common/input/input_event.h"
|
| +#include "content/common/input_messages.h"
|
| +#include "ipc/ipc_message.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "third_party/WebKit/public/web/WebInputEvent.h"
|
| +
|
| +namespace content {
|
| +namespace {
|
| +
|
| +class InputParamTraitsTest : public testing::Test {
|
| + protected:
|
| + void Compare(const WebPlatformInputEvent* a, const WebPlatformInputEvent* b) {
|
| + EXPECT_EQ(!!a->event, !!b->event);
|
| + if (a->event && b->event) {
|
| + ASSERT_EQ(a->event->size, b->event->size);
|
| + EXPECT_EQ(0, memcmp(a->event.get(), b->event.get(), a->event->size));
|
| + }
|
| + EXPECT_EQ(a->latency_info.latency_components.size(),
|
| + b->latency_info.latency_components.size());
|
| + EXPECT_EQ(a->is_keyboard_shortcut, b->is_keyboard_shortcut);
|
| + }
|
| +
|
| + void Compare(const GenericInputEvent* a, const GenericInputEvent* b) {
|
| + EXPECT_EQ(!!a->message, !!b->message);
|
| + if (a->message && b->message) {
|
| + EXPECT_EQ(a->message->type(), b->message->type());
|
| + EXPECT_EQ(a->message->routing_id(), b->message->routing_id());
|
| + }
|
| + }
|
| +
|
| + void Compare(const InputEvent* a, const InputEvent* b) {
|
| + ASSERT_EQ(a->type, b->type);
|
| + EXPECT_EQ(a->ack_type, b->ack_type);
|
| + EXPECT_EQ(a->id, b->id);
|
| + switch (a->type) {
|
| + case InputEvent::GENERIC:
|
| + Compare(GenericInputEvent::EventCast(a),
|
| + GenericInputEvent::EventCast(b));
|
| + break;
|
| + case InputEvent::WEB_PLATFORM:
|
| + Compare(WebPlatformInputEvent::EventCast(a),
|
| + WebPlatformInputEvent::EventCast(b));
|
| + default:
|
| + break;
|
| + }
|
| + }
|
| +
|
| + void Compare(const EventPacket* a, const EventPacket* b) {
|
| + EXPECT_EQ(a->id, b->id);
|
| + EXPECT_EQ(a->dispositions, b->dispositions);
|
| + ASSERT_EQ(a->events.size(), b->events.size());
|
| + for (size_t i = 0; i < a->events.size(); ++i)
|
| + Compare(a->events[i], b->events[i]);
|
| + }
|
| +
|
| + void Verify(const EventPacket& packet_in) {
|
| + ASSERT_EQ(packet_in.events.size(), packet_in.dispositions.size());
|
| +
|
| + IPC::Message msg;
|
| + IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
|
| +
|
| + EventPacket packet_out;
|
| + PickleIterator iter(msg);
|
| + EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
|
| +
|
| + Compare(&packet_in, &packet_out);
|
| +
|
| + // Perform a sanity check that logging doesn't explode.
|
| + std::string packet_in_string;
|
| + IPC::ParamTraits<EventPacket>::Log(packet_in, &packet_in_string);
|
| + std::string packet_out_string;
|
| + IPC::ParamTraits<EventPacket>::Log(packet_out, &packet_out_string);
|
| + ASSERT_FALSE(packet_in_string.empty());
|
| + EXPECT_EQ(packet_in_string, packet_out_string);
|
| + }
|
| +};
|
| +
|
| +TEST_F(InputParamTraitsTest, EventPacketEmpty) {
|
| + EventPacket packet_in;
|
| + IPC::Message msg;
|
| + IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
|
| +
|
| + EventPacket packet_out;
|
| + PickleIterator iter(msg);
|
| + EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
|
| +
|
| + Compare(&packet_in, &packet_out);
|
| +}
|
| +
|
| +#ifdef NDEBUG // This test triggers a DCHECK.
|
| +TEST_F(InputParamTraitsTest, EventPacketUninitializedEvents) {
|
| + EventPacket packet_in;
|
| + packet_in.id = 1;
|
| + packet_in.Add(GenericInputEvent::Create(), INPUT_EVENT_UNHANDLED);
|
| + packet_in.Add(WebPlatformInputEvent::Create(), INPUT_EVENT_UNHANDLED);
|
| +
|
| + IPC::Message msg;
|
| + IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
|
| +
|
| + EventPacket packet_out;
|
| + PickleIterator iter(msg);
|
| + EXPECT_FALSE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
|
| +}
|
| +#endif
|
| +
|
| +TEST_F(InputParamTraitsTest, EventPacketGenericEvents) {
|
| + EventPacket packet_in;
|
| + packet_in.id = 1;
|
| +
|
| + packet_in.Add(
|
| + GenericInputEvent::Create(
|
| + 1, scoped_ptr<IPC::Message>(new InputMsg_Undo(1))),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + Verify(packet_in);
|
| +}
|
| +
|
| +TEST_F(InputParamTraitsTest, EventPacketWebPlatformEvents) {
|
| + EventPacket packet_in;
|
| + packet_in.id = 1;
|
| +
|
| + ui::LatencyInfo latency;
|
| +
|
| + WebKit::WebKeyboardEvent key_event;
|
| + key_event.type = WebKit::WebInputEvent::RawKeyDown;
|
| + key_event.nativeKeyCode = 5;
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(1, key_event, latency, true, false),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + WebKit::WebMouseWheelEvent wheel_event;
|
| + wheel_event.type = WebKit::WebInputEvent::MouseWheel;
|
| + wheel_event.deltaX = 10;
|
| + latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RWH_COMPONENT, 1, 1);
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(2, wheel_event, latency, false, false),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + WebKit::WebMouseEvent mouse_event;
|
| + mouse_event.type = WebKit::WebInputEvent::MouseDown;
|
| + mouse_event.x = 10;
|
| + latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 2, 2);
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(3, mouse_event, latency, false, false),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + WebKit::WebGestureEvent gesture_event;
|
| + gesture_event.type = WebKit::WebInputEvent::GestureScrollBegin;
|
| + gesture_event.x = -1;
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(4, gesture_event, latency, false, false),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + WebKit::WebTouchEvent touch_event;
|
| + touch_event.type = WebKit::WebInputEvent::TouchStart;
|
| + touch_event.touchesLength = 1;
|
| + touch_event.touches[0].radiusX = 1;
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(5, touch_event, latency, false, false),
|
| + INPUT_EVENT_COULD_NOT_DELIVER);
|
| +
|
| + Verify(packet_in);
|
| +}
|
| +
|
| +TEST_F(InputParamTraitsTest, EventPacketMixedEvents) {
|
| + EventPacket packet_in;
|
| + packet_in.id = 1;
|
| +
|
| + // Add some valid GenericEvents.
|
| + packet_in.Add(
|
| + GenericInputEvent::Create(
|
| + 1, scoped_ptr<IPC::Message>(new InputMsg_Undo(1))),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + ui::LatencyInfo latency;
|
| +
|
| + WebKit::WebKeyboardEvent key_event;
|
| + key_event.type = WebKit::WebInputEvent::RawKeyDown;
|
| + key_event.nativeKeyCode = 5;
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(2, key_event, latency, true, false),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + packet_in.Add(GenericInputEvent::Create(
|
| + 3, scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true))),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + WebKit::WebMouseWheelEvent wheel_event;
|
| + wheel_event.type = WebKit::WebInputEvent::MouseWheel;
|
| + wheel_event.deltaX = 10;
|
| + packet_in.Add(
|
| + WebPlatformInputEvent::Create(4, wheel_event, latency, false, false),
|
| + INPUT_EVENT_UNHANDLED);
|
| +
|
| + Verify(packet_in);
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace content
|
|
|