#!/bin/sh
set -e

WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT

# Write test file
cat <<EOF > "$WORKDIR/Main.java"
import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;

import com.google.testing.compile.JavaFileObjects;
import javax.tools.JavaFileObject;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class Main {
    @Test
    public void testCompilation() {
        JavaFileObject HelloWorld = JavaFileObjects.forSourceLines(
            "HelloWorld",
            "public class HelloWorld {",
            "  public static void main(String[] args) {",
            "    System.out.println(\"Hello World!\");",
            "  }",
            "}"
        );
        assertAbout(javaSource()).that(HelloWorld).compilesWithoutError();
    }

    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(Main.class);
        if (result.wasSuccessful()) {
            System.out.println("Success!");
            System.exit(0);
        } else {
            for (Failure failure : result.getFailures()) {
                System.err.println(failure.toString());
                if (failure.getException() != null) {
                    failure.getException().printStackTrace();
                }
            }
            System.exit(1);
        }
    }
}
EOF

# Define classpath
COMPILE_TESTING_JAR="${COMPILE_TESTING_JAR:-/usr/share/java/google-compile-testing.jar}"
CP="$COMPILE_TESTING_JAR:/usr/share/java/junit4.jar:/usr/share/java/truth.jar:/usr/share/java/guava.jar:/usr/share/java/jspecify.jar:/usr/share/java/auto-common.jar:/usr/share/java/auto-value-annotations.jar"

# Compile the test
javac -cp "$CP" -d "$WORKDIR" "$WORKDIR/Main.java"

# Run the test
# We might need exports for JVM if compile-testing accesses internals.
# Let's try without first, and add them if it fails with InaccessibleObjectException.
java -cp "$CP:$WORKDIR" Main
