mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Apptest is a Mojo application that interacts with another Mojo application
|
|
and verifies assumptions about behavior of the app being tested.
|
|
"""
|
|
|
|
import logging
|
|
import time
|
|
|
|
|
|
_logger = logging.getLogger()
|
|
|
|
|
|
def _build_shell_arguments(shell_args, apptest_url, apptest_args):
|
|
"""Builds the list of arguments for the shell.
|
|
|
|
Args:
|
|
shell_args: List of arguments for the shell run.
|
|
apptest_url: Url of the apptest app to run.
|
|
apptest_args: Parameters to be passed to the apptest app.
|
|
|
|
Returns:
|
|
Single list of shell arguments.
|
|
"""
|
|
result = list(shell_args)
|
|
if apptest_args:
|
|
result.append("--args-for=%s %s" % (apptest_url, " ".join(apptest_args)))
|
|
result.append(apptest_url)
|
|
return result
|
|
|
|
|
|
def run_apptest(shell, shell_args, apptest_url, apptest_args, timeout,
|
|
output_test):
|
|
"""Runs shell with the given arguments, retrieves the output and applies
|
|
|output_test| to determine if the run was successful.
|
|
|
|
Args:
|
|
shell: Wrapper around concrete Mojo shell, implementing devtools Shell
|
|
interface.
|
|
shell_args: List of arguments for the shell run.
|
|
apptest_url: Url of the apptest app to run.
|
|
apptest_args: Parameters to be passed to the apptest app.
|
|
output_test: Function accepting the shell output and returning True iff
|
|
the output indicates a successful run.
|
|
|
|
Returns:
|
|
True iff the test succeeded, False otherwise.
|
|
"""
|
|
arguments = _build_shell_arguments(shell_args, apptest_url, apptest_args)
|
|
command_line = "mojo_shell " + " ".join(["%r" % x for x in arguments])
|
|
|
|
_logger.debug("Starting: " + command_line)
|
|
start_time = time.time()
|
|
(exit_code, output, did_time_out) = shell.run_and_get_output(arguments,
|
|
timeout)
|
|
run_time = time.time() - start_time
|
|
_logger.debug("Completed: " + command_line)
|
|
|
|
# Only log if it took more than 3 second.
|
|
if run_time >= 3:
|
|
_logger.info("Test took %.3f seconds: %s" % (run_time, command_line))
|
|
|
|
if exit_code or did_time_out or not output_test(output):
|
|
print 'Failed test: %r' % command_line
|
|
if exit_code:
|
|
print ' due to shell exit code %d' % exit_code
|
|
elif did_time_out:
|
|
print ' due to exceeded timeout of %fs' % timeout
|
|
else:
|
|
print ' due to test results'
|
|
print 72 * '-'
|
|
print output
|
|
print 72 * '-'
|
|
return False
|
|
return True
|