| Index: client/site_tests/factory_ScriptWrapper/factory_ScriptWrapper.py
|
| diff --git a/client/site_tests/factory_ScriptWrapper/factory_ScriptWrapper.py b/client/site_tests/factory_ScriptWrapper/factory_ScriptWrapper.py
|
| index 2ca26256241b54e59cb0ba44b8b10219f3d97b14..c75fe7a280dffc28f7cb5e1e3e68c2ca9bc8c60f 100644
|
| --- a/client/site_tests/factory_ScriptWrapper/factory_ScriptWrapper.py
|
| +++ b/client/site_tests/factory_ScriptWrapper/factory_ScriptWrapper.py
|
| @@ -9,48 +9,54 @@
|
| # stdout of the script displayed in a the testing widget via gtk
|
| # label. Keyboard input will be passed to the script via its stdin.
|
|
|
| -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 imp
|
| import gobject
|
| import gtk
|
| import pango
|
| import sys
|
| import subprocess
|
|
|
| +from gtk import gdk
|
| +
|
| +from autotest_lib.client.bin import factory
|
| +from autotest_lib.client.bin import factory_ui_lib as ful
|
| +from autotest_lib.client.bin import test
|
| +from autotest_lib.client.common_lib import error
|
| +from autotest_lib.client.common_lib import pexpect
|
| +
|
| +
|
| +_MAX_LABEL_CHARS=256
|
| +
|
|
|
| class Script:
|
|
|
| - def __init__(self, cmdline, label):
|
| - self._cmdline
|
| + def __init__(self, cmdline, pexpect, label):
|
| + self._cmdline = cmdline
|
| self._label = label
|
| - self._proc = subprocess.Popen(cmdline.split(),
|
| - stdin=subprocess.PIPE,
|
| - stdout=subprocess.PIPE)
|
| - gobject.io_add_watch(self._proc.stdout, gobject.IO_IN, self.recv)
|
| + self._ibuf = ''
|
| + self._proc = pexpect.spawn(cmdline)
|
| + gobject.io_add_watch(self._proc.fileno(), gobject.IO_IN, self.recv)
|
|
|
| def recv(self, src, cond):
|
| - msg = self._proc.stdout.read()
|
| + msg = self._proc.read_nonblocking(_MAX_LABEL_CHARS)
|
| + factory.log('recv script msg %s' % repr(msg))
|
| self._label.set_text(msg)
|
| self._label.queue_draw()
|
| - returncode = self._proc.poll()
|
| - if returncode is not None:
|
| + if not self._proc.isalive():
|
| + self._proc.close()
|
| gtk.main_quit()
|
| - if returncode is not 0:
|
| - error.TestFail('%s script returned %d' %
|
| - (self._cmdline, returncode))
|
| + if self._proc.exitstatus is not 0:
|
| + error.TestFail('%s script return code was %d' %
|
| + (self._cmdline, self._proc.exitstatus))
|
| return True
|
|
|
| - def send(self, msg):
|
| - print >> self._proc.stdin, msg
|
| - self._proc.stdin.flush()
|
| -
|
| - def quit(self):
|
| - if self._proc.poll() is None:
|
| + def send(self, char):
|
| + if char != '\n':
|
| + self._ibuf += char
|
| return
|
| - factory_test.XXX('killing Script')
|
| - self._proc.kill()
|
| + factory.log('sending script %s' % repr(self._ibuf))
|
| + self._proc.sendline(self._ibuf)
|
| + self._ibuf = ''
|
|
|
|
|
| class factory_ScriptWrapper(test.test):
|
| @@ -58,9 +64,8 @@ class factory_ScriptWrapper(test.test):
|
|
|
| def key_release_callback(self, widget, event):
|
| char = event.keyval in range(32,127) and chr(event.keyval) or None
|
| - factory_test.XXX_log('key_release_callback %s(%s)' %
|
| - (event.keyval, char))
|
| - if not factory_test.test_switch_on_trigger(event):
|
| + char = event.keyval == gdk.keyval_from_name('Return') and '\n' or char
|
| + if not self._ft_state.exit_on_trigger(event) and char is not None:
|
| self._script.send(char)
|
| return True
|
|
|
| @@ -68,13 +73,17 @@ class factory_ScriptWrapper(test.test):
|
| 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, cmdline=None):
|
| + def run_once(self,
|
| + test_widget_size=None,
|
| + trigger_set=None,
|
| + result_file_path=None,
|
| + cmdline=None):
|
|
|
| - factory_test.XXX_log('factory_ScriptWrapper')
|
| + factory.log('%s run_once' % self.__class__)
|
|
|
| - factory_test.init(trigger_set=trigger_set,
|
| - result_file_path=result_file_path)
|
| + self._ft_state = ful.State(
|
| + trigger_set=trigger_set,
|
| + result_file_path=result_file_path)
|
|
|
| label = gtk.Label('')
|
| label.modify_font(pango.FontDescription('courier new condensed 16'))
|
| @@ -85,12 +94,11 @@ class factory_ScriptWrapper(test.test):
|
| test_widget.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
|
| test_widget.add(label)
|
|
|
| - self._script = Script(cmdline, label)
|
| + self._script = Script(cmdline, pexpect, label)
|
|
|
| - factory_test.run_test_widget(
|
| + self._ft_state.run_test_widget(
|
| test_widget=test_widget,
|
| test_widget_size=test_widget_size,
|
| - window_registration_callback=self.register_callbacks,
|
| - cleanup_callback=self._script.quit)
|
| + window_registration_callback=self.register_callbacks)
|
|
|
| - factory_test.XXX_log('exiting factory_ScriptWrapper')
|
| + factory.log('%s run_once finished' % self.__class__)
|
|
|