Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/tools/launcher/modules/addexports/AddExportsTest.java
41153 views
1
/*
2
* Copyright (c) 2014, 2018, 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
* @modules java.compiler
28
* jdk.compiler
29
* @build AddExportsTest jdk.test.lib.compiler.CompilerUtils
30
* @run testng AddExportsTest
31
* @summary Basic tests for java --add-exports
32
*/
33
34
import java.nio.file.Path;
35
import java.nio.file.Paths;
36
import java.util.stream.Stream;
37
38
import jdk.test.lib.compiler.CompilerUtils;
39
import jdk.test.lib.process.OutputAnalyzer;
40
import static jdk.test.lib.process.ProcessTools.*;
41
42
import org.testng.annotations.BeforeTest;
43
import org.testng.annotations.DataProvider;
44
import org.testng.annotations.Test;
45
import static org.testng.Assert.*;
46
47
48
@Test
49
public class AddExportsTest {
50
51
private static final String TEST_SRC = System.getProperty("test.src");
52
53
private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");
54
private static final Path MODS_DIR = Paths.get("mods");
55
private static final Path UPGRADE_MODS_DIRS = Paths.get("upgrademods");
56
57
// test module m1 that uses Unsafe
58
private static final String TEST1_MODULE = "m1";
59
private static final String TEST1_MAIN_CLASS = "jdk.test1.Main";
60
61
// test module m2 uses java.compiler internals
62
private static final String TEST2_MODULE = "m2";
63
private static final String TEST2_MAIN_CLASS = "jdk.test2.Main";
64
65
// test module m3 uses m4 internals
66
private static final String TEST3_MODULE = "m3";
67
private static final String TEST3_MAIN_CLASS = "jdk.test3.Main";
68
private static final String TEST4_MODULE = "m4";
69
70
71
@BeforeTest
72
public void compileTestModules() throws Exception {
73
74
// javac -d mods/m1 src/m1/**
75
boolean compiled = CompilerUtils.compile(
76
SRC_DIR.resolve(TEST1_MODULE),
77
MODS_DIR.resolve(TEST1_MODULE),
78
"--add-exports", "java.base/jdk.internal.misc=m1");
79
assertTrue(compiled, "module " + TEST1_MODULE + " did not compile");
80
81
// javac -d upgrademods/java.compiler src/java.compiler/**
82
compiled = CompilerUtils.compile(
83
SRC_DIR.resolve("java.compiler"),
84
UPGRADE_MODS_DIRS.resolve("java.compiler"));
85
assertTrue(compiled, "module java.compiler did not compile");
86
87
// javac --upgrade-module-path upgrademods -d mods/m2 src/m2/**
88
compiled = CompilerUtils.compile(
89
SRC_DIR.resolve(TEST2_MODULE),
90
MODS_DIR.resolve(TEST2_MODULE),
91
"--upgrade-module-path", UPGRADE_MODS_DIRS.toString(),
92
"--add-exports", "java.compiler/javax.tools.internal=m2");
93
assertTrue(compiled, "module " + TEST2_MODULE + " did not compile");
94
95
// javac -d mods/m3 src/m3/**
96
compiled = CompilerUtils.compile(
97
SRC_DIR.resolve(TEST3_MODULE),
98
MODS_DIR.resolve(TEST3_MODULE));
99
assertTrue(compiled, "module " + TEST3_MODULE + " did not compile");
100
101
// javac -d mods/m4 src/m4/**
102
compiled = CompilerUtils.compile(
103
SRC_DIR.resolve(TEST4_MODULE),
104
MODS_DIR.resolve(TEST4_MODULE));
105
assertTrue(compiled, "module " + TEST4_MODULE + " did not compile");
106
}
107
108
/**
109
* Sanity check with -version
110
*/
111
public void testSanity() throws Exception {
112
113
int exitValue
114
= executeTestJava("--add-exports", "java.base/jdk.internal.reflect=ALL-UNNAMED",
115
"-version")
116
.outputTo(System.out)
117
.errorTo(System.out)
118
.getExitValue();
119
120
assertTrue(exitValue == 0);
121
}
122
123
124
/**
125
* Run class path application that uses jdk.internal.misc.Unsafe
126
*/
127
public void testUnnamedModule() throws Exception {
128
129
// java --add-exports java.base/jdk.internal.misc=ALL-UNNAMED \
130
// -cp mods/$TESTMODULE jdk.test.UsesUnsafe
131
132
String classpath = MODS_DIR.resolve(TEST1_MODULE).toString();
133
int exitValue
134
= executeTestJava("--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED",
135
"-cp", classpath,
136
TEST1_MAIN_CLASS)
137
.outputTo(System.out)
138
.errorTo(System.out)
139
.getExitValue();
140
141
assertTrue(exitValue == 0);
142
}
143
144
145
/**
146
* Run named module that uses jdk.internal.misc.Unsafe
147
*/
148
public void testNamedModule() throws Exception {
149
150
// java --add-exports java.base/jdk.internal.misc=test \
151
// --module-path mods -m $TESTMODULE/$MAIN_CLASS
152
153
String mid = TEST1_MODULE + "/" + TEST1_MAIN_CLASS;
154
int exitValue =
155
executeTestJava("--add-exports", "java.base/jdk.internal.misc=" + TEST1_MODULE,
156
"--module-path", MODS_DIR.toString(),
157
"-m", mid)
158
.outputTo(System.out)
159
.errorTo(System.out)
160
.getExitValue();
161
162
assertTrue(exitValue == 0);
163
}
164
165
/**
166
* Test --add-exports with upgraded module
167
*/
168
public void testWithUpgradedModule() throws Exception {
169
170
// java --add-exports java.compiler/javax.tools.internal=m2
171
// --upgrade-module-path upgrademods --module-path mods -m ...
172
String mid = TEST2_MODULE + "/" + TEST2_MAIN_CLASS;
173
int exitValue = executeTestJava(
174
"--add-exports", "java.compiler/javax.tools.internal=m2",
175
"--upgrade-module-path", UPGRADE_MODS_DIRS.toString(),
176
"--module-path", MODS_DIR.toString(),
177
"-m", mid)
178
.outputTo(System.out)
179
.errorTo(System.out)
180
.getExitValue();
181
182
assertTrue(exitValue == 0);
183
}
184
185
/**
186
* Test --add-exports with module that is added to the set of root modules
187
* with --add-modules.
188
*/
189
public void testWithAddMods() throws Exception {
190
191
// java --add-exports m4/jdk.test4=m3 --module-path mods -m ...
192
String mid = TEST3_MODULE + "/" + TEST3_MAIN_CLASS;
193
int exitValue = executeTestJava(
194
"--add-exports", "m4/jdk.test4=m3",
195
"--module-path", MODS_DIR.toString(),
196
"--add-modules", TEST4_MODULE,
197
"-m", mid)
198
.outputTo(System.out)
199
.errorTo(System.out)
200
.getExitValue();
201
202
assertTrue(exitValue == 0);
203
}
204
205
206
/**
207
* --add-exports and --add-opens allows duplicates
208
*/
209
public void testWithDuplicateOption() throws Exception {
210
211
int exitValue
212
= executeTestJava("--add-exports", "java.base/jdk.internal.reflect=ALL-UNNAMED",
213
"--add-exports", "java.base/jdk.internal.reflect=ALL-UNNAMED",
214
"--add-opens", "java.base/java.util=ALL-UNNAMED",
215
"--add-opens", "java.base/java.util=ALL-UNNAMED",
216
"-version")
217
.outputTo(System.out)
218
.errorTo(System.out)
219
.getExitValue();
220
221
assertTrue(exitValue == 0);
222
}
223
224
225
private OutputAnalyzer execJava(String... options) {
226
try {
227
return executeTestJava(options);
228
} catch (Exception e) {
229
throw new Error(e);
230
}
231
}
232
233
/**
234
* Exercise --add-exports and --add-opens with unknown values.
235
* Warning is emitted.
236
*/
237
@Test(dataProvider = "unknownvalues")
238
public void testWithUnknownValue(String value, String ignore) {
239
Stream.of("--add-exports", "--add-opens")
240
.forEach(option -> {
241
// --add-exports $VALUE -version
242
int exitValue = execJava(option, value, "-version")
243
.stderrShouldMatch("WARNING: .*.monkey.*")
244
.outputTo(System.out)
245
.errorTo(System.out)
246
.getExitValue();
247
248
assertTrue(exitValue == 0);
249
});
250
}
251
252
253
@DataProvider(name = "unknownvalues")
254
public Object[][] unknownValues() {
255
return new Object[][]{
256
257
{ "java.base/jdk.internal.misc=sun.monkey", null }, // unknown target
258
{ "java.monkey/sun.monkey=ALL-UNNAMED", null }, // unknown module
259
{ "java.base/sun.monkey=ALL-UNNAMED", null }, // unknown package
260
{ "java.monkey/sun.monkey=ALL-UNNAMED", null }, // unknown module/package
261
262
};
263
}
264
265
266
/**
267
* Exercise --add-exports and --add-opens with bad values
268
*/
269
@Test(dataProvider = "badvalues")
270
public void testWithBadValue(String value, String ignore) {
271
Stream.of("--add-exports", "--add-opens")
272
.forEach(option -> {
273
// --add-exports $VALUE -version
274
int exitValue = execJava(option, value, "-version")
275
.outputTo(System.out)
276
.errorTo(System.out)
277
.getExitValue();
278
279
assertTrue(exitValue != 0);
280
});
281
}
282
283
@DataProvider(name = "badvalues")
284
public Object[][] badValues() {
285
return new Object[][]{
286
287
{ "java.base/jdk.internal.misc", null }, // missing target
288
{ "java.base=ALL-UNNAMED", null }, // missing package
289
{ "java.base/=ALL-UNNAMED", null } // missing package
290
291
};
292
}
293
}
294
295