jdk/test/java/lang/module/ModuleDescriptorTest.java
changeset 43712 5dfd0950317c
parent 42703 20c39ea4a507
child 44359 c6761862ca0b
equal deleted inserted replaced
43619:dc9102c475f3 43712:5dfd0950317c
     1 /*
     1 /*
     2  * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    22  */
    22  */
    23 
    23 
    24 /**
    24 /**
    25  * @test
    25  * @test
    26  * @modules java.base/jdk.internal.module
    26  * @modules java.base/jdk.internal.module
       
    27  *          java.base/jdk.internal.misc
    27  * @run testng ModuleDescriptorTest
    28  * @run testng ModuleDescriptorTest
    28  * @summary Basic test for java.lang.module.ModuleDescriptor and its builder
    29  * @summary Basic test for java.lang.module.ModuleDescriptor and its builder
    29  */
    30  */
    30 
    31 
    31 import java.io.ByteArrayOutputStream;
    32 import java.io.ByteArrayOutputStream;
    40 import java.lang.module.ModuleDescriptor.Provides;
    41 import java.lang.module.ModuleDescriptor.Provides;
    41 import java.lang.module.ModuleDescriptor.Requires.Modifier;
    42 import java.lang.module.ModuleDescriptor.Requires.Modifier;
    42 import java.lang.module.ModuleDescriptor.Version;
    43 import java.lang.module.ModuleDescriptor.Version;
    43 import java.lang.reflect.Module;
    44 import java.lang.reflect.Module;
    44 import java.nio.ByteBuffer;
    45 import java.nio.ByteBuffer;
       
    46 import java.util.ArrayList;
    45 import java.util.Collections;
    47 import java.util.Collections;
    46 import java.util.EnumSet;
    48 import java.util.EnumSet;
    47 import java.util.HashSet;
    49 import java.util.HashSet;
       
    50 import java.util.Iterator;
    48 import java.util.List;
    51 import java.util.List;
       
    52 import java.util.Objects;
    49 import java.util.Set;
    53 import java.util.Set;
       
    54 import java.util.stream.Collectors;
    50 
    55 
    51 import static java.lang.module.ModuleDescriptor.Requires.Modifier.*;
    56 import static java.lang.module.ModuleDescriptor.Requires.Modifier.*;
    52 
    57 
       
    58 import jdk.internal.misc.SharedSecrets;
    53 import jdk.internal.module.ModuleInfoWriter;
    59 import jdk.internal.module.ModuleInfoWriter;
    54 import org.testng.annotations.DataProvider;
    60 import org.testng.annotations.DataProvider;
    55 import org.testng.annotations.Test;
    61 import org.testng.annotations.Test;
    56 import static org.testng.Assert.*;
    62 import static org.testng.Assert.*;
    57 
    63 
    82 
    88 
    83 
    89 
    84     // requires
    90     // requires
    85 
    91 
    86     private Requires requires(Set<Modifier> mods, String mn) {
    92     private Requires requires(Set<Modifier> mods, String mn) {
    87         return ModuleDescriptor.module("m")
    93         return requires(mods, mn, null);
    88             .requires(mods, mn)
       
    89             .build()
       
    90             .requires()
       
    91             .iterator()
       
    92             .next();
       
    93     }
    94     }
    94 
    95 
    95     private Requires requires(Set<Modifier> mods, String mn, Version v) {
    96     private Requires requires(Set<Modifier> mods, String mn, Version v) {
    96         return ModuleDescriptor.module("m")
    97         Builder builder = ModuleDescriptor.newModule("m");
    97             .requires(mods, mn, v)
    98         if (v == null) {
    98             .build()
    99             builder.requires(mods, mn);
    99             .requires()
   100         } else {
   100             .iterator()
   101             builder.requires(mods, mn, v);
   101             .next();
   102         }
       
   103         Set<Requires> requires = builder.build().requires();
       
   104         assertTrue(requires.size() == 2);
       
   105         Iterator<Requires> iterator = requires.iterator();
       
   106         Requires r = iterator.next();
       
   107         if (r.name().equals("java.base")) {
       
   108             r = iterator.next();
       
   109         } else {
       
   110             Requires other = iterator.next();
       
   111             assertEquals(other.name(), "java.base");
       
   112         }
       
   113         return r;
   102     }
   114     }
   103 
   115 
   104     private Requires requires(String mn) {
   116     private Requires requires(String mn) {
   105         return requires(Collections.emptySet(), mn);
   117         return requires(Collections.emptySet(), mn);
   106     }
   118     }
   107 
   119 
   108     public void testRequiresWithRequires() {
   120     public void testRequiresWithRequires() {
   109         Requires r1 = requires("foo");
   121         Requires r1 = requires("foo");
   110         ModuleDescriptor descriptor = ModuleDescriptor.module("m").requires(r1).build();
   122         ModuleDescriptor descriptor = ModuleDescriptor.newModule("m").requires(r1).build();
   111         Requires r2 = descriptor.requires().iterator().next();
   123         Requires r2 = descriptor.requires().iterator().next();
   112         assertEquals(r1, r2);
   124         assertEquals(r1, r2);
   113     }
   125     }
   114 
   126 
   115     public void testRequiresWithNoModifiers() {
   127     public void testRequiresWithNoModifiers() {
   160     }
   172     }
   161 
   173 
   162     @Test(expectedExceptions = IllegalStateException.class)
   174     @Test(expectedExceptions = IllegalStateException.class)
   163     public void testRequiresWithDuplicatesRequires() {
   175     public void testRequiresWithDuplicatesRequires() {
   164         Requires r = requires("foo");
   176         Requires r = requires("foo");
   165         ModuleDescriptor.module("m").requires(r).requires(r);
   177         ModuleDescriptor.newModule("m").requires(r).requires(r);
   166     }
   178     }
   167 
   179 
   168     @Test(expectedExceptions = IllegalArgumentException.class)
   180     @Test(expectedExceptions = IllegalArgumentException.class)
   169     public void testRequiresSelfWithRequires() {
   181     public void testRequiresSelfWithRequires() {
   170         Requires r = requires("foo");
   182         Requires r = requires("foo");
   171         ModuleDescriptor.module("foo").requires(r);
   183         ModuleDescriptor.newModule("foo").requires(r);
   172     }
   184     }
   173 
   185 
   174     @Test(expectedExceptions = IllegalArgumentException.class)
   186     @Test(expectedExceptions = IllegalArgumentException.class)
   175     public void testRequiresSelfWithNoModifier() {
   187     public void testRequiresSelfWithNoModifier() {
   176         ModuleDescriptor.module("m").requires("m");
   188         ModuleDescriptor.newModule("m").requires("m");
   177     }
   189     }
   178 
   190 
   179     @Test(expectedExceptions = IllegalArgumentException.class)
   191     @Test(expectedExceptions = IllegalArgumentException.class)
   180     public void testRequiresSelfWithOneModifier() {
   192     public void testRequiresSelfWithOneModifier() {
   181         ModuleDescriptor.module("m").requires(Set.of(TRANSITIVE), "m");
   193         ModuleDescriptor.newModule("m").requires(Set.of(TRANSITIVE), "m");
   182     }
   194     }
   183 
   195 
   184     @Test(expectedExceptions = IllegalArgumentException.class)
   196     @Test(expectedExceptions = IllegalArgumentException.class)
   185     public void testRequiresSelfWithAllModifiers() {
   197     public void testRequiresSelfWithAllModifiers() {
   186         ModuleDescriptor.module("m").requires(EnumSet.allOf(Modifier.class), "m");
   198         ModuleDescriptor.newModule("m").requires(EnumSet.allOf(Modifier.class), "m");
   187     }
   199     }
   188 
   200 
   189     @Test(dataProvider = "invalidjavaidentifiers",
   201     @Test(dataProvider = "invalidjavaidentifiers",
   190           expectedExceptions = IllegalArgumentException.class )
   202           expectedExceptions = IllegalArgumentException.class )
   191     public void testRequiresWithBadModuleName(String mn, String ignore) {
   203     public void testRequiresWithBadModuleName(String mn, String ignore) {
   192         requires(EnumSet.noneOf(Modifier.class), mn);
   204         requires(EnumSet.noneOf(Modifier.class), mn);
   193     }
   205     }
   194 
   206 
   195     @Test(expectedExceptions = NullPointerException.class)
   207     @Test(expectedExceptions = NullPointerException.class)
   196     public void testRequiresWithNullRequires() {
   208     public void testRequiresWithNullRequires() {
   197         ModuleDescriptor.module("m").requires((Requires) null);
   209         ModuleDescriptor.newModule("m").requires((Requires) null);
   198     }
   210     }
   199 
   211 
   200     @Test(expectedExceptions = NullPointerException.class)
   212     @Test(expectedExceptions = NullPointerException.class)
   201     public void testRequiresWithNullModifiers() {
   213     public void testRequiresWithNullModifiers() {
   202         ModuleDescriptor.module("m").requires(null, "foo");
   214         ModuleDescriptor.newModule("m").requires(null, "foo");
   203     }
   215     }
   204 
   216 
   205     @Test(expectedExceptions = NullPointerException.class)
   217     @Test(expectedExceptions = NullPointerException.class)
   206     public void testRequiresWithNullVersion() {
   218     public void testRequiresWithNullVersion() {
   207         ModuleDescriptor.module("m").requires(Set.of(), "foo", null);
   219         ModuleDescriptor.newModule("m").requires(Set.of(), "foo", null);
   208     }
   220     }
   209 
   221 
   210     public void testRequiresCompare() {
   222     public void testRequiresCompare() {
   211         Requires r1 = requires(EnumSet.noneOf(Modifier.class), "foo");
   223         Requires r1 = requires(EnumSet.noneOf(Modifier.class), "foo");
   212         Requires r2 = requires(EnumSet.noneOf(Modifier.class), "bar");
   224         Requires r2 = requires(EnumSet.noneOf(Modifier.class), "bar");
   282 
   294 
   283 
   295 
   284     // exports
   296     // exports
   285 
   297 
   286     private Exports exports(Set<Exports.Modifier> mods, String pn) {
   298     private Exports exports(Set<Exports.Modifier> mods, String pn) {
   287         return ModuleDescriptor.module("foo")
   299         return ModuleDescriptor.newModule("foo")
   288             .exports(mods, pn)
   300             .exports(mods, pn)
   289             .build()
   301             .build()
   290             .exports()
   302             .exports()
   291             .iterator()
   303             .iterator()
   292             .next();
   304             .next();
   295     private Exports exports(String pn) {
   307     private Exports exports(String pn) {
   296         return exports(Set.of(), pn);
   308         return exports(Set.of(), pn);
   297     }
   309     }
   298 
   310 
   299     private Exports exports(Set<Exports.Modifier> mods, String pn, String target) {
   311     private Exports exports(Set<Exports.Modifier> mods, String pn, String target) {
   300         return ModuleDescriptor.module("foo")
   312         return ModuleDescriptor.newModule("foo")
   301             .exports(mods, pn, Set.of(target))
   313             .exports(mods, pn, Set.of(target))
   302             .build()
   314             .build()
   303             .exports()
   315             .exports()
   304             .iterator()
   316             .iterator()
   305             .next();
   317             .next();
   310     }
   322     }
   311 
   323 
   312 
   324 
   313     public void testExportsExports() {
   325     public void testExportsExports() {
   314         Exports e1 = exports("p");
   326         Exports e1 = exports("p");
   315         ModuleDescriptor descriptor = ModuleDescriptor.module("m").exports(e1).build();
   327         ModuleDescriptor descriptor = ModuleDescriptor.newModule("m").exports(e1).build();
   316         Exports e2 = descriptor.exports().iterator().next();
   328         Exports e2 = descriptor.exports().iterator().next();
   317         assertEquals(e1, e2);
   329         assertEquals(e1, e2);
   318     }
   330     }
   319 
   331 
   320     public void testExportsToAll() {
   332     public void testExportsToAll() {
   339     public void testExportsToTargets() {
   351     public void testExportsToTargets() {
   340         Set<String> targets = new HashSet<>();
   352         Set<String> targets = new HashSet<>();
   341         targets.add("bar");
   353         targets.add("bar");
   342         targets.add("gus");
   354         targets.add("gus");
   343         Exports e
   355         Exports e
   344             = ModuleDescriptor.module("foo")
   356             = ModuleDescriptor.newModule("foo")
   345                 .exports("p", targets)
   357                 .exports("p", targets)
   346                 .build()
   358                 .build()
   347                 .exports()
   359                 .exports()
   348                 .iterator()
   360                 .iterator()
   349                 .next();
   361                 .next();
   378     }
   390     }
   379 
   391 
   380     @Test(expectedExceptions = IllegalStateException.class)
   392     @Test(expectedExceptions = IllegalStateException.class)
   381     public void testExportsWithDuplicate1() {
   393     public void testExportsWithDuplicate1() {
   382         Exports e = exports("p");
   394         Exports e = exports("p");
   383         ModuleDescriptor.module("foo").exports(e).exports(e);
   395         ModuleDescriptor.newModule("foo").exports(e).exports(e);
   384     }
   396     }
   385 
   397 
   386     @Test(expectedExceptions = IllegalStateException.class)
   398     @Test(expectedExceptions = IllegalStateException.class)
   387     public void testExportsWithDuplicate2() {
   399     public void testExportsWithDuplicate2() {
   388         ModuleDescriptor.module("foo").exports("p").exports("p");
   400         ModuleDescriptor.newModule("foo").exports("p").exports("p");
   389     }
       
   390 
       
   391     @Test(expectedExceptions = IllegalStateException.class)
       
   392     public void testExportsOnContainedPackage() {
       
   393         ModuleDescriptor.module("foo").contains("p").exports("p");
       
   394     }
       
   395 
       
   396     @Test(expectedExceptions = IllegalStateException.class)
       
   397     public void testExportsToTargetOnContainedPackage() {
       
   398         ModuleDescriptor.module("foo").contains("p").exports("p", Set.of("bar"));
       
   399     }
   401     }
   400 
   402 
   401     @Test(expectedExceptions = IllegalArgumentException.class )
   403     @Test(expectedExceptions = IllegalArgumentException.class )
   402     public void testExportsWithEmptySet() {
   404     public void testExportsWithEmptySet() {
   403         ModuleDescriptor.module("foo").exports("p", Collections.emptySet());
   405         ModuleDescriptor.newModule("foo").exports("p", Collections.emptySet());
   404     }
   406     }
   405 
   407 
   406     @Test(dataProvider = "invalidjavaidentifiers",
   408     @Test(dataProvider = "invalidjavaidentifiers",
   407           expectedExceptions = IllegalArgumentException.class )
   409           expectedExceptions = IllegalArgumentException.class )
   408     public void testExportsWithBadName(String pn, String ignore) {
   410     public void testExportsWithBadName(String pn, String ignore) {
   409         ModuleDescriptor.module("foo").exports(pn);
   411         ModuleDescriptor.newModule("foo").exports(pn);
   410     }
   412     }
   411 
   413 
   412     @Test(expectedExceptions = NullPointerException.class )
   414     @Test(expectedExceptions = NullPointerException.class )
   413     public void testExportsWithNullExports() {
   415     public void testExportsWithNullExports() {
   414         ModuleDescriptor.module("foo").exports((Exports) null);
   416         ModuleDescriptor.newModule("foo").exports((Exports) null);
   415     }
   417     }
   416 
   418 
   417     @Test(expectedExceptions = NullPointerException.class )
   419     @Test(expectedExceptions = NullPointerException.class )
   418     public void testExportsWithNullTargets() {
   420     public void testExportsWithNullTargets() {
   419         ModuleDescriptor.module("foo").exports("p", (Set<String>) null);
   421         ModuleDescriptor.newModule("foo").exports("p", (Set<String>) null);
   420     }
   422     }
   421 
   423 
   422     public void testExportsEqualsAndHashCode() {
   424     public void testExportsCompare() {
   423         Exports e1, e2;
   425         Exports e1 = exports("p");
   424 
   426         Exports e2 = exports("p");
   425         e1 = exports("p");
       
   426         e2 = exports("p");
       
   427         assertEquals(e1, e2);
   427         assertEquals(e1, e2);
   428         assertTrue(e1.hashCode() == e2.hashCode());
   428         assertTrue(e1.hashCode() == e2.hashCode());
   429 
   429         assertTrue(e1.compareTo(e2) == 0);
   430         e1 = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
   430         assertTrue(e2.compareTo(e1) == 0);
   431         e2 = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
   431     }
       
   432 
       
   433     public void testExportsCompareWithSameModifiers() {
       
   434         Exports e1 = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
       
   435         Exports e2 = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
   432         assertEquals(e1, e2);
   436         assertEquals(e1, e2);
   433         assertTrue(e1.hashCode() == e2.hashCode());
   437         assertTrue(e1.hashCode() == e2.hashCode());
   434 
   438         assertTrue(e1.compareTo(e2) == 0);
   435         e1 = exports("p");
   439         assertTrue(e2.compareTo(e1) == 0);
   436         e2 = exports("q");
   440     }
       
   441 
       
   442     public void testExportsCompareWithDifferentModifiers() {
       
   443         Exports e1 = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
       
   444         Exports e2 = exports("p");
   437         assertNotEquals(e1, e2);
   445         assertNotEquals(e1, e2);
   438 
   446         assertTrue(e1.compareTo(e2) == 1);
   439         e1 = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
   447         assertTrue(e2.compareTo(e1) == -1);
   440         e2 = exports(Set.of(), "p");
   448     }
       
   449 
       
   450     public void testExportsCompareWithSameTargets() {
       
   451         Exports e1 = exports("p", "x");
       
   452         Exports e2 = exports("p", "x");
       
   453         assertEquals(e1, e2);
       
   454         assertTrue(e1.hashCode() == e2.hashCode());
       
   455         assertTrue(e1.compareTo(e2) == 0);
       
   456         assertTrue(e2.compareTo(e1) == 0);
       
   457     }
       
   458 
       
   459     public void testExportsCompareWithDifferentTargets() {
       
   460         Exports e1 = exports("p", "y");
       
   461         Exports e2 = exports("p", "x");
   441         assertNotEquals(e1, e2);
   462         assertNotEquals(e1, e2);
       
   463         assertTrue(e1.compareTo(e2) == 1);
       
   464         assertTrue(e2.compareTo(e1) == -1);
   442     }
   465     }
   443 
   466 
   444     public void testExportsToString() {
   467     public void testExportsToString() {
   445         String s = ModuleDescriptor.module("foo")
   468         String s = ModuleDescriptor.newModule("foo")
   446             .exports("p1", Set.of("bar"))
   469             .exports("p1", Set.of("bar"))
   447             .build()
   470             .build()
   448             .exports()
   471             .exports()
   449             .iterator()
   472             .iterator()
   450             .next()
   473             .next()
   455 
   478 
   456 
   479 
   457     // opens
   480     // opens
   458 
   481 
   459     private Opens opens(Set<Opens.Modifier> mods, String pn) {
   482     private Opens opens(Set<Opens.Modifier> mods, String pn) {
   460         return ModuleDescriptor.module("foo")
   483         return ModuleDescriptor.newModule("foo")
   461                 .opens(mods, pn)
   484                 .opens(mods, pn)
   462                 .build()
   485                 .build()
   463                 .opens()
   486                 .opens()
   464                 .iterator()
   487                 .iterator()
   465                 .next();
   488                 .next();
   468     private Opens opens(String pn) {
   491     private Opens opens(String pn) {
   469         return opens(Set.of(), pn);
   492         return opens(Set.of(), pn);
   470     }
   493     }
   471 
   494 
   472     private Opens opens(Set<Opens.Modifier> mods, String pn, String target) {
   495     private Opens opens(Set<Opens.Modifier> mods, String pn, String target) {
   473         return ModuleDescriptor.module("foo")
   496         return ModuleDescriptor.newModule("foo")
   474                 .opens(mods, pn, Set.of(target))
   497                 .opens(mods, pn, Set.of(target))
   475                 .build()
   498                 .build()
   476                 .opens()
   499                 .opens()
   477                 .iterator()
   500                 .iterator()
   478                 .next();
   501                 .next();
   482         return opens(Set.of(), pn, target);
   505         return opens(Set.of(), pn, target);
   483     }
   506     }
   484 
   507 
   485     public void testOpensOpens() {
   508     public void testOpensOpens() {
   486         Opens o1 = opens("p");
   509         Opens o1 = opens("p");
   487         ModuleDescriptor descriptor = ModuleDescriptor.module("m").opens(o1).build();
   510         ModuleDescriptor descriptor = ModuleDescriptor.newModule("m").opens(o1).build();
   488         Opens o2 = descriptor.opens().iterator().next();
   511         Opens o2 = descriptor.opens().iterator().next();
   489         assertEquals(o1, o2);
   512         assertEquals(o1, o2);
   490     }
   513     }
   491 
   514 
   492     public void testOpensToAll() {
   515     public void testOpensToAll() {
   511 
   534 
   512     public void testOpensToTargets() {
   535     public void testOpensToTargets() {
   513         Set<String> targets = new HashSet<>();
   536         Set<String> targets = new HashSet<>();
   514         targets.add("bar");
   537         targets.add("bar");
   515         targets.add("gus");
   538         targets.add("gus");
   516         Opens o = ModuleDescriptor.module("foo")
   539         Opens o = ModuleDescriptor.newModule("foo")
   517                 .opens("p", targets)
   540                 .opens("p", targets)
   518                 .build()
   541                 .build()
   519                 .opens()
   542                 .opens()
   520                 .iterator()
   543                 .iterator()
   521                 .next();
   544                 .next();
   526         assertTrue(o.targets().size() == 2);
   549         assertTrue(o.targets().size() == 2);
   527         assertTrue(o.targets().contains("bar"));
   550         assertTrue(o.targets().contains("bar"));
   528         assertTrue(o.targets().contains("gus"));
   551         assertTrue(o.targets().contains("gus"));
   529     }
   552     }
   530 
   553 
   531     /*
       
   532 
       
   533     public void testOpensToAllWithModifier() {
       
   534         Exports e = exports(Set.of(Exports.Modifier.SYNTHETIC), "p");
       
   535         assertEquals(e, e);
       
   536         assertTrue(e.modifiers().size() == 1);
       
   537         assertTrue(e.modifiers().contains(Exports.Modifier.SYNTHETIC));
       
   538         assertEquals(e.source(), "p");
       
   539         assertFalse(e.isQualified());
       
   540         assertTrue(e.targets().isEmpty());
       
   541     }
       
   542 
       
   543     public void testOpensToTargetWithModifier() {
       
   544         Exports e = exports(Set.of(Exports.Modifier.SYNTHETIC), "p", Set.of("bar"));
       
   545         assertEquals(e, e);
       
   546         assertTrue(e.modifiers().size() == 1);
       
   547         assertTrue(e.modifiers().contains(Exports.Modifier.SYNTHETIC));
       
   548         assertEquals(e.source(), "p");
       
   549         assertTrue(e.isQualified());
       
   550         assertTrue(e.targets().size() == 1);
       
   551         assertTrue(e.targets().contains("bar"));
       
   552     }
       
   553 
       
   554 
       
   555     */
       
   556 
       
   557     @Test(expectedExceptions = IllegalStateException.class)
   554     @Test(expectedExceptions = IllegalStateException.class)
   558     public void testOpensWithDuplicate1() {
   555     public void testOpensWithDuplicate1() {
   559         Opens o = opens("p");
   556         Opens o = opens("p");
   560         ModuleDescriptor.module("foo").opens(o).opens(o);
   557         ModuleDescriptor.newModule("foo").opens(o).opens(o);
   561     }
   558     }
   562 
   559 
   563     @Test(expectedExceptions = IllegalStateException.class)
   560     @Test(expectedExceptions = IllegalStateException.class)
   564     public void testOpensWithDuplicate2() {
   561     public void testOpensWithDuplicate2() {
   565         ModuleDescriptor.module("foo").opens("p").opens("p");
   562         ModuleDescriptor.newModule("foo").opens("p").opens("p");
   566     }
       
   567 
       
   568     @Test(expectedExceptions = IllegalStateException.class)
       
   569     public void testOpensOnContainedPackage() {
       
   570         ModuleDescriptor.module("foo").contains("p").opens("p");
       
   571     }
       
   572 
       
   573     @Test(expectedExceptions = IllegalStateException.class)
       
   574     public void testOpensToTargetOnContainedPackage() {
       
   575         ModuleDescriptor.module("foo").contains("p").opens("p", Set.of("bar"));
       
   576     }
   563     }
   577 
   564 
   578     @Test(expectedExceptions = IllegalArgumentException.class )
   565     @Test(expectedExceptions = IllegalArgumentException.class )
   579     public void testOpensWithEmptySet() {
   566     public void testOpensWithEmptySet() {
   580         ModuleDescriptor.module("foo").opens("p", Collections.emptySet());
   567         ModuleDescriptor.newModule("foo").opens("p", Collections.emptySet());
   581     }
   568     }
   582 
   569 
   583     @Test(dataProvider = "invalidjavaidentifiers",
   570     @Test(dataProvider = "invalidjavaidentifiers",
   584             expectedExceptions = IllegalArgumentException.class )
   571             expectedExceptions = IllegalArgumentException.class )
   585     public void testOpensWithBadName(String pn, String ignore) {
   572     public void testOpensWithBadName(String pn, String ignore) {
   586         ModuleDescriptor.module("foo").opens(pn);
   573         ModuleDescriptor.newModule("foo").opens(pn);
   587     }
   574     }
   588 
   575 
   589     @Test(expectedExceptions = NullPointerException.class )
   576     @Test(expectedExceptions = NullPointerException.class )
   590     public void testOpensWithNullExports() {
   577     public void testOpensWithNullExports() {
   591         ModuleDescriptor.module("foo").opens((Opens) null);
   578         ModuleDescriptor.newModule("foo").opens((Opens) null);
   592     }
   579     }
   593 
   580 
   594     @Test(expectedExceptions = NullPointerException.class )
   581     @Test(expectedExceptions = NullPointerException.class )
   595     public void testOpensWithNullTargets() {
   582     public void testOpensWithNullTargets() {
   596         ModuleDescriptor.module("foo").opens("p", (Set<String>) null);
   583         ModuleDescriptor.newModule("foo").opens("p", (Set<String>) null);
   597     }
   584     }
   598 
   585 
   599     public void testOpensEqualsAndHashCode() {
   586     public void testOpensCompare() {
   600         Opens o1, o2;
   587         Opens o1 = opens("p");
   601 
   588         Opens o2 = opens("p");
   602         o1 = opens("p");
       
   603         o2 = opens("p");
       
   604         assertEquals(o1, o2);
       
   605         assertTrue(o1.hashCode() == o1.hashCode());
       
   606 
       
   607         o1 = opens(Set.of(Opens.Modifier.SYNTHETIC), "p");
       
   608         o2 = opens(Set.of(Opens.Modifier.SYNTHETIC), "p");
       
   609         assertEquals(o1, o2);
   589         assertEquals(o1, o2);
   610         assertTrue(o1.hashCode() == o2.hashCode());
   590         assertTrue(o1.hashCode() == o2.hashCode());
   611 
   591         assertTrue(o1.compareTo(o2) == 0);
   612         o1 = opens("p");
   592         assertTrue(o2.compareTo(o1) == 0);
   613         o2 = opens("q");
   593     }
       
   594 
       
   595     public void testOpensCompareWithSameModifiers() {
       
   596         Opens o1 = opens(Set.of(Opens.Modifier.SYNTHETIC), "p");
       
   597         Opens o2 = opens(Set.of(Opens.Modifier.SYNTHETIC), "p");
       
   598         assertEquals(o1, o2);
       
   599         assertTrue(o1.hashCode() == o2.hashCode());
       
   600         assertTrue(o1.compareTo(o2) == 0);
       
   601         assertTrue(o2.compareTo(o1) == 0);
       
   602     }
       
   603 
       
   604     public void testOpensCompareWithDifferentModifiers() {
       
   605         Opens o1 = opens(Set.of(Opens.Modifier.SYNTHETIC), "p");
       
   606         Opens o2 = opens("p");
   614         assertNotEquals(o1, o2);
   607         assertNotEquals(o1, o2);
   615 
   608         assertTrue(o1.compareTo(o2) == 1);
   616         o1 = opens(Set.of(Opens.Modifier.SYNTHETIC), "p");
   609         assertTrue(o2.compareTo(o1) == -1);
   617         o2 = opens(Set.of(), "p");
   610     }
       
   611 
       
   612     public void testOpensCompareWithSameTargets() {
       
   613         Opens o1 = opens("p", "x");
       
   614         Opens o2 = opens("p", "x");
       
   615         assertEquals(o1, o2);
       
   616         assertTrue(o1.hashCode() == o2.hashCode());
       
   617         assertTrue(o1.compareTo(o2) == 0);
       
   618         assertTrue(o2.compareTo(o1) == 0);
       
   619     }
       
   620 
       
   621     public void testOpensCompareWithDifferentTargets() {
       
   622         Opens o1 = opens("p", "y");
       
   623         Opens o2 = opens("p", "x");
   618         assertNotEquals(o1, o2);
   624         assertNotEquals(o1, o2);
       
   625         assertTrue(o1.compareTo(o2) == 1);
       
   626         assertTrue(o2.compareTo(o1) == -1);
   619     }
   627     }
   620 
   628 
   621     public void testOpensToString() {
   629     public void testOpensToString() {
   622         String s = ModuleDescriptor.module("foo")
   630         String s = ModuleDescriptor.newModule("foo")
   623                 .opens("p1", Set.of("bar"))
   631                 .opens("p1", Set.of("bar"))
   624                 .build()
   632                 .build()
   625                 .opens()
   633                 .opens()
   626                 .iterator()
   634                 .iterator()
   627                 .next()
   635                 .next()
   633 
   641 
   634     // uses
   642     // uses
   635 
   643 
   636     public void testUses() {
   644     public void testUses() {
   637         Set<String> uses
   645         Set<String> uses
   638             = ModuleDescriptor.module("foo")
   646             = ModuleDescriptor.newModule("foo")
   639                 .uses("p.S")
   647                 .uses("p.S")
   640                 .uses("q.S")
   648                 .uses("q.S")
   641                 .build()
   649                 .build()
   642                 .uses();
   650                 .uses();
   643         assertTrue(uses.size() == 2);
   651         assertTrue(uses.size() == 2);
   645         assertTrue(uses.contains("q.S"));
   653         assertTrue(uses.contains("q.S"));
   646     }
   654     }
   647 
   655 
   648     @Test(expectedExceptions = IllegalStateException.class)
   656     @Test(expectedExceptions = IllegalStateException.class)
   649     public void testUsesWithDuplicate() {
   657     public void testUsesWithDuplicate() {
   650         ModuleDescriptor.module("foo").uses("p.S").uses("p.S");
   658         ModuleDescriptor.newModule("foo").uses("p.S").uses("p.S");
       
   659     }
       
   660 
       
   661     @Test(expectedExceptions = IllegalArgumentException.class)
       
   662     public void testUsesWithSimpleIdentifier() {
       
   663         ModuleDescriptor.newModule("foo").uses("S");
   651     }
   664     }
   652 
   665 
   653     @Test(dataProvider = "invalidjavaidentifiers",
   666     @Test(dataProvider = "invalidjavaidentifiers",
   654           expectedExceptions = IllegalArgumentException.class )
   667           expectedExceptions = IllegalArgumentException.class )
   655     public void testUsesWithBadName(String service, String ignore) {
   668     public void testUsesWithBadName(String service, String ignore) {
   656         ModuleDescriptor.module("foo").uses(service);
   669         ModuleDescriptor.newModule("foo").uses(service);
   657     }
   670     }
   658 
   671 
   659 
   672 
   660     // provides
   673     // provides
   661 
   674 
   662     private Provides provides(String st, String pc) {
   675     private Provides provides(String st, String pc) {
   663         return ModuleDescriptor.module("foo")
   676         return ModuleDescriptor.newModule("foo")
   664             .provides(st, pc)
   677             .provides(st, List.of(pc))
   665             .build()
   678             .build()
   666             .provides()
   679             .provides()
   667             .iterator()
   680             .iterator()
   668             .next();
   681             .next();
   669     }
   682     }
   670 
   683 
       
   684     private Provides provides(String st, List<String> pns) {
       
   685         return ModuleDescriptor.newModule("foo")
       
   686                 .provides(st, pns)
       
   687                 .build()
       
   688                 .provides()
       
   689                 .iterator()
       
   690                 .next();
       
   691     }
       
   692 
   671     public void testProvidesWithProvides() {
   693     public void testProvidesWithProvides() {
   672         Provides p1 = provides("p.S", "q.S1");
   694         Provides p1 = provides("p.S", "q.S1");
   673         ModuleDescriptor descriptor = ModuleDescriptor.module("m")
   695         ModuleDescriptor descriptor = ModuleDescriptor.newModule("m")
   674                 .provides(p1)
   696                 .provides(p1)
   675                 .build();
   697                 .build();
   676         Provides p2 = descriptor.provides().iterator().next();
   698         Provides p2 = descriptor.provides().iterator().next();
   677         assertEquals(p1, p2);
   699         assertEquals(p1, p2);
   678     }
   700     }
   679 
   701 
   680 
   702 
   681     public void testProvides() {
   703     public void testProvides() {
   682         Set<Provides> set = ModuleDescriptor.module("foo")
   704         Set<Provides> set = ModuleDescriptor.newModule("foo")
   683                 .provides("p.S", List.of("q.P1", "q.P2"))
   705                 .provides("p.S", List.of("q.P1", "q.P2"))
   684                 .build()
   706                 .build()
   685                 .provides();
   707                 .provides();
   686         assertTrue(set.size() == 1);
   708         assertTrue(set.size() == 1);
   687 
   709 
   694     }
   716     }
   695 
   717 
   696     @Test(expectedExceptions = IllegalStateException.class )
   718     @Test(expectedExceptions = IllegalStateException.class )
   697     public void testProvidesWithDuplicateProvides() {
   719     public void testProvidesWithDuplicateProvides() {
   698         Provides p = provides("p.S", "q.S2");
   720         Provides p = provides("p.S", "q.S2");
   699         ModuleDescriptor.module("m").provides("p.S", "q.S1").provides(p);
   721         ModuleDescriptor.newModule("m").provides("p.S", List.of("q.S1")).provides(p);
   700     }
   722     }
   701 
   723 
   702     @Test(expectedExceptions = IllegalArgumentException.class )
   724     @Test(expectedExceptions = IllegalArgumentException.class )
   703     public void testProvidesWithEmptySet() {
   725     public void testProvidesWithEmptySet() {
   704         ModuleDescriptor.module("foo").provides("p.Service", Collections.emptyList());
   726         ModuleDescriptor.newModule("foo").provides("p.Service", Collections.emptyList());
       
   727     }
       
   728 
       
   729     @Test(expectedExceptions = IllegalArgumentException.class )
       
   730     public void testProvidesWithSimpleIdentifier1() {
       
   731         ModuleDescriptor.newModule("foo").provides("S", List.of("q.P"));
       
   732     }
       
   733 
       
   734     @Test(expectedExceptions = IllegalArgumentException.class )
       
   735     public void testProvidesWithSimpleIdentifier2() {
       
   736         ModuleDescriptor.newModule("foo").provides("p.S", List.of("P"));
   705     }
   737     }
   706 
   738 
   707     @Test(dataProvider = "invalidjavaidentifiers",
   739     @Test(dataProvider = "invalidjavaidentifiers",
   708           expectedExceptions = IllegalArgumentException.class )
   740           expectedExceptions = IllegalArgumentException.class )
   709     public void testProvidesWithBadService(String service, String ignore) {
   741     public void testProvidesWithBadService(String service, String ignore) {
   710         ModuleDescriptor.module("foo").provides(service, "p.Provider");
   742         ModuleDescriptor.newModule("foo").provides(service, List.of("p.Provider"));
   711     }
   743     }
   712 
   744 
   713     @Test(dataProvider = "invalidjavaidentifiers",
   745     @Test(dataProvider = "invalidjavaidentifiers",
   714           expectedExceptions = IllegalArgumentException.class )
   746           expectedExceptions = IllegalArgumentException.class )
   715     public void testProvidesWithBadProvider(String provider, String ignore) {
   747     public void testProvidesWithBadProvider(String provider, String ignore) {
   716         ModuleDescriptor.module("foo").provides("p.Service", provider);
   748         List<String> names = new ArrayList<>(); // allows nulls
       
   749         names.add(provider);
       
   750         ModuleDescriptor.newModule("foo").provides("p.Service", names);
   717     }
   751     }
   718 
   752 
   719     @Test(expectedExceptions = NullPointerException.class )
   753     @Test(expectedExceptions = NullPointerException.class )
   720     public void testProvidesWithNullProvides() {
   754     public void testProvidesWithNullProvides() {
   721         ModuleDescriptor.module("foo").provides((Provides) null);
   755         ModuleDescriptor.newModule("foo").provides((Provides) null);
   722     }
   756     }
   723 
   757 
   724     @Test(expectedExceptions = NullPointerException.class )
   758     @Test(expectedExceptions = NullPointerException.class )
   725     public void testProvidesWithNullProviders() {
   759     public void testProvidesWithNullProviders() {
   726         ModuleDescriptor.module("foo").provides("p.S", (List<String>) null);
   760         ModuleDescriptor.newModule("foo").provides("p.S", (List<String>) null);
   727     }
   761     }
   728 
   762 
   729     public void testProvidesEqualsAndHashCode() {
   763     public void testProvidesCompare() {
   730         Provides p1, p2;
   764         Provides p1 = provides("p.S", "q.S1");
   731 
   765         Provides p2 = provides("p.S", "q.S1");
   732         p1 = provides("p.S", "q.S1");
       
   733         p2 = provides("p.S", "q.S1");
       
   734         assertEquals(p1, p2);
   766         assertEquals(p1, p2);
   735         assertTrue(p1.hashCode() == p2.hashCode());
   767         assertTrue(p1.hashCode() == p2.hashCode());
   736 
   768         assertTrue(p1.compareTo(p2) == 0);
   737         p1 = provides("p.S", "q.S1");
   769         assertTrue(p2.compareTo(p1) == 0);
   738         p2 = provides("p.S", "q.S2");
   770     }
       
   771 
       
   772     public void testProvidesCompareWithDifferentService() {
       
   773         Provides p1 = provides("p.S2", "q.S1");
       
   774         Provides p2 = provides("p.S1", "q.S1");
   739         assertNotEquals(p1, p2);
   775         assertNotEquals(p1, p2);
   740 
   776         assertTrue(p1.compareTo(p2) == 1);
   741         p1 = provides("p.S", "q.S1");
   777         assertTrue(p2.compareTo(p1) == -1);
   742         p2 = provides("p.S2", "q.S1");
   778     }
       
   779 
       
   780     public void testProvidesCompareWithDifferentProviders1() {
       
   781         Provides p1 = provides("p.S", "q.S2");
       
   782         Provides p2 = provides("p.S", "q.S1");
   743         assertNotEquals(p1, p2);
   783         assertNotEquals(p1, p2);
   744     }
   784         assertTrue(p1.compareTo(p2) == 1);
   745 
   785         assertTrue(p2.compareTo(p1) == -1);
   746     // contains
   786     }
   747 
   787 
   748     public void testContains() {
   788     public void testProvidesCompareWithDifferentProviders2() {
   749         Set<String> packages = ModuleDescriptor.module("foo")
   789         Provides p1 = provides("p.S", List.of("q.S1", "q.S2"));
   750                 .contains("p")
   790         Provides p2 = provides("p.S", "q.S1");
   751                 .contains("q")
   791         assertNotEquals(p1, p2);
       
   792         assertTrue(p1.compareTo(p2) == 1);
       
   793         assertTrue(p2.compareTo(p1) == -1);
       
   794     }
       
   795 
       
   796     // packages
       
   797 
       
   798     public void testPackages1() {
       
   799         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   800                 .packages(Set.of("p", "q"))
   752                 .build()
   801                 .build()
   753                 .packages();
   802                 .packages();
   754         assertTrue(packages.size() == 2);
   803         assertTrue(packages.size() == 2);
   755         assertTrue(packages.contains("p"));
   804         assertTrue(packages.contains("p"));
   756         assertTrue(packages.contains("q"));
   805         assertTrue(packages.contains("q"));
   757     }
   806     }
   758 
   807 
   759     public void testContainsWithEmptySet() {
   808     public void testPackages2() {
   760         Set<String> packages = ModuleDescriptor.module("foo")
   809         Set<String> packages = ModuleDescriptor.newModule("foo")
   761                 .contains(Collections.emptySet())
   810                 .packages(Set.of("p"))
   762                 .build()
   811                 .packages(Set.of("q"))
   763                 .packages();
       
   764         assertTrue(packages.size() == 0);
       
   765     }
       
   766 
       
   767     @Test(expectedExceptions = IllegalStateException.class)
       
   768     public void testContainsWithDuplicate() {
       
   769         ModuleDescriptor.module("foo").contains("p").contains("p");
       
   770     }
       
   771 
       
   772     @Test(expectedExceptions = IllegalStateException.class)
       
   773     public void testContainsWithExportedPackage() {
       
   774         ModuleDescriptor.module("foo").exports("p").contains("p");
       
   775     }
       
   776 
       
   777     @Test(dataProvider = "invalidjavaidentifiers",
       
   778           expectedExceptions = IllegalArgumentException.class )
       
   779     public void testContainsWithBadName(String pn, String ignore) {
       
   780         ModuleDescriptor.module("foo").contains(pn);
       
   781     }
       
   782 
       
   783 
       
   784     // packages
       
   785 
       
   786     public void testPackages() {
       
   787         Set<String> packages = ModuleDescriptor.module("foo")
       
   788                 .exports("p")
       
   789                 .contains("q")
       
   790                 .build()
   812                 .build()
   791                 .packages();
   813                 .packages();
   792         assertTrue(packages.size() == 2);
   814         assertTrue(packages.size() == 2);
   793         assertTrue(packages.contains("p"));
   815         assertTrue(packages.contains("p"));
   794         assertTrue(packages.contains("q"));
   816         assertTrue(packages.contains("q"));
   795     }
   817     }
   796 
   818 
   797 
   819 
       
   820     public void testPackagesWithEmptySet() {
       
   821         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   822                 .packages(Collections.emptySet())
       
   823                 .build()
       
   824                 .packages();
       
   825         assertTrue(packages.size() == 0);
       
   826     }
       
   827 
       
   828     public void testPackagesDuplicate() {
       
   829         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   830                 .packages(Set.of("p"))
       
   831                 .packages(Set.of("p"))
       
   832                 .build()
       
   833                 .packages();
       
   834         assertTrue(packages.size() == 1);
       
   835         assertTrue(packages.contains("p"));
       
   836     }
       
   837 
       
   838     public void testPackagesAndExportsPackage1() {
       
   839         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   840                 .packages(Set.of("p"))
       
   841                 .exports("p")
       
   842                 .build()
       
   843                 .packages();
       
   844         assertTrue(packages.size() == 1);
       
   845         assertTrue(packages.contains("p"));
       
   846     }
       
   847 
       
   848     public void testPackagesAndExportsPackage2() {
       
   849         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   850                 .exports("p")
       
   851                 .packages(Set.of("p"))
       
   852                 .build()
       
   853                 .packages();
       
   854         assertTrue(packages.size() == 1);
       
   855         assertTrue(packages.contains("p"));
       
   856     }
       
   857 
       
   858     public void testPackagesAndOpensPackage1() {
       
   859         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   860                 .packages(Set.of("p"))
       
   861                 .opens("p")
       
   862                 .build()
       
   863                 .packages();
       
   864         assertTrue(packages.size() == 1);
       
   865         assertTrue(packages.contains("p"));
       
   866     }
       
   867 
       
   868     public void testPackagesAndOpensPackage2() {
       
   869         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   870                 .opens("p")
       
   871                 .packages(Set.of("p"))
       
   872                 .build()
       
   873                 .packages();
       
   874         assertTrue(packages.size() == 1);
       
   875         assertTrue(packages.contains("p"));
       
   876     }
       
   877 
       
   878     public void testPackagesAndProvides1() {
       
   879         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   880                 .packages(Set.of("p"))
       
   881                 .provides("q.S", List.of("p.T"))
       
   882                 .build()
       
   883                 .packages();
       
   884         assertTrue(packages.size() == 1);
       
   885         assertTrue(packages.contains("p"));
       
   886     }
       
   887 
       
   888     public void testPackagesAndProvides2() {
       
   889         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   890                 .provides("q.S", List.of("p.T"))
       
   891                 .packages(Set.of("p"))
       
   892                 .build()
       
   893                 .packages();
       
   894         assertTrue(packages.size() == 1);
       
   895         assertTrue(packages.contains("p"));
       
   896     }
       
   897 
       
   898     public void testPackagesAndMainClass1() {
       
   899         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   900                 .packages(Set.of("p"))
       
   901                 .mainClass("p.Main")
       
   902                 .build()
       
   903                 .packages();
       
   904         assertTrue(packages.size() == 1);
       
   905         assertTrue(packages.contains("p"));
       
   906     }
       
   907 
       
   908     public void testPackagesAndMainClass2() {
       
   909         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   910                 .mainClass("p.Main")
       
   911                 .packages(Set.of("p"))
       
   912                 .build()
       
   913                 .packages();
       
   914         assertTrue(packages.size() == 1);
       
   915         assertTrue(packages.contains("p"));
       
   916     }
       
   917 
       
   918     public void testPackagesAndAll() {
       
   919         Set<String> packages = ModuleDescriptor.newModule("foo")
       
   920                 .exports("p1")
       
   921                 .opens("p2")
       
   922                 .packages(Set.of("p3"))
       
   923                 .provides("q.S", List.of("p4.T"))
       
   924                 .mainClass("p5.Main")
       
   925                 .build()
       
   926                 .packages();
       
   927         assertTrue(Objects.equals(packages, Set.of("p1", "p2", "p3", "p4", "p5")));
       
   928     }
       
   929 
       
   930     @Test(dataProvider = "invalidjavaidentifiers",
       
   931           expectedExceptions = IllegalArgumentException.class )
       
   932     public void testPackagesWithBadName(String pn, String ignore) {
       
   933         Set<String> pkgs = new HashSet<>();  // allows nulls
       
   934         pkgs.add(pn);
       
   935         ModuleDescriptor.newModule("foo").packages(pkgs);
       
   936     }
       
   937 
   798     // name
   938     // name
   799 
   939 
   800     public void testModuleName() {
   940     public void testModuleName() {
   801         String mn = ModuleDescriptor.module("foo").build().name();
   941         String mn = ModuleDescriptor.newModule("foo").build().name();
   802         assertEquals(mn, "foo");
   942         assertEquals(mn, "foo");
   803     }
   943     }
   804 
   944 
   805     @Test(dataProvider = "invalidjavaidentifiers",
   945     @Test(dataProvider = "invalidjavaidentifiers",
   806           expectedExceptions = IllegalArgumentException.class )
   946           expectedExceptions = IllegalArgumentException.class )
   807     public void testBadModuleName(String mn, String ignore) {
   947     public void testBadModuleName(String mn, String ignore) {
   808         ModuleDescriptor.module(mn);
   948         ModuleDescriptor.newModule(mn);
   809     }
   949     }
   810 
   950 
   811 
   951 
   812     // version
   952     // version
   813 
   953 
   814     public void testVersion1() {
   954     public void testVersion1() {
   815         Version v1 = Version.parse("1.0");
   955         Version v1 = Version.parse("1.0");
   816         Version v2 = ModuleDescriptor.module("foo")
   956         Version v2 = ModuleDescriptor.newModule("foo")
   817                 .version(v1)
   957                 .version(v1)
   818                 .build()
   958                 .build()
   819                 .version()
   959                 .version()
   820                 .get();
   960                 .get();
   821         assertEquals(v1, v2);
   961         assertEquals(v1, v2);
   822     }
   962     }
   823 
   963 
   824     public void testVersion2() {
   964     public void testVersion2() {
   825         String vs = "1.0";
   965         String vs = "1.0";
   826         Version v1 = ModuleDescriptor.module("foo")
   966         Version v1 = ModuleDescriptor.newModule("foo")
   827                 .version(vs)
   967                 .version(vs)
   828                 .build()
   968                 .build()
   829                 .version()
   969                 .version()
   830                 .get();
   970                 .get();
   831         Version v2 = Version.parse(vs);
   971         Version v2 = Version.parse(vs);
   832         assertEquals(v1, v2);
   972         assertEquals(v1, v2);
   833     }
   973     }
   834 
   974 
   835     @Test(expectedExceptions = NullPointerException.class )
   975     @Test(expectedExceptions = NullPointerException.class )
   836     public void testNullVersion1() {
   976     public void testNullVersion1() {
   837         ModuleDescriptor.module("foo").version((Version) null);
   977         ModuleDescriptor.newModule("foo").version((Version) null);
   838     }
   978     }
   839 
   979 
   840     @Test(expectedExceptions = IllegalArgumentException.class )
   980     @Test(expectedExceptions = IllegalArgumentException.class )
   841     public void testNullVersion2() {
   981     public void testNullVersion2() {
   842         ModuleDescriptor.module("foo").version((String) null);
   982         ModuleDescriptor.newModule("foo").version((String) null);
   843     }
   983     }
   844 
   984 
   845     @Test(expectedExceptions = IllegalArgumentException.class )
   985     @Test(expectedExceptions = IllegalArgumentException.class )
   846     public void testEmptyVersion() {
   986     public void testEmptyVersion() {
   847         ModuleDescriptor.module("foo").version("");
   987         ModuleDescriptor.newModule("foo").version("");
   848     }
   988     }
   849 
   989 
   850 
   990 
   851     // toNameAndVersion
   991     // toNameAndVersion
   852 
   992 
   853     public void testToNameAndVersion() {
   993     public void testToNameAndVersion() {
   854         ModuleDescriptor md1 = ModuleDescriptor.module("foo").build();
   994         ModuleDescriptor md1 = ModuleDescriptor.newModule("foo").build();
   855         assertEquals(md1.toNameAndVersion(), "foo");
   995         assertEquals(md1.toNameAndVersion(), "foo");
   856 
   996 
   857         ModuleDescriptor md2 = ModuleDescriptor.module("foo").version("1.0").build();
   997         ModuleDescriptor md2 = ModuleDescriptor.newModule("foo").version("1.0").build();
   858         assertEquals(md2.toNameAndVersion(), "foo@1.0");
   998         assertEquals(md2.toNameAndVersion(), "foo@1.0");
   859     }
   999     }
   860 
  1000 
   861 
  1001 
   862     // open modules
  1002     // open modules
   863 
  1003 
   864     public void testOpenModules() {
  1004     public void testOpenModule() {
   865         ModuleDescriptor descriptor = ModuleDescriptor.openModule("m")
  1005         ModuleDescriptor descriptor = ModuleDescriptor.newOpenModule("foo")
   866                 .requires("java.base")
  1006                 .requires("bar")
   867                 .contains("p")
  1007                 .exports("p")
       
  1008                 .provides("p.Service", List.of("q.ServiceImpl"))
   868                 .build();
  1009                 .build();
       
  1010 
       
  1011         // modifiers
       
  1012         assertTrue(descriptor.modifiers().contains(ModuleDescriptor.Modifier.OPEN));
   869         assertTrue(descriptor.isOpen());
  1013         assertTrue(descriptor.isOpen());
   870         assertTrue(descriptor.packages().size() == 1);
  1014 
   871         assertTrue(descriptor.packages().contains("p"));
  1015         // requires
       
  1016         assertTrue(descriptor.requires().size() == 2);
       
  1017         Set<String> names = descriptor.requires()
       
  1018                 .stream()
       
  1019                 .map(Requires::name)
       
  1020                 .collect(Collectors.toSet());
       
  1021         assertEquals(names, Set.of("bar", "java.base"));
       
  1022 
       
  1023         // packages
       
  1024         assertEquals(descriptor.packages(), Set.of("p", "q"));
       
  1025 
       
  1026         // exports
       
  1027         assertTrue(descriptor.exports().size() == 1);
       
  1028         names = descriptor.exports()
       
  1029                 .stream()
       
  1030                 .map(Exports::source)
       
  1031                 .collect(Collectors.toSet());
       
  1032         assertEquals(names, Set.of("p"));
       
  1033 
       
  1034         // opens
       
  1035         assertTrue(descriptor.opens().isEmpty());
       
  1036     }
       
  1037 
       
  1038     @Test(expectedExceptions = IllegalStateException.class)
       
  1039     public void testOpensOnOpenModule1() {
       
  1040         ModuleDescriptor.newOpenModule("foo").opens("p");
       
  1041     }
       
  1042 
       
  1043     @Test(expectedExceptions = IllegalStateException.class)
       
  1044     public void testOpensOnOpenModule2() {
       
  1045         ModuleDescriptor.newOpenModule("foo").opens("p", Set.of("bar"));
       
  1046     }
       
  1047 
       
  1048     public void testIsOpen() {
       
  1049         assertFalse(ModuleDescriptor.newModule("m").build().isOpen());
       
  1050         assertFalse(ModuleDescriptor.newAutomaticModule("m").build().isOpen());
       
  1051         assertTrue(ModuleDescriptor.newOpenModule("m").build().isOpen());
       
  1052     }
       
  1053 
       
  1054 
       
  1055     // automatic modules
       
  1056 
       
  1057     public void testAutomaticModule() {
       
  1058         ModuleDescriptor descriptor = ModuleDescriptor.newAutomaticModule("foo")
       
  1059                 .packages(Set.of("p"))
       
  1060                 .provides("p.Service", List.of("q.ServiceImpl"))
       
  1061                 .build();
       
  1062 
       
  1063         // modifiers
       
  1064         assertTrue(descriptor.modifiers().contains(ModuleDescriptor.Modifier.AUTOMATIC));
       
  1065         assertTrue(descriptor.isAutomatic());
       
  1066 
       
  1067         // requires
       
  1068         assertTrue(descriptor.requires().size() == 1);
       
  1069         Set<String> names = descriptor.requires()
       
  1070                 .stream()
       
  1071                 .map(Requires::name)
       
  1072                 .collect(Collectors.toSet());
       
  1073         assertEquals(names, Set.of("java.base"));
       
  1074 
       
  1075         // packages
       
  1076         assertEquals(descriptor.packages(), Set.of("p", "q"));
   872         assertTrue(descriptor.exports().isEmpty());
  1077         assertTrue(descriptor.exports().isEmpty());
       
  1078         assertTrue(descriptor.opens().isEmpty());
   873     }
  1079     }
   874 
  1080 
   875     @Test(expectedExceptions = IllegalStateException.class)
  1081     @Test(expectedExceptions = IllegalStateException.class)
   876     public void testOpensOnWeakModule1() {
  1082     public void testRequiresOnAutomaticModule() {
   877         ModuleDescriptor.openModule("foo").opens("p");
  1083         ModuleDescriptor.newAutomaticModule("foo").requires("java.base");
   878     }
  1084     }
   879 
  1085 
   880     @Test(expectedExceptions = IllegalStateException.class)
  1086     @Test(expectedExceptions = IllegalStateException.class)
   881     public void testOpensOnWeakModule2() {
  1087     public void testExportsOnAutomaticModule1() {
   882         ModuleDescriptor.openModule("foo").opens("p", Set.of("bar"));
  1088         ModuleDescriptor.newAutomaticModule("foo").exports("p");
   883     }
  1089     }
   884 
  1090 
   885     public void testIsOpen() {
  1091     @Test(expectedExceptions = IllegalStateException.class)
   886         assertFalse(ModuleDescriptor.module("m").build().isOpen());
  1092     public void testExportsOnAutomaticModule2() {
   887         assertFalse(ModuleDescriptor.automaticModule("m").build().isOpen());
  1093         ModuleDescriptor.newAutomaticModule("foo").exports("p", Set.of("bar"));
   888         assertTrue(ModuleDescriptor.openModule("m").build().isOpen());
  1094     }
   889     }
  1095 
   890 
  1096     @Test(expectedExceptions = IllegalStateException.class)
   891 
  1097     public void testOpensOnAutomaticModule1() {
   892     // automatic modules
  1098         ModuleDescriptor.newAutomaticModule("foo").opens("p");
       
  1099     }
       
  1100 
       
  1101     @Test(expectedExceptions = IllegalStateException.class)
       
  1102     public void testOpensOnAutomaticModule2() {
       
  1103         ModuleDescriptor.newAutomaticModule("foo").opens("p", Set.of("bar"));
       
  1104     }
       
  1105 
       
  1106     @Test(expectedExceptions = IllegalStateException.class)
       
  1107     public void testUsesOnAutomaticModule() {
       
  1108         ModuleDescriptor.newAutomaticModule("foo").uses("p.Service");
       
  1109     }
   893 
  1110 
   894     public void testIsAutomatic() {
  1111     public void testIsAutomatic() {
   895         ModuleDescriptor descriptor1 = ModuleDescriptor.module("foo").build();
  1112         ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("foo").build();
   896         assertFalse(descriptor1.isAutomatic());
  1113         assertFalse(descriptor1.isAutomatic());
   897 
  1114 
   898         ModuleDescriptor descriptor2 = ModuleDescriptor.openModule("foo").build();
  1115         ModuleDescriptor descriptor2 = ModuleDescriptor.newOpenModule("foo").build();
   899         assertFalse(descriptor2.isAutomatic());
  1116         assertFalse(descriptor2.isAutomatic());
   900 
  1117 
   901         ModuleDescriptor descriptor3 = ModuleDescriptor.automaticModule("foo").build();
  1118         ModuleDescriptor descriptor3 = ModuleDescriptor.newAutomaticModule("foo").build();
   902         assertTrue(descriptor3.isAutomatic());
  1119         assertTrue(descriptor3.isAutomatic());
   903     }
  1120     }
   904 
  1121 
   905     // isSynthetic
  1122 
   906     public void testIsSynthetic() {
  1123     // newModule with modifiers
   907         assertFalse(Object.class.getModule().getDescriptor().isSynthetic());
  1124 
   908 
  1125     public void testNewModuleToBuildAutomaticModule() {
   909         ModuleDescriptor descriptor1 = ModuleDescriptor.module("foo").build();
  1126         Set<ModuleDescriptor.Modifier> ms = Set.of(ModuleDescriptor.Modifier.AUTOMATIC);
   910         assertFalse(descriptor1.isSynthetic());
  1127         ModuleDescriptor descriptor = ModuleDescriptor.newModule("foo", ms).build();
   911 
  1128         assertTrue(descriptor.modifiers().equals(ms));
   912         ModuleDescriptor descriptor2 = ModuleDescriptor.openModule("foo").build();
  1129         assertTrue(descriptor.isAutomatic());
   913         assertFalse(descriptor2.isSynthetic());
  1130     }
   914 
  1131 
   915         ModuleDescriptor descriptor3 = ModuleDescriptor.automaticModule("foo").build();
  1132     public void testNewModuleToBuildOpenModule() {
   916         assertFalse(descriptor3.isSynthetic());
  1133         Set<ModuleDescriptor.Modifier> ms = Set.of(ModuleDescriptor.Modifier.OPEN);
       
  1134         ModuleDescriptor descriptor = ModuleDescriptor.newModule("foo", ms).build();
       
  1135         assertTrue(descriptor.modifiers().equals(ms));
       
  1136         assertTrue(descriptor.isOpen());
       
  1137 
       
  1138         ms = Set.of(ModuleDescriptor.Modifier.OPEN, ModuleDescriptor.Modifier.SYNTHETIC);
       
  1139         descriptor = ModuleDescriptor.newModule("foo", ms).build();
       
  1140         assertTrue(descriptor.modifiers().equals(ms));
       
  1141         assertTrue(descriptor.isOpen());
       
  1142     }
       
  1143 
       
  1144     @Test(expectedExceptions = IllegalArgumentException.class)
       
  1145     public void testNewModuleToBuildAutomaticAndOpenModule() {
       
  1146         Set<ModuleDescriptor.Modifier> ms = Set.of(ModuleDescriptor.Modifier.AUTOMATIC,
       
  1147                                                    ModuleDescriptor.Modifier.OPEN);
       
  1148         ModuleDescriptor.newModule("foo", ms);
   917     }
  1149     }
   918 
  1150 
   919 
  1151 
   920     // mainClass
  1152     // mainClass
   921 
  1153 
   922     public void testMainClass() {
  1154     public void testMainClass() {
   923         String mainClass
  1155         String mainClass
   924             = ModuleDescriptor.module("foo").mainClass("p.Main").build().mainClass().get();
  1156             = ModuleDescriptor.newModule("foo").mainClass("p.Main").build().mainClass().get();
   925         assertEquals(mainClass, "p.Main");
  1157         assertEquals(mainClass, "p.Main");
       
  1158     }
       
  1159 
       
  1160     @Test(expectedExceptions = IllegalArgumentException.class)
       
  1161     public void testMainClassWithSimpleIdentifier() {
       
  1162         ModuleDescriptor.newModule("foo").mainClass("Main");
   926     }
  1163     }
   927 
  1164 
   928     @Test(dataProvider = "invalidjavaidentifiers",
  1165     @Test(dataProvider = "invalidjavaidentifiers",
   929           expectedExceptions = IllegalArgumentException.class )
  1166           expectedExceptions = IllegalArgumentException.class )
   930     public void testMainClassWithBadName(String mainClass, String ignore) {
  1167     public void testMainClassWithBadName(String mainClass, String ignore) {
   931         Builder builder = ModuleDescriptor.module("foo");
  1168         Builder builder = ModuleDescriptor.newModule("foo");
   932         builder.mainClass(mainClass);
  1169         builder.mainClass(mainClass);
   933     }
  1170     }
   934 
  1171 
   935 
  1172 
   936     // osName
  1173     // osName
   937 
  1174 
   938     public void testOsName() {
  1175     public void testOsName() {
   939         String osName = ModuleDescriptor.module("foo").osName("Linux").build().osName().get();
  1176         String osName = ModuleDescriptor.newModule("foo").osName("Linux").build().osName().get();
   940         assertEquals(osName, "Linux");
  1177         assertEquals(osName, "Linux");
   941     }
  1178     }
   942 
  1179 
   943     @Test(expectedExceptions = IllegalArgumentException.class)
  1180     @Test(expectedExceptions = IllegalArgumentException.class)
   944     public void testNullOsName() {
  1181     public void testNullOsName() {
   945         ModuleDescriptor.module("foo").osName(null);
  1182         ModuleDescriptor.newModule("foo").osName(null);
   946     }
  1183     }
   947 
  1184 
   948     @Test(expectedExceptions = IllegalArgumentException.class)
  1185     @Test(expectedExceptions = IllegalArgumentException.class)
   949     public void testEmptyOsName() {
  1186     public void testEmptyOsName() {
   950         ModuleDescriptor.module("foo").osName("");
  1187         ModuleDescriptor.newModule("foo").osName("");
   951     }
  1188     }
   952 
  1189 
   953 
  1190 
   954     // osArch
  1191     // osArch
   955 
  1192 
   956     public void testOsArch() {
  1193     public void testOsArch() {
   957         String osArch = ModuleDescriptor.module("foo").osName("arm").build().osName().get();
  1194         String osArch = ModuleDescriptor.newModule("foo").osName("arm").build().osName().get();
   958         assertEquals(osArch, "arm");
  1195         assertEquals(osArch, "arm");
   959     }
  1196     }
   960 
  1197 
   961     @Test(expectedExceptions = IllegalArgumentException.class)
  1198     @Test(expectedExceptions = IllegalArgumentException.class)
   962     public void testNullOsArch() {
  1199     public void testNullOsArch() {
   963         ModuleDescriptor.module("foo").osArch(null);
  1200         ModuleDescriptor.newModule("foo").osArch(null);
   964     }
  1201     }
   965 
  1202 
   966     @Test(expectedExceptions = IllegalArgumentException.class)
  1203     @Test(expectedExceptions = IllegalArgumentException.class)
   967     public void testEmptyOsArch() {
  1204     public void testEmptyOsArch() {
   968         ModuleDescriptor.module("foo").osArch("");
  1205         ModuleDescriptor.newModule("foo").osArch("");
   969     }
  1206     }
   970 
  1207 
   971 
  1208 
   972     // osVersion
  1209     // osVersion
   973 
  1210 
   974     public void testOsVersion() {
  1211     public void testOsVersion() {
   975         String osVersion = ModuleDescriptor.module("foo").osName("11.2").build().osName().get();
  1212         String osVersion = ModuleDescriptor.newModule("foo").osName("11.2").build().osName().get();
   976         assertEquals(osVersion, "11.2");
  1213         assertEquals(osVersion, "11.2");
   977     }
  1214     }
   978 
  1215 
   979     @Test(expectedExceptions = IllegalArgumentException.class)
  1216     @Test(expectedExceptions = IllegalArgumentException.class)
   980     public void testNullOsVersion() {
  1217     public void testNullOsVersion() {
   981         ModuleDescriptor.module("foo").osVersion(null);
  1218         ModuleDescriptor.newModule("foo").osVersion(null);
   982     }
  1219     }
   983 
  1220 
   984     @Test(expectedExceptions = IllegalArgumentException.class)
  1221     @Test(expectedExceptions = IllegalArgumentException.class)
   985     public void testEmptyOsVersion() {
  1222     public void testEmptyOsVersion() {
   986         ModuleDescriptor.module("foo").osVersion("");
  1223         ModuleDescriptor.newModule("foo").osVersion("");
   987     }
  1224     }
   988 
  1225 
   989     // reads
  1226     // reads
   990 
  1227 
   991     private static InputStream EMPTY_INPUT_STREAM = new InputStream() {
  1228     private static InputStream EMPTY_INPUT_STREAM = new InputStream() {
  1021     }
  1258     }
  1022     /**
  1259     /**
  1023      * Test ModuleDescriptor with a packager finder
  1260      * Test ModuleDescriptor with a packager finder
  1024      */
  1261      */
  1025     public void testReadsWithPackageFinder() throws Exception {
  1262     public void testReadsWithPackageFinder() throws Exception {
  1026         ModuleDescriptor descriptor = ModuleDescriptor.module("foo")
  1263         ModuleDescriptor descriptor = ModuleDescriptor.newModule("foo")
  1027                 .requires("java.base")
  1264                 .requires("java.base")
  1028                 .build();
  1265                 .build();
  1029 
  1266 
  1030         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  1267         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  1031         ModuleInfoWriter.write(descriptor, baos);
  1268         ModuleInfoWriter.write(descriptor, baos);
  1042      * Test ModuleDescriptor with a packager finder that doesn't return the
  1279      * Test ModuleDescriptor with a packager finder that doesn't return the
  1043      * complete set of packages.
  1280      * complete set of packages.
  1044      */
  1281      */
  1045     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1282     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1046     public void testReadsWithBadPackageFinder() throws Exception {
  1283     public void testReadsWithBadPackageFinder() throws Exception {
  1047         ModuleDescriptor descriptor = ModuleDescriptor.module("foo")
  1284         ModuleDescriptor descriptor = ModuleDescriptor.newModule("foo")
  1048                 .requires("java.base")
  1285                 .requires("java.base")
  1049                 .exports("p")
  1286                 .exports("p")
  1050                 .build();
  1287                 .build();
  1051 
  1288 
  1052         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  1289         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  1075 
  1312 
  1076     // The requires table for java.base must be 0 length
  1313     // The requires table for java.base must be 0 length
  1077     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1314     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1078     public void testReadOfJavaBaseWithRequires() {
  1315     public void testReadOfJavaBaseWithRequires() {
  1079         ModuleDescriptor descriptor
  1316         ModuleDescriptor descriptor
  1080             = ModuleDescriptor.module("java.base")
  1317             = ModuleDescriptor.newModule("java.base")
  1081                 .requires("other")
  1318                 .requires("other")
  1082                 .build();
  1319                 .build();
  1083         ByteBuffer bb = ModuleInfoWriter.toByteBuffer(descriptor);
  1320         ByteBuffer bb = ModuleInfoWriter.toByteBuffer(descriptor);
  1084         ModuleDescriptor.read(bb);
  1321         ModuleDescriptor.read(bb);
  1085     }
  1322     }
  1086 
  1323 
  1087     // The requires table must have an entry for java.base
  1324     // The requires table must have an entry for java.base
  1088     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1325     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1089     public void testReadWithEmptyRequires() {
  1326     public void testReadWithEmptyRequires() {
  1090         ModuleDescriptor descriptor = ModuleDescriptor.module("m1").build();
  1327         ModuleDescriptor descriptor = SharedSecrets.getJavaLangModuleAccess()
       
  1328                 .newModuleBuilder("m1", false, Set.of()).build();
  1091         ByteBuffer bb = ModuleInfoWriter.toByteBuffer(descriptor);
  1329         ByteBuffer bb = ModuleInfoWriter.toByteBuffer(descriptor);
  1092         ModuleDescriptor.read(bb);
  1330         ModuleDescriptor.read(bb);
  1093     }
  1331     }
  1094 
  1332 
  1095     // The requires table must have an entry for java.base
  1333     // The requires table must have an entry for java.base
  1096     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1334     @Test(expectedExceptions = InvalidModuleDescriptorException.class)
  1097     public void testReadWithNoRequiresBase() {
  1335     public void testReadWithNoRequiresBase() {
  1098         ModuleDescriptor descriptor
  1336         ModuleDescriptor descriptor = SharedSecrets.getJavaLangModuleAccess()
  1099             = ModuleDescriptor.module("m1")
  1337                 .newModuleBuilder("m1", false, Set.of()).requires("m2").build();
  1100                 .requires("m2")
       
  1101                 .build();
       
  1102         ByteBuffer bb = ModuleInfoWriter.toByteBuffer(descriptor);
  1338         ByteBuffer bb = ModuleInfoWriter.toByteBuffer(descriptor);
  1103         ModuleDescriptor.read(bb);
  1339         ModuleDescriptor.read(bb);
  1104     }
  1340     }
  1105 
  1341 
  1106     public void testReadWithNull() throws Exception {
  1342     public void testReadWithNull() throws Exception {
  1136 
  1372 
  1137 
  1373 
  1138     // equals/hashCode/compareTo/toString
  1374     // equals/hashCode/compareTo/toString
  1139 
  1375 
  1140     public void testEqualsAndHashCode() {
  1376     public void testEqualsAndHashCode() {
  1141         ModuleDescriptor md1 = ModuleDescriptor.module("foo").build();
  1377         ModuleDescriptor md1 = ModuleDescriptor.newModule("m").build();
  1142         ModuleDescriptor md2 = ModuleDescriptor.module("foo").build();
  1378         ModuleDescriptor md2 = ModuleDescriptor.newModule("m").build();
  1143         assertEquals(md1, md1);
  1379         assertEquals(md1, md1);
  1144         assertEquals(md1.hashCode(), md2.hashCode());
  1380         assertEquals(md1.hashCode(), md2.hashCode());
  1145     }
  1381         assertTrue(md1.compareTo(md2) == 0);
  1146 
  1382         assertTrue(md2.compareTo(md1) == 0);
  1147     public void testCompare() {
  1383     }
  1148         ModuleDescriptor md1 = ModuleDescriptor.module("foo").build();
  1384 
  1149         ModuleDescriptor md2 = ModuleDescriptor.module("bar").build();
  1385     @DataProvider(name = "sortedModuleDescriptors")
  1150         int n = "foo".compareTo("bar");
  1386     public Object[][] sortedModuleDescriptors() {
  1151         assertTrue(md1.compareTo(md2) == n);
  1387         return new Object[][]{
  1152         assertTrue(md2.compareTo(md1) == -n);
  1388 
       
  1389             { ModuleDescriptor.newModule("m2").build(),
       
  1390               ModuleDescriptor.newModule("m1").build()
       
  1391             },
       
  1392 
       
  1393             { ModuleDescriptor.newModule("m").version("2").build(),
       
  1394               ModuleDescriptor.newModule("m").version("1").build()
       
  1395             },
       
  1396 
       
  1397             { ModuleDescriptor.newModule("m").version("1").build(),
       
  1398               ModuleDescriptor.newModule("m").build()
       
  1399             },
       
  1400 
       
  1401             { ModuleDescriptor.newOpenModule("m").build(),
       
  1402               ModuleDescriptor.newModule("m").build()
       
  1403             },
       
  1404 
       
  1405         };
       
  1406     }
       
  1407 
       
  1408     @Test(dataProvider = "sortedModuleDescriptors")
       
  1409     public void testCompare(ModuleDescriptor md1, ModuleDescriptor md2) {
       
  1410         assertNotEquals(md1, md2);
       
  1411         assertTrue(md1.compareTo(md2) == 1);
       
  1412         assertTrue(md2.compareTo(md1) == -1);
  1153     }
  1413     }
  1154 
  1414 
  1155     public void testToString() {
  1415     public void testToString() {
  1156         String s = ModuleDescriptor.module("m1").requires("m2").exports("p1").build().toString();
  1416         String s = ModuleDescriptor.newModule("m1")
       
  1417                 .requires("m2")
       
  1418                 .exports("p1")
       
  1419                 .build()
       
  1420                 .toString();
  1157         assertTrue(s.contains("m1"));
  1421         assertTrue(s.contains("m1"));
  1158         assertTrue(s.contains("m2"));
  1422         assertTrue(s.contains("m2"));
  1159         assertTrue(s.contains("p1"));
  1423         assertTrue(s.contains("p1"));
  1160     }
  1424     }
  1161 
  1425