173 integerEnv.put("multi-release", Integer.valueOf(9));
174 runTest(smruri, integerEnv, 8);
175 }
176
177 private void runTest(Map<String,?> env, int expected) throws Throwable {
178 runTest(mruri, env, expected);
179 }
180
181 private void runTest(URI uri, Map<String,?> env, int expected) throws Throwable {
182 try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
183 Path version = fs.getPath(entryName);
184 byte [] bytes = Files.readAllBytes(version);
185 Class<?> vcls = (new ByteArrayClassLoader(fs)).defineClass(className, bytes);
186 MethodHandle mh = MethodHandles.lookup().findVirtual(vcls, "getVersion", mt);
187 Assert.assertEquals((int)mh.invoke(vcls.newInstance()), expected);
188 }
189 }
190
191 @Test
192 public void testIsMultiReleaseJar() throws Exception {
193 testCustomMultiReleaseValue("true", true);
194 testCustomMultiReleaseValue("true\r\nOther: value", true);
195 testCustomMultiReleaseValue("true\nOther: value", true);
196 testCustomMultiReleaseValue("true\rOther: value", true);
197
198 testCustomMultiReleaseValue("false", false);
199 testCustomMultiReleaseValue(" true", false);
200 testCustomMultiReleaseValue("true ", false);
201 testCustomMultiReleaseValue("true\n ", false);
202 testCustomMultiReleaseValue("true\r ", false);
203 testCustomMultiReleaseValue("true\n true", false);
204 testCustomMultiReleaseValue("true\r\n true", false);
205 }
206
207 private static final AtomicInteger JAR_COUNT = new AtomicInteger(0);
208
209 private void testCustomMultiReleaseValue(String value, boolean expected)
210 throws Exception {
211 String fileName = "custom-mr" + JAR_COUNT.incrementAndGet() + ".jar";
212 creator.buildCustomMultiReleaseJar(fileName, value, Map.of(),
213 /*addEntries*/true);
214
215 Map<String,String> env = Map.of("multi-release", "runtime");
216 Path filePath = Paths.get(userdir, fileName);
217 String ssp = filePath.toUri().toString();
218 URI customJar = new URI("jar", ssp , null);
219 try (FileSystem fs = FileSystems.newFileSystem(customJar, env)) {
220 if (expected) {
221 Assert.assertTrue(readAndCompare(fs, MAJOR_VERSION));
222 } else {
223 Assert.assertTrue(readAndCompare(fs, 8));
224 }
|
173 integerEnv.put("multi-release", Integer.valueOf(9));
174 runTest(smruri, integerEnv, 8);
175 }
176
177 private void runTest(Map<String,?> env, int expected) throws Throwable {
178 runTest(mruri, env, expected);
179 }
180
181 private void runTest(URI uri, Map<String,?> env, int expected) throws Throwable {
182 try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
183 Path version = fs.getPath(entryName);
184 byte [] bytes = Files.readAllBytes(version);
185 Class<?> vcls = (new ByteArrayClassLoader(fs)).defineClass(className, bytes);
186 MethodHandle mh = MethodHandles.lookup().findVirtual(vcls, "getVersion", mt);
187 Assert.assertEquals((int)mh.invoke(vcls.newInstance()), expected);
188 }
189 }
190
191 @Test
192 public void testIsMultiReleaseJar() throws Exception {
193 // Re-examine commented out tests as part of JDK-8176843
194 testCustomMultiReleaseValue("true", true);
195 testCustomMultiReleaseValue("true\r\nOther: value", true);
196 testCustomMultiReleaseValue("true\nOther: value", true);
197 // testCustomMultiReleaseValue("true\rOther: value", true);
198
199 testCustomMultiReleaseValue("false", false);
200 testCustomMultiReleaseValue(" true", false);
201 testCustomMultiReleaseValue("true ", false);
202 //testCustomMultiReleaseValue("true\n ", false);
203 //testCustomMultiReleaseValue("true\r ", false);
204 //testCustomMultiReleaseValue("true\n true", false);
205 //testCustomMultiReleaseValue("true\r\n true", false);
206 }
207
208 private static final AtomicInteger JAR_COUNT = new AtomicInteger(0);
209
210 private void testCustomMultiReleaseValue(String value, boolean expected)
211 throws Exception {
212 String fileName = "custom-mr" + JAR_COUNT.incrementAndGet() + ".jar";
213 creator.buildCustomMultiReleaseJar(fileName, value, Map.of(),
214 /*addEntries*/true);
215
216 Map<String,String> env = Map.of("multi-release", "runtime");
217 Path filePath = Paths.get(userdir, fileName);
218 String ssp = filePath.toUri().toString();
219 URI customJar = new URI("jar", ssp , null);
220 try (FileSystem fs = FileSystems.newFileSystem(customJar, env)) {
221 if (expected) {
222 Assert.assertTrue(readAndCompare(fs, MAJOR_VERSION));
223 } else {
224 Assert.assertTrue(readAndCompare(fs, 8));
225 }
|