aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpsykose <alice@ayaya.dev>2023-04-23 21:50:22 +0000
committerpsykose <alice@ayaya.dev>2023-04-23 23:50:22 +0200
commit78971eb7dcaf29388ae518418de6139ddfbd5360 (patch)
tree46ee94164b4dc83bc17d6e2edd7d1bf7a62b94b4
parent21ea8da3cb1da7baa7a482ba3b16584bdf877ce0 (diff)
community/py3-xcffib: upgrade to 1.3.0
-rw-r--r--community/py3-xcffib/APKBUILD32
-rw-r--r--community/py3-xcffib/fix-use-of-pytest.patch904
2 files changed, 21 insertions, 915 deletions
diff --git a/community/py3-xcffib/APKBUILD b/community/py3-xcffib/APKBUILD
index 87b1e3dabde..c6c5ba7bb10 100644
--- a/community/py3-xcffib/APKBUILD
+++ b/community/py3-xcffib/APKBUILD
@@ -1,32 +1,42 @@
# Maintainer: Keith Toh <ktprograms@gmail.com>
pkgname=py3-xcffib
-pkgver=0.11.1
-pkgrel=2
+pkgver=1.3.0
+pkgrel=0
pkgdesc="Drop-in replacement for xpyb based on cffi"
url="https://github.com/tych0/xcffib"
arch="noarch"
license="Apache-2.0"
-depends="py3-six py3-cffi libxcb"
-makedepends="py3-setuptools libxcb-dev"
+depends="py3-cffi libxcb"
+makedepends="
+ libxcb-dev
+ py3-gpep517
+ py3-setuptools
+ py3-wheel
+ "
checkdepends="py3-pytest xvfb-run xeyes"
subpackages="$pkgname-pyc"
-source="https://pypi.python.org/packages/source/x/xcffib/xcffib-$pkgver.tar.gz
- fix-use-of-pytest.patch"
+source="https://pypi.python.org/packages/source/x/xcffib/xcffib-$pkgver.tar.gz"
builddir="$srcdir/xcffib-$pkgver"
build() {
- python3 setup.py build
+ gpep517 build-wheel \
+ --wheel-dir dist \
+ --output-fd 3 3>&1 >&2
}
check() {
- xvfb-run -a pytest -v
+ python3 -m venv --clear --without-pip --system-site-packages testenv
+ testenv/bin/python3 -m installer dist/*.whl
+ cd testenv
+ ln -sfv ../test test
+ bin/python3 -m pytest
}
package() {
- python3 setup.py install --skip-build --root="$pkgdir"
+ python3 -m installer -d "$pkgdir" \
+ dist/*.whl
}
sha512sums="
-09f4e19b88258446af26628c3a8e694c1f938fe3b5456e797b06174602fa0e9ef6e4eab76daccfd169d98fb7e869c910e6216d1f71fa2853e62b82c62c667669 xcffib-0.11.1.tar.gz
-4ff61ba9a6ebd9ebc3ebed66d1f035b3022c2a6e56ae0a6d95c3fb5569a9ea7f6f7e99fe1a10353409cf55e6071c8e98e1e062d24184a8e7f8b1273b0ce98065 fix-use-of-pytest.patch
+a493f86891158ffa0c36168da5e7ebdeadafe5e9f067e2ad6052cf302c89db612f907b5e9950748fcfd74886b808870986529902bae77fede7e27d5d422d6ec6 xcffib-1.3.0.tar.gz
"
diff --git a/community/py3-xcffib/fix-use-of-pytest.patch b/community/py3-xcffib/fix-use-of-pytest.patch
deleted file mode 100644
index 14ddc4fcd5d..00000000000
--- a/community/py3-xcffib/fix-use-of-pytest.patch
+++ /dev/null
@@ -1,904 +0,0 @@
-Fix use of pytest
-
-Modified from https://github.com/tych0/xcffib/commit/18310bc5e07ebe3f51a5a1d1b2597aaa39036c81
-Removed the changes in .gitignore since the file doesn't exist in the PyPI tarball,
-and also in the tarball, the source code folder is xcffib/, not module/
-
-diff --git a/xcffib/testing.py b/xcffib/testing.py
-index 59cff91..f3db935 100644
---- a/xcffib/testing.py
-+++ b/xcffib/testing.py
-@@ -44,7 +44,7 @@ def find_display():
- return display, f
-
-
--class XvfbTest(object):
-+class XvfbTest:
-
- """ A helper class for testing things with nosetests. This class will run
- each test in its own fresh xvfb, leaving you with an xcffib connection to
-diff --git a/test/testing.py b/test/conftest.py
-similarity index 88%
-rename from test/testing.py
-rename to test/conftest.py
-index 87ec9bf..9a0821f 100644
---- a/test/testing.py
-+++ b/test/conftest.py
-@@ -1,4 +1,5 @@
- # Copyright 2014 Tycho Andersen
-+# Copyright 2021 Sean Vig
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
-@@ -16,6 +17,20 @@
- from xcffib.testing import XvfbTest
- from xcffib.xproto import EventMask
-
-+import pytest
-+
-+
-+@pytest.fixture
-+def xcffib_test():
-+ with XcffibTest() as test_data:
-+ yield test_data
-+
-+
-+@pytest.fixture
-+def xproto_test(xcffib_test):
-+ xcffib_test.xproto = xcffib.xproto.xprotoExtension(xcffib_test.conn)
-+ return xcffib_test
-+
-
- class XcffibTest(XvfbTest):
- """ A home for common functions needed for xcffib testing. """
-diff --git a/test/test_connection.py b/test/test_connection.py
-index 90fc9c4..c39a998 100644
---- a/test/test_connection.py
-+++ b/test/test_connection.py
-@@ -19,62 +19,65 @@
- import xcffib.xproto
-
- from xcffib import ffi
--from xcffib.testing import XvfbTest
--from .testing import XcffibTest
-
--import struct
-+import pytest
-
--class TestConnection(XcffibTest):
-
-- def setUp(self):
-- XvfbTest.setUp(self)
-- self.xproto = xcffib.xproto.xprotoExtension(self.conn)
-+class TestConnection:
-+ def test_invalid_display(self, xproto_test):
-+ with pytest.raises(xcffib.ConnectionException):
-+ xproto_test.conn = xcffib.Connection("notvalid")
-
-- def tearDown(self):
-- self.xproto = None
-- XvfbTest.tearDown(self)
--
-- def test_invalid_display(self):
-- try:
-- self.conn = xcffib.Connection('notvalid')
-- self.conn.invalid()
-- except xcffib.ConnectionException:
-- pass
-- else:
-- raise Exception("no connection exception!")
--
-- def test_get_setup(self):
-- setup = self.conn.get_setup()
-+ def test_get_setup(self, xproto_test):
-+ setup = xproto_test.conn.get_setup()
- # When X upgrades, we can probably manage to change this test :-)
- assert setup.protocol_major_version == 11
- assert setup.protocol_minor_version == 0
-
-- def test_get_screen_pointers(self):
-- screens = self.conn.get_screen_pointers()
-+ def test_get_screen_pointers(self, xproto_test):
-+ screens = xproto_test.conn.get_screen_pointers()
- assert len(screens) == 1
- screen = screens[0]
- assert ffi.typeof(screen) is ffi.typeof("xcb_screen_t *")
-- assert screen.root == self.default_screen.root
-- assert screen.width_in_pixels == self.width
-- assert screen.height_in_pixels == self.height
-- assert screen.root_depth == self.depth
--
-- def test_discard_sequence(self):
-- cookie = self.xproto.GetInputFocus()
-+ assert screen.root == xproto_test.default_screen.root
-+ assert screen.width_in_pixels == xproto_test.width
-+ assert screen.height_in_pixels == xproto_test.height
-+ assert screen.root_depth == xproto_test.depth
-+
-+ @pytest.mark.xfail
-+ def test_seq_increases(self, xproto_test):
-+ # If this test starts failing because the sequence numbers don't mach,
-+ # that's probably because you added a new test that imports a new X
-+ # extension. When that happens, every new connection automatically does
-+ # a QueryExtention for each new ext that has been imported, so the
-+ # squence numbers go up by one.
-+ #
-+ # i.e:
-+ # xproto setup query = seqno 0
-+ # xtest setup query = seqno 1
-+ assert xproto_test.xproto.GetInputFocus().sequence == 2
-+ assert xproto_test.xproto.GetInputFocus().sequence == 3
-+
-+ def test_discard_sequence(self, xproto_test):
-+ cookie = xproto_test.xproto.GetInputFocus()
- cookie.discard_reply()
- # this hangs if you leave it in, because the reply really was discarded
- # assert cookie.reply()
-
-- def test_list_extensions(self):
-- reply = self.conn.core.ListExtensions().reply()
-+ def test_invalid(self, xproto_test):
-+ with pytest.raises(xcffib.ConnectionException):
-+ xcffib.Connection("notadisplay")
-+
-+ def test_list_extensions(self, xproto_test):
-+ reply = xproto_test.conn.core.ListExtensions().reply()
- exts = [ext.name.to_string() for ext in reply.names]
- assert "XVideo" in exts
-
-- def test_create_window(self):
-- wid = self.conn.generate_id()
-- cookie = self.create_window(wid=wid)
-+ def test_create_window(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ cookie = xproto_test.create_window(wid=wid)
-
-- cookie = self.xproto.GetGeometry(wid)
-+ cookie = xproto_test.xproto.GetGeometry(wid)
-
- reply = cookie.reply()
- assert reply.x == 0
-@@ -82,120 +85,125 @@ def test_create_window(self):
- assert reply.width == 1
- assert reply.height == 1
-
-- def test_wait_for_nonexistent_request(self):
-- try:
-- self.conn.wait_for_reply(10)
-- except xcffib.XcffibException:
-- pass
-- else:
-- raise Exception("xcffib exception expected")
-+ def test_wait_for_nonexistent_request(self, xproto_test):
-+ with pytest.raises(xcffib.XcffibException):
-+ xproto_test.conn.wait_for_reply(10)
-
-- def test_no_windows(self):
-+ def test_no_windows(self, xproto_test):
- # Make sure there aren't any windows in the root window. This mostly
- # just exists to make sure people aren't somehow mistakenly running a
- # test in their own X session, which could corrupt results.
-- reply = self.xproto.QueryTree(self.default_screen.root).reply()
-+ reply = xproto_test.xproto.QueryTree(xproto_test.default_screen.root).reply()
- assert reply.children_len == 0
- assert len(reply.children) == 0
-
-- def test_create_window_creates_window(self):
-- wid = self.conn.generate_id()
-- self.create_window(wid=wid)
-- reply = self.xproto.QueryTree(self.default_screen.root).reply()
-+ def test_create_window_creates_window(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid=wid)
-+ reply = xproto_test.xproto.QueryTree(xproto_test.default_screen.root).reply()
- assert reply.children_len == 1
- assert len(reply.children) == 1
- assert reply.children[0] == wid
-
-- def test_checking_unchecked_fails(self):
-- try:
-- wid = self.conn.generate_id()
-- self.create_window(wid)
-- self.xproto.QueryTreeUnchecked(self.default_screen.root).check()
-- except AssertionError:
-- pass
-- else:
-- raise Exception("expected assertion error")
--
-- def test_checking_default_checked_fails(self):
-- try:
-- wid = self.conn.generate_id()
-- self.create_window(wid)
-- cookie = self.xproto.QueryTree(self.default_screen.root)
-+ def test_checking_unchecked_fails(self, xproto_test):
-+ with pytest.raises(AssertionError):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid)
-+ xproto_test.xproto.QueryTreeUnchecked(
-+ xproto_test.default_screen.root
-+ ).check()
-+
-+ def test_checking_default_checked_fails(self, xproto_test):
-+ with pytest.raises(AssertionError):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid)
-+ cookie = xproto_test.xproto.QueryTree(xproto_test.default_screen.root)
- cookie.check()
-- except AssertionError:
-- pass
-- else:
-- raise Exception("expected assertion error")
--
-- def test_checking_foreced_checked_succeeds(self):
-- wid = self.conn.generate_id()
-- cookie = self.create_window(wid, is_checked=True)
-+
-+ def test_checking_foreced_checked_succeeds(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ cookie = xproto_test.create_window(wid, is_checked=True)
- cookie.check()
-
-- def test_create_window_generates_event(self):
-- self.xeyes()
-- self.conn.flush()
-+ def test_create_window_generates_event(self, xproto_test):
-+ xproto_test.xeyes()
-+ xproto_test.conn.flush()
-
-- e = self.conn.wait_for_event()
-+ e = xproto_test.conn.wait_for_event()
- assert isinstance(e, xcffib.xproto.CreateNotifyEvent)
-
-- def test_query_invalid_wid_generates_error(self):
-- try:
-+ def test_query_invalid_wid_generates_error(self, xproto_test):
-+ with pytest.raises(xcffib.xproto.WindowError):
- # query a bad WINDOW
-- self.xproto.QueryTree(0xf00).reply()
-- except xcffib.xproto.WindowError:
-- pass
-- else:
-- raise Exception("expected WindowError")
-+ xproto_test.xproto.QueryTree(0xF00).reply()
-
-- def test_OpenFont(self):
-- fid = self.conn.generate_id()
-- self.xproto.OpenFont(fid, len("cursor"), "cursor")
-+ def test_OpenFont(self, xproto_test):
-+ fid = xproto_test.conn.generate_id()
-+ xproto_test.xproto.OpenFont(fid, len("cursor"), "cursor")
-
-- def test_ConfigureWindow(self):
-- wid = self.conn.generate_id()
-- self.create_window(wid=wid)
-- self.xproto.ConfigureWindowChecked(wid, 0, []).check()
-+ def test_ConfigureWindow(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid=wid)
-+ xproto_test.xproto.ConfigureWindowChecked(wid, 0, []).check()
-
-- def test_external_ConfigureWindow(self):
-- self.xeyes()
-- self.conn.flush()
-+ def test_external_ConfigureWindow(self, xproto_test):
-+ xproto_test.xeyes()
-+ xproto_test.conn.flush()
-
-- e = self.conn.wait_for_event()
-+ e = xproto_test.conn.wait_for_event()
-
-- r = self.xproto.ConfigureWindowChecked(e.window, 0, []).check()
-- r = self.xproto.DestroyWindowChecked(e.window).check()
-+ xproto_test.xproto.ConfigureWindowChecked(e.window, 0, []).check()
-+ xproto_test.xproto.DestroyWindowChecked(e.window).check()
-
-- def test_ChangeProperty_WM_NAME(self):
-- wid = self.conn.generate_id()
-- self.create_window(wid=wid)
-+ def test_ChangeProperty_WM_NAME(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid=wid)
-
- title = "test"
-- self.xproto.ChangeProperty(xcffib.xproto.PropMode.Replace, wid,
-- xcffib.xproto.Atom.WM_NAME, xcffib.xproto.Atom.STRING, 8,
-- len(title), title)
--
-- reply = self.xproto.GetProperty(False, wid,
-- xcffib.xproto.Atom.WM_NAME, xcffib.xproto.GetPropertyType.Any, 0, 1).reply()
-+ xproto_test.xproto.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ wid,
-+ xcffib.xproto.Atom.WM_NAME,
-+ xcffib.xproto.Atom.STRING,
-+ 8,
-+ len(title),
-+ title,
-+ )
-+
-+ reply = xproto_test.xproto.GetProperty(
-+ False,
-+ wid,
-+ xcffib.xproto.Atom.WM_NAME,
-+ xcffib.xproto.GetPropertyType.Any,
-+ 0,
-+ 1,
-+ ).reply()
- assert reply.value.to_string() == title
-
-- def test_ChangeProperty_NET_WM_NAME(self):
-- wid = self.conn.generate_id()
-- self.create_window(wid=wid)
-+ def test_ChangeProperty_NET_WM_NAME(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid=wid)
-
-- net_wm_name = self.intern("_NET_WM_NAME")
-- utf8_string = self.intern("UTF8_STRING")
-+ net_wm_name = xproto_test.intern("_NET_WM_NAME")
-+ utf8_string = xproto_test.intern("UTF8_STRING")
-
- title_bytes = b"test\xc2\xb7"
- title_string = six.u("test\u00B7")
-
- # First check with an object already encoded as bytes
-- self.xproto.ChangeProperty(xcffib.xproto.PropMode.Replace, wid,
-- net_wm_name, utf8_string, 8,
-- len(title_bytes), title_bytes)
--
-- reply = self.xproto.GetProperty(False, wid,
-- net_wm_name, xcffib.xproto.GetPropertyType.Any, 0, (2 ** 32) - 1).reply()
-+ xproto_test.xproto.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ wid,
-+ net_wm_name,
-+ utf8_string,
-+ 8,
-+ len(title_bytes),
-+ title_bytes,
-+ )
-+
-+ reply = xproto_test.xproto.GetProperty(
-+ False, wid, net_wm_name, xcffib.xproto.GetPropertyType.Any, 0, (2 ** 32) - 1
-+ ).reply()
-
- print(reply.value.buf())
- assert reply.value.buf() == title_bytes
-@@ -203,106 +211,126 @@ def test_ChangeProperty_NET_WM_NAME(self):
- assert reply.value.to_utf8() == title_string
-
- # Also check with a unicode string
-- self.xproto.ChangeProperty(xcffib.xproto.PropMode.Replace, wid,
-- net_wm_name, utf8_string, 8,
-- len(title_string.encode('utf-8')), title_string)
--
-- reply = self.xproto.GetProperty(False, wid,
-- net_wm_name, xcffib.xproto.GetPropertyType.Any, 0, (2 ** 32) - 1).reply()
-+ xproto_test.xproto.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ wid,
-+ net_wm_name,
-+ utf8_string,
-+ 8,
-+ len(title_string.encode("utf-8")),
-+ title_string,
-+ )
-+
-+ reply = xproto_test.xproto.GetProperty(
-+ False, wid, net_wm_name, xcffib.xproto.GetPropertyType.Any, 0, (2 ** 32) - 1
-+ ).reply()
-
- assert reply.value.buf() == title_bytes
- assert reply.value.to_utf8() == title_string
-
-- def test_ChangeProperty_WM_PROTOCOLS(self):
-- wid = self.conn.generate_id()
-- self.create_window(wid=wid)
-+ def test_ChangeProperty_WM_PROTOCOLS(self, xproto_test):
-+ wid = xproto_test.conn.generate_id()
-+ xproto_test.create_window(wid=wid)
-
-- wm_protocols = self.intern("WM_PROTOCOLS")
-+ wm_protocols = xproto_test.intern("WM_PROTOCOLS")
-
-- wm_delete_window = self.intern("WM_DELETE_WINDOW")
-+ wm_delete_window = xproto_test.intern("WM_DELETE_WINDOW")
-
-- self.xproto.ChangeProperty(xcffib.xproto.PropMode.Replace, wid,
-- wm_protocols, xcffib.xproto.Atom.ATOM, 32,
-- 1, (wm_delete_window,))
-- # For Python 2 only, make sure packing can handle both ints and longs
-- if six.PY2:
-- self.xproto.ChangeProperty(xcffib.xproto.PropMode.Replace, wid,
-- wm_protocols, xcffib.xproto.Atom.ATOM, 32,
-- 1, (long(wm_delete_window),))
-+ xproto_test.xproto.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ wid,
-+ wm_protocols,
-+ xcffib.xproto.Atom.ATOM,
-+ 32,
-+ 1,
-+ (wm_delete_window,),
-+ )
-
-- reply = self.xproto.GetProperty(False, wid, wm_protocols, xcffib.xproto.Atom.ATOM, 0, 1).reply()
-+ reply = xproto_test.xproto.GetProperty(
-+ False, wid, wm_protocols, xcffib.xproto.Atom.ATOM, 0, 1
-+ ).reply()
-
- assert reply.value.to_atoms() == (wm_delete_window,)
-
-- wm_take_focus = self.intern("WM_TAKE_FOCUS")
-+ wm_take_focus = xproto_test.intern("WM_TAKE_FOCUS")
-
-- self.xproto.ChangeProperty(xcffib.xproto.PropMode.Replace, wid,
-- wm_protocols, xcffib.xproto.Atom.ATOM, 32,
-- 1, (wm_take_focus,))
-+ xproto_test.xproto.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ wid,
-+ wm_protocols,
-+ xcffib.xproto.Atom.ATOM,
-+ 32,
-+ 1,
-+ (wm_take_focus,),
-+ )
-
-- reply = self.xproto.GetProperty(False, wid, wm_protocols, xcffib.xproto.Atom.ATOM, 0, 1).reply()
-+ reply = xproto_test.xproto.GetProperty(
-+ False, wid, wm_protocols, xcffib.xproto.Atom.ATOM, 0, 1
-+ ).reply()
-
- assert reply.value.to_atoms() == (wm_take_focus,)
-
-- def test_GetAtomName(self):
-+ def test_GetAtomName(self, xproto_test):
- wm_protocols = "WM_PROTOCOLS"
-- atom = self.intern(wm_protocols)
-- atom_name = self.xproto.GetAtomName(atom).reply().name
-+ atom = xproto_test.intern(wm_protocols)
-+ atom_name = xproto_test.xproto.GetAtomName(atom).reply().name
-
- assert atom_name.to_string() == wm_protocols
-
-- def test_KillClient(self):
-- self.xeyes()
-+ def test_KillClient(self, xproto_test):
-+ xproto_test.xeyes()
-
-- self.conn.flush()
-+ xproto_test.conn.flush()
-
-- e1 = self.conn.wait_for_event()
-- self.xproto.KillClient(e1.window)
-+ e1 = xproto_test.conn.wait_for_event()
-+ xproto_test.xproto.KillClient(e1.window)
-
- # one is MapRequest and the other is DestroyNotify, they may be in
- # either order
- for _ in range(2):
-- self.conn.flush()
-- k1 = self.conn.wait_for_event()
-+ xproto_test.conn.flush()
-+ k1 = xproto_test.conn.wait_for_event()
- if isinstance(k1, xcffib.xproto.DestroyNotifyEvent):
- assert e1.window == k1.window
- return
- assert False, "no DestroyNotifyEvent"
-
-- def test_connect(self):
-+ def test_connect(self, xproto_test):
- c = xcffib.connect()
- c.invalid()
- assert c.has_error() == 0
- c.disconnect()
-
-- def test_auth_connect(self):
-+ def test_auth_connect(self, xproto_test):
- authname = six.b("MIT-MAGIC-COOKIE-1")
-- authdata = six.b("\xa5\xcf\x95\xfa\x19\x49\x03\x60\xaf\xe4\x1e\xcd\xa3\xe2\xad\x47")
-+ authdata = six.b(
-+ "\xa5\xcf\x95\xfa\x19\x49\x03\x60\xaf\xe4\x1e\xcd\xa3\xe2\xad\x47"
-+ )
-
-- authstr = authname + six.b(':') + authdata
-+ authstr = authname + six.b(":") + authdata
-
-- conn = xcffib.connect(display=os.environ['DISPLAY'], auth=authstr)
-+ conn = xcffib.connect(display=os.environ["DISPLAY"], auth=authstr)
-
- assert conn.get_setup().roots[0].root > 0
-
- # This is an adaptation of the test from #27
-- def test_build_atom_cache(self):
-+ def test_build_atom_cache(self, xproto_test):
- # This will hold the forward *and* reverse lookups for any given atom
- atoms = {}
- cookies = []
- # Batch the replies by creating a list of cookies first:
- for i in range(1, 10000):
-- c = self.conn.core.GetAtomName(i)
-+ c = xproto_test.conn.core.GetAtomName(i)
- cookies.append((i, c))
- for i, c in cookies:
- try:
- name = c.reply().name.to_string()
- except xcffib.xproto.BadAtom:
- continue
-- atoms.update({i: name}) # Lookup by number
-- atoms.update({name: i}) # Lookup by name
-+ atoms.update({i: name}) # Lookup by number
-+ atoms.update({name: i}) # Lookup by name
-
-- def test_wrap(self):
-+ def test_wrap(self, xproto_test):
- c = xcffib.connect()
- c.invalid()
- c2 = xcffib.wrap(xcffib.ffi.cast("long", c._conn))
-diff --git a/test/test_crazy_window_script.py b/test/test_crazy_window_script.py
-index 86a79ce..a90181c 100644
---- a/test/test_crazy_window_script.py
-+++ b/test/test_crazy_window_script.py
-@@ -23,7 +23,6 @@
- """
- This is mostly stolen from qtile's tests/scripts/window.py
- """
--from __future__ import print_function
- import os
- import sys
- import struct
-@@ -31,15 +30,14 @@
- import xcffib
- import xcffib.xproto
- from xcffib.xproto import EventMask
--from xcffib.testing import XvfbTest
-
--class TestWindow(XvfbTest):
-
-- def test_the_script(self):
-+class TestWindow:
-+ def test_the_script(self, xcffib_test):
- NAME = "one"
- for i in range(20):
- try:
-- conn = xcffib.connect(os.environ['DISPLAY'])
-+ conn = xcffib.connect(os.environ["DISPLAY"])
- except xcffib.ConnectionException:
- time.sleep(0.1)
- continue
-@@ -48,51 +46,104 @@ def test_the_script(self):
- sys.exit(1)
- break
- else:
-- print("Could not open window on display %s" % (sys.argv[1]), file=sys.stderr)
-+ print(
-+ "Could not open window on display %s" % (sys.argv[1]), file=sys.stderr
-+ )
- sys.exit(1)
-
- screen = conn.get_setup().roots[conn.pref_screen]
-
- window = conn.generate_id()
-- background = conn.core.AllocColor(screen.default_colormap, 0x2828, 0x8383, 0xCECE).reply().pixel # Color "#2883ce"
-- conn.core.CreateWindow(xcffib.CopyFromParent, window, screen.root,
-- 100, 100, 100, 100, 1,
-- xcffib.xproto.WindowClass.InputOutput, screen.root_visual,
-- xcffib.xproto.CW.BackPixel | xcffib.xproto.CW.EventMask,
-- [background, xcffib.xproto.EventMask.StructureNotify | xcffib.xproto.EventMask.Exposure])
-+ background = (
-+ conn.core.AllocColor(screen.default_colormap, 0x2828, 0x8383, 0xCECE)
-+ .reply()
-+ .pixel
-+ ) # Color "#2883ce"
-+ conn.core.CreateWindow(
-+ xcffib.CopyFromParent,
-+ window,
-+ screen.root,
-+ 100,
-+ 100,
-+ 100,
-+ 100,
-+ 1,
-+ xcffib.xproto.WindowClass.InputOutput,
-+ screen.root_visual,
-+ xcffib.xproto.CW.BackPixel | xcffib.xproto.CW.EventMask,
-+ [
-+ background,
-+ xcffib.xproto.EventMask.StructureNotify
-+ | xcffib.xproto.EventMask.Exposure,
-+ ],
-+ )
-
-- conn.core.ChangeProperty(xcffib.xproto.PropMode.Replace,
-- window, xcffib.xproto.Atom.WM_NAME,
-- xcffib.xproto.Atom.STRING, 8, len(NAME),
-- NAME)
-+ conn.core.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ window,
-+ xcffib.xproto.Atom.WM_NAME,
-+ xcffib.xproto.Atom.STRING,
-+ 8,
-+ len(NAME),
-+ NAME,
-+ )
-
- wm_protocols = "WM_PROTOCOLS"
-- wm_protocols = conn.core.InternAtom(0, len(wm_protocols), wm_protocols).reply().atom
-+ wm_protocols = (
-+ conn.core.InternAtom(0, len(wm_protocols), wm_protocols).reply().atom
-+ )
-
- wm_delete_window = "WM_DELETE_WINDOW"
-- wm_delete_window = conn.core.InternAtom(0, len(wm_delete_window), wm_delete_window).reply().atom
-+ wm_delete_window = (
-+ conn.core.InternAtom(0, len(wm_delete_window), wm_delete_window)
-+ .reply()
-+ .atom
-+ )
-
-- conn.core.ChangeProperty(xcffib.xproto.PropMode.Replace,
-- window, wm_protocols,
-- xcffib.xproto.Atom.ATOM, 32, 1,
-- [wm_delete_window])
-+ conn.core.ChangeProperty(
-+ xcffib.xproto.PropMode.Replace,
-+ window,
-+ wm_protocols,
-+ xcffib.xproto.Atom.ATOM,
-+ 32,
-+ 1,
-+ [wm_delete_window],
-+ )
-
-- conn.core.ConfigureWindow(window,
-- xcffib.xproto.ConfigWindow.X | xcffib.xproto.ConfigWindow.Y |
-- xcffib.xproto.ConfigWindow.Width | xcffib.xproto.ConfigWindow.Height |
-- xcffib.xproto.ConfigWindow.BorderWidth,
-- [0, 0, 100, 100, 1])
-+ conn.core.ConfigureWindow(
-+ window,
-+ xcffib.xproto.ConfigWindow.X
-+ | xcffib.xproto.ConfigWindow.Y
-+ | xcffib.xproto.ConfigWindow.Width
-+ | xcffib.xproto.ConfigWindow.Height
-+ | xcffib.xproto.ConfigWindow.BorderWidth,
-+ [0, 0, 100, 100, 1],
-+ )
- conn.core.MapWindow(window)
- conn.flush()
-- conn.core.ConfigureWindow(window,
-- xcffib.xproto.ConfigWindow.X | xcffib.xproto.ConfigWindow.Y |
-- xcffib.xproto.ConfigWindow.Width | xcffib.xproto.ConfigWindow.Height |
-- xcffib.xproto.ConfigWindow.BorderWidth,
-- [0, 0, 100, 100, 1])
-+ conn.core.ConfigureWindow(
-+ window,
-+ xcffib.xproto.ConfigWindow.X
-+ | xcffib.xproto.ConfigWindow.Y
-+ | xcffib.xproto.ConfigWindow.Width
-+ | xcffib.xproto.ConfigWindow.Height
-+ | xcffib.xproto.ConfigWindow.BorderWidth,
-+ [0, 0, 100, 100, 1],
-+ )
-
- # now kill the window from the "wm" side via WM_DELETE_WINDOW protocol
-- WM_PROTOCOLS = self.conn.core.InternAtom(False, len("WM_PROTOCOLS"), "WM_PROTOCOLS").reply().atom
-- WM_DELETE_WINDOW = self.conn.core.InternAtom(False, len("WM_DELETE_WINDOW"), "WM_DELETE_WINDOW").reply().atom
-+ WM_PROTOCOLS = (
-+ xcffib_test.conn.core.InternAtom(False, len("WM_PROTOCOLS"), "WM_PROTOCOLS")
-+ .reply()
-+ .atom
-+ )
-+ WM_DELETE_WINDOW = (
-+ xcffib_test.conn.core.InternAtom(
-+ False, len("WM_DELETE_WINDOW"), "WM_DELETE_WINDOW"
-+ )
-+ .reply()
-+ .atom
-+ )
- vals = [
- 33, # ClientMessageEvent
- 32, # Format
-@@ -105,10 +156,10 @@ def test_the_script(self):
- 0,
- 0,
- ]
-- e = struct.pack('BBHII5I', *vals)
-- self.conn.core.SendEvent(False, window, EventMask.NoEvent, e)
-+ e = struct.pack("BBHII5I", *vals)
-+ xcffib_test.conn.core.SendEvent(False, window, EventMask.NoEvent, e)
-
-- self.conn.flush()
-+ xcffib_test.conn.flush()
-
- while 1:
- conn.flush()
-diff --git a/test/test_fakeinput.py b/test/test_fakeinput.py
-index 16ee08c..14d6944 100644
---- a/test/test_fakeinput.py
-+++ b/test/test_fakeinput.py
-@@ -2,46 +2,45 @@
- import xcffib.xproto
- import xcffib.xtest
-
--from .testing import XcffibTest
-
--class TestConnection(XcffibTest):
-- def test_fakeinput(self):
-- xtest = self.conn(xcffib.xtest.key)
-+def test_fakeinput(xcffib_test):
-+ xtest = xcffib_test.conn(xcffib.xtest.key)
-
-- setup = self.conn.get_setup()
-- screen = setup.roots[0]
-- def test(x, y):
-- # motion
-- xtest.FakeInput(
-- 6,
-- 0,
-- xcffib.xproto.Time.CurrentTime,
-- screen.root,
-- x,
-- y,
-- 0)
-+ setup = xcffib_test.conn.get_setup()
-+ screen = setup.roots[0]
-
-- # press
-- xtest.FakeInput(
-- 4,
-- 1,
-- xcffib.xproto.Time.CurrentTime,
-- screen.root,
-- 0,
-- 0,
-- 0)
-+ def test(x, y):
-+ # motion
-+ xtest.FakeInput(
-+ 6,
-+ 0,
-+ xcffib.xproto.Time.CurrentTime,
-+ screen.root,
-+ x,
-+ y,
-+ 0)
-
-- # release
-- xtest.FakeInput(
-- 5,
-- 1,
-- xcffib.xproto.Time.CurrentTime,
-- screen.root,
-- 2,
-- 2,
-- 0)
-- self.conn.flush()
-- test(50, 10)
-+ # press
-+ xtest.FakeInput(
-+ 4,
-+ 1,
-+ xcffib.xproto.Time.CurrentTime,
-+ screen.root,
-+ 0,
-+ 0,
-+ 0)
-
-- # we shouldn't get any errors
-- self.conn.poll_for_event()
-+ # release
-+ xtest.FakeInput(
-+ 5,
-+ 1,
-+ xcffib.xproto.Time.CurrentTime,
-+ screen.root,
-+ 2,
-+ 2,
-+ 0)
-+ xcffib_test.conn.flush()
-+ test(50, 10)
-+
-+ # we shouldn't get any errors
-+ xcffib_test.conn.poll_for_event()
-diff --git a/test/test_python_code.py b/test/test_python_code.py
-index 9f01c89..49aa670 100644
---- a/test/test_python_code.py
-+++ b/test/test_python_code.py
-@@ -20,9 +20,10 @@
- import sys
- from xcffib.xproto import EventMask
-
--from .testing import XcffibTest
-+from .conftest import XcffibTest
-
--class TestPythonCode(XcffibTest):
-+
-+class TestPythonCode:
-
- def test_struct_pack_uses_List(self):
- # suppose we have a list of ints...
-@@ -65,9 +66,9 @@ def test_offset_map(self):
- assert om[1] == "Event1,0"
- assert om[2] == "Event1,1"
-
-- def test_create_ClientMessageEvent(self):
-- wm_protocols = self.intern("WM_PROTOCOLS")
-- wm_delete_window = self.intern("WM_DELETE_WINDOW")
-+ def test_create_ClientMessageEvent(self, xcffib_test):
-+ wm_protocols = xcffib_test.intern("WM_PROTOCOLS")
-+ wm_delete_window = xcffib_test.intern("WM_DELETE_WINDOW")
-
- # should be exactly 20 bytes
- data = [
-@@ -81,11 +82,11 @@ def test_create_ClientMessageEvent(self):
- union = xcffib.xproto.ClientMessageData.synthetic(data, "I" * 5)
- assert list(union.data32) == data
-
-- wid = self.conn.generate_id()
-- self.create_window(wid=wid)
-+ wid = xcffib_test.conn.generate_id()
-+ xcffib_test.create_window(wid=wid)
-
-- wm_protocols = self.intern("WM_PROTOCOLS")
-- wm_delete_window = self.intern("WM_DELETE_WINDOW")
-+ wm_protocols = xcffib_test.intern("WM_PROTOCOLS")
-+ wm_delete_window = xcffib_test.intern("WM_DELETE_WINDOW")
-
- e = xcffib.xproto.ClientMessageEvent.synthetic(
- format=32,
-@@ -94,18 +95,18 @@ def test_create_ClientMessageEvent(self):
- data=union
- )
-
-- self.xproto.SendEvent(False, wid, EventMask.NoEvent, e.pack())
-- self.conn.flush()
-+ xcffib_test.xproto.SendEvent(False, wid, EventMask.NoEvent, e.pack())
-+ xcffib_test.conn.flush()
-
-- e = self.conn.wait_for_event()
-+ e = xcffib_test.conn.wait_for_event()
- assert isinstance(e, xcffib.xproto.ClientMessageEvent)
- assert e.window == wid
- assert list(e.data.data32) == data
-
-- def test_pack_from_event(self):
-- wm_protocols = self.intern("WM_PROTOCOLS")
-- wm_delete_window = self.intern("WM_DELETE_WINDOW")
-- wid = self.conn.generate_id()
-+ def test_pack_from_event(self, xcffib_test):
-+ wm_protocols = xcffib_test.intern("WM_PROTOCOLS")
-+ wm_delete_window = xcffib_test.intern("WM_DELETE_WINDOW")
-+ wid = xcffib_test.conn.generate_id()
-
- # should be exactly 20 bytes
- data = [
-@@ -126,9 +127,9 @@ def test_pack_from_event(self):
-
- e2 = xcffib.xproto.ClientMessageEvent(e)
-
-- def test_get_image(self):
-+ def test_get_image(self, xcffib_test):
- # adapted from: https://gist.github.com/liftoff/4741790
-- setup = self.conn.get_setup()
-+ setup = xcffib_test.conn.get_setup()
- screen = setup.roots[0]
- width = screen.width_in_pixels
- height = screen.height_in_pixels
-@@ -137,12 +138,12 @@ def test_get_image(self):
- # GetImage requires an output format as the first arg. We want ZPixmap:
- output_format = xcffib.xproto.ImageFormat.ZPixmap
- plane_mask = 2**32 - 1 # No idea what this is but it works!
-- reply = self.conn.core.GetImage(
-+ reply = xcffib_test.conn.core.GetImage(
- output_format, root, 0, 0, width, height, plane_mask).reply()
- reply.data.buf()
-
-
--class TestXcffibTestGenerator(object):
-+class TestXcffibTestGenerator:
-
- def test_XcffibTest_generator(self):
- try: