test/jdk/java/lang/module/ConfigurationTest.java
author mchung
Tue, 06 Nov 2018 10:01:16 -0800
changeset 52427 3c6aa484536c
parent 52102 19f6b12df31a
permissions -rw-r--r--
8211122: Reduce the number of internal classes made accessible to jdk.unsupported Reviewed-by: alanb, dfuchs, kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     1
/*
52427
3c6aa484536c 8211122: Reduce the number of internal classes made accessible to jdk.unsupported
mchung
parents: 52102
diff changeset
     2
 * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     4
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     8
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    13
 * accompanied this code).
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    14
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    18
 *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    21
 * questions.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    22
 */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    23
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    24
/**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    25
 * @test
52102
19f6b12df31a 8186610: move ModuleUtils to top-level testlibrary
mli
parents: 47216
diff changeset
    26
 * @library /test/lib
52427
3c6aa484536c 8211122: Reduce the number of internal classes made accessible to jdk.unsupported
mchung
parents: 52102
diff changeset
    27
 * @modules java.base/jdk.internal.access
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    28
 *          java.base/jdk.internal.module
52102
19f6b12df31a 8186610: move ModuleUtils to top-level testlibrary
mli
parents: 47216
diff changeset
    29
 * @build ConfigurationTest
19f6b12df31a 8186610: move ModuleUtils to top-level testlibrary
mli
parents: 47216
diff changeset
    30
 *        jdk.test.lib.util.ModuleUtils
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    31
 * @run testng ConfigurationTest
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    32
 * @summary Basic tests for java.lang.module.Configuration
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    33
 */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    34
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    35
import java.io.IOException;
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    36
import java.io.OutputStream;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    37
import java.lang.module.Configuration;
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    38
import java.lang.module.FindException;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    39
import java.lang.module.ModuleDescriptor;
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
    40
import java.lang.module.ModuleDescriptor.Requires;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    41
import java.lang.module.ModuleFinder;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    42
import java.lang.module.ResolutionException;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    43
import java.lang.module.ResolvedModule;
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    44
import java.nio.file.Files;
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    45
import java.nio.file.Path;
45833
882f4885ec80 8183536: Update jdk tests to allow for unique test classes directory
alanb
parents: 45004
diff changeset
    46
import java.nio.file.Paths;
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
    47
import java.util.List;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    48
import java.util.Set;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    49
52102
19f6b12df31a 8186610: move ModuleUtils to top-level testlibrary
mli
parents: 47216
diff changeset
    50
import jdk.test.lib.util.ModuleUtils;
19f6b12df31a 8186610: move ModuleUtils to top-level testlibrary
mli
parents: 47216
diff changeset
    51
52427
3c6aa484536c 8211122: Reduce the number of internal classes made accessible to jdk.unsupported
mchung
parents: 52102
diff changeset
    52
import jdk.internal.access.SharedSecrets;
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    53
import jdk.internal.module.ModuleInfoWriter;
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
    54
import jdk.internal.module.ModuleTarget;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    55
import org.testng.annotations.DataProvider;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    56
import org.testng.annotations.Test;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    57
import static org.testng.Assert.*;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    58
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    59
@Test
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    60
public class ConfigurationTest {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    61
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    62
    /**
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    63
     * Creates a "non-strict" builder for building a module. This allows the
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    64
     * test the create ModuleDescriptor objects that do not require java.base.
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    65
     */
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    66
    private static ModuleDescriptor.Builder newBuilder(String mn) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    67
        return SharedSecrets.getJavaLangModuleAccess()
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    68
                .newModuleBuilder(mn, false, Set.of());
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    69
    }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    70
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    71
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    72
     * Basic test of resolver
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    73
     *     m1 requires m2, m2 requires m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    74
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    75
    public void testBasic() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    76
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    77
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    78
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    79
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    80
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    81
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    82
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    83
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    84
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    85
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    86
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    87
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    88
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    89
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
    90
        Configuration cf = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    91
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    92
        assertTrue(cf.modules().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    93
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    94
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    95
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    96
        assertTrue(cf.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    97
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
    98
        assertTrue(cf.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
    99
        assertTrue(cf.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   100
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   101
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   102
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   103
        ResolvedModule m3 = cf.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   104
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   105
        // m1 reads m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   106
        assertTrue(m1.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   107
        assertTrue(m1.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   108
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   109
        // m2 reads m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   110
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   111
        assertTrue(m2.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   112
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   113
        // m3 reads nothing
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   114
        assertTrue(m3.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   115
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   116
        // toString
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   117
        assertTrue(cf.toString().contains("m1"));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   118
        assertTrue(cf.toString().contains("m2"));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   119
        assertTrue(cf.toString().contains("m3"));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   120
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   121
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   122
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   123
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   124
     * Basic test of "requires transitive":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   125
     *     m1 requires m2, m2 requires transitive m3
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   126
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   127
    public void testRequiresTransitive1() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   128
        // m1 requires m2, m2 requires transitive m3
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   129
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   130
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   131
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   132
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   133
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   134
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   135
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   136
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   137
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   138
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   139
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   140
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   141
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   142
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   143
        Configuration cf = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   144
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   145
        assertTrue(cf.modules().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   146
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   147
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   148
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   149
        assertTrue(cf.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   150
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   151
        assertTrue(cf.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   152
        assertTrue(cf.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   153
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   154
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   155
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   156
        ResolvedModule m3 = cf.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   157
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   158
        // m1 reads m2 and m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   159
        assertTrue(m1.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   160
        assertTrue(m1.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   161
        assertTrue(m1.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   162
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   163
        // m2 reads m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   164
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   165
        assertTrue(m2.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   166
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   167
        // m3 reads nothing
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   168
        assertTrue(m3.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   169
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   170
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   171
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   172
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   173
     * Basic test of "requires transitive" with configurations.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   174
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   175
     * The test consists of three configurations:
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   176
     * - Configuration cf1: m1, m2 requires transitive m1
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
   177
     * - Configuration cf2: m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   178
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   179
    public void testRequiresTransitive2() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   180
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   181
        // cf1: m1 and m2, m2 requires transitive m1
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   182
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   183
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   184
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   185
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   186
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   187
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   188
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   189
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   190
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   191
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   192
        Configuration cf1 = resolve(finder1, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   193
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   194
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   195
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   196
        assertTrue(cf1.findModule("m2").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   197
        assertTrue(cf1.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   198
        assertTrue(cf1.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   199
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   200
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   201
        ResolvedModule m2 = cf1.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   202
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   203
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   204
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   205
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   206
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   207
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   208
        // cf2: m3, m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   209
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   210
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   211
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   212
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   213
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   214
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   215
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   216
        Configuration cf2 = resolve(cf1, finder2, "m3");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   217
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   218
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   219
        assertTrue(cf2.findModule("m1").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   220
        assertTrue(cf2.findModule("m2").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   221
        assertTrue(cf2.findModule("m3").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   222
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   223
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   224
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   225
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   226
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   227
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   228
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   229
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   230
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   231
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   232
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   233
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   234
     * Basic test of "requires transitive" with configurations.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   235
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   236
     * The test consists of three configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   237
     * - Configuration cf1: m1
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   238
     * - Configuration cf2: m2 requires transitive m1, m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   239
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   240
    public void testRequiresTransitive3() {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   241
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   242
        // cf1: m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   243
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   244
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   245
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   246
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   247
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   248
        Configuration cf1 = resolve(finder1, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   249
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   250
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   251
        assertTrue(cf1.findModule("m1").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   252
        assertTrue(cf1.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   253
        assertTrue(cf1.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   254
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   255
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   256
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   257
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   258
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   259
        // cf2: m2, m3: m2 requires transitive m1, m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   260
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   261
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   262
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   263
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   264
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   265
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   266
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   267
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   268
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   269
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   270
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   271
        Configuration cf2 = resolve(cf1, finder2, "m3");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   272
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   273
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   274
        assertTrue(cf2.findModule("m1").isPresent());   // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   275
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   276
        assertTrue(cf2.findModule("m3").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   277
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   278
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   279
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   280
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   281
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   282
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   283
        assertTrue(m2.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   284
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   285
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   286
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   287
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   288
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   289
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   290
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   291
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   292
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   293
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   294
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   295
     * Basic test of "requires transitive" with configurations.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   296
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   297
     * The test consists of three configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   298
     * - Configuration cf1: m1
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   299
     * - Configuration cf2: m2 requires transitive m1
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
   300
     * - Configuraiton cf3: m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   301
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   302
    public void testRequiresTransitive4() {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   303
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   304
        // cf1: m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   305
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   306
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   307
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   308
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   309
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   310
        Configuration cf1 = resolve(finder1, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   311
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   312
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   313
        assertTrue(cf1.findModule("m1").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   314
        assertTrue(cf1.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   315
        assertTrue(cf1.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   316
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   317
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   318
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   319
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   320
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   321
        // cf2: m2 requires transitive m1
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   322
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   323
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   324
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   325
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   326
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   327
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   328
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   329
        Configuration cf2 = resolve(cf1, finder2, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   330
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   331
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   332
        assertTrue(cf2.findModule("m1").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   333
        assertTrue(cf2.findModule("m2").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   334
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   335
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   336
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   337
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   338
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   339
        assertTrue(m2.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   340
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   341
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   342
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   343
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   344
        // cf3: m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   345
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   346
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   347
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   348
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   349
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   350
        ModuleFinder finder3 = ModuleUtils.finderOf(descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   351
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   352
        Configuration cf3 = resolve(cf2, finder3, "m3");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   353
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   354
        assertTrue(cf3.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   355
        assertTrue(cf3.findModule("m1").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   356
        assertTrue(cf3.findModule("m2").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   357
        assertTrue(cf3.findModule("m3").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   358
        assertTrue(cf3.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   359
        assertTrue(cf3.parents().get(0) == cf2);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   360
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   361
        ResolvedModule m3 = cf3.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   362
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   363
        assertTrue(m3.configuration() == cf3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   364
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   365
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   366
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   367
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   368
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   369
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   370
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   371
     * Basic test of "requires transitive" with configurations.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   372
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   373
     * The test consists of two configurations:
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   374
     * - Configuration cf1: m1, m2 requires transitive m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   375
     * - Configuration cf2: m3 requires transitive m2, m4 requires m3
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   376
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   377
    public void testRequiresTransitive5() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   378
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   379
        // cf1: m1, m2 requires transitive m1
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   380
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   381
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   382
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   383
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   384
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   385
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   386
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   387
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   388
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   389
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   390
        Configuration cf1 = resolve(finder1, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   391
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   392
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   393
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   394
        assertTrue(cf1.findModule("m2").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   395
        assertTrue(cf1.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   396
        assertTrue(cf1.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   397
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   398
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   399
        ResolvedModule m2 = cf1.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   400
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   401
        assertTrue(m1.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   402
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   403
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   404
        assertTrue(m2.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   405
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   406
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   407
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   408
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   409
        // cf2: m3 requires transitive m2, m4 requires m3
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   410
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   411
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   412
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   413
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   414
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   415
        ModuleDescriptor descriptor4 = newBuilder("m4")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   416
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   417
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   418
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   419
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   420
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   421
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   422
        Configuration cf2 = resolve(cf1, finder2, "m3", "m4");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   423
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   424
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   425
        assertTrue(cf2.findModule("m1").isPresent());   // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   426
        assertTrue(cf2.findModule("m2").isPresent());   // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   427
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   428
        assertTrue(cf2.findModule("m4").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   429
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   430
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   431
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   432
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   433
        ResolvedModule m4 = cf2.findModule("m4").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   434
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   435
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   436
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   437
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   438
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   439
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   440
        assertTrue(m4.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   441
        assertTrue(m4.reads().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   442
        assertTrue(m4.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   443
        assertTrue(m4.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   444
        assertTrue(m4.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   445
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   446
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   447
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   448
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   449
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   450
     *     m1 requires static m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   451
     *     m2 is not observable
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   452
     *     resolve m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   453
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   454
    public void testRequiresStatic1() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   455
        ModuleDescriptor descriptor1 = newBuilder("m1")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   456
                .requires(Set.of(Requires.Modifier.STATIC), "m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   457
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   458
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   459
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   460
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   461
        Configuration cf = resolve(finder, "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   462
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   463
        assertTrue(cf.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   464
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   465
        ResolvedModule m1 = cf.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   466
        assertTrue(m1.reads().size() == 0);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   467
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   468
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   469
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   470
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   471
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   472
     *     m1 requires static m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   473
     *     m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   474
     *     resolve m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   475
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   476
    public void testRequiresStatic2() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   477
        ModuleDescriptor descriptor1 = newBuilder("m1")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   478
                .requires(Set.of(Requires.Modifier.STATIC), "m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   479
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   480
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   481
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   482
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   483
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   484
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   485
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   486
        Configuration cf = resolve(finder, "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   487
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   488
        assertTrue(cf.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   489
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   490
        ResolvedModule m1 = cf.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   491
        assertTrue(m1.reads().size() == 0);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   492
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   493
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   494
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   495
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   496
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   497
     *     m1 requires static m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   498
     *     m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   499
     *     resolve m1, m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   500
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   501
    public void testRequiresStatic3() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   502
        ModuleDescriptor descriptor1 = newBuilder("m1")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   503
                .requires(Set.of(Requires.Modifier.STATIC), "m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   504
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   505
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   506
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   507
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   508
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   509
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   510
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   511
        Configuration cf = resolve(finder, "m1", "m2");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   512
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   513
        assertTrue(cf.modules().size() == 2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   514
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   515
        ResolvedModule m1 = cf.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   516
        ResolvedModule m2 = cf.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   517
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   518
        assertTrue(m1.reads().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   519
        assertTrue(m1.reads().contains(m2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   520
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   521
        assertTrue(m2.reads().size() == 0);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   522
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   523
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   524
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   525
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   526
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   527
     *     m1 requires m2, m3
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   528
     *     m2 requires static m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   529
     *     m3
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   530
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   531
    public void testRequiresStatic4() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   532
        ModuleDescriptor descriptor1 = newBuilder("m1")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   533
                .requires("m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   534
                .requires("m3")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   535
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   536
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   537
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   538
                .requires(Set.of(Requires.Modifier.STATIC), "m3")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   539
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   540
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   541
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   542
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   543
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   544
        ModuleFinder finder
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   545
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   546
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   547
        Configuration cf = resolve(finder, "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   548
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   549
        assertTrue(cf.modules().size() == 3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   550
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   551
        ResolvedModule m1 = cf.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   552
        ResolvedModule m2 = cf.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   553
        ResolvedModule m3 = cf.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   554
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   555
        assertTrue(m1.reads().size() == 2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   556
        assertTrue(m1.reads().contains(m2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   557
        assertTrue(m1.reads().contains(m3));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   558
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   559
        assertTrue(m2.reads().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   560
        assertTrue(m2.reads().contains(m3));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   561
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   562
        assertTrue(m3.reads().size() == 0);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   563
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   564
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   565
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   566
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   567
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   568
     * The test consists of three configurations:
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   569
     * - Configuration cf1: m1, m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   570
     * - Configuration cf2: m3 requires m1, requires static m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   571
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   572
    public void testRequiresStatic5() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   573
        ModuleDescriptor descriptor1 = newBuilder("m1")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   574
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   575
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   576
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   577
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   578
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   579
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   580
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   581
        Configuration cf1 = resolve(finder1, "m1", "m2");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   582
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   583
        assertTrue(cf1.modules().size() == 2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   584
        assertTrue(cf1.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   585
        assertTrue(cf1.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   586
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   587
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   588
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   589
                .requires(Set.of(Requires.Modifier.STATIC), "m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   590
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   591
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   592
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   593
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   594
        Configuration cf2 = resolve(cf1, finder2, "m3");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   595
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   596
        assertTrue(cf2.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   597
        assertTrue(cf2.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   598
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   599
        ResolvedModule m1 = cf1.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   600
        ResolvedModule m2 = cf1.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   601
        ResolvedModule m3 = cf2.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   602
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   603
        assertTrue(m3.reads().size() == 2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   604
        assertTrue(m3.reads().contains(m1));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   605
        assertTrue(m3.reads().contains(m2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   606
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   607
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   608
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   609
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   610
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   611
     * The test consists of three configurations:
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   612
     * - Configuration cf1: m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   613
     * - Configuration cf2: m3 requires m1, requires static m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   614
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   615
    public void testRequiresStatic6() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   616
        ModuleDescriptor descriptor1 = newBuilder("m1")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   617
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   618
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   619
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   620
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   621
        Configuration cf1 = resolve(finder1, "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   622
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   623
        assertTrue(cf1.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   624
        assertTrue(cf1.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   625
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   626
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   627
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   628
                .requires(Set.of(Requires.Modifier.STATIC), "m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   629
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   630
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   631
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   632
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   633
        Configuration cf2 = resolve(cf1, finder2, "m3");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   634
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   635
        assertTrue(cf2.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   636
        assertTrue(cf2.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   637
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   638
        ResolvedModule m1 = cf1.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   639
        ResolvedModule m3 = cf2.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   640
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   641
        assertTrue(m3.reads().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   642
        assertTrue(m3.reads().contains(m1));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   643
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   644
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   645
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   646
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   647
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   648
     *     (m1 not observable)
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   649
     *     m2 requires transitive static m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   650
     *     m3 requires m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   651
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   652
    public void testRequiresStatic7() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   653
        ModuleDescriptor descriptor1 = null;  // not observable
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   654
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   655
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   656
                .requires(Set.of(Requires.Modifier.TRANSITIVE,
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   657
                                Requires.Modifier.STATIC),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   658
                         "m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   659
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   660
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   661
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   662
                .requires("m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   663
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   664
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   665
        ModuleFinder finder = ModuleUtils.finderOf(descriptor2, descriptor3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   666
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   667
        Configuration cf = resolve(finder, "m3");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   668
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   669
        assertTrue(cf.modules().size() == 2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   670
        assertTrue(cf.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   671
        assertTrue(cf.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   672
        ResolvedModule m2 = cf.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   673
        ResolvedModule m3 = cf.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   674
        assertTrue(m2.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   675
        assertTrue(m3.reads().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   676
        assertTrue(m3.reads().contains(m2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   677
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   678
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   679
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   680
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   681
     * Basic test of "requires static":
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   682
     * - Configuration cf1: m2 requires transitive static m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   683
     * - Configuration cf2: m3 requires m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   684
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   685
    public void testRequiresStatic8() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   686
        ModuleDescriptor descriptor1 = null;  // not observable
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   687
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   688
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   689
                .requires(Set.of(Requires.Modifier.TRANSITIVE,
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   690
                                Requires.Modifier.STATIC),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   691
                        "m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   692
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   693
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   694
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   695
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   696
        Configuration cf1 = resolve(finder1, "m2");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   697
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   698
        assertTrue(cf1.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   699
        assertTrue(cf1.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   700
        ResolvedModule m2 = cf1.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   701
        assertTrue(m2.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   702
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   703
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   704
                .requires("m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   705
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   706
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   707
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   708
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   709
        Configuration cf2 = resolve(cf1, finder2, "m3");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   710
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   711
        assertTrue(cf2.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   712
        assertTrue(cf2.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   713
        ResolvedModule m3 = cf2.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   714
        assertTrue(m3.reads().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   715
        assertTrue(m3.reads().contains(m2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   716
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   717
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   718
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   719
    /**
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   720
     * Basic test of binding services
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   721
     *     m1 uses p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   722
     *     m2 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   723
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   724
    public void testServiceBinding1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   725
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   726
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   727
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   728
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   729
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   730
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   731
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   732
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   733
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   734
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   735
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   736
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   737
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   738
        Configuration cf = resolveAndBind(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   739
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   740
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   741
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   742
        assertTrue(cf.findModule("m2").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   743
        assertTrue(cf.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   744
        assertTrue(cf.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   745
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   746
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   747
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   748
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   749
        assertTrue(m1.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   750
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   751
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   752
        assertTrue(m2.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   753
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   754
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   755
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   756
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   757
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   758
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   759
     * Basic test of binding services
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   760
     *     m1 uses p.S1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   761
     *     m2 provides p.S1, m2 uses p.S2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   762
     *     m3 provides p.S2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   763
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   764
    public void testServiceBinding2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   765
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   766
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   767
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   768
                .uses("p.S1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   769
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   770
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   771
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   772
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   773
                .uses("p.S2")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   774
                .provides("p.S1", List.of("q.Service1Impl"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   775
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   776
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   777
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   778
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   779
                .provides("p.S2", List.of("q.Service2Impl"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   780
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   781
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   782
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   783
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   784
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   785
        Configuration cf = resolveAndBind(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   786
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   787
        assertTrue(cf.modules().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   788
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   789
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   790
        assertTrue(cf.findModule("m3").isPresent());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   791
        assertTrue(cf.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   792
        assertTrue(cf.parents().get(0) == Configuration.empty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   793
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   794
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   795
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   796
        ResolvedModule m3 = cf.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   797
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   798
        assertTrue(m1.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   799
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   800
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   801
        assertTrue(m2.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   802
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   803
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   804
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   805
        assertTrue(m3.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   806
        assertTrue(m3.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   807
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   808
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   809
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   810
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   811
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   812
     * Basic test of binding services with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   813
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   814
     * The test consists of two configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   815
     * - Configuration cf1: m1 uses p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   816
     * - Configuration cf2: m2 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   817
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   818
    public void testServiceBindingWithConfigurations1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   819
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   820
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   821
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   822
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   823
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   824
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   825
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   826
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   827
        Configuration cf1 = resolve(finder1, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   828
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   829
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   830
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   831
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   832
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   833
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   834
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   835
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   836
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   837
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   838
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   839
        Configuration cf2 = resolveAndBind(cf1, finder2); // no roots
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   840
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   841
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   842
        assertTrue(cf2.parents().get(0) == cf1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   843
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   844
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   845
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   846
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   847
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   848
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   849
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   850
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   851
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   852
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   853
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   854
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   855
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   856
     * Basic test of binding services with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   857
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   858
     * The test consists of two configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   859
     * - Configuration cf1: m1 uses p.S && provides p.S,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   860
     *                      m2 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   861
     * - Configuration cf2: m3 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   862
     *                      m4 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   863
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   864
    public void testServiceBindingWithConfigurations2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   865
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   866
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   867
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   868
                .uses("p.S")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   869
                .provides("p.S", List.of("p1.ServiceImpl"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   870
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   871
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   872
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   873
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   874
                .provides("p.S", List.of("p2.ServiceImpl"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   875
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   876
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   877
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   878
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   879
        Configuration cf1 = resolveAndBind(finder1, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   880
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   881
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   882
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   883
        assertTrue(cf1.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   884
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   885
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   886
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   887
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   888
                .provides("p.S", List.of("p3.ServiceImpl"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   889
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   890
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   891
        ModuleDescriptor descriptor4 = newBuilder("m4")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   892
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   893
                .provides("p.S", List.of("p4.ServiceImpl"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   894
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   895
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   896
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   897
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   898
        Configuration cf2 = resolveAndBind(cf1, finder2); // no roots
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   899
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   900
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   901
        assertTrue(cf2.parents().get(0) == cf1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   902
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   903
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   904
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   905
        assertTrue(cf2.findModule("m4").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   906
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   907
        ResolvedModule m1 = cf2.findModule("m1").get();  // should find in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   908
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   909
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   910
        ResolvedModule m4 = cf2.findModule("m4").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   911
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   912
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   913
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   914
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   915
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   916
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   917
        assertTrue(m3.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   918
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   919
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   920
        assertTrue(m4.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   921
        assertTrue(m4.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   922
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   923
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   924
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   925
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   926
     * Basic test of binding services with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   927
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   928
     * Configuration cf1: p@1.0 provides p.S
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
   929
     * Test configuration cf2: m1 uses p.S, p@2.0 provides p.S
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   930
     * Test configuration cf2: m1 uses p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   931
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   932
    public void testServiceBindingWithConfigurations3() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   933
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   934
        ModuleDescriptor service = newBuilder("s")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   935
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   936
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   937
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   938
        ModuleDescriptor provider_v1 = newBuilder("p")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   939
                .version("1.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   940
                .requires("s")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   941
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   942
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   943
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   944
        ModuleFinder finder1 = ModuleUtils.finderOf(service, provider_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   945
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   946
        Configuration cf1 = resolve(finder1, "p");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   947
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   948
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   949
        assertTrue(cf1.findModule("s").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   950
        assertTrue(cf1.findModule("p").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   951
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   952
        // p@1.0 in cf1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   953
        ResolvedModule p = cf1.findModule("p").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   954
        assertEquals(p.reference().descriptor(), provider_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   955
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   956
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   957
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   958
                .requires("s")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   959
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   960
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   961
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   962
        ModuleDescriptor provider_v2 = newBuilder("p")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   963
                .version("2.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   964
                .requires("s")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   965
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   966
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   967
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   968
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, provider_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   969
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   970
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   971
        // finder2 is the before ModuleFinder and so p@2.0 should be located
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   972
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   973
        Configuration cf2 = resolveAndBind(cf1, finder2, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   974
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   975
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   976
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   977
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   978
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   979
        // p should be found in cf2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   980
        p = cf2.findModule("p").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   981
        assertTrue(p.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   982
        assertEquals(p.reference().descriptor(), provider_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   983
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   984
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   985
        // finder2 is the after ModuleFinder and so p@2.0 should not be located
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   986
        // as module p is in parent configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   987
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
   988
        cf2 = resolveAndBind(cf1, ModuleFinder.of(), finder2, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   989
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   990
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
   991
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   992
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   993
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   994
        // p should be found in cf1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   995
        p = cf2.findModule("p").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   996
        assertTrue(p.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   997
        assertEquals(p.reference().descriptor(), provider_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   998
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   999
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1000
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1001
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1002
     * Basic test with two module finders.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1003
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1004
     * Module m2 can be found by both the before and after finders.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1005
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1006
    public void testWithTwoFinders1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1007
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1008
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1009
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1010
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1011
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1012
        ModuleDescriptor descriptor2_v1 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1013
                .version("1.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1014
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1015
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1016
        ModuleDescriptor descriptor2_v2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1017
                .version("2.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1018
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1019
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1020
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1021
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, descriptor2_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1022
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1023
        Configuration cf = resolve(finder1, finder2, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1024
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1025
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1026
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1027
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1028
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1029
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1030
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1031
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1032
        assertEquals(m1.reference().descriptor(), descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1033
        assertEquals(m2.reference().descriptor(), descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1034
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1035
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1036
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1037
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1038
     * Basic test with two modules finders and service binding.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1039
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1040
     * The before and after ModuleFinders both locate a service provider module
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1041
     * named "m2" that provide implementations of the same service type.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1042
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1043
    public void testWithTwoFinders2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1044
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1045
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1046
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1047
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1048
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1049
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1050
        ModuleDescriptor descriptor2_v1 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1051
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1052
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1053
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1054
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1055
        ModuleDescriptor descriptor2_v2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1056
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1057
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1058
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1059
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1060
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1061
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1062
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1063
        Configuration cf = resolveAndBind(finder1, finder2, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1064
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1065
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1066
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1067
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1068
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1069
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1070
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1071
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1072
        assertEquals(m1.reference().descriptor(), descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1073
        assertEquals(m2.reference().descriptor(), descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1074
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1075
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1076
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1077
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1078
     * Basic test for resolving a module that is located in the parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1079
     * configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1080
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1081
    public void testResolvedInParent1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1082
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1083
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1084
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1085
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1086
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1087
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1088
        Configuration cf1 = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1089
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1090
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1091
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1092
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1093
        Configuration cf2 = resolve(cf1, finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1094
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1095
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1096
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1097
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1098
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1099
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1100
     * Basic test for resolving a module that has a dependency on a module
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1101
     * in the parent configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1102
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1103
    public void testResolvedInParent2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1104
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1105
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1106
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1107
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1108
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1109
        Configuration cf1 = resolve(finder1, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1110
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1111
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1112
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1113
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1114
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1115
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1116
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1117
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1118
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1119
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1120
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1121
        Configuration cf2 = resolve(cf1, ModuleFinder.of(), finder2, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1122
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1123
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1124
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1125
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1126
        ResolvedModule m1 = cf2.findModule("m1").get();   // find in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1127
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1128
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1129
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1130
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1131
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1132
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1133
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1134
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1135
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1136
     * Basic test of resolving a module that depends on modules in two parent
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1137
     * configurations.
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1138
     *
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1139
     * The test consists of three configurations:
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1140
     * - Configuration cf1: m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1141
     * - Configuration cf2: m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1142
     * - Configuration cf3(cf1,cf2): m3 requires m1, m2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1143
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1144
    public void testResolvedInMultipleParents1() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1145
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1146
        // Configuration cf1: m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1147
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1148
        Configuration cf1 = resolve(ModuleUtils.finderOf(descriptor1), "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1149
        assertEquals(cf1.parents(), List.of(Configuration.empty()));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1150
        assertTrue(cf1.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1151
        ResolvedModule m1 = cf1.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1152
        assertTrue(m1.configuration() == cf1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1153
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1154
        // Configuration cf2: m2
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1155
        ModuleDescriptor descriptor2 = newBuilder("m2").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1156
        Configuration cf2 = resolve(ModuleUtils.finderOf(descriptor2), "m2");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1157
        assertEquals(cf2.parents(), List.of(Configuration.empty()));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1158
        assertTrue(cf2.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1159
        ResolvedModule m2 = cf2.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1160
        assertTrue(m2.configuration() == cf2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1161
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1162
        // Configuration cf3(cf1,cf2): m3 requires m1 and m2
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1163
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1164
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1165
                .requires("m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1166
                .build();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1167
        ModuleFinder finder = ModuleUtils.finderOf(descriptor3);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1168
        Configuration cf3 = Configuration.resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1169
                finder,
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1170
                List.of(cf1, cf2),  // parents
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1171
                ModuleFinder.of(),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1172
                Set.of("m3"));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1173
        assertEquals(cf3.parents(), List.of(cf1, cf2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1174
        assertTrue(cf3.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1175
        ResolvedModule m3 = cf3.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1176
        assertTrue(m3.configuration() == cf3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1177
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1178
        // check readability
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1179
        assertTrue(m1.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1180
        assertTrue(m2.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1181
        assertEquals(m3.reads(), Set.of(m1, m2));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1182
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1183
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1184
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1185
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1186
     * Basic test of resolving a module that depends on modules in three parent
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1187
     * configurations arranged in a diamond (two direct parents).
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1188
     *
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1189
     * The test consists of four configurations:
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1190
     * - Configuration cf1: m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1191
     * - Configuration cf2(cf1): m2 requires m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1192
     * - Configuration cf3(cf3): m3 requires m1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1193
     * - Configuration cf4(cf2,cf3): m4 requires m1,m2,m3
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1194
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1195
    public void testResolvedInMultipleParents2() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1196
        // Configuration cf1: m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1197
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1198
        Configuration cf1 = resolve(ModuleUtils.finderOf(descriptor1), "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1199
        assertEquals(cf1.parents(), List.of(Configuration.empty()));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1200
        assertTrue(cf1.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1201
        ResolvedModule m1 = cf1.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1202
        assertTrue(m1.configuration() == cf1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1203
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1204
        // Configuration cf2(cf1): m2 requires m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1205
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1206
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1207
                .build();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1208
        Configuration cf2 = Configuration.resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1209
                ModuleUtils.finderOf(descriptor2),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1210
                List.of(cf1),  // parents
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1211
                ModuleFinder.of(),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1212
                Set.of("m2"));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1213
        assertEquals(cf2.parents(), List.of(cf1));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1214
        assertTrue(cf2.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1215
        ResolvedModule m2 = cf2.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1216
        assertTrue(m2.configuration() == cf2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1217
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1218
        // Configuration cf3(cf1): m3 requires m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1219
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1220
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1221
                .build();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1222
        Configuration cf3 = Configuration.resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1223
                ModuleUtils.finderOf(descriptor3),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1224
                List.of(cf1),  // parents
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1225
                ModuleFinder.of(),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1226
                Set.of("m3"));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1227
        assertEquals(cf3.parents(), List.of(cf1));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1228
        assertTrue(cf3.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1229
        ResolvedModule m3 = cf3.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1230
        assertTrue(m3.configuration() == cf3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1231
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1232
        // Configuration cf4(cf2,cf3): m4 requires m1,m2,m3
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1233
        ModuleDescriptor descriptor4 = newBuilder("m4")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1234
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1235
                .requires("m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1236
                .requires("m3")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1237
                .build();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1238
        Configuration cf4 = Configuration.resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1239
                ModuleUtils.finderOf(descriptor4),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1240
                List.of(cf2, cf3),  // parents
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1241
                ModuleFinder.of(),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1242
                Set.of("m4"));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1243
        assertEquals(cf4.parents(), List.of(cf2, cf3));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1244
        assertTrue(cf4.findModule("m4").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1245
        ResolvedModule m4 = cf4.findModule("m4").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1246
        assertTrue(m4.configuration() == cf4);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1247
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1248
        // check readability
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1249
        assertTrue(m1.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1250
        assertEquals(m2.reads(), Set.of(m1));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1251
        assertEquals(m3.reads(), Set.of(m1));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1252
        assertEquals(m4.reads(), Set.of(m1, m2, m3));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1253
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1254
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1255
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1256
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1257
     * Basic test of resolving a module that depends on modules in three parent
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1258
     * configurations arranged in a diamond (two direct parents).
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1259
     *
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1260
     * The test consists of four configurations:
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1261
     * - Configuration cf1: m1@1
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1262
     * - Configuration cf2: m1@2, m2@2
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1263
     * - Configuration cf3: m1@3, m2@3, m3@3
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1264
     * - Configuration cf4(cf1,cf2,cf3): m4 requires m1,m2,m3
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1265
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1266
    public void testResolvedInMultipleParents3() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1267
        ModuleDescriptor descriptor1, descriptor2, descriptor3;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1268
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1269
        // Configuration cf1: m1@1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1270
        descriptor1 = newBuilder("m1").version("1").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1271
        Configuration cf1 = resolve(ModuleUtils.finderOf(descriptor1), "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1272
        assertEquals(cf1.parents(), List.of(Configuration.empty()));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1273
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1274
        // Configuration cf2: m1@2, m2@2
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1275
        descriptor1 = newBuilder("m1").version("2").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1276
        descriptor2 = newBuilder("m2").version("2").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1277
        Configuration cf2 = resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1278
                ModuleUtils.finderOf(descriptor1, descriptor2),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1279
                "m1", "m2");
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1280
        assertEquals(cf2.parents(), List.of(Configuration.empty()));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1281
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1282
        // Configuration cf3: m1@3, m2@3, m3@3
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1283
        descriptor1 = newBuilder("m1").version("3").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1284
        descriptor2 = newBuilder("m2").version("3").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1285
        descriptor3 = newBuilder("m3").version("3").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1286
        Configuration cf3 = resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1287
                ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1288
                "m1", "m2", "m3");
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1289
        assertEquals(cf3.parents(), List.of(Configuration.empty()));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1290
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1291
        // Configuration cf4(cf1,cf2,cf3): m4 requires m1,m2,m3
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1292
        ModuleDescriptor descriptor4 = newBuilder("m4")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1293
                .requires("m1")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1294
                .requires("m2")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1295
                .requires("m3")
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1296
                .build();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1297
        Configuration cf4 = Configuration.resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1298
                ModuleUtils.finderOf(descriptor4),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1299
                List.of(cf1, cf2, cf3),  // parents
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1300
                ModuleFinder.of(),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1301
                Set.of("m4"));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1302
        assertEquals(cf4.parents(), List.of(cf1, cf2, cf3));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1303
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1304
        assertTrue(cf1.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1305
        assertTrue(cf2.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1306
        assertTrue(cf2.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1307
        assertTrue(cf3.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1308
        assertTrue(cf3.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1309
        assertTrue(cf3.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1310
        assertTrue(cf4.findModule("m4").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1311
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1312
        ResolvedModule m1_1 = cf1.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1313
        ResolvedModule m1_2 = cf2.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1314
        ResolvedModule m2_2 = cf2.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1315
        ResolvedModule m1_3 = cf3.findModule("m1").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1316
        ResolvedModule m2_3 = cf3.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1317
        ResolvedModule m3_3 = cf3.findModule("m3").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1318
        ResolvedModule m4   = cf4.findModule("m4").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1319
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1320
        assertTrue(m1_1.configuration() == cf1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1321
        assertTrue(m1_2.configuration() == cf2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1322
        assertTrue(m2_2.configuration() == cf2);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1323
        assertTrue(m1_3.configuration() == cf3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1324
        assertTrue(m2_3.configuration() == cf3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1325
        assertTrue(m3_3.configuration() == cf3);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1326
        assertTrue(m4.configuration() == cf4);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1327
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1328
        // check readability
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1329
        assertTrue(m1_1.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1330
        assertTrue(m1_2.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1331
        assertTrue(m2_2.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1332
        assertTrue(m1_3.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1333
        assertTrue(m2_3.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1334
        assertTrue(m3_3.reads().isEmpty());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1335
        assertEquals(m4.reads(), Set.of(m1_1, m2_2, m3_3));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1336
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1337
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1339
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1340
     * Basic test of using the beforeFinder to override a module in a parent
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1341
     * configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1342
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1343
    public void testOverriding1() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1344
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1345
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1346
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1347
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1348
        Configuration cf1 = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1349
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1350
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1351
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1352
        Configuration cf2 = resolve(cf1, finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1353
        assertTrue(cf2.modules().size() == 1);
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
  1354
        assertTrue(cf2.findModule("m1").isPresent());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1355
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1356
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1357
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1358
     * Basic test of using the beforeFinder to override a module in a parent
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1359
     * configuration.
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1360
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1361
    public void testOverriding2() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1362
        ModuleDescriptor descriptor1 = newBuilder("m1").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1363
        Configuration cf1 = resolve(ModuleUtils.finderOf(descriptor1), "m1");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1364
        assertTrue(cf1.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1365
        assertTrue(cf1.findModule("m1").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1366
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1367
        ModuleDescriptor descriptor2 = newBuilder("m2").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1368
        Configuration cf2 = resolve(ModuleUtils.finderOf(descriptor2), "m2");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1369
        assertTrue(cf2.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1370
        assertTrue(cf2.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1371
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1372
        ModuleDescriptor descriptor3 = newBuilder("m3").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1373
        Configuration cf3 = resolve(ModuleUtils.finderOf(descriptor3), "m3");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1374
        assertTrue(cf3.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1375
        assertTrue(cf3.findModule("m3").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1376
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1377
        // override m2, m1 and m3 should be found in parent configurations
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1378
        ModuleFinder finder = ModuleUtils.finderOf(descriptor2);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1379
        Configuration cf4 = Configuration.resolve(
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1380
                finder,
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1381
                List.of(cf1, cf2, cf3),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1382
                ModuleFinder.of(),
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1383
                Set.of("m1", "m2", "m3"));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1384
        assertTrue(cf4.modules().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1385
        assertTrue(cf4.findModule("m2").isPresent());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1386
        ResolvedModule m2 = cf4.findModule("m2").get();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1387
        assertTrue(m2.configuration() == cf4);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1388
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1389
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1390
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1391
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1392
     * Basic test of using the beforeFinder to override a module in the parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1393
     * configuration but where implied readability in the picture so that the
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1394
     * module in the parent is read.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1395
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1396
     * The test consists of two configurations:
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1397
     * - Configuration cf1: m1, m2 requires transitive m1
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1398
     * - Configuration cf2: m1, m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1399
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1400
    public void testOverriding3() {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1401
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1402
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1403
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1404
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1405
        ModuleDescriptor descriptor2 = newBuilder("m2")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1406
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1407
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1408
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1409
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1410
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1411
        Configuration cf1 = resolve(finder1, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1412
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1413
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1414
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1415
        assertTrue(cf1.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1416
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1417
        // cf2: m3 requires m2, m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1418
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1419
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1420
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1421
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1422
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1423
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1424
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1425
        Configuration cf2 = resolve(cf1, finder2, "m1", "m3");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1426
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1427
        assertTrue(cf2.parents().size() == 1);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1428
        assertTrue(cf2.parents().get(0) == cf1);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1429
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1430
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1431
        assertTrue(cf2.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1432
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1433
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1434
        ResolvedModule m1_1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1435
        ResolvedModule m1_2 = cf2.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1436
        ResolvedModule m2 = cf1.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1437
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1438
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1439
        assertTrue(m1_1.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1440
        assertTrue(m1_2.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1441
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1442
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1443
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1444
        // check that m3 reads cf1/m1 and cf2/m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1445
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1446
        assertTrue(m3.reads().contains(m1_1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1447
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1448
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1449
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1450
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1451
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1452
     * Root module not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1453
     */
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1454
    @Test(expectedExceptions = { FindException.class })
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1455
    public void testRootNotFound() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1456
        resolve(ModuleFinder.of(), "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1457
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1458
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1459
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1460
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1461
     * Direct dependency not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1462
     */
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1463
    @Test(expectedExceptions = { FindException.class })
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1464
    public void testDirectDependencyNotFound() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1465
        ModuleDescriptor descriptor1 = newBuilder("m1").requires("m2").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1466
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1467
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1468
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1469
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1470
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1471
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1472
     * Transitive dependency not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1473
     */
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1474
    @Test(expectedExceptions = { FindException.class })
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1475
    public void testTransitiveDependencyNotFound() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1476
        ModuleDescriptor descriptor1 = newBuilder("m1").requires("m2").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1477
        ModuleDescriptor descriptor2 = newBuilder("m2").requires("m3").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1478
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1479
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1480
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1481
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1482
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1483
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1484
     * Service provider dependency not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1485
     */
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1486
    @Test(expectedExceptions = { FindException.class })
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1487
    public void testServiceProviderDependencyNotFound() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1488
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1489
        // service provider dependency (on m3) not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1490
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1491
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1492
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1493
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1494
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1495
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1496
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1497
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1498
                .requires("m3")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1499
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1500
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1501
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1502
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1503
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1504
        // should throw ResolutionException because m3 is not found
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1505
        Configuration cf = resolveAndBind(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1506
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1507
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1508
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1509
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1510
     * Simple cycle.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1511
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1512
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1513
    public void testSimpleCycle() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1514
        ModuleDescriptor descriptor1 = newBuilder("m1").requires("m2").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1515
        ModuleDescriptor descriptor2 = newBuilder("m2").requires("m3").build();
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1516
        ModuleDescriptor descriptor3 = newBuilder("m3").requires("m1").build();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1517
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1518
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1519
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1520
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1521
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1522
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1523
     * Basic test for detecting cycles involving a service provider module
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1524
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1525
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1526
    public void testCycleInProvider() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1527
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1528
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1529
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1530
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1531
                .build();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1532
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1533
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1534
                .requires("m3")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1535
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1536
                .build();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1537
        ModuleDescriptor descriptor3 = newBuilder("m3")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1538
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1539
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1540
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1541
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1542
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1543
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1544
        // should throw ResolutionException because of the m2 <--> m3 cycle
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1545
        resolveAndBind(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1546
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1547
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1548
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1549
    /**
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1550
     * Basic test to detect reading a module with the same name as itself
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1551
     *
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1552
     * The test consists of three configurations:
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1553
     * - Configuration cf1: m1, m2 requires transitive m1
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1554
     * - Configuration cf2: m1 requires m2
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1555
     */
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1556
    @Test(expectedExceptions = { ResolutionException.class })
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1557
    public void testReadModuleWithSameNameAsSelf() {
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1558
        ModuleDescriptor descriptor1_v1 = newBuilder("m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1559
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1560
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1561
        ModuleDescriptor descriptor2 = newBuilder("m2")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1562
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1563
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1564
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1565
        ModuleDescriptor descriptor1_v2 = newBuilder("m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1566
                .requires("m2")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1567
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1568
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1569
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1_v1, descriptor2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1570
        Configuration cf1 = resolve(finder1, "m2");
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1571
        assertTrue(cf1.modules().size() == 2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1572
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1573
        // resolve should throw ResolutionException
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1574
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1_v2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1575
        resolve(cf1, finder2, "m1");
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1576
    }
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1577
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1578
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1579
    /**
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1580
     * Basic test to detect reading two modules with the same name
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1581
     *
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1582
     * The test consists of three configurations:
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1583
     * - Configuration cf1: m1, m2 requires transitive m1
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1584
     * - Configuration cf2: m1, m3 requires transitive m1
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1585
     * - Configuration cf3(cf1,cf2): m4 requires m2, m3
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1586
     */
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1587
    @Test(expectedExceptions = { ResolutionException.class })
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1588
    public void testReadTwoModuleWithSameName() {
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1589
        ModuleDescriptor descriptor1 = newBuilder("m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1590
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1591
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1592
        ModuleDescriptor descriptor2 = newBuilder("m2")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1593
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1594
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1595
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1596
        ModuleDescriptor descriptor3 = newBuilder("m3")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1597
                .requires(Set.of(Requires.Modifier.TRANSITIVE), "m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1598
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1599
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1600
        ModuleDescriptor descriptor4 = newBuilder("m4")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1601
                .requires("m2")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1602
                .requires("m3")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1603
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1604
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1605
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1606
        Configuration cf1 = resolve(finder1, "m2");
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1607
        assertTrue(cf1.modules().size() == 2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1608
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1609
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, descriptor3);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1610
        Configuration cf2 = resolve(finder2, "m3");
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1611
        assertTrue(cf2.modules().size() == 2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1612
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1613
        // should throw ResolutionException as m4 will read modules named "m1".
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1614
        ModuleFinder finder3 = ModuleUtils.finderOf(descriptor4);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1615
        Configuration.resolve(finder3, List.of(cf1, cf2), ModuleFinder.of(), Set.of("m4"));
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1616
    }
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1617
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1618
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1619
    /**
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1620
     * Test two modules exporting package p to a module that reads both.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1621
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1622
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1623
    public void testPackageSuppliedByTwoOthers() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1624
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1625
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1626
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1627
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1628
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1629
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1630
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1631
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1632
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1633
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1634
        ModuleDescriptor descriptor3 = newBuilder("m3")
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1635
                .exports("p", Set.of("m1"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1636
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1637
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1638
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1639
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1640
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1641
        // m2 and m3 export package p to module m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1642
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1643
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1644
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1645
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1646
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1647
     * Test the scenario where a module contains a package p and reads
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1648
     * a module that exports package p.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1649
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1650
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1651
    public void testPackageSuppliedBySelfAndOther() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1652
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1653
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1654
                .requires("m2")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1655
                .packages(Set.of("p"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1656
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1657
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1658
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1659
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1660
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1661
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1662
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1663
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1664
        // m1 contains package p, module m2 exports package p to m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1665
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1666
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1667
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1668
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1669
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1670
     * Test the scenario where a module contains a package p and reads
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1671
     * a module that also contains a package p.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1672
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1673
    public void testContainsPackageInSelfAndOther() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1674
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1675
                .requires("m2")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1676
                .packages(Set.of("p"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1677
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1678
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1679
        ModuleDescriptor descriptor2 = newBuilder("m2")
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1680
                .packages(Set.of("p"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1681
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1682
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1683
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1684
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1685
        Configuration cf = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1686
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1687
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1688
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1689
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1690
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1691
        // m1 reads m2, m2 reads nothing
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1692
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1693
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1694
        assertTrue(m1.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1695
        assertTrue(m1.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1696
        assertTrue(m2.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1697
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1698
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1699
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1700
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1701
     * Test the scenario where a module that exports a package that is also
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1702
     * exported by a module that it reads in a parent layer.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1703
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1704
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1705
    public void testExportSamePackageAsBootLayer() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1706
        ModuleDescriptor descriptor = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1707
                .requires("java.base")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1708
                .exports("java.lang")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1709
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1710
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1711
        ModuleFinder finder = ModuleUtils.finderOf(descriptor);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1712
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  1713
        Configuration bootConfiguration = ModuleLayer.boot().configuration();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1714
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1715
        // m1 contains package java.lang, java.base exports package java.lang to m1
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1716
        resolve(bootConfiguration, finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1717
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1718
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1719
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1720
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1721
     * Test "uses p.S" where p is contained in the same module.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1722
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1723
    public void testContainsService1() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1724
        ModuleDescriptor descriptor1 = newBuilder("m1")
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1725
                .packages(Set.of("p"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1726
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1727
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1728
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1729
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1730
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1731
        Configuration cf = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1732
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1733
        assertTrue(cf.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1734
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1735
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1736
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1737
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1738
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1739
     * Test "uses p.S" where p is contained in a different module.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1740
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1741
    @Test(expectedExceptions = { ResolutionException.class })
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1742
    public void testContainsService2() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1743
        ModuleDescriptor descriptor1 = newBuilder("m1")
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1744
                .packages(Set.of("p"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1745
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1746
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1747
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1748
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1749
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1750
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1751
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1752
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1753
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1754
        // m2 does not read a module that exports p
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1755
        resolve(finder, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1756
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1757
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1758
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1759
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1760
     * Test "provides p.S" where p is contained in the same module.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1761
     */
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1762
    public void testContainsService3() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1763
        ModuleDescriptor descriptor1 = newBuilder("m1")
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1764
                .packages(Set.of("p", "q"))
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1765
                .provides("p.S", List.of("q.S1"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1766
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1767
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1768
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1769
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1770
        Configuration cf = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1771
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1772
        assertTrue(cf.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1773
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1774
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1775
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1776
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1777
    /**
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1778
     * Test "provides p.S" where p is contained in a different module.
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1779
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1780
    @Test(expectedExceptions = { ResolutionException.class })
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1781
    public void testContainsService4() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1782
        ModuleDescriptor descriptor1 = newBuilder("m1")
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1783
                .packages(Set.of("p"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1784
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1785
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1786
        ModuleDescriptor descriptor2 = newBuilder("m2")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1787
                .requires("m1")
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1788
                .provides("p.S", List.of("q.S1"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1789
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1790
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1791
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1792
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1793
        // m2 does not read a module that exports p
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1794
        resolve(finder, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1795
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1796
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1797
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1798
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1799
     * Test "uses p.S" where p is not exported to the module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1800
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1801
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1802
    public void testServiceTypePackageNotExported1() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1803
        ModuleDescriptor descriptor1 = newBuilder("m1")
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1804
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1805
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1806
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1807
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1808
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1809
        // m1 does not read a module that exports p
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1810
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1811
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1812
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1813
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1814
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1815
     * Test "provides p.S" where p is not exported to the module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1816
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1817
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1818
    public void testServiceTypePackageNotExported2() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1819
        ModuleDescriptor descriptor1 = newBuilder("m1")
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1820
                .provides("p.S", List.of("q.T"))
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1821
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1822
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1823
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1824
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1825
        // m1 does not read a module that exports p
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1826
        resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1827
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1828
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1829
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1830
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1831
     * Test the empty configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1832
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1833
    public void testEmptyConfiguration() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1834
        Configuration cf = Configuration.empty();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1835
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1836
        assertTrue(cf.parents().isEmpty());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1837
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1838
        assertTrue(cf.modules().isEmpty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1839
        assertFalse(cf.findModule("java.base").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1840
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1841
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1842
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1843
    // platform specific modules
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1844
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1845
    @DataProvider(name = "platformmatch")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1846
    public Object[][] createPlatformMatches() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1847
        return new Object[][]{
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1848
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1849
            { "",              "" },
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1850
            { "linux-arm",     "" },
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1851
            { "linux-arm",     "linux-arm" },
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1852
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1853
        };
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1854
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1855
    };
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1856
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1857
    @DataProvider(name = "platformmismatch")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1858
    public Object[][] createBad() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1859
        return new Object[][] {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1860
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1861
            { "linux-x64",        "linux-arm" },
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1862
            { "linux-x64",        "windows-x64" },
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1863
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1864
        };
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1865
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1866
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1867
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1868
     * Test creating a configuration containing platform specific modules.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1869
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1870
    @Test(dataProvider = "platformmatch")
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1871
    public void testPlatformMatch(String s1, String s2) throws IOException {
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1872
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1873
        ModuleDescriptor base =  ModuleDescriptor.newModule("java.base").build();
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1874
        Path system = writeModule(base, null);
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1875
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1876
        ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("m1")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1877
                .requires("m2")
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1878
                .build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1879
        Path dir1 = writeModule(descriptor1, s1);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1880
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1881
        ModuleDescriptor descriptor2 = ModuleDescriptor.newModule("m2").build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1882
        Path dir2 = writeModule(descriptor2, s2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1883
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1884
        ModuleFinder finder = ModuleFinder.of(system, dir1, dir2);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1885
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1886
        Configuration cf = resolve(finder, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1887
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1888
        assertTrue(cf.modules().size() == 3);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1889
        assertTrue(cf.findModule("java.base").isPresent());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1890
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1891
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1892
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1893
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1894
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1895
     * Test attempting to create a configuration with modules for different
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1896
     * platforms.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1897
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1898
    @Test(dataProvider = "platformmismatch",
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1899
          expectedExceptions = FindException.class )
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1900
    public void testPlatformMisMatch(String s1, String s2) throws IOException {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1901
        testPlatformMatch(s1, s2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1902
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1903
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1904
    // no parents
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1905
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1906
    @Test(expectedExceptions = { IllegalArgumentException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1907
    public void testResolveRequiresWithNoParents() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1908
        ModuleFinder empty = ModuleFinder.of();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1909
        Configuration.resolve(empty, List.of(), empty, Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1910
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1911
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1912
    @Test(expectedExceptions = { IllegalArgumentException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1913
    public void testResolveRequiresAndUsesWithNoParents() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1914
        ModuleFinder empty = ModuleFinder.of();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1915
        Configuration.resolveAndBind(empty, List.of(), empty, Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1916
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1917
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1918
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1919
    // parents with modules for specific platforms
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1920
    @Test(dataProvider = "platformmatch")
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1921
    public void testResolveRequiresWithCompatibleParents(String s1, String s2)
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1922
        throws IOException
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1923
    {
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1924
        ModuleDescriptor base =  ModuleDescriptor.newModule("java.base").build();
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  1925
        Path system = writeModule(base, null);
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1926
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1927
        ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("m1").build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1928
        Path dir1 = writeModule(descriptor1, s1);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1929
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1930
        ModuleDescriptor descriptor2 = ModuleDescriptor.newModule("m2").build();
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1931
        Path dir2 = writeModule(descriptor2, s2);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1932
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1933
        ModuleFinder finder1 = ModuleFinder.of(system, dir1);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1934
        Configuration cf1 = resolve(finder1, "m1");
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1935
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1936
        ModuleFinder finder2 = ModuleFinder.of(system, dir2);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1937
        Configuration cf2 = resolve(finder2, "m2");
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1938
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1939
        Configuration cf3 = Configuration.resolve(ModuleFinder.of(),
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1940
                                                  List.of(cf1, cf2),
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1941
                                                  ModuleFinder.of(),
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1942
                                                  Set.of());
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1943
        assertTrue(cf3.parents().size() == 2);
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1944
    }
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1945
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1946
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1947
    @Test(dataProvider = "platformmismatch",
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1948
          expectedExceptions = IllegalArgumentException.class )
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1949
    public void testResolveRequiresWithConflictingParents(String s1, String s2)
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1950
        throws IOException
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1951
    {
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  1952
        testResolveRequiresWithCompatibleParents(s1, s2);
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1953
    }
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1954
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1955
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1956
    // null handling
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1957
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1958
    // finder1, finder2, roots
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1959
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1960
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1961
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1962
    public void testResolveRequiresWithNull1() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1963
        resolve((ModuleFinder)null, ModuleFinder.of());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1964
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1965
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1966
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1967
    public void testResolveRequiresWithNull2() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1968
        resolve(ModuleFinder.of(), (ModuleFinder)null);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1969
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1970
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1971
    @Test(expectedExceptions = { NullPointerException.class })
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1972
    public void testResolveRequiresWithNull3() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1973
        Configuration empty = Configuration.empty();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1974
        Configuration.resolve(null, List.of(empty),  ModuleFinder.of(), Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1975
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1976
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1977
    @Test(expectedExceptions = { NullPointerException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1978
    public void testResolveRequiresWithNull4() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1979
        ModuleFinder empty = ModuleFinder.of();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1980
        Configuration.resolve(empty, null, empty, Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1981
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1982
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1983
    @Test(expectedExceptions = { NullPointerException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1984
    public void testResolveRequiresWithNull5() {
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  1985
        Configuration cf = ModuleLayer.boot().configuration();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1986
        Configuration.resolve(ModuleFinder.of(), List.of(cf), null, Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1987
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1988
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1989
    @Test(expectedExceptions = { NullPointerException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1990
    public void testResolveRequiresWithNull6() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1991
        ModuleFinder empty = ModuleFinder.of();
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  1992
        Configuration cf = ModuleLayer.boot().configuration();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1993
        Configuration.resolve(empty, List.of(cf), empty, null);
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1994
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1995
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  1996
    @Test(expectedExceptions = { NullPointerException.class })
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1997
    public void testResolveRequiresAndUsesWithNull1() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  1998
        resolveAndBind((ModuleFinder) null, ModuleFinder.of());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1999
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2000
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2001
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2002
    public void testResolveRequiresAndUsesWithNull2() {
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2003
        resolveAndBind(ModuleFinder.of(), (ModuleFinder) null);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2004
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2005
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2006
    @Test(expectedExceptions = { NullPointerException.class })
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2007
    public void testResolveRequiresAndUsesWithNull3() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2008
        Configuration empty = Configuration.empty();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2009
        Configuration.resolveAndBind(null, List.of(empty), ModuleFinder.of(), Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2010
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2011
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2012
    @Test(expectedExceptions = { NullPointerException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2013
    public void testResolveRequiresAndUsesWithNull4() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2014
        ModuleFinder empty = ModuleFinder.of();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2015
        Configuration.resolveAndBind(empty, null, empty, Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2016
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2017
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2018
    @Test(expectedExceptions = { NullPointerException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2019
    public void testResolveRequiresAndUsesWithNull5() {
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  2020
        Configuration cf = ModuleLayer.boot().configuration();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2021
        Configuration.resolveAndBind(ModuleFinder.of(), List.of(cf), null, Set.of());
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2022
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2023
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2024
    @Test(expectedExceptions = { NullPointerException.class })
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2025
    public void testResolveRequiresAndUsesWithNull6() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2026
        ModuleFinder empty = ModuleFinder.of();
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  2027
        Configuration cf = ModuleLayer.boot().configuration();
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2028
        Configuration.resolveAndBind(empty, List.of(cf), empty, null);
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2029
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2030
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39124
diff changeset
  2031
    @Test(expectedExceptions = { NullPointerException.class })
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2032
    public void testFindModuleWithNull() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2033
        Configuration.empty().findModule(null);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2034
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2035
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2036
    // immutable sets
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2037
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2038
    @Test(expectedExceptions = { UnsupportedOperationException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2039
    public void testImmutableSet1() {
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  2040
        Configuration cf = ModuleLayer.boot().configuration();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2041
        ResolvedModule base = cf.findModule("java.base").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2042
        cf.modules().add(base);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2043
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2044
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2045
    @Test(expectedExceptions = { UnsupportedOperationException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2046
    public void testImmutableSet2() {
44545
83b611b88ac8 8177530: Module system implementation refresh (4/2017)
alanb
parents: 44359
diff changeset
  2047
        Configuration cf = ModuleLayer.boot().configuration();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2048
        ResolvedModule base = cf.findModule("java.base").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2049
        base.reads().add(base);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2050
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2051
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2052
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2053
    /**
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2054
     * Invokes parent.resolve(...)
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2055
     */
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2056
    private Configuration resolve(Configuration parent,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2057
                                  ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2058
                                  ModuleFinder after,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2059
                                  String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2060
        return parent.resolve(before, after, Set.of(roots));
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2061
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2062
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2063
    private Configuration resolve(Configuration parent,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2064
                                  ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2065
                                  String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2066
        return resolve(parent, before, ModuleFinder.of(), roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2067
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2068
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2069
    private Configuration resolve(ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2070
                                  ModuleFinder after,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2071
                                  String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2072
        return resolve(Configuration.empty(), before, after, roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2073
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2074
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2075
    private Configuration resolve(ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2076
                                  String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2077
        return resolve(Configuration.empty(), before, roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2078
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2079
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2080
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2081
    /**
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2082
     * Invokes parent.resolveAndBind(...)
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2083
     */
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2084
    private Configuration resolveAndBind(Configuration parent,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2085
                                         ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2086
                                         ModuleFinder after,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2087
                                         String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2088
        return parent.resolveAndBind(before, after, Set.of(roots));
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2089
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2090
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2091
    private Configuration resolveAndBind(Configuration parent,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2092
                                         ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2093
                                         String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2094
        return resolveAndBind(parent, before, ModuleFinder.of(), roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2095
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2096
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2097
    private Configuration resolveAndBind(ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2098
                                         ModuleFinder after,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2099
                                         String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2100
        return resolveAndBind(Configuration.empty(), before, after, roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2101
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2102
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2103
    private Configuration resolveAndBind(ModuleFinder before,
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2104
                                         String... roots) {
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2105
        return resolveAndBind(Configuration.empty(), before, roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2106
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2107
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2108
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2109
    /**
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2110
     * Writes a module-info.class. If {@code targetPlatform} is not null then
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2111
     * it includes the ModuleTarget class file attribute with the target platform.
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2112
     */
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2113
    static Path writeModule(ModuleDescriptor descriptor, String targetPlatform)
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2114
        throws IOException
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2115
    {
45004
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2116
        ModuleTarget target;
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2117
        if (targetPlatform != null) {
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2118
            target = new ModuleTarget(targetPlatform);
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2119
        } else {
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2120
            target = null;
ea3137042a61 8178380: Module system implementation refresh (5/2017)
alanb
parents: 44545
diff changeset
  2121
        }
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2122
        String name = descriptor.name();
45833
882f4885ec80 8183536: Update jdk tests to allow for unique test classes directory
alanb
parents: 45004
diff changeset
  2123
        Path dir = Files.createTempDirectory(Paths.get(""), name);
44359
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2124
        Path mi = dir.resolve("module-info.class");
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2125
        try (OutputStream out = Files.newOutputStream(mi)) {
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2126
            ModuleInfoWriter.write(descriptor, target, out);
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2127
        }
c6761862ca0b 8174823: Module system implementation refresh (3/2017)
alanb
parents: 43712
diff changeset
  2128
        return dir;
43712
5dfd0950317c 8173393: Module system implementation refresh (2/2017)
alanb
parents: 42338
diff changeset
  2129
    }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  2130
}