// Copyright 2016 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 "ui/events/event_utils.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/win/window_impl.h" namespace ui { namespace { class TestWindow : public gfx::WindowImpl { public: TestWindow() {} ~TestWindow() override {} BOOL ProcessWindowMessage(HWND window, UINT message, WPARAM w_param, LPARAM l_param, LRESULT& result, DWORD msg_map_id = 0) override { return true; } private: DISALLOW_COPY_AND_ASSIGN(TestWindow); }; MSG CreateEvent(UINT type, WORD x, WORD y, HWND hwnd) { MSG event; event.message = type; event.hwnd = hwnd; event.lParam = MAKELPARAM(x, y); return event; } TEST(EventWinTest, EventSystemLocationFromNative) { TestWindow test_window; const WORD x_coord = 10; const WORD y_coord = 20; const WORD x_window_offset = 100; const WORD y_window_offset = 100; test_window.Init(nullptr, gfx::Rect(x_window_offset, y_window_offset, 100, 100)); EXPECT_TRUE(test_window.hwnd() != nullptr); { MSG event = CreateEvent(WM_MOUSEWHEEL, x_coord, y_coord, test_window.hwnd()); // Mouse wheel events already have screen coordinates so they should not be // converted. EXPECT_EQ(gfx::Point(x_coord, y_coord), EventSystemLocationFromNative(event)); } MSG event = CreateEvent(WM_LBUTTONDOWN, x_coord, y_coord, test_window.hwnd()); EXPECT_EQ(gfx::Point(x_coord + x_window_offset, y_coord + y_window_offset), EventSystemLocationFromNative(event)); } } // namespace } // namespace ui