Index: mojo/tools/mopy/gtest.py |
diff --git a/mojo/tools/mopy/gtest.py b/mojo/tools/mopy/gtest.py |
deleted file mode 100644 |
index 84a10b5300a5e80217efc8eaf27b3af1f63d69ae..0000000000000000000000000000000000000000 |
--- a/mojo/tools/mopy/gtest.py |
+++ /dev/null |
@@ -1,171 +0,0 @@ |
-# Copyright 2014 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. |
- |
-import logging |
-import os |
-import re |
-import subprocess |
-import sys |
- |
-_logging = logging.getLogger() |
- |
-from mopy import android |
-from mopy.config import Config |
-from mopy.paths import Paths |
-from mopy.print_process_error import print_process_error |
- |
- |
-def set_color(): |
- """Run gtests with color if we're on a TTY (and we're not being told |
- explicitly what to do).""" |
- if sys.stdout.isatty() and "GTEST_COLOR" not in os.environ: |
- _logging.debug("Setting GTEST_COLOR=yes") |
- os.environ["GTEST_COLOR"] = "yes" |
- |
- |
-def run_test(config, shell_args, apps_and_args=None, context=None, |
- run_launcher=False): |
- """Runs a command line and checks the output for signs of gtest failure. |
- |
- Args: |
- config: The mopy.config.Config object for the build. |
- shell_args: The arguments for mojo_shell. |
- apps_and_args: A Dict keyed by application URL associated to the |
- application's specific arguments. |
- context: Platform specific context. See |mopy.{platform}.Context|. |
- run_launcher: |True| is mojo_launcher must be used instead of mojo_shell. |
- """ |
- apps_and_args = apps_and_args or {} |
- output = _try_run_test( |
- config, shell_args, apps_and_args, context, run_launcher) |
- # Fail on output with gtest's "[ FAILED ]" or a lack of "[ PASSED ]". |
- # The latter condition ensures failure on broken command lines or output. |
- # Check output instead of exit codes because mojo_shell always exits with 0. |
- if (output is None or |
- (output.find("[ FAILED ]") != -1 or output.find("[ PASSED ]") == -1)): |
- print "Failed test:" |
- print_process_error( |
- _build_command_line(config, shell_args, apps_and_args, run_launcher), |
- output) |
- return False |
- _logging.debug("Succeeded with output:\n%s" % output) |
- return True |
- |
- |
-def get_fixtures(config, apptest, context): |
- """Returns the "Test.Fixture" list from an apptest using mojo_shell. |
- |
- Tests are listed by running the given apptest in mojo_shell and passing |
- --gtest_list_tests. The output is parsed and reformatted into a list like |
- [TestSuite.TestFixture, ... ] |
- An empty list is returned on failure, with errors logged. |
- |
- Args: |
- config: The mopy.config.Config object for the build. |
- apptest: The URL of the test application to run. |
- context: Platform specific context. See |mopy.{platform}.Context|. |
- """ |
- |
- try: |
- apps_and_args = {apptest: ["--gtest_list_tests"]} |
- list_output = _run_test(config, [], apps_and_args, context) |
- _logging.debug("Tests listed:\n%s" % list_output) |
- return _gtest_list_tests(list_output) |
- except Exception as e: |
- print "Failed to get test fixtures:" |
- print_process_error(_build_command_line(config, [], apps_and_args), e) |
- return [] |
- |
- |
-def build_shell_arguments(shell_args, apps_and_args, run_apps=True): |
- """Build the list of arguments for the shell. |shell_args| are the base |
- arguments, |apps_and_args| is a dictionary that associate each application to |
- its specific arguments, and |run_apps| is True if the shell must run the |
- applications in |apps_and_args|. |
- """ |
- result = shell_args[:] |
- if apps_and_args: |
- for (application, args) in apps_and_args.items(): |
- result += ["--args-for=%s %s" % (application, " ".join(args))] |
- if run_apps: |
- result += apps_and_args.keys() |
- return result |
- |
- |
-def _get_shell_executable(config, run_launcher): |
- paths = Paths(config=config) |
- if config.target_os == Config.OS_ANDROID: |
- return os.path.join(paths.src_root, "mojo", "tools", |
- "android_mojo_shell.py") |
- elif run_launcher: |
- return paths.mojo_launcher_path |
- else: |
- return paths.mojo_shell_path |
- |
- |
-def _build_command_line(config, shell_args, apps_and_args, run_apps=True, |
- run_launcher=False): |
- executable = _get_shell_executable(config, run_launcher) |
- return "%s %s" % (executable, " ".join(["%r" % x for x in |
- build_shell_arguments(shell_args, |
- apps_and_args, |
- run_apps)])) |
- |
- |
-def _run_test_android(shell_args, apps_and_args, context): |
- """Run the given test on the android device defined in |context|.""" |
- (r, w) = os.pipe() |
- with os.fdopen(r, "r") as rf: |
- with os.fdopen(w, "w") as wf: |
- arguments = build_shell_arguments(shell_args, apps_and_args) |
- android.StartShell(context, arguments, wf, wf.close) |
- return rf.read() |
- |
- |
-def _run_test(config, shell_args, apps_and_args, context, run_launcher=False): |
- """Run the given test, using mojo_launcher if |run_launcher| is True.""" |
- if (config.target_os == Config.OS_ANDROID): |
- return _run_test_android(shell_args, apps_and_args, context) |
- else: |
- executable = _get_shell_executable(config, run_launcher) |
- command = ([executable] + build_shell_arguments(shell_args, apps_and_args)) |
- return subprocess.check_output(command, stderr=subprocess.STDOUT) |
- |
- |
-def _try_run_test(config, shell_args, apps_and_args, context, run_launcher): |
- """Returns the output of a command line or an empty string on error.""" |
- command_line = _build_command_line(config, shell_args, apps_and_args, |
- run_launcher=run_launcher) |
- _logging.debug("Running command line: %s" % command_line) |
- try: |
- return _run_test(config, shell_args, apps_and_args, context, run_launcher) |
- except Exception as e: |
- print_process_error(command_line, e) |
- return None |
- |
- |
-def _gtest_list_tests(gtest_list_tests_output): |
- """Returns a list of strings formatted as TestSuite.TestFixture from the |
- output of running --gtest_list_tests on a GTEST application.""" |
- |
- # Remove log lines. |
- gtest_list_tests_output = ( |
- re.sub("^\[.*\n", "", gtest_list_tests_output, flags=re.MULTILINE)) |
- |
- if not re.match("^(\w*\.\r?\n( \w*\r?\n)+)+", gtest_list_tests_output): |
- raise Exception("Unrecognized --gtest_list_tests output:\n%s" % |
- gtest_list_tests_output) |
- |
- output_lines = gtest_list_tests_output.split("\n") |
- |
- test_list = [] |
- for line in output_lines: |
- if not line: |
- continue |
- if line[0] != " ": |
- suite = line.strip() |
- continue |
- test_list.append(suite + line.strip()) |
- |
- return test_list |