blob: cc8337523f23c79cdebc94119ed0496d05ead57c [file] [log] [blame]
# -*- coding: utf-8 -*-
# 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 a factory test to test the audio. Operator will test both record and
# playback for headset and built-in audio. Recordings are played back for
# confirmation. An additional pre-recorded sample is played to confirm speakers
# operate independently
import gtk
import logging
import os
import pango
import re
import sys
import subprocess
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import utils
from autotest_lib.client.cros import factory_setup_modules
from cros.factory.test import factory
from cros.factory.test import ui as ful
from gtk import gdk
_MESSAGE_STR = ('Audio is now looping back.\n' +
'Press Return if test passed.\n' +
'Press Tab if it failed.\n')
class factory_AudioInternalLoopback(test.test):
version = 1
def setup(self):
self.job.setup_dep(['audioloop'])
def start_audioloop(self, indev, outdev):
cmdargs = ['/usr/local/autotest/deps/audioloop/src/looptest',
'-i', indev, '-o', outdev]
self._process = subprocess.Popen(cmdargs)
def stop_audioloop(self):
self._process.kill()
def key_release_callback(self, widget, event):
if event.keyval == gtk.keysyms.Return:
gtk.main_quit()
if event.keyval == gtk.keysyms.Tab:
raise error.TestFail('Test Failed')
return True
def register_callbacks(self, window):
window.connect('key-release-event', self.key_release_callback)
window.add_events(gdk.KEY_RELEASE_MASK)
def run_once(self, indev='hw:0,0', outdev='hw:0,0'):
factory.log('%s run_once' % self.__class__)
label = ful.make_label(_MESSAGE_STR)
self.start_audioloop(indev, outdev)
test_widget = gtk.EventBox()
test_widget.modify_bg(gtk.STATE_NORMAL, ful.BLACK)
test_widget.add(label)
ful.run_test_widget(self.job, test_widget,
window_registration_callback=self.register_callbacks)
self.stop_audioloop()
factory.log('%s run_once finished' % repr(self.__class__))