Files
ForgeMultipart/src/test/java/codechicken/multipart/JPartialOcclusionBinaryCompatibilityTest.java
T
Algent 60818853e3 test: freeze Scala partial-occlusion ABI
Load a reference-compiled consumer so the Java bridge must retain the Scala trait helper.
2026-08-14 18:19:18 +02:00

48 lines
1.7 KiB
Java

package codechicken.multipart;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Objects;
import java.util.Scanner;
import org.junit.jupiter.api.Test;
class JPartialOcclusionBinaryCompatibilityTest {
@Test
void loadsScalaImplementorCompiledAgainstReferenceJar() throws Exception {
byte[] bytecode = loadFixture();
Class<?> fixtureClass = new FixtureClassLoader(JPartialOcclusion.class.getClassLoader()).define(bytecode);
Object fixture = fixtureClass.getDeclaredConstructor().newInstance();
assertTrue(fixture instanceof JPartialOcclusion);
JPartialOcclusion part = (JPartialOcclusion) fixture;
assertFalse(part.allowCompleteOcclusion());
assertFalse(part.getPartialOcclusionBoxes().iterator().hasNext());
}
private static byte[] loadFixture() {
InputStream input = Objects.requireNonNull(
JPartialOcclusionBinaryCompatibilityTest.class
.getResourceAsStream("/compat/ReferenceScalaPartialOcclusion.class.b64"));
try (Scanner scanner = new Scanner(input, StandardCharsets.US_ASCII.name()).useDelimiter("\\A")) {
return Base64.getMimeDecoder().decode(scanner.next());
}
}
private static final class FixtureClassLoader extends ClassLoader {
private FixtureClassLoader(ClassLoader parent) {
super(parent);
}
private Class<?> define(byte[] bytecode) {
return defineClass(null, bytecode, 0, bytecode.length);
}
}
}