Index: client/site_tests/factory_Audio/factory_Audio.py |
diff --git a/client/site_tests/factory_Audio/factory_Audio.py b/client/site_tests/factory_Audio/factory_Audio.py |
index 41398a9c0dd3669bf0393c4b49f74646afacd00e..afe77dc3277b3cc4ede22e91d4477f398ee5e331 100644 |
--- a/client/site_tests/factory_Audio/factory_Audio.py |
+++ b/client/site_tests/factory_Audio/factory_Audio.py |
@@ -33,63 +33,45 @@ _SAMPLE_LIST = ['Headset Audio Test', 'Built-in Audio Test'] |
_VERBOSE = False |
-# FIXME: tbroch : refactor from factory_ui -> factory_ui_lib.py |
-_SEP_COLOR = gtk.gdk.color_parse('grey50') |
-def make_vsep(width=1): |
- frame = gtk.EventBox() |
- frame.set_size_request(width, -1) |
- frame.modify_bg(gtk.STATE_NORMAL, _SEP_COLOR) |
- return frame |
- |
-def make_hsep(width=1): |
- frame = gtk.EventBox() |
- frame.set_size_request(-1, width) |
- frame.modify_bg(gtk.STATE_NORMAL, _SEP_COLOR) |
- return frame |
- |
- |
class factory_Audio(test.test): |
version = 1 |
- |
def audio_subtest_widget(self, name): |
- window = gtk.Window(gtk.WINDOW_TOPLEVEL) |
- screen = window.get_screen() |
- screen_size = (screen.get_width(), screen.get_height()) |
- window.set_size_request(*self._test_widget_size) |
- |
vb = gtk.VBox() |
ebh = gtk.EventBox() |
ebh.modify_bg(gtk.STATE_NORMAL, ful.LABEL_COLORS[ful.ACTIVE]) |
ebh.add(ful.make_label(name, size=_LABEL_BIG_SIZE, |
fg=ful.BLACK)) |
vb.pack_start(ebh) |
- vb.pack_start(make_vsep(3), False, False) |
+ vb.pack_start(ful.make_vsep(3), False, False) |
if re.search('Headset', name): |
lab_str = 'Connect headset to device\n將耳機接上音源孔' |
else: |
lab_str = 'Remove headset from device\n將耳機移開音源孔' |
vb.pack_start(ful.make_label(lab_str, fg=ful.WHITE)) |
- vb.pack_start(make_vsep(3), False, False) |
+ vb.pack_start(ful.make_vsep(3), False, False) |
vb.pack_start(ful.make_label(\ |
'Press & hold \'r\' to record\n壓住 \'r\' 鍵開始錄音\n' + \ |
'[Playback will follow]\n[之後會重播錄到的聲音]\n\n' + \ |
'Press & hold \'p\' to play sample\n' + \ |
'壓住 \'p\' 鍵以播放範例')) |
- vb.pack_start(make_vsep(3), False, False) |
+ vb.pack_start(ful.make_vsep(3), False, False) |
vb.pack_start(ful.make_label(ful.USER_PASS_FAIL_SELECT_STR, |
fg=ful.WHITE)) |
- # need event box to effect bg color |
+ # Need event box to effect bg color. |
eb = gtk.EventBox() |
eb.modify_bg(gtk.STATE_NORMAL, ful.BLACK) |
eb.add(vb) |
- window.add(eb) |
- window.show_all() |
- self._fs_window = window |
+ |
+ self._subtest_widget = eb |
+ |
+ self._test_widget.remove(self._top_level_test_list) |
+ self._test_widget.add(self._subtest_widget) |
+ self._test_widget.show_all() |
def close_bgjob(self, sample_name): |
- job = self._job |
+ job = self._bg_job |
if job: |
utils.nuke_subprocess(job.sp) |
utils.join_bg_jobs([job], timeout=1) |
@@ -98,7 +80,7 @@ class factory_Audio(test.test): |
raise error.CmdError( |
sample_name, result, |
'stdout: %s\nstderr: %s' % (result.stdout, result.stderr)) |
- self._job = None |
+ self._bg_job = None |
def goto_next_sample(self): |
if not self._sample_queue: |
@@ -110,28 +92,30 @@ class factory_Audio(test.test): |
def cleanup_sample(self): |
factory.log('Inside cleanup_sample') |
- self._fs_window.destroy() |
- self._fs_window = None |
+ self._test_widget.remove(self._subtest_widget) |
+ self._subtest_widget = None |
+ self._test_widget.add(self._top_level_test_list) |
+ self._test_widget.show_all() |
self.goto_next_sample() |
def key_press_callback(self, widget, event): |
name = self._current_sample |
- if event.keyval == gtk.keysyms.space and not self._fs_window: |
- # start the subtest |
+ if (event.keyval == gtk.keysyms.space and self._subtest_widget is None): |
+ # Start subtest. |
self.audio_subtest_widget(name) |
else: |
self.close_bgjob(name) |
cmd = None |
if event.keyval == ord('r'): |
- # record via mic |
+ # Record via mic. |
if os.path.isfile('rec.wav'): |
os.unlink('rec.wav') |
cmd = 'arecord -f dat -t wav rec.wav' |
elif event.keyval == ord('p'): |
- # playback canned audio |
- cmd = 'aplay %s' % self._sample |
+ # Playback canned audio. |
+ cmd = 'aplay %s' % self._audio_sample_path |
if cmd: |
- self._job = utils.BgJob(cmd, stderr_level=logging.DEBUG) |
+ self._bg_job = utils.BgJob(cmd, stderr_level=logging.DEBUG) |
factory.log("cmd: " + cmd) |
self._test_widget.queue_draw() |
return True |
@@ -149,13 +133,10 @@ class factory_Audio(test.test): |
elif event.keyval == ord('r'): |
self.close_bgjob(name) |
cmd = 'aplay rec.wav' |
- self._job = utils.BgJob(cmd, stderr_level=logging.DEBUG) |
+ self._bg_job = utils.BgJob(cmd, stderr_level=logging.DEBUG) |
factory.log("cmd: " + cmd) |
elif event.keyval == ord('p'): |
self.close_bgjob(name) |
- else: |
- self._ft_state.exit_on_trigger(event) |
- |
self._test_widget.queue_draw() |
return True |
@@ -187,61 +168,47 @@ class factory_Audio(test.test): |
window.connect('key-release-event', self.key_release_callback) |
window.add_events(gtk.gdk.KEY_RELEASE_MASK) |
- def locate_asample(self, sample): |
- if not sample: |
+ def locate_audio_sample(self, path): |
+ if path is None: |
raise error.TestFail('ERROR: Must provide an audio sample') |
- if not os.path.isabs(sample): |
- # assume its in deps |
- sample = self.autodir + '/' + sample |
- if not os.path.exists(sample): |
- raise error.TestFail('ERROR: Unable to find audio sample %s' \ |
- % sample) |
- self._sample=sample |
- |
- def run_once(self, |
- test_widget_size=None, |
- trigger_set=None, |
- sample=None, |
- ): |
+ if not os.path.isabs(path): |
+ # Assume rel-path samples are in deps/factory. |
+ path = self.job.autodir + '/deps/factory/' + path |
+ if not os.path.exists(path): |
+ raise error.TestFail('ERROR: Unable to find audio sample %s' % path) |
+ return path |
+ |
+ def run_once(self, audio_sample_path=None): |
factory.log('%s run_once' % self.__class__) |
- self._job = None |
- self._test_widget_size = test_widget_size |
- self.locate_asample(sample) |
- # to write the recordings |
+ # Write recordings in tmpdir. |
os.chdir(self.tmpdir) |
- xset_status = os.system('LD_LIBRARY_PATH=/usr/local/lib xset r off') |
- if xset_status: |
- raise error.TestFail('ERROR: disabling key repeat') |
- |
- self._ft_state = ful.State(trigger_set=trigger_set) |
+ self._bg_job = None |
+ self._audio_sample_path = self.locate_audio_sample(audio_sample_path) |
self._sample_queue = [x for x in reversed(_SAMPLE_LIST)] |
self._status_map = dict((n, ful.UNTESTED) for n in _SAMPLE_LIST) |
prompt_label = ful.make_label(_LABEL_START_STR, alignment=(0.5, 0.5)) |
- vbox = gtk.VBox() |
- vbox.pack_start(prompt_label, False, False) |
+ self._top_level_test_list = gtk.VBox() |
+ self._top_level_test_list.pack_start(prompt_label, False, False) |
for name in _SAMPLE_LIST: |
label_box = self.make_sample_label_box(name) |
- vbox.pack_start(label_box, False, False) |
+ self._top_level_test_list.pack_start(label_box, False, False) |
- test_widget = gtk.EventBox() |
- test_widget.modify_bg(gtk.STATE_NORMAL, ful.BLACK) |
- test_widget.add(vbox) |
- self._test_widget = test_widget |
+ self._test_widget = gtk.EventBox() |
+ self._test_widget.modify_bg(gtk.STATE_NORMAL, ful.BLACK) |
+ self._test_widget.add(self._top_level_test_list) |
- self.goto_next_sample() |
+ self._subtest_widget = None |
- self._fs_window = None |
+ self.goto_next_sample() |
- self._ft_state.run_test_widget( |
- test_widget=test_widget, |
- test_widget_size=test_widget_size, |
+ ful.run_test_widget(self.job, self._test_widget, |
window_registration_callback=self.register_callbacks) |
failed_set = set(name for name, status in self._status_map.items() |