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