| # Copyright 2020 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. |
| """ |
| Helpers for running unit, e2e, and screenshot tests. |
| """ |
| |
| import os |
| import sys |
| from subprocess import Popen |
| import signal |
| |
| # Add the scripts path, so that we can import the devtools_paths |
| scripts_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| sys.path.append(scripts_path) |
| import devtools_paths |
| |
| is_cygwin = sys.platform == 'cygwin' |
| |
| def check_chrome_binary(chrome_binary): |
| return os.path.exists(chrome_binary) and os.path.isfile(chrome_binary) and os.access(chrome_binary, os.X_OK) |
| |
| |
| def popen(arguments, cwd=devtools_paths.devtools_root_path(), env=os.environ.copy()): |
| process = Popen(arguments, cwd=cwd, env=env) |
| def handle_signal(signum, frame): |
| print('\nSending signal (%i) to process' % signum) |
| process.send_signal(signum) |
| process.terminate() |
| |
| # Propagate sigterm / int to the child process. |
| original_sigint = signal.getsignal(signal.SIGINT) |
| original_sigterm = signal.getsignal(signal.SIGTERM) |
| signal.signal(signal.SIGINT, handle_signal) |
| signal.signal(signal.SIGTERM, handle_signal) |
| |
| process.communicate() |
| |
| # Restore the original sigterm / int handlers. |
| signal.signal(signal.SIGINT, original_sigint) |
| signal.signal(signal.SIGTERM, original_sigterm) |
| |
| return process.returncode |
| |
| |
| def to_platform_path_exact(filepath): |
| if not is_cygwin: |
| return filepath |
| output, _ = popen(['cygpath', '-w', filepath]).communicate() |
| # pylint: disable=E1103 |
| return output.strip().replace('\\', '\\\\') |