OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # | 2 # |
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 # DESCRIPTION : | 7 # DESCRIPTION : |
8 # | 8 # |
9 # Intended for use during manufacturing to validate that all keyboard | 9 # Intended for use during manufacturing to validate that all keyboard |
10 # keys function properly. Run normally, this program will display a | 10 # keys function properly. Run normally, this program will display a |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 pass_msg_timeout = 2 | 111 pass_msg_timeout = 2 |
112 | 112 |
113 # Background color and alpha for the final result message. | 113 # Background color and alpha for the final result message. |
114 bg_rgba_error = (0.7, 0, 0, 0.9) | 114 bg_rgba_error = (0.7, 0, 0, 0.9) |
115 bg_rgba_pass = ( 0, 0.7, 0, 0.9) | 115 bg_rgba_pass = ( 0, 0.7, 0, 0.9) |
116 | 116 |
117 # Highlight color and alpha to indicate activated keys. | 117 # Highlight color and alpha to indicate activated keys. |
118 rgba_press_and_release = ( 0, 0.5, 0, 0.6) | 118 rgba_press_and_release = ( 0, 0.5, 0, 0.6) |
119 rgba_press_only = (0.6, 0.6, 0, 0.6) | 119 rgba_press_only = (0.6, 0.6, 0, 0.6) |
120 | 120 |
121 def __init__(self, kbd_image): | 121 def __init__(self, kbd_image, exit_on_error=False): |
122 self._kbd_image = kbd_image | 122 self._kbd_image = kbd_image |
| 123 self._exit_on_error = exit_on_error |
123 self._pressed_keys = set() | 124 self._pressed_keys = set() |
124 self._successful_keys = set() | 125 self._successful_keys = set() |
125 self._deadline = None | 126 self._deadline = None |
126 self._success = None | 127 self._success = None |
127 | 128 |
128 def missing_keys(self): | 129 def missing_keys(self): |
129 return set(KeyboardTest.bindings) - self._successful_keys | 130 return set(KeyboardTest.bindings) - self._successful_keys |
130 | 131 |
131 def show_result(self, widget, context, text, bg_rgba): | 132 def show_result(self, widget, context, text, bg_rgba): |
132 widget_width, widget_height = widget.get_size_request() | 133 widget_width, widget_height = widget.get_size_request() |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 def timer_event(self, window): | 167 def timer_event(self, window): |
167 if not self._deadline: | 168 if not self._deadline: |
168 # Ignore timer events with no countdown in progress. | 169 # Ignore timer events with no countdown in progress. |
169 return True | 170 return True |
170 if self._deadline <= time.time(): | 171 if self._deadline <= time.time(): |
171 self._deadline = None | 172 self._deadline = None |
172 if self._success is None: | 173 if self._success is None: |
173 self._success = False | 174 self._success = False |
174 mk = ['0x%x' % k for k in self.missing_keys()] | 175 mk = ['0x%x' % k for k in self.missing_keys()] |
175 print 'missing_keys = %s' % ', '.join(mk) | 176 print 'missing_keys = %s' % ', '.join(mk) |
| 177 if self._exit_on_error: |
| 178 sys.exit(1) |
176 elif self._success: | 179 elif self._success: |
177 sys.exit(0) | 180 sys.exit(0) |
178 window.queue_draw() | 181 window.queue_draw() |
179 return True | 182 return True |
180 | 183 |
181 def expose_event(self, widget, event): | 184 def expose_event(self, widget, event): |
182 context = widget.window.cairo_create() | 185 context = widget.window.cairo_create() |
183 | 186 |
184 # Show keyboard image as the background. | 187 # Show keyboard image as the background. |
185 context.set_source_surface(self._kbd_image, 0, 0) | 188 context.set_source_surface(self._kbd_image, 0, 0) |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 drawing_area = gtk.DrawingArea() | 378 drawing_area = gtk.DrawingArea() |
376 drawing_area.set_size_request(*kbd_image_size) | 379 drawing_area.set_size_request(*kbd_image_size) |
377 | 380 |
378 if len(sys.argv) > 1 and sys.argv[1] == '--setup': | 381 if len(sys.argv) > 1 and sys.argv[1] == '--setup': |
379 kt = KeyboardTestSetup(kbd_image) | 382 kt = KeyboardTestSetup(kbd_image) |
380 window.set_default_size(981, 450) | 383 window.set_default_size(981, 450) |
381 window.connect('key-press-event', kt.key_press_event) | 384 window.connect('key-press-event', kt.key_press_event) |
382 drawing_area.connect('button_release_event', kt.button_release_event) | 385 drawing_area.connect('button_release_event', kt.button_release_event) |
383 drawing_area.connect('button_press_event', kt.button_press_event) | 386 drawing_area.connect('button_press_event', kt.button_press_event) |
384 else: | 387 else: |
385 kt = KeyboardTest(kbd_image) | 388 exit_on_error = False |
| 389 if '--exit-on-error' in sys.argv: |
| 390 exit_on_error = True |
| 391 kt = KeyboardTest(kbd_image, exit_on_error=exit_on_error) |
386 screen = window.get_screen() | 392 screen = window.get_screen() |
387 screen_size = (screen.get_width(), screen.get_height()) | 393 screen_size = (screen.get_width(), screen.get_height()) |
388 window.set_default_size(*screen_size) | 394 window.set_default_size(*screen_size) |
389 window.connect('key-press-event', kt.key_press_event) | 395 window.connect('key-press-event', kt.key_press_event) |
390 window.connect('key-release-event', kt.key_release_event) | 396 window.connect('key-release-event', kt.key_release_event) |
391 gobject.timeout_add(1000, kt.timer_event, window) | 397 gobject.timeout_add(1000, kt.timer_event, window) |
392 | 398 |
393 drawing_area.connect('expose_event', kt.expose_event) | 399 drawing_area.connect('expose_event', kt.expose_event) |
394 | 400 |
395 drawing_area.show() | 401 drawing_area.show() |
396 | 402 |
397 align = gtk.Alignment(xalign=0.5, yalign=0.5) | 403 align = gtk.Alignment(xalign=0.5, yalign=0.5) |
398 align.add(drawing_area) | 404 align.add(drawing_area) |
399 align.show() | 405 align.show() |
400 | 406 |
401 drawing_area.set_events(gtk.gdk.EXPOSURE_MASK | | 407 drawing_area.set_events(gtk.gdk.EXPOSURE_MASK | |
402 gtk.gdk.KEY_PRESS_MASK | | 408 gtk.gdk.KEY_PRESS_MASK | |
403 gtk.gdk.BUTTON_PRESS_MASK | | 409 gtk.gdk.BUTTON_PRESS_MASK | |
404 gtk.gdk.BUTTON_RELEASE_MASK) | 410 gtk.gdk.BUTTON_RELEASE_MASK) |
405 | 411 |
406 window.add(align) | 412 window.add(align) |
407 window.show() | 413 window.show() |
408 | 414 |
409 gtk.main() | 415 gtk.main() |
410 | 416 |
411 return (kt.success != True) | 417 return (kt.success != True) |
412 | 418 |
413 if __name__ == '__main__': | 419 if __name__ == '__main__': |
414 main() | 420 main() |
OLD | NEW |