jdk/test/java/lang/module/ConfigurationTest.java
author mli
Mon, 20 Jun 2016 18:30:57 -0700
changeset 39124 2f46f5082cd7
parent 38457 3d019217e322
child 42338 a60f280f803c
permissions -rw-r--r--
8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java Reviewed-by: alanb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     1
/*
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
     2
 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
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
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    27
 * @build ConfigurationTest ModuleUtils
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    28
 * @run testng ConfigurationTest
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    29
 * @summary Basic tests for java.lang.module.Configuration
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    30
 */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    31
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    32
import java.lang.module.Configuration;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    33
import java.lang.module.ModuleDescriptor;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    34
import java.lang.module.ModuleDescriptor.Requires.Modifier;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    35
import java.lang.module.ModuleFinder;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    36
import java.lang.module.ResolutionException;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    37
import java.lang.module.ResolvedModule;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    38
import java.lang.reflect.Layer;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    39
import java.util.Optional;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    40
import java.util.Set;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    41
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    42
import org.testng.annotations.DataProvider;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    43
import org.testng.annotations.Test;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    44
import static org.testng.Assert.*;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    45
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    46
@Test
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    47
public class ConfigurationTest {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    48
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    49
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    50
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    51
     * Basic test of resolver
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    52
     *     m1 requires m2, m2 requires m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    53
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    54
    public void testBasic() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    55
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    56
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    57
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    58
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    59
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    60
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    61
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    62
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    63
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    64
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    65
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    66
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    67
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    68
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    69
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    70
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    71
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    72
        Configuration cf = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    73
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    74
        assertTrue(cf.modules().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    75
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    76
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    77
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    78
        assertTrue(cf.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    79
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    80
        assertTrue(cf.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    81
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    82
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    83
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    84
        ResolvedModule m3 = cf.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    85
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    86
        // m1 reads m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    87
        assertTrue(m1.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    88
        assertTrue(m1.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    89
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    90
        // m2 reads m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    91
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    92
        assertTrue(m2.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    93
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    94
        // m3 reads nothing
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    95
        assertTrue(m3.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    96
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    97
        // toString
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    98
        assertTrue(cf.toString().contains("m1"));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
    99
        assertTrue(cf.toString().contains("m2"));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   100
        assertTrue(cf.toString().contains("m3"));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   101
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   102
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   103
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   104
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   105
     * Basic test of "requires public":
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   106
     *     m1 requires m2, m2 requires public m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   107
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   108
    public void testRequiresPublic1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   109
        // m1 requires m2, m2 requires public m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   110
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   111
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   112
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   113
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   114
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   115
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   116
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   117
                .requires(Modifier.PUBLIC, "m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   118
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   119
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   120
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   121
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   122
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   123
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   124
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   125
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   126
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   127
        Configuration cf = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   128
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   129
        assertTrue(cf.modules().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   130
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   131
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   132
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   133
        assertTrue(cf.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   134
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   135
        assertTrue(cf.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   136
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   137
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   138
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   139
        ResolvedModule m3 = cf.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   140
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   141
        // m1 reads m2 and m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   142
        assertTrue(m1.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   143
        assertTrue(m1.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   144
        assertTrue(m1.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   145
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   146
        // m2 reads m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   147
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   148
        assertTrue(m2.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   149
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   150
        // m3 reads nothing
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   151
        assertTrue(m3.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   152
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   153
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   154
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   155
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   156
     * Basic test of "requires public" with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   157
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   158
     * The test consists of three configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   159
     * - Configuration cf1: m1, m2 requires public m1
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
   160
     * - Configuration cf2: m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   161
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   162
    public void testRequiresPublic2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   163
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   164
        // cf1: m1 and m2, m2 requires public m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   165
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   166
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   167
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   168
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   169
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   170
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   171
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   172
                .requires(Modifier.PUBLIC, "m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   173
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   174
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   175
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   176
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   177
        Configuration cf1 = resolveRequires(finder1, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   178
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   179
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   180
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   181
        assertTrue(cf1.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   182
        assertTrue(cf1.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   183
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   184
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   185
        ResolvedModule m2 = cf1.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   186
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   187
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   188
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   189
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   190
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   191
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   192
        // cf2: m3, m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   193
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   194
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   195
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   196
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   197
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   198
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   199
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   200
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   201
        Configuration cf2 = resolveRequires(cf1, finder2, "m3");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   202
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   203
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   204
        assertTrue(cf2.findModule("m1").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   205
        assertTrue(cf2.findModule("m2").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   206
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   207
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   208
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   209
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   210
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   211
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   212
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   213
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   214
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   215
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   216
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   217
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   218
     * Basic test of "requires public" with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   219
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   220
     * The test consists of three configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   221
     * - Configuration cf1: m1
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
   222
     * - Configuration cf2: m2 requires public m1, m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   223
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   224
    public void testRequiresPublic3() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   225
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   226
        // cf1: m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   227
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   228
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   229
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   230
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   231
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   232
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   233
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   234
        Configuration cf1 = resolveRequires(finder1, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   235
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   236
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   237
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   238
        assertTrue(cf1.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   239
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   240
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   241
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   242
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   243
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   244
        // cf2: m2, m3: m2 requires public m1, m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   245
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   246
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   247
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   248
                .requires(Modifier.PUBLIC, "m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   249
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   250
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   251
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   252
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   253
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   254
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   255
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   256
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   257
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   258
        Configuration cf2 = resolveRequires(cf1, finder2, "m3");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   259
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   260
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   261
        assertTrue(cf2.findModule("m1").isPresent());   // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   262
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   263
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   264
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   265
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   266
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   267
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   268
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   269
        assertTrue(m2.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   270
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   271
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   272
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   273
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   274
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   275
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   276
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   277
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   278
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   279
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   280
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   281
     * Basic test of "requires public" with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   282
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   283
     * The test consists of three configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   284
     * - Configuration cf1: m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   285
     * - Configuration cf2: m2 requires public m1
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
   286
     * - Configuraiton cf3: m3 requires m2
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   287
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   288
    public void testRequiresPublic4() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   289
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   290
        // cf1: m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   291
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   292
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   293
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   294
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   295
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   296
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   297
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   298
        Configuration cf1 = resolveRequires(finder1, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   299
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   300
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   301
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   302
        assertTrue(cf1.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   303
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   304
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   305
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   306
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   307
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   308
        // cf2: m2 requires public m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   309
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   310
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   311
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   312
                .requires(Modifier.PUBLIC, "m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   313
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   314
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   315
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   316
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   317
        Configuration cf2 = resolveRequires(cf1, finder2, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   318
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   319
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   320
        assertTrue(cf2.findModule("m1").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   321
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   322
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   323
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   324
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   325
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   326
        assertTrue(m2.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   327
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   328
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   329
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   330
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   331
        // cf3: m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   332
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   333
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   334
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   335
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   336
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   337
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   338
        ModuleFinder finder3 = ModuleUtils.finderOf(descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   339
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   340
        Configuration cf3 = resolveRequires(cf2, finder3, "m3");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   341
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   342
        assertTrue(cf3.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   343
        assertTrue(cf3.findModule("m1").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   344
        assertTrue(cf3.findModule("m2").isPresent());  // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   345
        assertTrue(cf3.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   346
        assertTrue(cf3.parent().get() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   347
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   348
        ResolvedModule m3 = cf3.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   349
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   350
        assertTrue(m3.configuration() == cf3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   351
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   352
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   353
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   354
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   355
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   356
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   357
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   358
     * Basic test of "requires public" with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   359
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   360
     * The test consists of two configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   361
     * - Configuration cf1: m1, m2 requires public m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   362
     * - Configuration cf2: m3 requires public m2, m4 requires m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   363
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   364
    public void testRequiresPublic5() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   365
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   366
        // cf1: m1, m2 requires public m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   367
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   368
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   369
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   370
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   371
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   372
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   373
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   374
                .requires(Modifier.PUBLIC, "m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   375
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   376
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   377
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   378
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   379
        Configuration cf1 = resolveRequires(finder1, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   380
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   381
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   382
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   383
        assertTrue(cf1.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   384
        assertTrue(cf1.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   385
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   386
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   387
        ResolvedModule m2 = cf1.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   388
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   389
        assertTrue(m1.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   390
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   391
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   392
        assertTrue(m2.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   393
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   394
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   395
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   396
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   397
        // cf2: m3 requires public m2, m4 requires m3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   398
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   399
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   400
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   401
                .requires(Modifier.PUBLIC, "m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   402
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   403
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   404
        ModuleDescriptor descriptor4
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   405
            = new ModuleDescriptor.Builder("m4")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   406
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   407
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   408
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   409
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   410
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   411
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   412
        Configuration cf2 = resolveRequires(cf1, finder2, "m3", "m4");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   413
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   414
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   415
        assertTrue(cf2.findModule("m1").isPresent());   // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   416
        assertTrue(cf2.findModule("m2").isPresent());   // in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   417
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   418
        assertTrue(cf2.findModule("m4").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   419
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   420
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   421
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   422
        ResolvedModule m4 = cf2.findModule("m4").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   423
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   424
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   425
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   426
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   427
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   428
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   429
        assertTrue(m4.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   430
        assertTrue(m4.reads().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   431
        assertTrue(m4.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   432
        assertTrue(m4.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   433
        assertTrue(m4.reads().contains(m3));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   434
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   435
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   436
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   437
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   438
     * Basic test of binding services
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   439
     *     m1 uses p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   440
     *     m2 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   441
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   442
    public void testServiceBinding1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   443
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   444
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   445
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   446
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   447
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   448
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   449
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   450
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   451
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   452
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   453
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   454
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   455
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   456
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   457
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   458
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   459
        Configuration cf = resolveRequiresAndUses(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   460
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   461
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   462
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   463
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   464
        assertTrue(cf.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   465
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   466
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   467
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   468
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   469
        assertTrue(m1.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   470
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   471
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   472
        assertTrue(m2.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   473
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   474
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   475
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   476
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   477
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   478
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   479
     * Basic test of binding services
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   480
     *     m1 uses p.S1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   481
     *     m2 provides p.S1, m2 uses p.S2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   482
     *     m3 provides p.S2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   483
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   484
    public void testServiceBinding2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   485
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   486
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   487
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   488
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   489
                .uses("p.S1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   490
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   491
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   492
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   493
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   494
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   495
                .uses("p.S2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   496
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   497
                .provides("p.S1", "q.Service1Impl")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   498
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   499
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   500
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   501
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   502
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   503
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   504
                .provides("p.S2", "q.Service2Impl")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   505
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   506
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   507
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   508
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   509
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   510
        Configuration cf = resolveRequiresAndUses(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   512
        assertTrue(cf.modules().size() == 3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   513
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   514
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   515
        assertTrue(cf.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   516
        assertTrue(cf.parent().get() == Configuration.empty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   517
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   518
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   519
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   520
        ResolvedModule m3 = cf.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   521
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   522
        assertTrue(m1.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   523
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   524
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   525
        assertTrue(m2.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   526
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   527
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   528
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   529
        assertTrue(m3.configuration() == cf);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   530
        assertTrue(m3.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   531
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   532
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   533
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   534
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   535
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   536
     * Basic test of binding services with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   537
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   538
     * The test consists of two configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   539
     * - Configuration cf1: m1 uses p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   540
     * - Configuration cf2: m2 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   541
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   542
    public void testServiceBindingWithConfigurations1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   543
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   544
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   545
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   546
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   547
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   548
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   549
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   550
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   551
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   552
        Configuration cf1 = resolveRequires(finder1, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   553
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   554
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   555
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   556
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   557
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   558
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   559
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   560
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   561
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   562
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   563
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   564
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   565
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   566
        Configuration cf2 = resolveRequiresAndUses(cf1, finder2); // no roots
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   567
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   568
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   569
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   570
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   571
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   572
        ResolvedModule m1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   573
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   574
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   575
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   576
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   577
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   578
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   579
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   580
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   581
     * Basic test of binding services with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   582
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   583
     * The test consists of two configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   584
     * - Configuration cf1: m1 uses p.S && provides p.S,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   585
     *                      m2 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   586
     * - Configuration cf2: m3 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   587
     *                      m4 provides p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   588
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   589
    public void testServiceBindingWithConfigurations2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   590
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   591
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   592
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   593
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   594
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   595
                .conceals("p1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   596
                .provides("p.S", "p1.ServiceImpl")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   597
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   598
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   599
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   600
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   601
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   602
                .conceals("p2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   603
                .provides("p.S", "p2.ServiceImpl")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   604
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   605
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   606
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   607
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   608
        Configuration cf1 = resolveRequiresAndUses(finder1, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   609
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   610
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   611
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   612
        assertTrue(cf1.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   613
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   614
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   615
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   616
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   617
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   618
                .conceals("p3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   619
                .provides("p.S", "p3.ServiceImpl")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   620
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   621
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   622
        ModuleDescriptor descriptor4
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   623
            = new ModuleDescriptor.Builder("m4")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   624
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   625
                .conceals("p4")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   626
                .provides("p.S", "p4.ServiceImpl")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   627
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   628
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   629
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   630
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   631
        Configuration cf2 = resolveRequiresAndUses(cf1, finder2); // no roots
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   632
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   633
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   634
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   635
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   636
        assertTrue(cf2.findModule("m4").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   637
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   638
        ResolvedModule m1 = cf2.findModule("m1").get();  // should find in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   639
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   640
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   641
        ResolvedModule m4 = cf2.findModule("m4").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   642
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   643
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   644
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   645
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   646
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   647
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   648
        assertTrue(m3.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   649
        assertTrue(m3.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   650
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   651
        assertTrue(m4.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   652
        assertTrue(m4.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   653
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   654
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   655
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   656
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   657
     * Basic test of binding services with configurations.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   658
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   659
     * 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
   660
     * Test configuration cf2: m1 uses p.S, p@2.0 provides p.S
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   661
     * Test configuration cf2: m1 uses p.S
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   662
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   663
    public void testServiceBindingWithConfigurations3() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   664
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   665
        ModuleDescriptor service
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   666
            = new ModuleDescriptor.Builder("s")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   667
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   668
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   669
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   670
        ModuleDescriptor provider_v1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   671
            = new ModuleDescriptor.Builder("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   672
                .version("1.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   673
                .requires("s")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   674
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   675
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   676
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   677
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   678
        ModuleFinder finder1 = ModuleUtils.finderOf(service, provider_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   679
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   680
        Configuration cf1 = resolveRequires(finder1, "p");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   681
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   682
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   683
        assertTrue(cf1.findModule("s").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   684
        assertTrue(cf1.findModule("p").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   685
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   686
        // p@1.0 in cf1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   687
        ResolvedModule p = cf1.findModule("p").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   688
        assertEquals(p.reference().descriptor(), provider_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   689
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   690
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   691
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   692
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   693
                .requires("s")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   694
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   695
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   696
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   697
        ModuleDescriptor provider_v2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   698
            = new ModuleDescriptor.Builder("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   699
                .version("2.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   700
                .requires("s")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   701
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   702
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   703
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   704
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   705
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, provider_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   706
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   707
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   708
        // finder2 is the before ModuleFinder and so p@2.0 should be located
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   709
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   710
        Configuration cf2 = resolveRequiresAndUses(cf1, finder2, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   711
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   712
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   713
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   714
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   715
        // p should be found in cf2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   716
        p = cf2.findModule("p").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   717
        assertTrue(p.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   718
        assertEquals(p.reference().descriptor(), provider_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   719
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   720
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   721
        // finder2 is the after ModuleFinder and so p@2.0 should not be located
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   722
        // as module p is in parent configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   723
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
   724
        cf2 = resolveRequiresAndUses(cf1, ModuleFinder.of(), finder2, "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   725
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   726
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   727
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   728
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   729
        // p should be found in cf1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   730
        p = cf2.findModule("p").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   731
        assertTrue(p.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   732
        assertEquals(p.reference().descriptor(), provider_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   733
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   734
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   735
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   736
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   737
     * Basic test with two module finders.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   738
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   739
     * Module m2 can be found by both the before and after finders.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   740
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   741
    public void testWithTwoFinders1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   742
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   743
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   744
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   745
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   746
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   747
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   748
        ModuleDescriptor descriptor2_v1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   749
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   750
                .version("1.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   751
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   752
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   753
        ModuleDescriptor descriptor2_v2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   754
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   755
                .version("2.0")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   756
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   757
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   758
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   759
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, descriptor2_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   760
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   761
        Configuration cf = resolveRequires(finder1, finder2, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   762
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   763
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   764
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   765
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   766
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   767
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   768
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   769
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   770
        assertEquals(m1.reference().descriptor(), descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   771
        assertEquals(m2.reference().descriptor(), descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   772
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   773
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   774
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   775
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   776
     * Basic test with two modules finders and service binding.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   777
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   778
     * The before and after ModuleFinders both locate a service provider module
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   779
     * named "m2" that provide implementations of the same service type.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   780
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   781
    public void testWithTwoFinders2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   782
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   783
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   784
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   785
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   786
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   787
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   788
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   789
        ModuleDescriptor descriptor2_v1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   790
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   791
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   792
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   793
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   794
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   795
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   796
        ModuleDescriptor descriptor2_v2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   797
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   798
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   799
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   800
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   801
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   802
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   803
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   804
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2_v2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   805
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   806
        Configuration cf = resolveRequiresAndUses(finder1, finder2, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   807
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   808
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   809
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   810
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   811
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   812
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   813
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   814
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   815
        assertEquals(m1.reference().descriptor(), descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   816
        assertEquals(m2.reference().descriptor(), descriptor2_v1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   817
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   818
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   819
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   820
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   821
     * Basic test for resolving a module that is located in the parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   822
     * configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   823
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   824
    public void testResolvedInParent1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   825
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   826
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   827
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   828
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   829
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   830
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   831
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   832
        Configuration cf1 = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   833
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   834
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   835
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   836
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   837
        Configuration cf2 = resolveRequires(cf1, finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   838
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   839
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   840
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   841
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   842
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   843
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   844
     * Basic test for resolving a module that has a dependency on a module
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   845
     * in the parent configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   846
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   847
    public void testResolvedInParent2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   848
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   849
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   850
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   851
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   852
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   853
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   854
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   855
        Configuration cf1 = resolveRequires(finder1, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   856
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   857
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   858
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   859
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   860
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   861
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   862
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   863
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   864
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   865
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   866
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   867
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
   868
        Configuration cf2 = resolveRequires(cf1, ModuleFinder.of(), finder2, "m2");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   869
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   870
        assertTrue(cf2.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   871
        assertTrue(cf2.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   872
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   873
        ResolvedModule m1 = cf2.findModule("m1").get();   // find in parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   874
        ResolvedModule m2 = cf2.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   875
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   876
        assertTrue(m1.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   877
        assertTrue(m2.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   878
        assertTrue(m2.reads().contains(m1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   879
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   880
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   881
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   882
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   883
     * Basic test of using the beforeFinder to override a module in the parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   884
     * configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   885
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   886
    public void testOverriding1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   887
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   888
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   889
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   890
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   891
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   892
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   893
        Configuration cf1 = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   894
        assertTrue(cf1.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   895
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   896
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   897
        Configuration cf2 = resolveRequires(cf1, finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   898
        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
   899
        assertTrue(cf2.findModule("m1").isPresent());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   900
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   901
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   902
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   903
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   904
     * Basic test of using the beforeFinder to override a module in the parent
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   905
     * configuration but where implied readability in the picture so that the
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   906
     * module in the parent is read.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   907
     *
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   908
     * The test consists of two configurations:
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   909
     * - Configuration cf1: m1, m2 requires public m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   910
     * - Configuration cf2: m1, m3 requires m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   911
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   912
    public void testOverriding2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   913
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   914
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   915
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   916
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   917
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   918
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   919
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   920
                .requires(Modifier.PUBLIC, "m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   921
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   922
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   923
        ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   924
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   925
        Configuration cf1 = resolveRequires(finder1, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   926
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   927
        assertTrue(cf1.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   928
        assertTrue(cf1.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   929
        assertTrue(cf1.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   930
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   931
        // cf2: m3 requires m2, m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   932
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   933
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   934
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   935
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   936
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   937
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   938
        ModuleFinder finder2 = ModuleUtils.finderOf(descriptor1, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   939
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   940
        Configuration cf2 = resolveRequires(cf1, finder2, "m1", "m3");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   941
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   942
        assertTrue(cf2.parent().get() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   943
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   944
        assertTrue(cf2.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   945
        assertTrue(cf2.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   946
        assertTrue(cf2.findModule("m3").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   947
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   948
        ResolvedModule m1_1 = cf1.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   949
        ResolvedModule m1_2 = cf2.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   950
        ResolvedModule m2 = cf1.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   951
        ResolvedModule m3 = cf2.findModule("m3").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   952
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   953
        assertTrue(m1_1.configuration() == cf1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   954
        assertTrue(m1_2.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   955
        assertTrue(m3.configuration() == cf2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   956
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   957
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   958
        // check that m3 reads cf1/m1 and cf2/m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   959
        assertTrue(m3.reads().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   960
        assertTrue(m3.reads().contains(m1_1));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   961
        assertTrue(m3.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   962
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   963
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   964
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   965
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   966
     * Root module not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   967
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   968
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   969
    public void testRootNotFound() {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
   970
        resolveRequires(ModuleFinder.of(), "m1");
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   971
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   972
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   973
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   974
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   975
     * Direct dependency not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   976
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   977
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   978
    public void testDirectDependencyNotFound() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   979
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   980
            = new ModuleDescriptor.Builder("m1").requires("m2").build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   981
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   982
        resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   983
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   984
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   985
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   986
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   987
     * Transitive dependency not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   988
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   989
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   990
    public void testTransitiveDependencyNotFound() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   991
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   992
            = new ModuleDescriptor.Builder("m1").requires("m2").build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   993
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   994
            = new ModuleDescriptor.Builder("m2").requires("m3").build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   995
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
   996
        resolveRequires(finder, "m1");
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
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1000
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1001
     * Service provider dependency not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1002
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1003
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1004
    public void testServiceProviderDependencyNotFound() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1005
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1006
        // service provider dependency (on m3) not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1007
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1008
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1009
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1010
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1011
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1012
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1013
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1014
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1015
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1016
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1017
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1018
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1019
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1020
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1021
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1022
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1023
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1024
        // should throw ResolutionException because m3 is not found
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1025
        Configuration cf = resolveRequiresAndUses(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1026
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1027
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1028
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1029
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1030
     * Simple cycle.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1031
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1032
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1033
    public void testSimpleCycle() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1034
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1035
            = new ModuleDescriptor.Builder("m1").requires("m2").build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1036
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1037
            = new ModuleDescriptor.Builder("m2").requires("m3").build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1038
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1039
            = new ModuleDescriptor.Builder("m3").requires("m1").build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1040
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1041
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1042
        resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1043
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1044
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1045
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1046
     * Basic test for detecting cycles involving a service provider module
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1047
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1048
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1049
    public void testCycleInProvider() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1050
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1051
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1052
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1053
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1054
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1055
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1056
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1057
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1058
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1059
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1060
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1061
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1062
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1063
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1064
            = new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1065
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1066
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1067
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1068
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1069
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1070
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1071
        // should throw ResolutionException because of the m2 <--> m3 cycle
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1072
        resolveRequiresAndUses(finder, "m1");
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
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1076
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1077
     * Test two modules exporting package p to a module that reads both.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1078
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1079
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1080
    public void testPackageSuppliedByTwoOthers() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1081
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1082
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1083
            =  new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1084
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1085
                .requires("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1086
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1087
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1088
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1089
            =  new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1090
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1091
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1092
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1093
        ModuleDescriptor descriptor3
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1094
            =  new ModuleDescriptor.Builder("m3")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1095
                .exports("p", "m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1096
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1097
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1098
        ModuleFinder finder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1099
            = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1100
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1101
        // m2 and m3 export package p to module m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1102
        resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1103
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1104
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1105
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1106
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1107
     * Test the scenario where a module has a concealed package p and reads
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1108
     * a module that exports package p.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1109
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1110
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1111
    public void testPackageSuppliedBySelfAndOther() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1112
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1113
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1114
            =  new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1115
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1116
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1117
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1118
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1119
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1120
            =  new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1121
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1122
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1123
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1124
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1125
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1126
        //  m1 contains package p, module m2 exports package p to m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1127
        resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1128
    }
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
     * Test the scenario where a module has a concealed package p and reads
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1133
     * a module that also has a concealed package p.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1134
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1135
    public void testPackagePrivateToSelfAndOther() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1136
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1137
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1138
            =  new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1139
                .requires("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1140
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1141
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1142
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1143
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1144
            =  new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1145
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1146
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1147
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1148
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1149
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1150
        Configuration cf = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1151
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1152
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1153
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1154
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1155
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1156
        // m1 reads m2, m2 reads nothing
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1157
        ResolvedModule m1 = cf.findModule("m1").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1158
        ResolvedModule m2 = cf.findModule("m2").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1159
        assertTrue(m1.reads().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1160
        assertTrue(m1.reads().contains(m2));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1161
        assertTrue(m2.reads().size() == 0);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1162
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1163
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1164
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1165
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1166
     * Test the scenario where a module that exports a package that is also
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1167
     * exported by a module that it reads in a parent layer.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1168
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1169
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1170
    public void testExportSamePackageAsBootLayer() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1171
        ModuleDescriptor descriptor
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1172
            =  new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1173
                .requires("java.base")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1174
                .exports("java.lang")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1175
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1176
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1177
        ModuleFinder finder = ModuleUtils.finderOf(descriptor);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1178
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1179
        Configuration bootConfiguration = Layer.boot().configuration();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1180
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1181
        // m1 contains package java.lang, java.base exports package java.lang to m1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1182
        resolveRequires(bootConfiguration, finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1183
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1184
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1185
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1186
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1187
     * Test "uses p.S" where p is a concealed package in the same module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1188
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1189
    public void testConcealedService1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1190
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1191
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1192
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1193
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1194
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1195
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1196
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1197
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1198
        Configuration cf = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1199
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1200
        assertTrue(cf.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1201
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1202
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1203
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1204
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1205
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1206
     * Test "uses p.S" where p is a concealed package in a different module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1207
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1208
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1209
    public void testConcealedService2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1210
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1211
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1212
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1213
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1214
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1215
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1216
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1217
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1218
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1219
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1220
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1221
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1222
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1223
        // m2 does not read a module that exports p
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1224
        resolveRequires(finder, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1225
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1226
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1227
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1228
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1229
     * Test "provides p.S" where p is a concealed package in the same module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1230
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1231
    public void testConcealedService3() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1232
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1233
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1234
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1235
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1236
                .provides("p.S", "q.S1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1237
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1238
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1239
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1240
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1241
        Configuration cf = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1242
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1243
        assertTrue(cf.modules().size() == 1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1244
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1245
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1246
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1247
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1248
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1249
     * Test "provides p.S" where p is a concealed package in a different module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1250
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1251
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1252
    public void testConcealedService4() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1253
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1254
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1255
                .conceals("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1256
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1257
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1258
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1259
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1260
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1261
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1262
                .provides("p.S", "q.S1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1263
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1264
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1265
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1266
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1267
        // m2 does not read a module that exports p
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1268
        resolveRequires(finder, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1269
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1270
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1271
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1272
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1273
     * Test "uses p.S" where p is not exported to the module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1274
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1275
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1276
    public void testServiceTypePackageNotExported1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1277
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1278
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1279
                .uses("p.S")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1280
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1281
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1282
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1283
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1284
        // m1 does not read a module that exports p
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1285
        resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1286
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1287
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1288
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1289
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1290
     * Test "provides p.S" where p is not exported to the module.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1291
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1292
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1293
    public void testServiceTypePackageNotExported2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1294
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1295
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1296
                .conceals("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1297
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1298
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1299
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1300
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1301
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1302
        // m1 does not read a module that exports p
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1303
        resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1304
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1305
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1306
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1307
    /**
39124
2f46f5082cd7 8159879: Some typo and minor test bugs in ava/lang/module/ModuleReferenceTest.java and ConfigurationTest.java
mli
parents: 38457
diff changeset
  1308
     * Test "provides p.S with q.T" where q.T is not local
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1309
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1310
    @Test(expectedExceptions = { ResolutionException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1311
    public void testProviderPackageNotLocal() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1312
        ModuleDescriptor descriptor1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1313
            = new ModuleDescriptor.Builder("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1314
                .exports("p")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1315
                .exports("q")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1316
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1317
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1318
        ModuleDescriptor descriptor2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1319
            = new ModuleDescriptor.Builder("m2")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1320
                .requires("m1")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1321
                .provides("p.S", "q.T")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1322
                .build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1323
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1324
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1325
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1326
        // q.T not in module m2
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1327
        resolveRequires(finder, "m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1328
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1329
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1330
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1331
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1332
     * Test the empty configuration.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1333
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1334
    public void testEmptyConfiguration() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1335
        Configuration cf = Configuration.empty();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1336
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1337
        assertFalse(cf.parent().isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1338
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1339
        assertTrue(cf.modules().isEmpty());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1340
        assertFalse(cf.findModule("java.base").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1341
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1342
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1343
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1344
    // platform specific modules
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1345
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1346
    @DataProvider(name = "platformmatch")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1347
    public Object[][] createPlatformMatches() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1348
        return new Object[][]{
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1349
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1350
            { "linux-*-*",       "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1351
            { "*-arm-*",         "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1352
            { "*-*-2.6",         "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1353
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1354
            { "linux-arm-*",     "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1355
            { "linux-*-2.6",     "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1356
            { "*-arm-2.6",       "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1357
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1358
            { "linux-arm-2.6",   "*-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1359
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1360
            { "linux-*-*",       "linux-*-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1361
            { "*-arm-*",         "*-arm-*"   },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1362
            { "*-*-2.6",         "*-*-2.6"   },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1363
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1364
            { "linux-arm-*",     "linux-arm-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1365
            { "linux-arm-*",     "linux-*-*"   },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1366
            { "linux-*-2.6",     "linux-*-2.6" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1367
            { "linux-*-2.6",     "linux-arm-*" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1368
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1369
            { "linux-arm-2.6",   "linux-arm-2.6" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1370
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1371
        };
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1372
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1373
    };
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1374
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1375
    @DataProvider(name = "platformmismatch")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1376
    public Object[][] createBad() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1377
        return new Object[][] {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1378
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1379
            { "linux-*-*",        "solaris-*-*"   },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1380
            { "linux-x86-*",      "linux-arm-*"   },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1381
            { "linux-*-2.4",      "linux-x86-2.6" },
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1382
        };
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1383
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1384
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1385
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1386
     * Test creating a configuration containing platform specific modules.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1387
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1388
    @Test(dataProvider = "platformmatch")
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1389
    public void testPlatformMatch(String s1, String s2) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1390
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1391
        ModuleDescriptor.Builder builder
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1392
            = new ModuleDescriptor.Builder("m1").requires("m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1393
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1394
        String[] s = s1.split("-");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1395
        if (!s[0].equals("*"))
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1396
            builder.osName(s[0]);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1397
        if (!s[1].equals("*"))
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1398
            builder.osArch(s[1]);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1399
        if (!s[2].equals("*"))
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1400
            builder.osVersion(s[2]);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1401
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1402
        ModuleDescriptor descriptor1 = builder.build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1403
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1404
        builder = new ModuleDescriptor.Builder("m2");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1405
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1406
        s = s2.split("-");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1407
        if (!s[0].equals("*"))
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1408
            builder.osName(s[0]);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1409
        if (!s[1].equals("*"))
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1410
            builder.osArch(s[1]);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1411
        if (!s[2].equals("*"))
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1412
            builder.osVersion(s[2]);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1413
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1414
        ModuleDescriptor descriptor2 = builder.build();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1415
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1416
        ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1417
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1418
        Configuration cf = resolveRequires(finder, "m1");
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1419
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1420
        assertTrue(cf.modules().size() == 2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1421
        assertTrue(cf.findModule("m1").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1422
        assertTrue(cf.findModule("m2").isPresent());
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1423
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1424
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1425
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1426
     * Test attempting to create a configuration with modules for different
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1427
     * platforms.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1428
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1429
    @Test(dataProvider = "platformmismatch",
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1430
          expectedExceptions = ResolutionException.class )
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1431
    public void testPlatformMisMatch(String s1, String s2) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1432
        testPlatformMatch(s1, s2);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1433
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1434
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1435
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1436
    // null handling
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1437
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1438
    // finder1, finder2, roots
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
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1442
    public void testResolveRequiresWithNull1() {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
  1443
        resolveRequires((ModuleFinder)null, ModuleFinder.of());
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1444
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1445
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1446
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1447
    public void testResolveRequiresWithNull2() {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
  1448
        resolveRequires(ModuleFinder.of(), (ModuleFinder)null);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1449
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1450
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1451
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1452
    public void testResolveRequiresAndUsesWithNull1() {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
  1453
        resolveRequiresAndUses((ModuleFinder) null, ModuleFinder.of());
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
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1457
    public void testResolveRequiresAndUsesWithNull2() {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
  1458
        resolveRequiresAndUses(ModuleFinder.of(), (ModuleFinder) null);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1459
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1460
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1461
    @Test(expectedExceptions = { NullPointerException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1462
    public void testFindModuleWithNull() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1463
        Configuration.empty().findModule(null);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1464
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1465
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1466
    // immutable sets
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1467
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1468
    @Test(expectedExceptions = { UnsupportedOperationException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1469
    public void testImmutableSet1() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1470
        Configuration cf = Layer.boot().configuration();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1471
        ResolvedModule base = cf.findModule("java.base").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1472
        cf.modules().add(base);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1473
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1474
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1475
    @Test(expectedExceptions = { UnsupportedOperationException.class })
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1476
    public void testImmutableSet2() {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1477
        Configuration cf = Layer.boot().configuration();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1478
        ResolvedModule base = cf.findModule("java.base").get();
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1479
        base.reads().add(base);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1480
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1481
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1482
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1483
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1484
     * Invokes parent.resolveRequires(...)
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1485
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1486
    private Configuration resolveRequires(Configuration parent,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1487
                                          ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1488
                                          ModuleFinder after,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1489
                                          String... roots) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1490
        return parent.resolveRequires(before, after, Set.of(roots));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1491
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1492
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1493
    private Configuration resolveRequires(Configuration parent,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1494
                                          ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1495
                                          String... roots) {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
  1496
        return resolveRequires(parent, before, ModuleFinder.of(), roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1497
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1498
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1499
    private Configuration resolveRequires(ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1500
                                          ModuleFinder after,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1501
                                          String... roots) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1502
        return resolveRequires(Configuration.empty(), before, after, roots);
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
    private Configuration resolveRequires(ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1506
                                          String... roots) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1507
        return resolveRequires(Configuration.empty(), before, roots);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1508
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1509
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1510
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1511
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1512
     * Invokes parent.resolveRequiresAndUses(...)
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1513
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1514
    private Configuration resolveRequiresAndUses(Configuration parent,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1515
                                                 ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1516
                                                 ModuleFinder after,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1517
                                                 String... roots) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1518
        return parent.resolveRequiresAndUses(before, after, Set.of(roots));
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1519
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1520
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1521
    private Configuration resolveRequiresAndUses(Configuration parent,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1522
                                                 ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1523
                                                 String... roots) {
38457
3d019217e322 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 36511
diff changeset
  1524
        return resolveRequiresAndUses(parent, before, ModuleFinder.of(), roots);
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1525
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1526
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1527
    private Configuration resolveRequiresAndUses(ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1528
                                                 ModuleFinder after,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1529
                                                 String... roots) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1530
        return resolveRequiresAndUses(Configuration.empty(), before, after, roots);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1531
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1532
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1533
    private Configuration resolveRequiresAndUses(ModuleFinder before,
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1534
                                                 String... roots) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1535
        return resolveRequiresAndUses(Configuration.empty(), before, roots);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1536
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1537
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1538
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1539
    /**
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1540
     * Returns {@code true} if the configuration contains module mn1
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1541
     * that reads module mn2.
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1542
     */
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1543
    static boolean reads(Configuration cf, String mn1, String mn2) {
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1544
        Optional<ResolvedModule> om1 = cf.findModule(mn1);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1545
        if (!om1.isPresent())
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1546
            return false;
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1547
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1548
        return om1.get().reads().stream()
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1549
                .map(ResolvedModule::name)
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1550
                .anyMatch(mn2::equals);
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1551
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1552
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1553
9d0388c6b336 8142968: Module System implementation
alanb
parents:
diff changeset
  1554
}