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