< prev index next >
test/jdk/nio/zipfs/MultiReleaseJarTest.java
Print this page
rev 16859 : 8176709: JarFileSystem::isMultiReleaseJar is incorrect
Reviewed-by: alanb, sherman, psandoz, mchung
*** 21,31 ****
* questions.
*/
/*
* @test
! * @bug 8144355 8144062
* @summary Test aliasing additions to ZipFileSystem for multi-release jar files
* @library /lib/testlibrary/java/util/jar
* @build Compiler JarBuilder CreateMultiReleaseTestJars
* @run testng MultiReleaseJarTest
* @modules jdk.compiler
--- 21,31 ----
* questions.
*/
/*
* @test
! * @bug 8144355 8144062 8176709
* @summary Test aliasing additions to ZipFileSystem for multi-release jar files
* @library /lib/testlibrary/java/util/jar
* @build Compiler JarBuilder CreateMultiReleaseTestJars
* @run testng MultiReleaseJarTest
* @modules jdk.compiler
*** 40,57 ****
--- 40,59 ----
import java.lang.Runtime.Version;
import java.net.URI;
import java.nio.file.*;
import java.util.HashMap;
import java.util.Map;
+ import java.util.concurrent.atomic.AtomicInteger;
import org.testng.Assert;
import org.testng.annotations.*;
public class MultiReleaseJarTest {
final private int MAJOR_VERSION = Runtime.version().major();
final private String userdir = System.getProperty("user.dir",".");
+ final private CreateMultiReleaseTestJars creator = new CreateMultiReleaseTestJars();
final private Map<String,String> stringEnv = new HashMap<>();
final private Map<String,Integer> integerEnv = new HashMap<>();
final private Map<String,Version> versionEnv = new HashMap<>();
final private String className = "version.Version";
final private MethodType mt = MethodType.methodType(int.class);
*** 61,71 ****
private URI mruri;
private URI smruri;
@BeforeClass
public void initialize() throws Exception {
- CreateMultiReleaseTestJars creator = new CreateMultiReleaseTestJars();
creator.compileEntries();
creator.buildUnversionedJar();
creator.buildMultiReleaseJar();
creator.buildShortMultiReleaseJar();
String ssp = Paths.get(userdir, "unversioned.jar").toUri().toString();
--- 63,72 ----
*** 185,194 ****
--- 186,233 ----
MethodHandle mh = MethodHandles.lookup().findVirtual(vcls, "getVersion", mt);
Assert.assertEquals((int)mh.invoke(vcls.newInstance()), expected);
}
}
+ @Test
+ public void testIsMultiReleaseJar() throws Exception {
+ testCustomMultiReleaseValue("true", true);
+ testCustomMultiReleaseValue("true\r\nOther: value", true);
+ testCustomMultiReleaseValue("true\nOther: value", true);
+ testCustomMultiReleaseValue("true\rOther: value", true);
+
+ testCustomMultiReleaseValue("false", false);
+ testCustomMultiReleaseValue(" true", false);
+ testCustomMultiReleaseValue("true ", false);
+ testCustomMultiReleaseValue("true\n ", false);
+ testCustomMultiReleaseValue("true\r ", false);
+ testCustomMultiReleaseValue("true\n true", false);
+ testCustomMultiReleaseValue("true\r\n true", false);
+ }
+
+ private static final AtomicInteger JAR_COUNT = new AtomicInteger(0);
+
+ private void testCustomMultiReleaseValue(String value, boolean expected)
+ throws Exception {
+ String fileName = "custom-mr" + JAR_COUNT.incrementAndGet() + ".jar";
+ creator.buildCustomMultiReleaseJar(fileName, value, Map.of(),
+ /*addEntries*/true);
+
+ Map<String,String> env = Map.of("multi-release", "runtime");
+ Path filePath = Paths.get(userdir, fileName);
+ String ssp = filePath.toUri().toString();
+ URI customJar = new URI("jar", ssp , null);
+ try (FileSystem fs = FileSystems.newFileSystem(customJar, env)) {
+ if (expected) {
+ Assert.assertTrue(readAndCompare(fs, MAJOR_VERSION));
+ } else {
+ Assert.assertTrue(readAndCompare(fs, 8));
+ }
+ }
+ Files.delete(filePath);
+ }
+
private static class ByteArrayClassLoader extends ClassLoader {
final private FileSystem fs;
ByteArrayClassLoader(FileSystem fs) {
super(null);
< prev index next >