blob: d6f38afba6226763999f00109524ebb744dc228e [file] [log] [blame]
package com.android.tools.r8;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.common.io.ByteStreams;
import java.io.IOException;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import org.junit.Test;
import org.objectweb.asm.Opcodes;
public class JdkClassFileProviderTest extends TestBase implements Opcodes {
@Test
public void testInvalid8RuntimeClassPath() throws Exception {
Path path = temp.newFolder().toPath();
try {
JdkClassFileProvider.fromJdkHome(path);
fail("Not supposed to succeed");
} catch (IOException e) {
assertThat(e.toString(), containsString(path.toString()));
assertThat(e.toString(), containsString("does not look like a Java home"));
}
}
@Test
public void testJdk8JavHome() throws Exception {
ClassFileResourceProvider provider =
JdkClassFileProvider.fromJdkHome(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK8));
assertJavaLangObject(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
@Test
public void testJdk8RuntimeClassPath() throws Exception {
ClassFileResourceProvider provider =
JdkClassFileProvider.fromJavaRuntimeJar(
ToolHelper.getJavaHome(TestRuntime.CfVm.JDK8)
.resolve("jre")
.resolve("lib")
.resolve("rt.jar"));
assertJavaLangObject(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
@Test
public void testJdk8SystemModules() throws Exception {
try {
JdkClassFileProvider.fromSystemModulesJdk(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK8));
fail("Not supposed to succeed");
} catch (NoSuchFileException e) {
assertThat(e.toString(), containsString("lib/jrt-fs.jar"));
}
}
@Test
public void testJdk9JavaHome() throws Exception {
ClassFileResourceProvider provider =
JdkClassFileProvider.fromJdkHome(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK9));
assertJavaLangObject(provider);
assertJavaUtilConcurrentFlowSubscriber(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
@Test
public void testJdk9SystemModules() throws Exception {
ClassFileResourceProvider provider =
JdkClassFileProvider.fromSystemModulesJdk(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK9));
assertJavaLangObject(provider);
assertJavaUtilConcurrentFlowSubscriber(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
@Test
public void testJdk11JavaHome() throws Exception {
ClassFileResourceProvider provider =
JdkClassFileProvider.fromJdkHome(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK11));
assertJavaLangObject(provider);
assertJavaUtilConcurrentFlowSubscriber(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
@Test
public void testJdk11SystemModules() throws Exception {
ClassFileResourceProvider provider =
JdkClassFileProvider.fromSystemModulesJdk(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK11));
assertJavaLangObject(provider);
assertJavaUtilConcurrentFlowSubscriber(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
private void assertJavaLangObject(ClassFileResourceProvider provider) throws Exception {
assertTrue(provider.getClassDescriptors().contains("Ljava/lang/Object;"));
assertTrue(
ByteStreams.toByteArray(provider.getProgramResource("Ljava/lang/Object;").getByteStream())
.length
> 0);
}
private void assertJavaUtilConcurrentFlowSubscriber(ClassFileResourceProvider provider)
throws Exception {
assertTrue(provider.getClassDescriptors().contains("Ljava/util/concurrent/Flow$Subscriber;"));
assertTrue(
ByteStreams.toByteArray(
provider
.getProgramResource("Ljava/util/concurrent/Flow$Subscriber;")
.getByteStream())
.length
> 0);
}
}