# 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.

import logging
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import cros_ui, cros_ui_test, httpd

class desktopui_ChromeSemiAuto(cros_ui_test.UITest):
    version = 1

    def initialize(self, creds='$default'):
        self._test_url = 'http://localhost:8000/interaction.html'
        # TODO(seano): Use ephemeral port.
        self._testServer = httpd.HTTPListener(8000, docroot=self.bindir)
        self._testServer.run()
        super(desktopui_ChromeSemiAuto, self).initialize(creds)


    def cleanup(self):
        self._testServer.stop()
        super(desktopui_ChromeSemiAuto, self).cleanup()


    def run_once(self, timeout=60):
        latch = self._testServer.add_wait_url('/interaction/test')

        # Temporarily increment pyauto timeout
        pyauto_timeout_changer = self.pyauto.ActionTimeoutChanger(
            self.pyauto, timeout * 1000)
        self.pyauto.NavigateToURL(self._test_url)
        del pyauto_timeout_changer
        latch.wait(timeout)

        if not latch.is_set():
            raise error.TestFail('Timeout.')

        result = self._testServer.get_form_entries()['result']
        logging.info('result = ' + result)
        if result != 'pass':
            raise error.TestFail('User indicated test failure.')
