Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/ModuleLayer/LayerControllerTest.java
41149 views
1
/*
2
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/**
25
* @test
26
* @library /test/lib
27
* @build LayerControllerTest
28
* jdk.test.lib.util.ModuleUtils
29
* @run testng LayerControllerTest
30
* @summary Basic tests for java.lang.ModuleLayer.Controller
31
*/
32
33
import java.lang.module.Configuration;
34
import java.lang.module.ModuleDescriptor;
35
import java.lang.module.ModuleFinder;
36
import java.util.List;
37
import java.util.Set;
38
39
import jdk.test.lib.util.ModuleUtils;
40
41
import org.testng.annotations.Test;
42
import static org.testng.Assert.*;
43
44
@Test
45
public class LayerControllerTest {
46
47
/**
48
* Creates a Controller for a module layer containing modules m1 and m2.
49
* Module m1 contains p1, reads java.base, does not export/open any package
50
* Module m2 contains p2, reads java.base, does not export/open any package
51
*/
52
private ModuleLayer.Controller createTestLayer() {
53
ModuleDescriptor descriptor1
54
= ModuleDescriptor.newModule("m1")
55
.packages(Set.of("p1"))
56
.requires("java.base")
57
.build();
58
59
ModuleDescriptor descriptor2
60
= ModuleDescriptor.newModule("m2")
61
.requires("java.base")
62
.packages(Set.of("p2"))
63
.build();
64
65
ModuleDescriptor descriptor3
66
= ModuleDescriptor.newModule("m3")
67
.requires("java.base")
68
.packages(Set.of("p3"))
69
.build();
70
71
ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2, descriptor3);
72
ModuleLayer bootLayer = ModuleLayer.boot();
73
74
Configuration cf = bootLayer.configuration()
75
.resolve(finder, ModuleFinder.of(), Set.of("m1", "m2", "m3"));
76
77
ClassLoader scl = ClassLoader.getSystemClassLoader();
78
79
ModuleLayer.Controller controller
80
= ModuleLayer.defineModulesWithOneLoader(cf, List.of(bootLayer), scl);
81
82
ModuleLayer layer = controller.layer();
83
84
assertTrue(layer.modules().size() == 3);
85
assertTrue(layer.findModule("m1").isPresent());
86
assertTrue(layer.findModule("m2").isPresent());
87
assertTrue(layer.findModule("m3").isPresent());
88
89
return controller;
90
}
91
92
/**
93
* Basic test of Controller to update modules m1 and m2 to read and
94
* open packages to each other.
95
*/
96
public void testBasic() {
97
ModuleLayer.Controller controller = createTestLayer();
98
ModuleLayer layer = controller.layer();
99
Module m1 = layer.findModule("m1").orElseThrow(RuntimeException::new);
100
Module m2 = layer.findModule("m2").orElseThrow(RuntimeException::new);
101
Module m3 = layer.findModule("m3").orElseThrow(RuntimeException::new);
102
103
assertFalse(m1.canRead(m2));
104
assertFalse(m1.canRead(m3));
105
assertFalse(m1.isExported("p1"));
106
assertFalse(m1.isOpen("p1"));
107
assertFalse(m1.isExported("p1", m2));
108
assertFalse(m1.isExported("p1", m3));
109
assertFalse(m1.isOpen("p1", m2));
110
assertFalse(m1.isOpen("p1", m3));
111
112
assertFalse(m2.canRead(m1));
113
assertFalse(m2.canRead(m3));
114
assertFalse(m2.isExported("p2"));
115
assertFalse(m2.isOpen("p2"));
116
assertFalse(m2.isExported("p2", m1));
117
assertFalse(m2.isExported("p2", m3));
118
assertFalse(m2.isOpen("p2", m1));
119
assertFalse(m2.isOpen("p2", m3));
120
121
assertFalse(m3.canRead(m1));
122
assertFalse(m3.canRead(m2));
123
assertFalse(m3.isExported("p3"));
124
assertFalse(m3.isOpen("p3"));
125
assertFalse(m3.isExported("p3", m1));
126
assertFalse(m3.isExported("p3", m2));
127
assertFalse(m3.isOpen("p3", m1));
128
assertFalse(m3.isOpen("p3", m2));
129
130
// update m1 to read m2
131
assertTrue(controller.addReads(m1, m2) == controller);
132
assertTrue(m1.canRead(m2));
133
assertFalse(m2.canRead(m1));
134
135
// update m2 to read m1
136
assertTrue(controller.addReads(m2, m1) == controller);
137
assertTrue(m1.canRead(m2));
138
assertTrue(m1.canRead(m1));
139
140
// update m1 to export p1 to m2
141
assertTrue(controller.addExports(m1, "p1", m2) == controller);
142
assertTrue(m1.isExported("p1", m2));
143
assertFalse(m1.isOpen("p1", m2));
144
assertFalse(m1.isExported("p1"));
145
assertFalse(m1.isOpen("p1"));
146
147
// update m3 to open p3 to m1
148
assertTrue(controller.addExports(m3, "p3", m1) == controller);
149
assertTrue(m3.isExported("p3", m1));
150
assertFalse(m3.isOpen("p3", m1));
151
assertFalse(m3.isExported("p3"));
152
assertFalse(m3.isOpen("p3"));
153
154
// update m1 to open p1 to m3
155
assertTrue(controller.addOpens(m1, "p1", m3) == controller);
156
assertTrue(m1.isExported("p1", m3));
157
assertTrue(m1.isOpen("p1", m3));
158
assertFalse(m1.isExported("p1"));
159
assertFalse(m1.isOpen("p1"));
160
161
// update m3 to open p3 to m1
162
assertTrue(controller.addOpens(m3, "p3", m1) == controller);
163
assertTrue(m3.isExported("p3", m1));
164
assertTrue(m3.isOpen("p3", m1));
165
assertFalse(m3.isExported("p3"));
166
assertFalse(m3.isOpen("p3"));
167
}
168
169
/**
170
* Test invalid argument handling
171
*/
172
public void testBadArguments() {
173
ModuleLayer.Controller controller = createTestLayer();
174
ModuleLayer layer = controller.layer();
175
Module m1 = layer.findModule("m1").orElseThrow(RuntimeException::new);
176
Module m2 = layer.findModule("m2").orElseThrow(RuntimeException::new);
177
Module base = Object.class.getModule();
178
179
// java.base is not in layer
180
try {
181
controller.addReads(base, m2);
182
assertTrue(false);
183
} catch (IllegalArgumentException expected) { }
184
185
// java.base is not in layer
186
try {
187
controller.addExports(base, "java.lang", m2);
188
assertTrue(false);
189
} catch (IllegalArgumentException expected) { }
190
191
// m1 does not contain java.lang
192
try {
193
controller.addExports(m1, "java.lang", m2);
194
assertTrue(false);
195
} catch (IllegalArgumentException expected) { }
196
197
// java.base is not in layer
198
try {
199
controller.addOpens(base, "java.lang", m2);
200
assertTrue(false);
201
} catch (IllegalArgumentException expected) { }
202
203
// m1 does not contain java.lang
204
try {
205
controller.addOpens(m1, "java.lang", m2);
206
assertTrue(false);
207
} catch (IllegalArgumentException expected) { }
208
}
209
210
/**
211
* Test null handling
212
*/
213
public void testNulls() {
214
ModuleLayer.Controller controller = createTestLayer();
215
ModuleLayer layer = controller.layer();
216
Module m1 = layer.findModule("m1").orElseThrow(RuntimeException::new);
217
Module m2 = layer.findModule("m2").orElseThrow(RuntimeException::new);
218
assertTrue(m1 != null);
219
assertTrue(m2 != null);
220
221
try {
222
controller.addReads(null, m2);
223
assertTrue(false);
224
} catch (NullPointerException expected) { }
225
226
try {
227
controller.addReads(m1, null);
228
assertTrue(false);
229
} catch (NullPointerException expected) { }
230
231
try {
232
controller.addExports(null, "p1", m2);
233
assertTrue(false);
234
} catch (NullPointerException expected) { }
235
236
try {
237
controller.addExports(m1, null, m2);
238
assertTrue(false);
239
} catch (NullPointerException expected) { }
240
241
try {
242
controller.addExports(m1, "p1", null);
243
assertTrue(false);
244
} catch (NullPointerException expected) { }
245
246
try {
247
controller.addOpens(null, "p1", m2);
248
assertTrue(false);
249
} catch (NullPointerException expected) { }
250
251
try {
252
controller.addOpens(m1, null, m2);
253
assertTrue(false);
254
} catch (NullPointerException expected) { }
255
256
try {
257
controller.addOpens(m1, "p1", null);
258
assertTrue(false);
259
} catch (NullPointerException expected) { }
260
}
261
}
262
263