103 "@com.bar.preview.stuff.Foo",
104 "@com.bar.preview.stuff.Bar"),
105 "modbaz", Arrays.asList(
106 "!file.txt",
107 "!normal.txt",
108 "!META-INF/preview/file.txt",
109 "!META-INF/preview/previewOnly.txt"),
110 "modgus", Arrays.asList(
111 // A second module with a preview-only empty package (preview).
112 "@com.bar.preview.other.Gus"));
113 private final Path image = buildJImage(IMAGE_ENTRIES);
114
115 @ParameterizedTest
116 @ValueSource(strings = {
117 "/",
118 "/modules",
119 "/modules/modfoo",
120 "/modules/modbar",
121 "/modules/modfoo/com",
122 "/modules/modfoo/com/foo",
123 "/modules/modfoo/com/foo/bar"})
124 public void testModuleDirectories_expected(String name) throws IOException {
125 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
126 assertDir(reader, name);
127 }
128 }
129
130 @ParameterizedTest
131 @ValueSource(strings = {
132 "",
133 "//",
134 "/modules/",
135 "/modules/unknown",
136 "/modules/modbar/",
137 "/modules/modfoo//com",
138 "/modules/modfoo/com/"})
139 public void testModuleNodes_absent(String name) throws IOException {
140 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
141 assertAbsent(reader, name);
142 }
143 }
144
145 @Test
146 public void testModuleResources() throws IOException {
147 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
148 assertNode(reader, "/modules/modfoo/com/foo/HasPreviewVersion.class");
149 assertNode(reader, "/modules/modbar/com/bar/One.class");
150
151 ImageClassLoader loader = new ImageClassLoader(reader, IMAGE_ENTRIES.keySet());
152 assertNonPreviewVersion(loader, "modfoo", "com.foo.HasPreviewVersion");
153 assertNonPreviewVersion(loader, "modfoo", "com.foo.NormalFoo");
154 assertNonPreviewVersion(loader, "modfoo", "com.foo.bar.NormalBar");
155 assertNonPreviewVersion(loader, "modbar", "com.bar.One");
156 }
157 }
158
216 assertNull(reader.findResourceNode(modName, resPath));
217 assertFalse(reader.containsResource(modName, resPath));
218
219 // Non-existent resources names should either not be found,
220 // or (in the case of directory nodes) not be resources.
221 String canonicalNodeName = "/modules/" + modName + "/" + resPath;
222 Node node = reader.findNode(canonicalNodeName);
223 assertTrue(node == null || !node.isResource());
224 }
225 }
226 }
227
228 @ParameterizedTest
229 @CsvSource(delimiter = ':', value = {
230 // Don't permit module names to contain paths.
231 "modfoo/com/bar:One.class",
232 "modfoo/com:bar/One.class",
233 "modules/modfoo/com:foo/HasPreviewVersion.class",
234 })
235 public void testResource_invalid(String modName, String resPath) throws IOException {
236 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
237 assertThrows(IllegalArgumentException.class, () -> reader.containsResource(modName, resPath));
238 assertThrows(IllegalArgumentException.class, () -> reader.findResourceNode(modName, resPath));
239 }
240 }
241
242 @Test
243 public void testPackageDirectories() throws IOException {
244 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
245 Node root = assertDir(reader, "/packages");
246 Set<String> pkgNames = root.getChildNames().collect(toSet());
247 assertTrue(pkgNames.contains("/packages/com"));
248 assertTrue(pkgNames.contains("/packages/com.foo"));
249 assertTrue(pkgNames.contains("/packages/com.bar"));
250
251 // Even though no classes exist directly in the "com" package, it still
252 // creates a directory with links back to all the modules which contain it.
253 Set<String> comLinks = assertDir(reader, "/packages/com").getChildNames().collect(Collectors.toSet());
254 assertTrue(comLinks.contains("/packages/com/modfoo"));
255 assertTrue(comLinks.contains("/packages/com/modbar"));
256 }
257 }
258
|
103 "@com.bar.preview.stuff.Foo",
104 "@com.bar.preview.stuff.Bar"),
105 "modbaz", Arrays.asList(
106 "!file.txt",
107 "!normal.txt",
108 "!META-INF/preview/file.txt",
109 "!META-INF/preview/previewOnly.txt"),
110 "modgus", Arrays.asList(
111 // A second module with a preview-only empty package (preview).
112 "@com.bar.preview.other.Gus"));
113 private final Path image = buildJImage(IMAGE_ENTRIES);
114
115 @ParameterizedTest
116 @ValueSource(strings = {
117 "/",
118 "/modules",
119 "/modules/modfoo",
120 "/modules/modbar",
121 "/modules/modfoo/com",
122 "/modules/modfoo/com/foo",
123 "/modules/modfoo/com/foo/bar",
124 })
125 public void testModuleDirectories_expected(String name) throws IOException {
126 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
127 assertDir(reader, name);
128 }
129 }
130
131 @ParameterizedTest
132 @ValueSource(strings = {
133 "",
134 "//",
135 "/modules/",
136 "/modules/unknown",
137 "/modules/modbar/",
138 "/modules/modfoo//com",
139 "/modules/modfoo/com/",
140 })
141 public void testModuleNodes_absent(String name) throws IOException {
142 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
143 assertAbsent(reader, name);
144 }
145 }
146
147 @Test
148 public void testModuleResources() throws IOException {
149 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
150 assertNode(reader, "/modules/modfoo/com/foo/HasPreviewVersion.class");
151 assertNode(reader, "/modules/modbar/com/bar/One.class");
152
153 ImageClassLoader loader = new ImageClassLoader(reader, IMAGE_ENTRIES.keySet());
154 assertNonPreviewVersion(loader, "modfoo", "com.foo.HasPreviewVersion");
155 assertNonPreviewVersion(loader, "modfoo", "com.foo.NormalFoo");
156 assertNonPreviewVersion(loader, "modfoo", "com.foo.bar.NormalBar");
157 assertNonPreviewVersion(loader, "modbar", "com.bar.One");
158 }
159 }
160
218 assertNull(reader.findResourceNode(modName, resPath));
219 assertFalse(reader.containsResource(modName, resPath));
220
221 // Non-existent resources names should either not be found,
222 // or (in the case of directory nodes) not be resources.
223 String canonicalNodeName = "/modules/" + modName + "/" + resPath;
224 Node node = reader.findNode(canonicalNodeName);
225 assertTrue(node == null || !node.isResource());
226 }
227 }
228 }
229
230 @ParameterizedTest
231 @CsvSource(delimiter = ':', value = {
232 // Don't permit module names to contain paths.
233 "modfoo/com/bar:One.class",
234 "modfoo/com:bar/One.class",
235 "modules/modfoo/com:foo/HasPreviewVersion.class",
236 })
237 public void testResource_invalid(String modName, String resPath) throws IOException {
238 for (PreviewMode mode : List.of(PreviewMode.ENABLED, PreviewMode.DISABLED)) {
239 try (ImageReader reader = ImageReader.open(image, mode)) {
240 assertThrows(IllegalArgumentException.class, () -> reader.containsResource(modName, resPath));
241 assertThrows(IllegalArgumentException.class, () -> reader.findResourceNode(modName, resPath));
242 }
243 }
244 }
245
246 @Test
247 public void testPackageDirectories() throws IOException {
248 try (ImageReader reader = ImageReader.open(image, PreviewMode.DISABLED)) {
249 Node root = assertDir(reader, "/packages");
250 Set<String> pkgNames = root.getChildNames().collect(toSet());
251 assertTrue(pkgNames.contains("/packages/com"));
252 assertTrue(pkgNames.contains("/packages/com.foo"));
253 assertTrue(pkgNames.contains("/packages/com.bar"));
254
255 // Even though no classes exist directly in the "com" package, it still
256 // creates a directory with links back to all the modules which contain it.
257 Set<String> comLinks = assertDir(reader, "/packages/com").getChildNames().collect(Collectors.toSet());
258 assertTrue(comLinks.contains("/packages/com/modfoo"));
259 assertTrue(comLinks.contains("/packages/com/modbar"));
260 }
261 }
262
|