63 @Test |
63 @Test |
64 public class MultiReleaseJarTest { |
64 public class MultiReleaseJarTest { |
65 |
65 |
66 private static final String MODULE_INFO = "module-info.class"; |
66 private static final String MODULE_INFO = "module-info.class"; |
67 |
67 |
68 private static final int RELEASE = Runtime.version().major(); |
68 private static final int VERSION = Runtime.version().major(); |
69 |
69 |
70 // are multi-release JARs enabled? |
70 // are multi-release JARs enabled? |
71 private static final boolean MULTI_RELEASE; |
71 private static final boolean MULTI_RELEASE; |
72 static { |
72 static { |
73 String s = System.getProperty("jdk.util.jar.enableMultiRelease"); |
73 String s = System.getProperty("jdk.util.jar.enableMultiRelease"); |
78 * Basic test of a multi-release JAR. |
78 * Basic test of a multi-release JAR. |
79 */ |
79 */ |
80 public void testBasic() throws Exception { |
80 public void testBasic() throws Exception { |
81 String name = "m1"; |
81 String name = "m1"; |
82 |
82 |
83 ModuleDescriptor descriptor = ModuleDescriptor.module(name) |
83 ModuleDescriptor descriptor = ModuleDescriptor.newModule(name) |
84 .requires("java.base") |
84 .requires("java.base") |
85 .build(); |
85 .build(); |
86 |
86 |
87 Path jar = new JarBuilder(name) |
87 Path jar = new JarBuilder(name) |
88 .moduleInfo("module-info.class", descriptor) |
88 .moduleInfo("module-info.class", descriptor) |
89 .resource("p/Main.class") |
89 .resource("p/Main.class") |
90 .resource("p/Helper.class") |
90 .resource("p/Helper.class") |
91 .resource("META-INF/versions/9/p/Helper.class") |
91 .resource("META-INF/versions/" + VERSION + "/p/Helper.class") |
92 .resource("META-INF/versions/9/p/internal/Helper9.class") |
92 .resource("META-INF/versions/" + VERSION + "/p/internal/Helper.class") |
93 .build(); |
93 .build(); |
94 |
94 |
95 // find the module |
95 // find the module |
96 ModuleFinder finder = ModuleFinder.of(jar); |
96 ModuleFinder finder = ModuleFinder.of(jar); |
97 Optional<ModuleReference> omref = finder.find(name); |
97 Optional<ModuleReference> omref = finder.find(name); |
115 * section of the JAR. |
115 * section of the JAR. |
116 */ |
116 */ |
117 public void testModuleInfoInVersionedSection() throws Exception { |
117 public void testModuleInfoInVersionedSection() throws Exception { |
118 String name = "m1"; |
118 String name = "m1"; |
119 |
119 |
120 ModuleDescriptor descriptor1 = ModuleDescriptor.module(name) |
120 ModuleDescriptor descriptor1 = ModuleDescriptor.newModule(name) |
121 .requires("java.base") |
121 .requires("java.base") |
122 .build(); |
122 .build(); |
123 |
123 |
124 // module descriptor for versioned section |
124 // module descriptor for versioned section |
125 ModuleDescriptor descriptor2 = ModuleDescriptor.module(name) |
125 ModuleDescriptor descriptor2 = ModuleDescriptor.newModule(name) |
126 .requires("java.base") |
126 .requires("java.base") |
127 .requires("jdk.unsupported") |
127 .requires("jdk.unsupported") |
128 .build(); |
128 .build(); |
129 |
129 |
130 Path jar = new JarBuilder(name) |
130 Path jar = new JarBuilder(name) |
131 .moduleInfo(MODULE_INFO, descriptor1) |
131 .moduleInfo(MODULE_INFO, descriptor1) |
132 .resource("p/Main.class") |
132 .resource("p/Main.class") |
133 .resource("p/Helper.class") |
133 .resource("p/Helper.class") |
134 .moduleInfo("META-INF/versions/9/" + MODULE_INFO, descriptor2) |
134 .moduleInfo("META-INF/versions/" + VERSION + "/" + MODULE_INFO, descriptor2) |
135 .resource("META-INF/versions/9/p/Helper.class") |
135 .resource("META-INF/versions/" + VERSION + "/p/Helper.class") |
136 .resource("META-INF/versions/9/p/internal/Helper9.class") |
136 .resource("META-INF/versions/" + VERSION + "/p/internal/Helper.class") |
137 .build(); |
137 .build(); |
138 |
138 |
139 // find the module |
139 // find the module |
140 ModuleFinder finder = ModuleFinder.of(jar); |
140 ModuleFinder finder = ModuleFinder.of(jar); |
141 Optional<ModuleReference> omref = finder.find(name); |
141 Optional<ModuleReference> omref = finder.find(name); |
159 String name = "m"; |
159 String name = "m"; |
160 |
160 |
161 Path jar = new JarBuilder(name) |
161 Path jar = new JarBuilder(name) |
162 .resource("p/Main.class") |
162 .resource("p/Main.class") |
163 .resource("p/Helper.class") |
163 .resource("p/Helper.class") |
164 .resource("META-INF/versions/9/p/Helper.class") |
164 .resource("META-INF/versions/" + VERSION + "/p/Helper.class") |
165 .resource("META-INF/versions/9/p/internal/Helper9.class") |
165 .resource("META-INF/versions/" + VERSION + "/p/internal/Helper.class") |
166 .build(); |
166 .build(); |
167 |
167 |
168 // find the module |
168 // find the module |
169 ModuleFinder finder = ModuleFinder.of(jar); |
169 ModuleFinder finder = ModuleFinder.of(jar); |
170 Optional<ModuleReference> omref = finder.find(name); |
170 Optional<ModuleReference> omref = finder.find(name); |
186 * Exercise ModuleReader on a multi-release JAR |
186 * Exercise ModuleReader on a multi-release JAR |
187 */ |
187 */ |
188 public void testModuleReader() throws Exception { |
188 public void testModuleReader() throws Exception { |
189 String name = "m1"; |
189 String name = "m1"; |
190 |
190 |
191 ModuleDescriptor descriptor1 = ModuleDescriptor.module(name) |
191 ModuleDescriptor descriptor1 = ModuleDescriptor.newModule(name) |
192 .requires("java.base") |
192 .requires("java.base") |
193 .build(); |
193 .build(); |
194 |
194 |
195 // module descriptor for versioned section |
195 // module descriptor for versioned section |
196 ModuleDescriptor descriptor2 = ModuleDescriptor.module(name) |
196 ModuleDescriptor descriptor2 = ModuleDescriptor.newModule(name) |
197 .requires("java.base") |
197 .requires("java.base") |
198 .requires("jdk.unsupported") |
198 .requires("jdk.unsupported") |
199 .build(); |
199 .build(); |
200 |
200 |
201 Path jar = new JarBuilder(name) |
201 Path jar = new JarBuilder(name) |
202 .moduleInfo(MODULE_INFO, descriptor1) |
202 .moduleInfo(MODULE_INFO, descriptor1) |
203 .moduleInfo("META-INF/versions/9/" + MODULE_INFO, descriptor2) |
203 .moduleInfo("META-INF/versions/" + VERSION + "/" + MODULE_INFO, descriptor2) |
204 .build(); |
204 .build(); |
205 |
205 |
206 // find the module |
206 // find the module |
207 ModuleFinder finder = ModuleFinder.of(jar); |
207 ModuleFinder finder = ModuleFinder.of(jar); |
208 Optional<ModuleReference> omref = finder.find(name); |
208 Optional<ModuleReference> omref = finder.find(name); |
241 assertTrue(ouri.isPresent()); |
241 assertTrue(ouri.isPresent()); |
242 URI uri = ouri.get(); |
242 URI uri = ouri.get(); |
243 |
243 |
244 String expectedTail = "!/"; |
244 String expectedTail = "!/"; |
245 if (MULTI_RELEASE) |
245 if (MULTI_RELEASE) |
246 expectedTail += "META-INF/versions/" + RELEASE + "/"; |
246 expectedTail += "META-INF/versions/" + VERSION + "/"; |
247 expectedTail += MODULE_INFO; |
247 expectedTail += MODULE_INFO; |
248 assertTrue(uri.toString().endsWith(expectedTail)); |
248 assertTrue(uri.toString().endsWith(expectedTail)); |
249 |
249 |
250 URLConnection uc = uri.toURL().openConnection(); |
250 URLConnection uc = uri.toURL().openConnection(); |
251 uc.setUseCaches(false); |
251 uc.setUseCaches(false); |