#!/usr/bin/python
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from optparse import OptionParser
from os import path, chdir
from os.path import abspath
from shutil import rmtree
from subprocess import check_call, CalledProcessError
from tempfile import mkdtemp

opts = OptionParser()
opts.add_option('-t', help='test report to convert')
opts.add_option('-o', help='output directory')
args, _ = opts.parse_args()
temp_dir = mkdtemp()
try:
  try:
    check_call(
      ['curl', '--proxy-anyauth', '-sfo', path.join(temp_dir, 'saxon.jar'),
       'http://central.maven.org/maven2/net/sf/saxon/Saxon-HE/9.6.0-6/Saxon-HE-9.6.0-6.jar'])
  except OSError as err:
    print('could not invoke curl: %s\nis curl installed?' % err)
    exit(1)
  except CalledProcessError as err:
    print('error using curl: %s' % err)
    exit(1)

  buck_report = abspath(args.t)
  buck_to_junit_xsl = abspath(
    path.join(path.abspath(path.dirname(__file__)), 'buckToJUnit.xsl'))

  chdir(args.o)
  try:
    check_call(
      ['java', '-jar', path.join(temp_dir, 'saxon.jar'), '-s:' + buck_report,
       '-xsl:' + buck_to_junit_xsl])
  except CalledProcessError as err:
    print('error converting to junit: %s' % err)
    exit(1)
finally:
  rmtree(temp_dir, ignore_errors=True)
