diff options
Diffstat (limited to 'javatests/com/google/turbine/lower')
7 files changed, 194 insertions, 15 deletions
diff --git a/javatests/com/google/turbine/lower/IntegrationTestSupport.java b/javatests/com/google/turbine/lower/IntegrationTestSupport.java index f20962b..6527a03 100644 --- a/javatests/com/google/turbine/lower/IntegrationTestSupport.java +++ b/javatests/com/google/turbine/lower/IntegrationTestSupport.java @@ -33,6 +33,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.io.MoreFiles; import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; +import org.objectweb.asm.Opcodes; import com.google.turbine.binder.Binder; import com.google.turbine.binder.Binder.BindingResult; import com.google.turbine.binder.ClassPath; @@ -496,7 +497,9 @@ public final class IntegrationTestSupport { throws IOException { BindingResult bound = turbineAnalysis(input, classpath, bootClassPath, moduleVersion); return Lower.lowerAll( - LanguageVersion.fromJavacopts(javacopts), + Lower.LowerOptions.builder() + .languageVersion(LanguageVersion.fromJavacopts(javacopts)) + .build(), bound.units(), bound.modules(), bound.classPathEnv()) diff --git a/javatests/com/google/turbine/lower/LongStringIntegrationTest.java b/javatests/com/google/turbine/lower/LongStringIntegrationTest.java index 7bb61e5..33deaee 100644 --- a/javatests/com/google/turbine/lower/LongStringIntegrationTest.java +++ b/javatests/com/google/turbine/lower/LongStringIntegrationTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import org.objectweb.asm.Opcodes; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Path; @@ -33,7 +34,6 @@ import org.junit.runners.JUnit4; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.Opcodes; @RunWith(JUnit4.class) public class LongStringIntegrationTest { diff --git a/javatests/com/google/turbine/lower/LowerIntegrationTest.java b/javatests/com/google/turbine/lower/LowerIntegrationTest.java index 94f1d07..6c95d44 100644 --- a/javatests/com/google/turbine/lower/LowerIntegrationTest.java +++ b/javatests/com/google/turbine/lower/LowerIntegrationTest.java @@ -23,6 +23,7 @@ import static org.junit.Assume.assumeTrue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import java.io.IOError; import java.io.IOException; @@ -47,6 +48,8 @@ public class LowerIntegrationTest { ImmutableMap.of( "record.test", 16, // "record2.test", 16, + "record_tostring.test", 16, + "record_ctor.test", 16, "sealed.test", 17, "sealed_nested.test", 17, "textblock.test", 15); @@ -269,9 +272,12 @@ public class LowerIntegrationTest { "receiver_param.test", "record.test", "record2.test", + "record_ctor.test", + "record_tostring.test", "rek.test", "samepkg.test", "sealed.test", + "sealed_nested.test", "self.test", "semi.test", // https://bugs.openjdk.java.net/browse/JDK-8054064 ? @@ -333,8 +339,9 @@ public class LowerIntegrationTest { "wildcanon.test", // keep-sorted end }; - List<Object[]> tests = - ImmutableList.copyOf(testCases).stream().map(x -> new Object[] {x}).collect(toList()); + ImmutableSet<String> cases = ImmutableSet.copyOf(testCases); + assertThat(cases).containsAtLeastElementsIn(SOURCE_VERSION.keySet()); + List<Object[]> tests = cases.stream().map(x -> new Object[] {x}).collect(toList()); String testShardIndex = System.getenv("TEST_SHARD_INDEX"); String testTotalShards = System.getenv("TEST_TOTAL_SHARDS"); if (testShardIndex == null || testTotalShards == null) { @@ -384,7 +391,12 @@ public class LowerIntegrationTest { int version = SOURCE_VERSION.getOrDefault(test, 8); assumeTrue(version <= Runtime.version().feature()); ImmutableList<String> javacopts = - ImmutableList.of("-source", String.valueOf(version), "-target", String.valueOf(version)); + ImmutableList.of( + "-source", + String.valueOf(version), + "-target", + String.valueOf(version), + "-Xpkginfo:always"); Map<String, byte[]> expected = IntegrationTestSupport.runJavac(input.sources, classpathJar, javacopts); diff --git a/javatests/com/google/turbine/lower/LowerTest.java b/javatests/com/google/turbine/lower/LowerTest.java index a6410db..2de4650 100644 --- a/javatests/com/google/turbine/lower/LowerTest.java +++ b/javatests/com/google/turbine/lower/LowerTest.java @@ -25,6 +25,7 @@ import static org.junit.Assert.assertThrows; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import org.objectweb.asm.Opcodes; import com.google.turbine.binder.Binder; import com.google.turbine.binder.Binder.BindingResult; import com.google.turbine.binder.ClassPathBinder; @@ -232,7 +233,7 @@ public class LowerTest { Map<String, byte[]> bytes = Lower.lowerAll( - LanguageVersion.createDefault(), + Lower.LowerOptions.createDefault(), ImmutableMap.of( new ClassSymbol("test/Test"), c, new ClassSymbol("test/Test$Inner"), i), ImmutableList.of(), @@ -260,10 +261,10 @@ public class LowerTest { "}"))), ClassPathBinder.bindClasspath(ImmutableList.of()), TURBINE_BOOTCLASSPATH, - /* moduleVersion=*/ Optional.empty()); + /* moduleVersion= */ Optional.empty()); Map<String, byte[]> lowered = Lower.lowerAll( - LanguageVersion.createDefault(), + Lower.LowerOptions.createDefault(), bound.units(), bound.modules(), bound.classPathEnv()) @@ -340,10 +341,10 @@ public class LowerTest { "}"))), ClassPathBinder.bindClasspath(ImmutableList.of()), TURBINE_BOOTCLASSPATH, - /* moduleVersion=*/ Optional.empty()); + /* moduleVersion= */ Optional.empty()); Map<String, byte[]> lowered = Lower.lowerAll( - LanguageVersion.createDefault(), + Lower.LowerOptions.createDefault(), bound.units(), bound.modules(), bound.classPathEnv()) @@ -423,10 +424,10 @@ public class LowerTest { ImmutableList.of(Parser.parse("@Deprecated class Test {}")), ClassPathBinder.bindClasspath(ImmutableList.of()), TURBINE_BOOTCLASSPATH, - /* moduleVersion=*/ Optional.empty()); + /* moduleVersion= */ Optional.empty()); Map<String, byte[]> lowered = Lower.lowerAll( - LanguageVersion.createDefault(), + Lower.LowerOptions.createDefault(), bound.units(), bound.modules(), bound.classPathEnv()) @@ -544,7 +545,7 @@ public class LowerTest { .put( "Test.java", lines( - "public class Test extends B.BM {", // + "public class Test implements B.BM {", // " I i;", "}")) .build(); @@ -649,10 +650,14 @@ public class LowerTest { ImmutableList.of(Parser.parse("class Test {}")), ClassPathBinder.bindClasspath(ImmutableList.of()), TURBINE_BOOTCLASSPATH, - /* moduleVersion=*/ Optional.empty()); + /* moduleVersion= */ Optional.empty()); Map<String, byte[]> lowered = Lower.lowerAll( - LanguageVersion.fromJavacopts(ImmutableList.of("-source", "7", "-target", "7")), + Lower.LowerOptions.builder() + .languageVersion( + LanguageVersion.fromJavacopts( + ImmutableList.of("-source", "7", "-target", "7"))) + .build(), bound.units(), bound.modules(), bound.classPathEnv()) @@ -676,6 +681,76 @@ public class LowerTest { assertThat(major[0]).isEqualTo(Opcodes.V1_8); } + @Test + public void privateFields() throws Exception { + BindingResult bound = + Binder.bind( + ImmutableList.of( + Parser.parse( + "class Test {\n" // + + " private int x;\n" + + " int y;\n" + + "}")), + ClassPathBinder.bindClasspath(ImmutableList.of()), + TURBINE_BOOTCLASSPATH, + /* moduleVersion= */ Optional.empty()); + ImmutableMap<String, byte[]> lowered = + Lower.lowerAll( + Lower.LowerOptions.builder().emitPrivateFields(true).build(), + bound.units(), + bound.modules(), + bound.classPathEnv()) + .bytes(); + List<String> fields = new ArrayList<>(); + new ClassReader(lowered.get("Test")) + .accept( + new ClassVisitor(Opcodes.ASM9) { + @Override + public FieldVisitor visitField( + int access, String name, String descriptor, String signature, Object value) { + fields.add(name); + return null; + } + }, + 0); + assertThat(fields).containsExactly("x", "y"); + } + + @Test + public void noPrivateFields() throws Exception { + BindingResult bound = + Binder.bind( + ImmutableList.of( + Parser.parse( + "class Test {\n" // + + " private int x;\n" + + " int y;\n" + + "}")), + ClassPathBinder.bindClasspath(ImmutableList.of()), + TURBINE_BOOTCLASSPATH, + /* moduleVersion= */ Optional.empty()); + ImmutableMap<String, byte[]> lowered = + Lower.lowerAll( + Lower.LowerOptions.createDefault(), + bound.units(), + bound.modules(), + bound.classPathEnv()) + .bytes(); + List<String> fields = new ArrayList<>(); + new ClassReader(lowered.get("Test")) + .accept( + new ClassVisitor(Opcodes.ASM9) { + @Override + public FieldVisitor visitField( + int access, String name, String descriptor, String signature, Object value) { + fields.add(name); + return null; + } + }, + 0); + assertThat(fields).containsExactly("y"); + } + static String lines(String... lines) { return Joiner.on(System.lineSeparator()).join(lines); } diff --git a/javatests/com/google/turbine/lower/testdata/package_info.test b/javatests/com/google/turbine/lower/testdata/package_info.test index a2416a4..6b0fc32 100644 --- a/javatests/com/google/turbine/lower/testdata/package_info.test +++ b/javatests/com/google/turbine/lower/testdata/package_info.test @@ -10,3 +10,5 @@ package p; package p; class Test {} +=== Empty.java === +package p;
\ No newline at end of file diff --git a/javatests/com/google/turbine/lower/testdata/record_ctor.test b/javatests/com/google/turbine/lower/testdata/record_ctor.test new file mode 100644 index 0000000..a3adc15 --- /dev/null +++ b/javatests/com/google/turbine/lower/testdata/record_ctor.test @@ -0,0 +1,52 @@ +=== Records.java === +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +public class Records { + public record A(String value) { + + void one() {} + + public A(String a, String b) { + this(a + ", " + b); + } + + void two() {} + } + + @Target(ElementType.TYPE_USE) + @interface N {} + + public record B(String value) { + + void one() {} + + public B(@N String value) { + this.value = value; + } + + void two() {} + + public B(String a, String b) { + this(a + ", " + b); + } + + void three() {} + } + + class Inner {} + + public record C(Records.Inner value) { + + public C(Records. @N Inner value) { + this.value = value; + } + } + + public record D<T>(T value) { + + public D(T value) { + this.value = value; + } + } +} diff --git a/javatests/com/google/turbine/lower/testdata/record_tostring.test b/javatests/com/google/turbine/lower/testdata/record_tostring.test new file mode 100644 index 0000000..f93187a --- /dev/null +++ b/javatests/com/google/turbine/lower/testdata/record_tostring.test @@ -0,0 +1,35 @@ +=== Records.java === + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; +import java.util.Objects; + +class Records { + public record A() { + @Override + public String toString() { + return "A"; + } + } + + public record B() { + @Override + public final String toString() { + return "B"; + } + } + + public record C() { + @Override + public final boolean equals(Object o) { + return false; + } + } + + public record D() { + @Override + public final int hashCode() { + return -1; + } + } +}
\ No newline at end of file |