#!/usr/bin/env python
# Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import gradle
import jdk
import os
import subprocess
import sys
import utils

EXCEPTION_LINE = 'Intentional exception for testing retrace.'
EXPECTED_LINES = [
  'com.android.tools.r8.utils.SelfRetraceTest.foo3(SelfRetraceTest.java:13)',
  'com.android.tools.r8.utils.SelfRetraceTest.foo2(SelfRetraceTest.java:17)',
  'com.android.tools.r8.utils.SelfRetraceTest.foo1(SelfRetraceTest.java:21)',
  'com.android.tools.r8.utils.SelfRetraceTest.test(SelfRetraceTest.java:26)',
  'com.android.tools.r8.R8.run(R8.java:',
]

def main():
  args = sys.argv[1:]
  if len(args) == 0:
    gradle.RunGradle(['r8lib'])
    r8lib = utils.R8LIB_JAR
  elif len(args) == 1:
    if args[0] == '--help':
      print('Usage: test_self_retrace.py [<path-to-r8lib-jar>]')
      print('If the path is missing the script builds and uses ' + utils.R8LIB_JAR)
      return
    else:
      r8lib = args[0]
  else:
    raise Exception("Only one argument is allowed, see '--help'.")

  # Run 'r8 --help' which throws an exception.
  cmd = [
    jdk.GetJavaExecutable(),'-cp', r8lib, 'com.android.tools.r8.R8', '--help'
  ]
  os.environ["R8_THROW_EXCEPTION_FOR_TESTING_RETRACE"] = "1"
  utils.PrintCmd(cmd)
  p = subprocess.Popen(cmd, stderr=subprocess.PIPE)
  _, stacktrace = p.communicate()
  assert(p.returncode != 0)
  assert(EXCEPTION_LINE in stacktrace)
  # r8lib must be minified, original class names must not be present.
  assert('SelfRetraceTest' not in stacktrace)

  # Run the retrace tool.
  cmd = [jdk.GetJavaExecutable(), '-jar', utils.RETRACE_JAR, r8lib + ".map"]
  utils.PrintCmd(cmd)
  p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
  retrace_stdout, _ = p.communicate(stacktrace)
  assert p.returncode == 0
  retrace_lines = retrace_stdout.splitlines()
  line_index = -1
  for line in retrace_lines:
    if line_index < 0:
      if 'java.lang.RuntimeException' in line:
        assert(EXCEPTION_LINE in line)
        line_index = 0;
    else:
      assert EXPECTED_LINES[line_index] in line
      line_index += 1
      if line_index >= len(EXPECTED_LINES):
         break
  assert(line_index >= 0)

if __name__ == '__main__':
  sys.exit(main())
