< prev index next >
test/java/lang/module/ModuleDescriptorTest.java
Print this page
@@ -48,15 +48,17 @@
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import static java.lang.module.ModuleDescriptor.Requires.Modifier.*;
+import jdk.internal.misc.JavaLangModuleAccess;
import jdk.internal.misc.SharedSecrets;
import jdk.internal.module.ModuleInfoWriter;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@@ -986,10 +988,111 @@
public void testEmptyVersion() {
ModuleDescriptor.newModule("foo").version("");
}
+ @DataProvider(name = "unparseableVersions")
+ public Object[][] unparseableVersions() {
+ return new Object[][]{
+
+ { null, "A1" }, // no version < unparseable
+ { "A1", "A2" }, // unparseable < unparseable
+ { "A1", "1.0" }, // unparseable < parseable
+
+ };
+ }
+
+ /**
+ * Basic test for unparseable module versions
+ */
+ @Test(dataProvider = "unparseableVersions")
+ public void testUnparseableModuleVersion(String vs1, String vs2) {
+ ModuleDescriptor descriptor1 = newModule("m", vs1);
+ ModuleDescriptor descriptor2 = newModule("m", vs2);
+
+ if (vs1 != null && !isParsableVersion(vs1)) {
+ assertFalse(descriptor1.version().isPresent());
+ assertTrue(descriptor1.rawVersion().isPresent());
+ assertEquals(descriptor1.rawVersion().get(), vs1);
+ }
+
+ if (vs2 != null && !isParsableVersion(vs2)) {
+ assertFalse(descriptor2.version().isPresent());
+ assertTrue(descriptor2.rawVersion().isPresent());
+ assertEquals(descriptor2.rawVersion().get(), vs2);
+ }
+
+ assertFalse(descriptor1.equals(descriptor2));
+ assertFalse(descriptor2.equals(descriptor1));
+ assertTrue(descriptor1.compareTo(descriptor2) == -1);
+ assertTrue(descriptor2.compareTo(descriptor1) == 1);
+ }
+
+ /**
+ * Basic test for requiring a module with an unparseable version recorded
+ * at compile version.
+ */
+ @Test(dataProvider = "unparseableVersions")
+ public void testUnparseableCompiledVersion(String vs1, String vs2) {
+ Requires r1 = newRequires("m", vs1);
+ Requires r2 = newRequires("m", vs2);
+
+ if (vs1 != null && !isParsableVersion(vs1)) {
+ assertFalse(r1.compiledVersion().isPresent());
+ assertTrue(r1.rawCompiledVersion().isPresent());
+ assertEquals(r1.rawCompiledVersion().get(), vs1);
+ }
+
+ if (vs2 != null && !isParsableVersion(vs2)) {
+ assertFalse(r2.compiledVersion().isPresent());
+ assertTrue(r2.rawCompiledVersion().isPresent());
+ assertEquals(r2.rawCompiledVersion().get(), vs2);
+ }
+
+ assertFalse(r1.equals(r2));
+ assertFalse(r2.equals(r1));
+ assertTrue(r1.compareTo(r2) == -1);
+ assertTrue(r2.compareTo(r1) == 1);
+ }
+
+ private ModuleDescriptor newModule(String name, String vs) {
+ JavaLangModuleAccess JLMA = SharedSecrets.getJavaLangModuleAccess();
+ Builder builder = JLMA.newModuleBuilder(name, false, Set.of());
+ if (vs != null)
+ builder.version(vs);
+ builder.requires("java.base");
+ ByteBuffer bb = ModuleInfoWriter.toByteBuffer(builder.build());
+ return ModuleDescriptor.read(bb);
+ }
+
+ private Requires newRequires(String name, String vs) {
+ JavaLangModuleAccess JLMA = SharedSecrets.getJavaLangModuleAccess();
+ Builder builder = JLMA.newModuleBuilder("foo", false, Set.of());
+ if (vs == null) {
+ builder.requires(name);
+ } else {
+ JLMA.requires(builder, Set.of(), name, vs);
+ }
+ Set<ModuleDescriptor.Requires> requires = builder.build().requires();
+ Iterator<ModuleDescriptor.Requires> iterator = requires.iterator();
+ ModuleDescriptor.Requires r = iterator.next();
+ if (r.name().equals("java.base")) {
+ r = iterator.next();
+ }
+ return r;
+ }
+
+ private boolean isParsableVersion(String vs) {
+ try {
+ Version.parse(vs);
+ return true;
+ } catch (IllegalArgumentException e) {
+ return false;
+ }
+ }
+
+
// toNameAndVersion
public void testToNameAndVersion() {
ModuleDescriptor md1 = ModuleDescriptor.newModule("foo").build();
assertEquals(md1.toNameAndVersion(), "foo");
@@ -1168,63 +1271,10 @@
Builder builder = ModuleDescriptor.newModule("foo");
builder.mainClass(mainClass);
}
- // osName
-
- public void testOsName() {
- String osName = ModuleDescriptor.newModule("foo").osName("Linux").build().osName().get();
- assertEquals(osName, "Linux");
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testNullOsName() {
- ModuleDescriptor.newModule("foo").osName(null);
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testEmptyOsName() {
- ModuleDescriptor.newModule("foo").osName("");
- }
-
-
- // osArch
-
- public void testOsArch() {
- String osArch = ModuleDescriptor.newModule("foo").osName("arm").build().osName().get();
- assertEquals(osArch, "arm");
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testNullOsArch() {
- ModuleDescriptor.newModule("foo").osArch(null);
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testEmptyOsArch() {
- ModuleDescriptor.newModule("foo").osArch("");
- }
-
-
- // osVersion
-
- public void testOsVersion() {
- String osVersion = ModuleDescriptor.newModule("foo").osName("11.2").build().osName().get();
- assertEquals(osVersion, "11.2");
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testNullOsVersion() {
- ModuleDescriptor.newModule("foo").osVersion(null);
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testEmptyOsVersion() {
- ModuleDescriptor.newModule("foo").osVersion("");
- }
-
// reads
private static InputStream EMPTY_INPUT_STREAM = new InputStream() {
@Override
public int read() {
@@ -1237,11 +1287,13 @@
public int read() throws IOException {
throw new IOException();
}
};
- // basic test reading module-info.class
+ /**
+ * Basic test reading module-info.class
+ */
public void testRead() throws Exception {
Module base = Object.class.getModule();
try (InputStream in = base.getResourceAsStream("module-info.class")) {
ModuleDescriptor descriptor = ModuleDescriptor.read(in);
@@ -1254,10 +1306,11 @@
ModuleDescriptor descriptor = ModuleDescriptor.read(bb);
assertFalse(bb.hasRemaining()); // no more remaining bytes
assertEquals(descriptor.name(), "java.base");
}
}
+
/**
* Test ModuleDescriptor with a packager finder
*/
public void testReadsWithPackageFinder() throws Exception {
ModuleDescriptor descriptor = ModuleDescriptor.newModule("foo")
< prev index next >