#!/bin/bash
#
# Copyright (c) 2016, 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.

function generate_test() {
  local name=$1
  local testClassName=$2
  local testGeneratingToolchain=$3
  # The bash uppercase substitution ^^ is not supported on the bash version on Mac OS.
  local testGeneratingToolchainEnum=$(echo $testGeneratingToolchain | tr /a-z/ /A-Z/)
  local fileName=$4
  local compilerUnderTest=$5
  local compilerUnderTestEnum=$(echo ${compilerUnderTest} | tr /a-z/ /A-Z/)

  cat <<EOF > $fileName
// Copyright (c) 2016, 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.
package com.android.tools.r8.art.${testGeneratingToolchain}.${compilerUnderTest};

import static com.android.tools.r8.R8RunArtTestsTest.DexTool.${testGeneratingToolchainEnum};

import com.android.tools.r8.R8RunArtTestsTest;
import org.junit.Test;

/**
 * Auto-generated test for the art ${name} test using the ${testGeneratingToolchain} toolchain.
 *
 * DO NOT EDIT THIS FILE. EDIT THE HERE DOCUMENT TEMPLATE IN scripts/create-art-tests.sh INSTEAD!
 */
public class ${testClassName} extends R8RunArtTestsTest {

    public ${testClassName}() {
      super("${name}", ${testGeneratingToolchainEnum});
    }

    @Test
    public void run${testClassName}() throws Throwable {
      // For testing with other Art VMs than the default pass the VM version as a argument to
      // runArtTest, e.g. runArtTest(ToolHelper.ART_4_4_4).
      runArtTest(CompilerUnderTest.${compilerUnderTestEnum});
    }
}
EOF
}

TESTDIR="tests/art"
TOOLCHAINS=("dx" "jack" "none")
DESTINATIONDIR="build/generated/test/java/com/android/tools/r8/art"

if [ ! -e $TESTDIR ]; then
  echo "Missing art tests in $TESTDIR."
  exit
fi

for TOOLCHAIN in ${TOOLCHAINS[@]}; do
  for d in $DESTINATIONDIR/$TOOLCHAIN/r8 $DESTINATIONDIR/$TOOLCHAIN/d8; do
    rm -rf $d
    mkdir -p $d
  done
  # class files are found in the dx directory.
  if [ "$TOOLCHAIN" == "none" ]; then
    SOURCEDIR=${TESTDIR}/dx
  else
    SOURCEDIR=${TESTDIR}/${TOOLCHAIN}
  fi
  for TEST in ${SOURCEDIR}/*; do
    TESTNAME=$(basename $TEST)
    TESTCLASSNAME="Art${TESTNAME//-/_}Test"
    generate_test $TESTNAME $TESTCLASSNAME ${TOOLCHAIN} $DESTINATIONDIR/$TOOLCHAIN/r8/$TESTCLASSNAME.java r8
    generate_test $TESTNAME $TESTCLASSNAME ${TOOLCHAIN} $DESTINATIONDIR/$TOOLCHAIN/d8/$TESTCLASSNAME.java d8
  done
done
