|  | #!/usr/bin/env python3.8 | 
|  | # Copyright 2018 The Fuchsia 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 argparse | 
|  | import os | 
|  | import stat | 
|  | import string | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser( | 
|  | description='Generate a script that invokes the Dart tester') | 
|  | parser.add_argument( | 
|  | '--out', help='Path to the invocation file to generate', required=True) | 
|  | parser.add_argument( | 
|  | '--sources', help='Path to test files', required=True, nargs='+') | 
|  | parser.add_argument( | 
|  | '--dart-binary', help='Path to the dart binary.', required=True) | 
|  | parser.add_argument( | 
|  | '--dot-packages', help='Path to the .packages file', required=True) | 
|  | args = parser.parse_args() | 
|  |  | 
|  | test_file = args.out | 
|  | test_path = os.path.dirname(test_file) | 
|  | if not os.path.exists(test_path): | 
|  | os.makedirs(test_path) | 
|  |  | 
|  | sources_string = ' '.join(args.sources) | 
|  | script_template = string.Template( | 
|  | '''#!/bin/sh | 
|  | # This artifact was generated by //build/dart/gen_remote_test_invocation.py | 
|  | # Expects arg 1 to be the fuchsia remote address, and arg 2 to be the (optional) | 
|  | # SSH config path. | 
|  |  | 
|  | set -e | 
|  |  | 
|  | export FUCHSIA_DEVICE_URL="$$1" | 
|  | if [[ ! -z "$$2" ]]; then | 
|  | export FUCHSIA_SSH_CONFIG="$$2" | 
|  | fi | 
|  |  | 
|  | for TEST in $sources_string; do | 
|  | $dart_binary --packages="$dot_packages" "$$TEST" | 
|  | done | 
|  | ''') | 
|  | with open(test_file, 'w') as file: | 
|  | file.write( | 
|  | script_template.substitute( | 
|  | args.__dict__, sources_string=sources_string)) | 
|  | permissions = ( | 
|  | stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | | 
|  | stat.S_IWGRP | stat.S_IXGRP | stat.S_IROTH) | 
|  | os.chmod(test_file, permissions) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main()) |