| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging | 5 import logging |
| 6 import os | 6 import os |
| 7 import Queue | 7 import Queue |
| 8 import re | 8 import re |
| 9 import subprocess | 9 import subprocess |
| 10 import sys | 10 import sys |
| 11 import threading | 11 import threading |
| 12 import time | 12 import time |
| 13 | 13 |
| 14 from mopy.config import Config | 14 from mopy.config import Config |
| 15 from mopy.paths import Paths | 15 from mopy.paths import Paths |
| 16 | 16 |
| 17 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), | 17 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), |
| 18 '..', '..', '..', 'testing')) | 18 '..', '..', '..', 'testing')) |
| 19 import xvfb | 19 import xvfb |
| 20 | 20 |
| 21 | 21 |
| 22 # The DISPLAY ID number used for xvfb, incremented with each use. | 22 # The DISPLAY ID number used for xvfb, incremented with each use. |
| 23 XVFB_DISPLAY_ID = 9 | 23 XVFB_DISPLAY_ID = 9 |
| 24 | 24 |
| 25 | 25 |
| 26 def set_color(): | |
| 27 '''Run gtests with color on TTY, unless its environment variable is set.''' | |
| 28 if sys.stdout.isatty() and 'GTEST_COLOR' not in os.environ: | |
| 29 logging.getLogger().debug('Setting GTEST_COLOR=yes') | |
| 30 os.environ['GTEST_COLOR'] = 'yes' | |
| 31 | |
| 32 | |
| 33 def run_apptest(config, shell, args, apptest, isolate): | 26 def run_apptest(config, shell, args, apptest, isolate): |
| 34 '''Run the apptest; optionally isolating fixtures across shell invocations. | 27 '''Run the apptest; optionally isolating fixtures across shell invocations. |
| 35 | 28 |
| 36 Returns the list of test fixtures run and the list of failed test fixtures. | 29 Returns the list of test fixtures run and the list of failed test fixtures. |
| 37 TODO(msw): Also return the list of DISABLED test fixtures. | 30 TODO(msw): Also return the list of DISABLED test fixtures. |
| 38 | 31 |
| 39 Args: | 32 Args: |
| 40 config: The mopy.config.Config for the build. | 33 config: The mopy.config.Config for the build. |
| 41 shell: The mopy.android.AndroidShell, if Android is the target platform. | 34 shell: The mopy.android.AndroidShell, if Android is the target platform. |
| 42 args: The arguments for the shell or apptest. | 35 args: The arguments for the shell or apptest. |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 def _build_command_line(config, args, apptest): | 140 def _build_command_line(config, args, apptest): |
| 148 '''Build the apptest command line. This value isn't executed on Android.''' | 141 '''Build the apptest command line. This value isn't executed on Android.''' |
| 149 not_list_tests = not '--gtest_list_tests' in args | 142 not_list_tests = not '--gtest_list_tests' in args |
| 150 data_dir = ['--use-temporary-user-data-dir'] if not_list_tests else [] | 143 data_dir = ['--use-temporary-user-data-dir'] if not_list_tests else [] |
| 151 return Paths(config).mojo_runner + data_dir + args + [apptest] | 144 return Paths(config).mojo_runner + data_dir + args + [apptest] |
| 152 | 145 |
| 153 | 146 |
| 154 def _run_test_with_xvfb(config, shell, args, apptest): | 147 def _run_test_with_xvfb(config, shell, args, apptest): |
| 155 '''Run the test with xvfb; return the output or raise an exception.''' | 148 '''Run the test with xvfb; return the output or raise an exception.''' |
| 156 env = os.environ.copy() | 149 env = os.environ.copy() |
| 150 # Make sure gtest doesn't try to add color to the output. Color is done via |
| 151 # escape sequences which confuses the code that searches the gtest output. |
| 152 env['GTEST_COLOR'] = 'no' |
| 157 if (config.target_os != Config.OS_LINUX or '--gtest_list_tests' in args | 153 if (config.target_os != Config.OS_LINUX or '--gtest_list_tests' in args |
| 158 or not xvfb.should_start_xvfb(env)): | 154 or not xvfb.should_start_xvfb(env)): |
| 159 return _run_test_with_timeout(config, shell, args, apptest, env) | 155 return _run_test_with_timeout(config, shell, args, apptest, env) |
| 160 | 156 |
| 161 try: | 157 try: |
| 162 # Simply prepending xvfb.py to the command line precludes direct control of | 158 # Simply prepending xvfb.py to the command line precludes direct control of |
| 163 # test subprocesses, and prevents easily getting output when tests timeout. | 159 # test subprocesses, and prevents easily getting output when tests timeout. |
| 164 xvfb_proc = None | 160 xvfb_proc = None |
| 165 openbox_proc = None | 161 openbox_proc = None |
| 166 global XVFB_DISPLAY_ID | 162 global XVFB_DISPLAY_ID |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 (r, w) = os.pipe() | 229 (r, w) = os.pipe() |
| 234 with os.fdopen(r, 'r') as rf: | 230 with os.fdopen(r, 'r') as rf: |
| 235 with os.fdopen(w, 'w') as wf: | 231 with os.fdopen(w, 'w') as wf: |
| 236 arguments = args + [apptest] | 232 arguments = args + [apptest] |
| 237 shell.StartActivity('MojoShellActivity', arguments, wf, wf.close) | 233 shell.StartActivity('MojoShellActivity', arguments, wf, wf.close) |
| 238 output = rf.read() | 234 output = rf.read() |
| 239 except Exception as e: | 235 except Exception as e: |
| 240 output += (e.output + '\n') if hasattr(e, 'output') else '' | 236 output += (e.output + '\n') if hasattr(e, 'output') else '' |
| 241 exception += str(e) | 237 exception += str(e) |
| 242 result.put((output, exception)) | 238 result.put((output, exception)) |
| OLD | NEW |