| Index: services/ui/ws/platform_display_default_unittest.cc
|
| diff --git a/services/ui/ws/platform_display_default_unittest.cc b/services/ui/ws/platform_display_default_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d7e72ffe949c8b4274587cb031eca0ab78862cf2
|
| --- /dev/null
|
| +++ b/services/ui/ws/platform_display_default_unittest.cc
|
| @@ -0,0 +1,153 @@
|
| +// Copyright 2017 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 "services/ui/ws/platform_display_default.h"
|
| +
|
| +#include "base/time/time.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/base/cursor/image_cursors.h"
|
| +#include "ui/display/types/native_display_delegate.h"
|
| +#include "ui/events/event.h"
|
| +#include "ui/events/event_sink.h"
|
| +#include "ui/gfx/geometry/point.h"
|
| +#include "ui/ozone/public/ozone_platform.h"
|
| +#include "ui/ozone/public/system_input_injector.h"
|
| +#include "ui/platform_window/platform_window.h"
|
| +#include "ui/platform_window/stub/stub_window.h"
|
| +
|
| +namespace ui {
|
| +namespace ws {
|
| +namespace {
|
| +
|
| +// An EventSink that records events sent to it.
|
| +class TestEventSink : public EventSink {
|
| + public:
|
| + TestEventSink() { Reset(); }
|
| + ~TestEventSink() override = default;
|
| +
|
| + void Reset() {
|
| + count_ = 0;
|
| + last_event_type_ = ET_UNKNOWN;
|
| + }
|
| +
|
| + // EventSink:
|
| + EventDispatchDetails OnEventFromSource(Event* event) override {
|
| + count_++;
|
| + last_event_type_ = event->type();
|
| + return EventDispatchDetails();
|
| + }
|
| +
|
| + int count_;
|
| + EventType last_event_type_;
|
| +};
|
| +
|
| +// A PlatformDisplayDelegate to connect the PlatformDisplay to a TestEventSink.
|
| +class TestPlatformDisplayDelegate : public PlatformDisplayDelegate {
|
| + public:
|
| + TestPlatformDisplayDelegate(TestEventSink* sink, OzonePlatform* platform)
|
| + : event_sink_(sink), ozone_platform_(platform) {}
|
| + ~TestPlatformDisplayDelegate() override = default;
|
| +
|
| + // PlatformDisplayDelegate:
|
| + const display::Display& GetDisplay() override { return stub_display_; }
|
| + ServerWindow* GetRootWindow() override { return nullptr; }
|
| + EventSink* GetEventSink() override { return event_sink_; }
|
| + void OnAcceleratedWidgetAvailable() override {}
|
| + void OnNativeCaptureLost() override {}
|
| + OzonePlatform* GetOzonePlatform() override { return ozone_platform_; }
|
| +
|
| + private:
|
| + TestEventSink* event_sink_;
|
| + OzonePlatform* ozone_platform_;
|
| + display::Display stub_display_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestPlatformDisplayDelegate);
|
| +};
|
| +
|
| +// An OzonePlatform that creates StubWindows.
|
| +class TestOzonePlatform : public OzonePlatform {
|
| + public:
|
| + TestOzonePlatform() = default;
|
| + ~TestOzonePlatform() override = default;
|
| +
|
| + // OzonePlatform:
|
| + ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() override { return nullptr; }
|
| + ui::OverlayManagerOzone* GetOverlayManager() override { return nullptr; }
|
| + ui::CursorFactoryOzone* GetCursorFactoryOzone() override { return nullptr; }
|
| + ui::InputController* GetInputController() override { return nullptr; }
|
| + ui::GpuPlatformSupportHost* GetGpuPlatformSupportHost() override {
|
| + return nullptr;
|
| + }
|
| + std::unique_ptr<SystemInputInjector> CreateSystemInputInjector() override {
|
| + return nullptr;
|
| + }
|
| + std::unique_ptr<PlatformWindow> CreatePlatformWindow(
|
| + PlatformWindowDelegate* delegate,
|
| + const gfx::Rect& bounds) override {
|
| + return base::MakeUnique<StubWindow>(
|
| + delegate, false /* use_default_accelerated_widget */);
|
| + }
|
| + std::unique_ptr<display::NativeDisplayDelegate> CreateNativeDisplayDelegate()
|
| + override {
|
| + return nullptr;
|
| + }
|
| + void InitializeUI(const InitParams& params) override {}
|
| + void InitializeGPU(const InitParams& params) override {}
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestOzonePlatform);
|
| +};
|
| +
|
| +TEST(PlatformDisplayDefaultTest, EventDispatch) {
|
| + // Setup ozone so the display can be initialized.
|
| + TestOzonePlatform platform;
|
| +
|
| + // Create the display.
|
| + display::ViewportMetrics metrics;
|
| + metrics.bounds_in_pixels = gfx::Rect(1024, 768);
|
| + metrics.device_scale_factor = 1.f;
|
| + metrics.ui_scale_factor = 1.f;
|
| + PlatformDisplayDefault display(nullptr, metrics,
|
| + std::unique_ptr<ImageCursors>());
|
| +
|
| + // Initialize the display with a test EventSink so we can sense events.
|
| + TestEventSink event_sink;
|
| + TestPlatformDisplayDelegate delegate(&event_sink, &platform);
|
| + display.Init(&delegate);
|
| +
|
| + // Event dispatch is handled at the PlatformWindowDelegate level.
|
| + PlatformWindowDelegate* display_for_dispatch =
|
| + static_cast<PlatformWindowDelegate*>(&display);
|
| +
|
| + // Mouse events are converted to pointer events.
|
| + MouseEvent mouse(ET_MOUSE_PRESSED, gfx::Point(1, 2), gfx::Point(1, 2),
|
| + base::TimeTicks(), EF_NONE, 0);
|
| + display_for_dispatch->DispatchEvent(&mouse);
|
| + EXPECT_EQ(ET_POINTER_DOWN, event_sink.last_event_type_);
|
| + event_sink.Reset();
|
| +
|
| + // Touch events are converted to pointer events.
|
| + TouchEvent touch(ET_TOUCH_PRESSED, gfx::Point(3, 4), base::TimeTicks(),
|
| + PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, 0));
|
| + display_for_dispatch->DispatchEvent(&touch);
|
| + EXPECT_EQ(ET_POINTER_DOWN, event_sink.last_event_type_);
|
| + event_sink.Reset();
|
| +
|
| + // Pressing a key dispatches exactly one event.
|
| + KeyEvent key_pressed(ET_KEY_PRESSED, VKEY_A, EF_NONE);
|
| + display_for_dispatch->DispatchEvent(&key_pressed);
|
| + EXPECT_EQ(1, event_sink.count_);
|
| + EXPECT_EQ(ET_KEY_PRESSED, event_sink.last_event_type_);
|
| + event_sink.Reset();
|
| +
|
| + // Releasing the key dispatches exactly one event.
|
| + KeyEvent key_released(ET_KEY_RELEASED, VKEY_A, EF_NONE);
|
| + display_for_dispatch->DispatchEvent(&key_released);
|
| + EXPECT_EQ(1, event_sink.count_);
|
| + EXPECT_EQ(ET_KEY_RELEASED, event_sink.last_event_type_);
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace ws
|
| +} // namespace ui
|
|
|