Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Unified Diff: client/site_tests/factory_Display/factory_Display.py

Issue 2857012: Batched update of factory tests. (Closed) Base URL: ssh://gitrw.chromium.org/autotest.git
Patch Set: finished comment Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « client/deps/factory/ui ('k') | client/site_tests/factory_ExternalStorage/factory_ExternalStorage.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/site_tests/factory_Display/factory_Display.py
diff --git a/client/site_tests/factory_Display/factory_Display.py b/client/site_tests/factory_Display/factory_Display.py
new file mode 100644
index 0000000000000000000000000000000000000000..7d460a00c604c66c9bb1ed63ab1c2b09fbf96bda
--- /dev/null
+++ b/client/site_tests/factory_Display/factory_Display.py
@@ -0,0 +1,223 @@
+# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+# DESCRIPTION :
+#
+# This is an example factory test that does not really do anything --
+# it displays a message in the center of the testing area, as
+# communicated by arguments to run_once(). This test makes use of the
+# factory_test library to display its UI, and to monitor keyboard
+# events for test-switching triggers. This test can be terminated by
+# typing SHIFT-Q.
+
+from autotest_lib.client.bin import test
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.common_lib import factory_test
+
+import gtk
+import pango
+import os
+import sys
+
+
+def XXX_log(s):
+ print >> sys.stderr, 'FACTORY: ' + s
+
+
+_BLACK = gtk.gdk.Color()
+_RED = gtk.gdk.Color(0xFFFF, 0, 0)
+_GREEN = gtk.gdk.Color(0, 0xFFFF, 0)
+_BLUE = gtk.gdk.Color(0, 0, 0xFFFF)
+_WHITE = gtk.gdk.Color(0xFFFF, 0xFFFF, 0xFFFF)
+
+_ACTIVE = 'ACTIVE'
+_PASSED = 'PASS'
+_FAILED = 'FAIL'
+_UNTESTED = 'UNTESTED'
+
+_LABEL_COLORS = {
+ _ACTIVE: gtk.gdk.color_parse('light goldenrod'),
+ _PASSED: gtk.gdk.color_parse('pale green'),
+ _FAILED: gtk.gdk.color_parse('tomato'),
+ _UNTESTED: gtk.gdk.color_parse('dark slate grey')}
+
+_LABEL_STATUS_SIZE = (140, 30)
+_LABEL_STATUS_FONT = pango.FontDescription('courier new condensed 16')
+_LABEL_FONT = pango.FontDescription('courier new condensed 20')
+_LABEL_FG = gtk.gdk.color_parse('light green')
+_LABEL_UNTESTED_FG = gtk.gdk.color_parse('grey40')
+
+
+def pattern_cb_solid(widget, event, color=None):
+ dr = widget.window
+ xmax, ymax = dr.get_size()
+ gc = gtk.gdk.GC(dr)
+ gc.set_rgb_fg_color(color)
+ dr.draw_rectangle(gc, True, 0, 0, xmax, ymax)
+ return False
+
+
+def pattern_cb_grid(widget, event, color=None):
+ dr = widget.window
+ xmax, ymax = dr.get_size()
+ gc = gtk.gdk.GC(dr)
+ gc.set_rgb_fg_color(_BLACK)
+ dr.draw_rectangle(gc, True, 0, 0, xmax, ymax)
+ gc.set_rgb_fg_color(color)
+ gc.set_line_attributes(1,
+ gtk.gdk.LINE_SOLID,
+ gtk.gdk.CAP_BUTT,
+ gtk.gdk.JOIN_MITER)
+ for x in range(0, xmax, 20):
+ dr.draw_line(gc, x, 0, x, ymax)
+ for y in range(0, ymax, 20):
+ dr.draw_line(gc, 0, y, xmax, y)
+ return False
+
+
+_PATTERN_LIST = [
+ ('solid red', lambda *x: pattern_cb_solid(*x, **{'color':_RED})),
+ ('solid green', lambda *x: pattern_cb_solid(*x, **{'color':_GREEN})),
+ ('solid blue', lambda *x: pattern_cb_solid(*x, **{'color':_BLUE})),
+ ('solid white', lambda *x: pattern_cb_solid(*x, **{'color':_WHITE})),
+ ('grid', lambda *x: pattern_cb_grid(*x, **{'color':_GREEN}))]
+
+
+class factory_Display(test.test):
+ version = 1
+
+ def display_full_screen(self, pattern_callback):
+ window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ screen = window.get_screen()
+ screen_size = (screen.get_width(), screen.get_height())
+ window.set_size_request(*screen_size)
+ drawing_area = gtk.DrawingArea()
+ window.add(drawing_area)
+ window.show_all()
+ self._fs_window = window
+ drawing_area.connect('expose_event', pattern_callback)
+
+ def goto_next_pattern(self):
+ if not self._pattern_queue:
+ gtk.main_quit()
+ return
+ self._current_pattern = self._pattern_queue.pop()
+ name, cb_fn = self._current_pattern
+ self._status_map[name] = _ACTIVE
+ self._current_pattern_shown = False
+
+ def key_press_callback(self, widget, event):
+ pattern_name, pattern_cb = self._current_pattern
+ if event.keyval == gtk.keysyms.space and not self._fs_window:
+ self.display_full_screen(pattern_cb)
+ return True
+
+ def key_release_callback(self, widget, event):
+ pattern_name, pattern_cb = self._current_pattern
+ if event.keyval == gtk.keysyms.space and self._fs_window is not None:
+ self._fs_window.destroy()
+ self._fs_window = None
+ self._current_pattern_shown = True
+ elif event.keyval == gtk.keysyms.Tab and self._current_pattern_shown:
+ self._status_map[pattern_name] = _FAILED
+ self.goto_next_pattern()
+ elif event.keyval == gtk.keysyms.Return and self._current_pattern_shown:
+ self._status_map[pattern_name] = _PASSED
+ self.goto_next_pattern()
+ elif event.keyval == ord('Q'):
+ factory_test.XXX_log('factory_Display exiting...')
+ gtk.main_quit()
+ else:
+ factory_test.test_switch_on_trigger(event)
+ self._test_widget.queue_draw()
+ return True
+
+ def label_status_expose(self, widget, event, name=None):
+ status = self._status_map[name]
+ widget.set_text(status)
+ widget.modify_fg(gtk.STATE_NORMAL, _LABEL_COLORS[status])
+
+ def make_pattern_label_box(self, name):
+ eb = gtk.EventBox()
+ eb.modify_bg(gtk.STATE_NORMAL, _BLACK)
+ label_status = gtk.Label(_UNTESTED)
+ label_status.set_size_request(*_LABEL_STATUS_SIZE)
+ label_status.set_alignment(0, 0.5)
+ label_status.modify_font(_LABEL_STATUS_FONT)
+ label_status.modify_fg(gtk.STATE_NORMAL, _LABEL_UNTESTED_FG)
+ expose_cb = lambda *x: self.label_status_expose(*x, **{'name':name})
+ label_status.connect('expose_event', expose_cb)
+ label_en = gtk.Label(name)
+ label_en.set_alignment(1, 0.5)
+ label_en.modify_font(_LABEL_STATUS_FONT)
+ label_en.modify_fg(gtk.STATE_NORMAL, _LABEL_FG)
+ label_sep = gtk.Label(' : ')
+ label_sep.set_alignment(0.5, 0.5)
+ label_sep.modify_font(_LABEL_FONT)
+ label_sep.modify_fg(gtk.STATE_NORMAL, _LABEL_FG)
+ hbox = gtk.HBox()
+ hbox.pack_end(label_status, False, False)
+ hbox.pack_end(label_sep, False, False)
+ hbox.pack_end(label_en, False, False)
+ eb.add(hbox)
+ return eb
+
+ def register_callbacks(self, window):
+ window.connect('key-press-event', self.key_press_callback)
+ window.add_events(gtk.gdk.KEY_PRESS_MASK)
+ window.connect('key-release-event', self.key_release_callback)
+ window.add_events(gtk.gdk.KEY_RELEASE_MASK)
+
+ def run_once(self, test_widget_size=None, trigger_set=None,
+ result_file_path=None):
+
+ factory_test.XXX_log('factory_Display')
+
+ xset_status = os.system('xset r off')
+ xmm_status = os.system('xmodmap -e "clear Lock"')
+ if xset_status or xmm_status:
+ raise TestFail('ERROR: disabling key repeat or caps lock')
+
+ factory_test.init(trigger_set=trigger_set,
+ result_file_path=result_file_path)
+
+ self._pattern_queue = [x for x in reversed(_PATTERN_LIST)]
+ self._status_map = dict((n, _UNTESTED) for n, f in _PATTERN_LIST)
+
+ prompt_label = gtk.Label('hold SPACE to display pattern,\n'
+ 'TAB to fail and RETURN to pass\n')
+ prompt_label.modify_font(_LABEL_FONT)
+ prompt_label.set_alignment(0.5, 0.5)
+ prompt_label.modify_fg(gtk.STATE_NORMAL, _LABEL_FG)
+ self._prompt_label = prompt_label
+
+ vbox = gtk.VBox()
+ vbox.pack_start(prompt_label, False, False)
+
+ for name, cb_fun in _PATTERN_LIST:
+ label_box = self.make_pattern_label_box(name)
+ vbox.pack_start(label_box, False, False)
+
+ test_widget = gtk.EventBox()
+ test_widget.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
+ test_widget.add(vbox)
+ self._test_widget = test_widget
+
+ self.goto_next_pattern()
+
+ self._fs_window = None
+
+ factory_test.run_test_widget(
+ test_widget=test_widget,
+ test_widget_size=test_widget_size,
+ window_registration_callback=self.register_callbacks)
+
+ failed_set = set(name for name, status in self._status_map.items()
+ if status is not _PASSED)
+ if failed_set:
+ raise error.TestFail('some patterns failed (%s)' %
+ ', '.join(failed_set))
+
+ factory_test.XXX_log('exiting factory_Display')
« no previous file with comments | « client/deps/factory/ui ('k') | client/site_tests/factory_ExternalStorage/factory_ExternalStorage.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698