230 .map(s -> s.trim()) 231 .collect(Collectors.joining(",")); 232 assertEquals(output, expected); 233 } 234 235 236 @DataProvider(name = "moduledeps") 237 public Object[][] moduledeps() { 238 Path barClass = CLASSES_DIR.resolve("z").resolve("Bar.class"); 239 240 return new Object[][] { 241 // java.xml is an implied reads edge from java.sql 242 { CLASSES_DIR, "java.base,java.management,java.sql,jdk.unsupported"}, 243 { HI_CLASS, "java.base"}, 244 { FOO_CLASS, "java.base,java.management,java.sql"}, 245 { BAR_CLASS, "java.base,java.xml"}, 246 { UNSAFE_CLASS, "java.base,jdk.unsupported"}, 247 }; 248 } 249 250 @DataProvider(name = "recursiveDeps") 251 public Object[][] recursiveDeps() { 252 return new Object[][] { 253 { // lib2 is classpath but not analyzed because lib.Lib is not present 254 // but it is the only class depending on lib2.Lib2 255 List.of("--list-deps", "--class-path", LIB2_DIR.toString(), 256 "--ignore-missing-deps", CLASSES_DIR.toString()), 257 new String[] { 258 "java.base/jdk.internal.misc", 259 "java.base/sun.security.util", 260 "java.logging", 261 "java.sql", 262 "java.xml/jdk.xml.internal", 263 "jdk.unsupported" 264 } 265 }, 266 { // lib2 is classpath but not analyzed because lib.Lib is not present 267 // but it is the only class depending on lib2.Lib2 268 List.of("--print-module-deps", "--class-path", LIB2_DIR.toString(), 269 "--ignore-missing-deps", CLASSES_DIR.toString()), | 230 .map(s -> s.trim()) 231 .collect(Collectors.joining(",")); 232 assertEquals(output, expected); 233 } 234 235 236 @DataProvider(name = "moduledeps") 237 public Object[][] moduledeps() { 238 Path barClass = CLASSES_DIR.resolve("z").resolve("Bar.class"); 239 240 return new Object[][] { 241 // java.xml is an implied reads edge from java.sql 242 { CLASSES_DIR, "java.base,java.management,java.sql,jdk.unsupported"}, 243 { HI_CLASS, "java.base"}, 244 { FOO_CLASS, "java.base,java.management,java.sql"}, 245 { BAR_CLASS, "java.base,java.xml"}, 246 { UNSAFE_CLASS, "java.base,jdk.unsupported"}, 247 }; 248 } 249 250 @Test(dataProvider = "noRecursiveModuledeps") 251 public void testNoRecursiveModuleDeps(Path classes, String expected) { 252 JdepsRunner jdeps = JdepsRunner.run( 253 "--class-path", LIB_DIR.toString() + File.pathSeparator + LIB2_DIR.toString(), 254 "--print-module-deps", "--no-recursive", classes.toString() 255 ); 256 String output = Arrays.stream(jdeps.output()) 257 .map(s -> s.trim()) 258 .collect(Collectors.joining(",")); 259 assertEquals(output, expected); 260 } 261 262 @DataProvider(name = "noRecursiveModuledeps") 263 public Object[][] noRecursiveModuledeps() { 264 Path barClass = CLASSES_DIR.resolve("z").resolve("Bar.class"); 265 266 return new Object[][] { 267 // java.xml is an implied reads edge from java.sql 268 { CLASSES_DIR, "java.base,java.sql,jdk.unsupported"}, 269 { HI_CLASS, "java.base"}, 270 { FOO_CLASS, "java.base,java.sql"}, 271 { BAR_CLASS, "java.base,java.xml"}, 272 { UNSAFE_CLASS, "java.base,jdk.unsupported"}, 273 }; 274 } 275 276 @DataProvider(name = "recursiveDeps") 277 public Object[][] recursiveDeps() { 278 return new Object[][] { 279 { // lib2 is classpath but not analyzed because lib.Lib is not present 280 // but it is the only class depending on lib2.Lib2 281 List.of("--list-deps", "--class-path", LIB2_DIR.toString(), 282 "--ignore-missing-deps", CLASSES_DIR.toString()), 283 new String[] { 284 "java.base/jdk.internal.misc", 285 "java.base/sun.security.util", 286 "java.logging", 287 "java.sql", 288 "java.xml/jdk.xml.internal", 289 "jdk.unsupported" 290 } 291 }, 292 { // lib2 is classpath but not analyzed because lib.Lib is not present 293 // but it is the only class depending on lib2.Lib2 294 List.of("--print-module-deps", "--class-path", LIB2_DIR.toString(), 295 "--ignore-missing-deps", CLASSES_DIR.toString()), |