blob: 406a01633efa64b2045507ad2a1a23c2daba597b [file] [log] [blame] [edit]
# 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('\\', '\\\\')