-
Notifications
You must be signed in to change notification settings - Fork 11
/
test_xcb.py
116 lines (100 loc) · 3.69 KB
/
test_xcb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import unittest
import os
from functools import wraps
def xcbtest(*protos):
def wrapper(fun):
@wraps(fun)
def wrapper(self):
from tilenol.xcb import Proto, Connection
from zorro import Hub
err = []
hub = Hub()
def real_test():
pr = Proto()
for i in protos:
pr.load_xml(i)
conn = Connection(pr)
fun(self, conn)
@hub.run
def test():
try:
real_test()
except Exception as e:
err.append(e)
if err:
raise err[0]
return wrapper
return wrapper
class TestConn(unittest.TestCase):
@xcbtest('xproto')
def testAtom(self, conn):
xproto = conn.proto.subprotos['xproto']
a1 = conn.do_request(xproto.requests['InternAtom'],
only_if_exists=False, name="_ZXCB")['atom']
self.assertTrue(a1 > 100)
self.assertTrue(isinstance(a1, int))
a2 = conn.do_request(xproto.requests['InternAtom'],
only_if_exists=True, name="WM_CLASS")['atom']
self.assertEqual(a2, 67)
self.assertNotEqual(a1, a2)
@xcbtest('xproto')
def testMoreAtoms(self, conn):
xproto = conn.proto.subprotos['xproto']
totalatom = "TESTTESTTESTTESTTEST"
for i in range(1, len(totalatom)):
n = conn.do_request(xproto.requests['InternAtom'],
only_if_exists=False, name=totalatom[:i])['atom']
self.assertTrue(n > 200)
self.assertTrue(isinstance(n, int))
@xcbtest('xproto')
def testXid(self, conn):
conn.connection()
xid1 = conn.new_xid()
xid2 = conn.new_xid()
self.assertTrue(xid2 > xid1)
self.assertTrue(isinstance(xid1, int))
class TestWrapper(unittest.TestCase):
@xcbtest('xproto')
def testAtoms(self, conn):
from tilenol.xcb.core import Core
core = Core(conn)
self.assertEqual(core.atom.WM_CLASS, 67)
self.assertEqual(core.atom.WM_CLASS.name, 'WM_CLASS')
self.assertEqual(repr(core.atom.WM_CLASS), '<Atom WM_CLASS:67>')
a1 = conn.do_request(conn.proto.requests['InternAtom'],
only_if_exists=False, name="_ZXCB")['atom']
self.assertTrue(a1 > 200)
self.assertEquals(core.atom._ZXCB, a1)
@xcbtest('xproto')
def testAtoms(self, conn):
from tilenol.xcb.core import Core
core = Core(conn)
self.assertEqual(core.EventMask.Exposure, 32768)
self.assertEqual(core.CW.BackPixel, 2)
self.assertEqual(repr(core.CW.BackPixel), '<Const BackPixel:2>')
@xcbtest('xproto')
def testRaw(self, conn):
from tilenol.xcb.core import Core
core = Core(conn)
a2 = core.raw.InternAtom(only_if_exists=True, name="WM_CLASS")['atom']
self.assertEqual(a2, 67)
@xcbtest('xproto')
def testWin(self, conn):
from tilenol.xcb.core import Core, Rectangle
core = Core(conn)
conn.connection()
win = core.create_toplevel(
bounds=Rectangle(10, 10, 100, 100),
border=1,
klass=core.WindowClass.InputOutput,
params={
core.CW.BackPixel: conn.init_data['roots'][0]['white_pixel'],
core.CW.EventMask:
core.EventMask.Exposure | core.EventMask.KeyPress,
})
core.raw.MapWindow(window=win)
for ev in conn.get_events():
if ev.__class__.__name__ == 'ExposeEvent' and ev.window == win:
break
attr = core.raw.GetWindowAttributes(window=win)
self.assertTrue(attr['map_state'])