diff options
author | psykose <alice@ayaya.dev> | 2023-04-23 21:50:22 +0000 |
---|---|---|
committer | psykose <alice@ayaya.dev> | 2023-04-23 23:50:22 +0200 |
commit | 78971eb7dcaf29388ae518418de6139ddfbd5360 (patch) | |
tree | 46ee94164b4dc83bc17d6e2edd7d1bf7a62b94b4 | |
parent | 21ea8da3cb1da7baa7a482ba3b16584bdf877ce0 (diff) |
community/py3-xcffib: upgrade to 1.3.0
-rw-r--r-- | community/py3-xcffib/APKBUILD | 32 | ||||
-rw-r--r-- | community/py3-xcffib/fix-use-of-pytest.patch | 904 |
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: |