summaryrefslogtreecommitdiff
path: root/chromium/ui/gfx/x/connection_unittest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/ui/gfx/x/connection_unittest.cc
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/ui/gfx/x/connection_unittest.cc')
-rw-r--r--chromium/ui/gfx/x/connection_unittest.cc108
1 files changed, 108 insertions, 0 deletions
diff --git a/chromium/ui/gfx/x/connection_unittest.cc b/chromium/ui/gfx/x/connection_unittest.cc
new file mode 100644
index 00000000000..de2285911a4
--- /dev/null
+++ b/chromium/ui/gfx/x/connection_unittest.cc
@@ -0,0 +1,108 @@
+// Copyright 2020 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/gfx/x/connection.h"
+#include "ui/gfx/x/xproto.h"
+
+#undef Bool
+
+#include <xcb/xcb.h>
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace x11 {
+
+namespace {
+
+Window CreateWindow(Connection* connection) {
+ Window window = connection->GenerateId<Window>();
+ auto create_window_future = connection->CreateWindow({
+ .depth = connection->default_root_depth().depth,
+ .wid = window,
+ .parent = connection->default_screen().root,
+ .width = 1,
+ .height = 1,
+ .override_redirect = Bool32(true),
+ });
+ auto create_window_response = create_window_future.Sync();
+ EXPECT_FALSE(create_window_response.error);
+ return window;
+}
+
+} // namespace
+
+// Connection setup and teardown.
+TEST(X11ConnectionTest, Basic) {
+ Connection connection;
+ ASSERT_TRUE(connection.XcbConnection());
+ EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+}
+
+TEST(X11ConnectionTest, Request) {
+ Connection connection;
+ ASSERT_TRUE(connection.XcbConnection());
+ EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+
+ Window window = CreateWindow(&connection);
+
+ auto attributes = connection.GetWindowAttributes({window}).Sync();
+ ASSERT_TRUE(attributes);
+ EXPECT_EQ(attributes->map_state, MapState::Unmapped);
+ EXPECT_TRUE(attributes->override_redirect);
+
+ auto geometry = connection.GetGeometry({window}).Sync();
+ ASSERT_TRUE(geometry);
+ EXPECT_EQ(geometry->x, 0);
+ EXPECT_EQ(geometry->y, 0);
+ EXPECT_EQ(geometry->width, 1u);
+ EXPECT_EQ(geometry->height, 1u);
+}
+
+TEST(X11ConnectionTest, Event) {
+ Connection connection;
+ ASSERT_TRUE(connection.XcbConnection());
+ EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+
+ Window window = CreateWindow(&connection);
+
+ auto cwa_future = connection.ChangeWindowAttributes({
+ .window = window,
+ .event_mask = EventMask::PropertyChange,
+ });
+ EXPECT_FALSE(cwa_future.Sync().error);
+
+ auto prop_future = connection.ChangeProperty({
+ .window = static_cast<x11::Window>(window),
+ .property = x11::Atom::WM_NAME,
+ .type = x11::Atom::STRING,
+ .format = CHAR_BIT,
+ .data_len = 1,
+ .data = std::vector<uint8_t>{0},
+ });
+ EXPECT_FALSE(prop_future.Sync().error);
+
+ connection.ReadResponses();
+ ASSERT_EQ(connection.events().size(), 1u);
+ XEvent& event = connection.events().front().xlib_event();
+ auto property_notify_opcode = PropertyNotifyEvent::opcode;
+ EXPECT_EQ(event.type, property_notify_opcode);
+ EXPECT_EQ(event.xproperty.atom, static_cast<uint32_t>(x11::Atom::WM_NAME));
+ EXPECT_EQ(event.xproperty.state, static_cast<int>(Property::NewValue));
+}
+
+TEST(X11ConnectionTest, Error) {
+ Connection connection;
+ ASSERT_TRUE(connection.XcbConnection());
+ EXPECT_FALSE(xcb_connection_has_error(connection.XcbConnection()));
+
+ Window invalid_window = connection.GenerateId<Window>();
+
+ auto geometry = connection.GetGeometry({invalid_window}).Sync();
+ ASSERT_FALSE(geometry);
+ xcb_generic_error_t* error = geometry.error.get();
+ EXPECT_EQ(error->error_code, XCB_DRAWABLE);
+ EXPECT_EQ(error->resource_id, static_cast<uint32_t>(invalid_window));
+}
+
+} // namespace x11