@@ -53,7 +53,7 @@ def test_push_with_key_in_keymap(self, mock_keymap):
53
53
mock_keymap .compile_keymap .return_value = {"a" : "b" }
54
54
eq = self .make_eventqueue ()
55
55
eq .keymap = {b"a" : "b" }
56
- eq .push ("a" )
56
+ eq .push (b "a" )
57
57
mock_keymap .compile_keymap .assert_called ()
58
58
self .assertEqual (eq .events [0 ].evt , "key" )
59
59
self .assertEqual (eq .events [0 ].data , "b" )
@@ -63,7 +63,7 @@ def test_push_without_key_in_keymap(self, mock_keymap):
63
63
mock_keymap .compile_keymap .return_value = {"a" : "b" }
64
64
eq = self .make_eventqueue ()
65
65
eq .keymap = {b"c" : "d" }
66
- eq .push ("a" )
66
+ eq .push (b "a" )
67
67
mock_keymap .compile_keymap .assert_called ()
68
68
self .assertEqual (eq .events [0 ].evt , "key" )
69
69
self .assertEqual (eq .events [0 ].data , "a" )
@@ -73,13 +73,13 @@ def test_push_with_keymap_in_keymap(self, mock_keymap):
73
73
mock_keymap .compile_keymap .return_value = {"a" : "b" }
74
74
eq = self .make_eventqueue ()
75
75
eq .keymap = {b"a" : {b"b" : "c" }}
76
- eq .push ("a" )
76
+ eq .push (b "a" )
77
77
mock_keymap .compile_keymap .assert_called ()
78
78
self .assertTrue (eq .empty ())
79
- eq .push ("b" )
79
+ eq .push (b "b" )
80
80
self .assertEqual (eq .events [0 ].evt , "key" )
81
81
self .assertEqual (eq .events [0 ].data , "c" )
82
- eq .push ("d" )
82
+ eq .push (b "d" )
83
83
self .assertEqual (eq .events [1 ].evt , "key" )
84
84
self .assertEqual (eq .events [1 ].data , "d" )
85
85
@@ -88,32 +88,32 @@ def test_push_with_keymap_in_keymap_and_escape(self, mock_keymap):
88
88
mock_keymap .compile_keymap .return_value = {"a" : "b" }
89
89
eq = self .make_eventqueue ()
90
90
eq .keymap = {b"a" : {b"b" : "c" }}
91
- eq .push ("a" )
91
+ eq .push (b "a" )
92
92
mock_keymap .compile_keymap .assert_called ()
93
93
self .assertTrue (eq .empty ())
94
94
eq .flush_buf ()
95
- eq .push ("\033 " )
95
+ eq .push (b "\033 " )
96
96
self .assertEqual (eq .events [0 ].evt , "key" )
97
97
self .assertEqual (eq .events [0 ].data , "\033 " )
98
- eq .push ("b" )
98
+ eq .push (b "b" )
99
99
self .assertEqual (eq .events [1 ].evt , "key" )
100
100
self .assertEqual (eq .events [1 ].data , "b" )
101
101
102
102
def test_push_special_key (self ):
103
103
eq = self .make_eventqueue ()
104
104
eq .keymap = {}
105
- eq .push ("\x1b " )
106
- eq .push ("[" )
107
- eq .push ("A" )
105
+ eq .push (b "\x1b " )
106
+ eq .push (b "[" )
107
+ eq .push (b "A" )
108
108
self .assertEqual (eq .events [0 ].evt , "key" )
109
109
self .assertEqual (eq .events [0 ].data , "\x1b " )
110
110
111
111
def test_push_unrecognized_escape_sequence (self ):
112
112
eq = self .make_eventqueue ()
113
113
eq .keymap = {}
114
- eq .push ("\x1b " )
115
- eq .push ("[" )
116
- eq .push ("Z" )
114
+ eq .push (b "\x1b " )
115
+ eq .push (b "[" )
116
+ eq .push (b "Z" )
117
117
self .assertEqual (len (eq .events ), 3 )
118
118
self .assertEqual (eq .events [0 ].evt , "key" )
119
119
self .assertEqual (eq .events [0 ].data , "\x1b " )
@@ -122,12 +122,54 @@ def test_push_unrecognized_escape_sequence(self):
122
122
self .assertEqual (eq .events [2 ].evt , "key" )
123
123
self .assertEqual (eq .events [2 ].data , "Z" )
124
124
125
- def test_push_unicode_character (self ):
125
+ def test_push_unicode_character_as_str (self ):
126
126
eq = self .make_eventqueue ()
127
127
eq .keymap = {}
128
- eq .push ("ч" )
129
- self .assertEqual (eq .events [0 ].evt , "key" )
130
- self .assertEqual (eq .events [0 ].data , "ч" )
128
+ with self .assertRaises (AssertionError ):
129
+ eq .push ("ч" )
130
+ with self .assertRaises (AssertionError ):
131
+ eq .push ("ñ" )
132
+
133
+ def test_push_unicode_character_two_bytes (self ):
134
+ eq = self .make_eventqueue ()
135
+ eq .keymap = {}
136
+
137
+ encoded = "ч" .encode (eq .encoding , "replace" )
138
+ self .assertEqual (len (encoded ), 2 )
139
+
140
+ eq .push (encoded [0 ])
141
+ e = eq .get ()
142
+ self .assertIsNone (e )
143
+
144
+ eq .push (encoded [1 ])
145
+ e = eq .get ()
146
+ self .assertEqual (e .evt , "key" )
147
+ self .assertEqual (e .data , "ч" )
148
+
149
+ def test_push_single_chars_and_unicode_character_as_str (self ):
150
+ eq = self .make_eventqueue ()
151
+ eq .keymap = {}
152
+
153
+ def _event (evt , data , raw = None ):
154
+ r = raw if raw is not None else data .encode (eq .encoding )
155
+ e = Event (evt , data , r )
156
+ return e
157
+
158
+ def _push (keys ):
159
+ for k in keys :
160
+ eq .push (k )
161
+
162
+ self .assertIsInstance ("ñ" , str )
163
+
164
+ # If an exception happens during push, the existing events must be
165
+ # preserved and we can continue to push.
166
+ _push (b"b" )
167
+ with self .assertRaises (AssertionError ):
168
+ _push ("ñ" )
169
+ _push (b"a" )
170
+
171
+ self .assertEqual (eq .get (), _event ("key" , "b" ))
172
+ self .assertEqual (eq .get (), _event ("key" , "a" ))
131
173
132
174
133
175
@unittest .skipIf (support .MS_WINDOWS , "No Unix event queue on Windows" )
0 commit comments