#!/usr/bin/env python
# Copyright 2015 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.

"""Runs a python script under an isolate

This script attempts to emulate the contract of gtest-style tests
invoked via recipes. The main contract is that the caller passes the
argument:

  --isolated-script-test-output=[FILENAME]

json is written to that file in the format produced by
common.parse_common_test_results.

This script is intended to be the base command invoked by the isolate,
followed by a subsequent Python script."""

import argparse
import json
import os
import sys


import common

# Add src/testing/ into sys.path for importing xvfb.
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import xvfb


def main():
  parser = argparse.ArgumentParser()
  parser.add_argument('--isolated-script-test-output', type=str,
                      required=True)
  args, rest_args = parser.parse_known_args()
  # Remove the isolated script extra args this script doesn't care about.
  should_ignore_arg = lambda arg: any(to_ignore in arg for to_ignore in (
    '--isolated-script-test-chartjson-output',
    '--isolated-script-test-perf-output',
    '--isolated-script-test-filter',
    ))
  rest_args = [arg for arg in rest_args if not should_ignore_arg(arg)]

  ret = common.run_command([sys.executable] + rest_args)
  with open(args.isolated_script_test_output, 'w') as fp:
    json.dump({'valid': True,
               'failures': ['failed'] if ret else []}, fp)
  return ret


# This is not really a "script test" so does not need to manually add
# any additional compile targets.
def main_compile_targets(args):
  json.dump([''], args.output)


if __name__ == '__main__':
  # Conform minimally to the protocol defined by ScriptTest.
  if 'compile_targets' in sys.argv:
    funcs = {
      'run': None,
      'compile_targets': main_compile_targets,
    }
    sys.exit(common.run_script(sys.argv[1:], funcs))
  sys.exit(main())
