blob: e1bd69a7a306771faff648d44e37736270d4b565 [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 "garnet/lib/machina/input_dispatcher.h"
#include "gtest/gtest.h"
namespace machina {
namespace {
TEST(InputDispatcherTest, EmptyQueue) {
InputDispatcher dispatcher(1);
EXPECT_EQ(0u, dispatcher.Keyboard()->size());
EXPECT_EQ(0u, dispatcher.Mouse()->size());
EXPECT_EQ(0u, dispatcher.Touch()->size());
}
TEST(InputDispatcherTest, AddToQueue) {
InputDispatcher dispatcher(1);
InputEvent event = {};
dispatcher.Keyboard()->PostEvent(event);
dispatcher.Mouse()->PostEvent(event);
dispatcher.Touch()->PostEvent(event);
EXPECT_EQ(1u, dispatcher.Keyboard()->size());
EXPECT_EQ(1u, dispatcher.Mouse()->size());
EXPECT_EQ(1u, dispatcher.Touch()->size());
}
TEST(InputDispatcherTest, Overflow) {
InputDispatcher dispatcher(1);
InputEvent event;
event.type = InputEventType::KEYBOARD;
event.key.hid_usage = 0;
event.key.state = KeyState::PRESSED;
// Post 3 events with different HID codes. The oldest 2 will be dropped.
event.key.hid_usage = 1;
dispatcher.Keyboard()->PostEvent(event);
event.key.hid_usage = 2;
dispatcher.Keyboard()->PostEvent(event);
event.key.hid_usage = 3;
dispatcher.Keyboard()->PostEvent(event);
// Verify event corresponds to the most recent one added.
event = {};
ASSERT_EQ(1u, dispatcher.Keyboard()->size());
event = dispatcher.Keyboard()->Wait();
EXPECT_EQ(3u, event.key.hid_usage);
EXPECT_EQ(0u, dispatcher.Keyboard()->size());
}
} // namespace
} // namespace machina