UpgradeModulePathTest.java revision 3822:d8766c39123a
1144518Sdavidxu/* 2144518Sdavidxu * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. 3144518Sdavidxu * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4144518Sdavidxu * 5144518Sdavidxu * This code is free software; you can redistribute it and/or modify it 6144518Sdavidxu * under the terms of the GNU General Public License version 2 only, as 7144518Sdavidxu * published by the Free Software Foundation. 8144518Sdavidxu * 9144518Sdavidxu * This code is distributed in the hope that it will be useful, but WITHOUT 10144518Sdavidxu * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11144518Sdavidxu * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12144518Sdavidxu * version 2 for more details (a copy is included in the LICENSE file that 13144518Sdavidxu * accompanied this code). 14144518Sdavidxu * 15144518Sdavidxu * You should have received a copy of the GNU General Public License version 16144518Sdavidxu * 2 along with this work; if not, write to the Free Software Foundation, 17144518Sdavidxu * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18144518Sdavidxu * 19144518Sdavidxu * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20144518Sdavidxu * or visit www.oracle.com if you need additional information or have any 21144518Sdavidxu * questions. 22144518Sdavidxu */ 23144518Sdavidxu 24144518Sdavidxu/* 25144518Sdavidxu * @test 26144518Sdavidxu * @summary tests for --upgrade-module-path 27144518Sdavidxu * @library /tools/lib 28144518Sdavidxu * @modules 29144518Sdavidxu * jdk.compiler/com.sun.tools.javac.api 30144518Sdavidxu * jdk.compiler/com.sun.tools.javac.main 31144518Sdavidxu * @build toolbox.ToolBox toolbox.JavacTask toolbox.ModuleBuilder ModuleTestBase 32162061Sdavidxu * @run main UpgradeModulePathTest 33144518Sdavidxu */ 34144518Sdavidxu 35300043Skibimport java.io.File; 36300043Skibimport java.nio.file.Path; 37300043Skib 38300043Skibimport toolbox.JavacTask; 39300043Skibimport toolbox.ModuleBuilder; 40212077Sdavidxuimport toolbox.Task; 41162061Sdavidxu 42233912Sdavidxupublic class UpgradeModulePathTest extends ModuleTestBase { 43179970Sdavidxu 44216641Sdavidxu public static void main(String... args) throws Exception { 45179970Sdavidxu UpgradeModulePathTest t = new UpgradeModulePathTest(); 46161680Sdavidxu t.runTests(); 47319430Svangyzen } 48163334Sdavidxu 49161680Sdavidxu @Test 50161680Sdavidxu public void simpleUsage(Path base) throws Exception { 51161680Sdavidxu Path modules = base.resolve("modules"); 52163334Sdavidxu new ModuleBuilder(tb, "m1x") 53212077Sdavidxu .exports("pkg1") 54212077Sdavidxu .classes("package pkg1; public class E { }") 55173801Sdavidxu .build(modules); 56162061Sdavidxu 57173801Sdavidxu final Path upgradeModules = base.resolve("upgradeModules"); 58178647Sdavidxu new ModuleBuilder(tb, "m1x") 59216641Sdavidxu .exports("pkg2") 60216641Sdavidxu .classes("package pkg2; public class E { }") 61178647Sdavidxu .build(upgradeModules); 62164877Sdavidxu 63249985Sjilles Path src = base.resolve("src"); 64164902Sdavidxu tb.writeJavaFiles(src, "module m2x { requires m1x; }", 65164902Sdavidxu "package p; class A { void main() { pkg2.E.class.getName(); } }"); 66164902Sdavidxu 67162061Sdavidxu new JavacTask(tb, Task.Mode.CMDLINE) 68232209Sdavidxu .options("--module-path", modules.toString(), 69232209Sdavidxu "--upgrade-module-path", upgradeModules.toString()) 70232209Sdavidxu .files(findJavaFiles(src)) 71232209Sdavidxu .run() 72177850Sdavidxu .writeAll(); 73177850Sdavidxu } 74212076Sdavidxu 75212076Sdavidxu @Test 76212076Sdavidxu public void onlyUpgradeModulePath(Path base) throws Exception { 77212076Sdavidxu final Path module = base.resolve("modules"); 78212076Sdavidxu new ModuleBuilder(tb, "m1x") 79144518Sdavidxu .exports("pkg1") 80161680Sdavidxu .classes("package pkg1; public class E { }") 81161680Sdavidxu .build(module); 82300043Skib 83300043Skib final Path upgradeModule = base.resolve("upgradeModule"); 84300043Skib new ModuleBuilder(tb, "m1x") 85300043Skib .exports("pkg2") 86300043Skib .classes("package pkg2; public class E { }") 87300043Skib .build(upgradeModule); 88300043Skib 89300043Skib Path src = base.resolve("src"); 90300043Skib tb.writeJavaFiles(src, "module m2x { requires m1x; }", 91300043Skib "package p; class A { void main() { pkg2.E.class.getName(); } }"); 92300043Skib 93300043Skib new JavacTask(tb, Task.Mode.CMDLINE) 94161680Sdavidxu .options("--upgrade-module-path", upgradeModule + File.pathSeparator + module) 95161680Sdavidxu .files(findJavaFiles(src)) 96161680Sdavidxu .run() 97165206Sdavidxu .writeAll(); 98165206Sdavidxu } 99300043Skib 100300043Skib @Test 101179970Sdavidxu public void withModuleSourcePath(Path base) throws Exception { 102300043Skib final Path module = base.resolve("modules"); 103300043Skib new ModuleBuilder(tb, "m1x") 104300043Skib .exports("pkg1") 105300043Skib .classes("package pkg1; public class E { }") 106300043Skib .build(module); 107300043Skib 108300043Skib final Path upgradeModule = base.resolve("upgradeModule"); 109300043Skib new ModuleBuilder(tb, "m1x") 110300043Skib .exports("pkg2") 111300043Skib .classes("package pkg2; public class E { }") 112300043Skib .build(upgradeModule); 113300043Skib 114300043Skib final Path s = base.resolve("source"); 115165206Sdavidxu tb.writeJavaFiles(s.resolve("m3x"), "module m3x { }"); 116165206Sdavidxu 117165206Sdavidxu final Path upgradeModule3 = base.resolve("upgradeModule"); 118161680Sdavidxu new ModuleBuilder(tb, "m3x") 119161680Sdavidxu .exports("pkg3") 120300043Skib .classes("package pkg3; public class E { }") 121300043Skib .build(upgradeModule); 122300043Skib 123300043Skib Path src = base.resolve("src"); 124161680Sdavidxu tb.writeJavaFiles(src.resolve("m2x"), "module m2x { requires m1x; requires m3x; }", 125161680Sdavidxu "package p; class A { void main() { pkg2.E.class.getName(); } }"); 126161680Sdavidxu 127216641Sdavidxu new JavacTask(tb, Task.Mode.CMDLINE) 128216641Sdavidxu .options("--module-path", module.toString(), 129300043Skib "--module-source-path", src + File.pathSeparator + s, 130300043Skib "--upgrade-module-path", upgradeModule + File.pathSeparator + upgradeModule3) 131300043Skib .outdir(module) 132300043Skib .files(findJavaFiles(src)) 133216641Sdavidxu .run() 134216641Sdavidxu .writeAll(); 135216641Sdavidxu } 136161680Sdavidxu 137300043Skib @Test 138161680Sdavidxu public void sameUpgradeAndModulePath(Path base) throws Exception { 139300043Skib final Path module = base.resolve("modules"); 140300043Skib new ModuleBuilder(tb, "m1x") 141300043Skib .exports("pkg1") 142300043Skib .classes("package pkg1; public class E { }") 143161680Sdavidxu .build(module); 144161680Sdavidxu 145161680Sdavidxu final Path upgradeModule = base.resolve("upgradeModule"); 146239200Sdavidxu new ModuleBuilder(tb, "m1x") 147161680Sdavidxu .exports("pkg2") 148300043Skib .classes("package pkg2; public class E { }") 149300043Skib .build(upgradeModule); 150233912Sdavidxu 151300043Skib Path src = base.resolve("src"); 152300043Skib tb.writeJavaFiles(src, "module m2x { requires m1x; }", 153300043Skib "package p; class A { void main() { pkg2.E.class.getName(); } }"); 154300043Skib 155300043Skib new JavacTask(tb, Task.Mode.CMDLINE) 156300043Skib .options("--module-path", upgradeModule + File.pathSeparator + module, 157300043Skib "--upgrade-module-path", upgradeModule.toString()) 158319430Svangyzen .files(findJavaFiles(src)) 159233912Sdavidxu .run() 160300043Skib .writeAll(); 161300043Skib } 162300043Skib 163300043Skib @Test 164300043Skib public void dummyFileInUpgradeModulePath(Path base) throws Exception { 165300043Skib final Path module = base.resolve("modules"); 166300043Skib new ModuleBuilder(tb, "m1x") 167300043Skib .exports("pkg1") 168300043Skib .classes("package pkg1; public class E { }") 169300043Skib .build(module); 170300043Skib 171300043Skib Path dummy = base.resolve("dummy.txt"); 172300043Skib tb.writeFile(dummy, ""); 173300043Skib 174300043Skib Path src = base.resolve("src"); 175161680Sdavidxu tb.writeJavaFiles(src, "module m2x { requires m1x; }", 176161680Sdavidxu "package p; class A { void main() { pkg2.E.class.getName(); } }"); 177177850Sdavidxu 178239200Sdavidxu String output = new JavacTask(tb, Task.Mode.CMDLINE) 179239200Sdavidxu .options("-XDrawDiagnostics", 180300043Skib "--module-path", module.toString(), 181300043Skib "--upgrade-module-path", dummy.toString()) 182239200Sdavidxu .files(findJavaFiles(src)) 183239200Sdavidxu .run(Task.Expect.FAIL) 184239200Sdavidxu .writeAll() 185177850Sdavidxu .getOutput(Task.OutputKind.DIRECT); 186177850Sdavidxu if (!output.contains("compiler.err.illegal.argument.for.option: --upgrade-module-path, " + dummy)) { 187300043Skib throw new Exception("Expected output was not found"); 188177850Sdavidxu } 189300043Skib } 190300043Skib 191177850Sdavidxu @Test 192177850Sdavidxu public void severalUpgradeModules(Path base) throws Exception { 193177850Sdavidxu final Path module = base.resolve("modules"); 194177850Sdavidxu new ModuleBuilder(tb, "m1x") 195177850Sdavidxu .exports("pkg1") 196300043Skib .classes("package pkg1; public class A { }") 197300043Skib .build(module); 198177850Sdavidxu 199177850Sdavidxu new ModuleBuilder(tb, "m2x") 200177850Sdavidxu .exports("pkg2") 201177850Sdavidxu .classes("package pkg2; public class B { }") 202177850Sdavidxu .build(module); 203177850Sdavidxu 204177850Sdavidxu Path upgradeModule = base.resolve("upgradeModule"); 205177850Sdavidxu new ModuleBuilder(tb, "m2x") 206177850Sdavidxu .exports("pkg2") 207177850Sdavidxu .classes("package pkg2; public class BC { }") 208177850Sdavidxu .build(upgradeModule); 209177850Sdavidxu new ModuleBuilder(tb, "m3x") 210177850Sdavidxu .exports("pkg3") 211177850Sdavidxu .classes("package pkg3; public class DC { }") 212177850Sdavidxu .build(upgradeModule); 213300043Skib 214300043Skib Path src = base.resolve("src"); 215300043Skib tb.writeJavaFiles(src, "module m4x { requires m1x; requires m2x; requires m3x; }", 216300043Skib "package p; class A { void main() { pkg1.A.class.getName(); pkg2.BC.class.getName(); pkg3.DC.class.getName(); } }"); 217177850Sdavidxu 218177850Sdavidxu new JavacTask(tb, Task.Mode.CMDLINE) 219177850Sdavidxu .options("--module-path", module.toString(), 220177850Sdavidxu "--upgrade-module-path", upgradeModule.toString()) 221177850Sdavidxu .files(findJavaFiles(src)) 222177850Sdavidxu .run() 223177850Sdavidxu .writeAll(); 224177850Sdavidxu 225177850Sdavidxu Path src2 = base.resolve("src2"); 226177850Sdavidxu tb.writeJavaFiles(src2, "module m4x { requires m1x; }", 227300043Skib "package p; class A { void main() { pkg2.B.class.getName(); } }"); 228177850Sdavidxu 229177850Sdavidxu String log = new JavacTask(tb, Task.Mode.CMDLINE) 230177850Sdavidxu .options("-XDrawDiagnostics", 231177850Sdavidxu "--module-path", module.toString(), 232177850Sdavidxu "--upgrade-module-path", upgradeModule.toString()) 233177850Sdavidxu .files(findJavaFiles(src2)) 234177850Sdavidxu .run(Task.Expect.FAIL) 235177850Sdavidxu .writeAll() 236300043Skib .getOutput(Task.OutputKind.DIRECT); 237177850Sdavidxu if (!log.contains("compiler.err.doesnt.exist: pkg2")) { 238177850Sdavidxu throw new Exception("Expected output was not found"); 239177850Sdavidxu } 240177850Sdavidxu } 241177850Sdavidxu 242177850Sdavidxu @Test 243177850Sdavidxu public void severalUpgradeModulePathsLastWin(Path base) throws Exception { 244177850Sdavidxu final Path module = base.resolve("modules"); 245177850Sdavidxu new ModuleBuilder(tb, "m1x") 246177850Sdavidxu .exports("pkg1") 247177850Sdavidxu .classes("package pkg1; public class E { }") 248300043Skib .build(module); 249300043Skib 250300043Skib final Path upgradeModule1 = base.resolve("upgradeModule1"); 251177850Sdavidxu new ModuleBuilder(tb, "m1x") 252177850Sdavidxu .exports("pkg2") 253177850Sdavidxu .classes("package pkg2; public class EC1 { }") 254177850Sdavidxu .build(upgradeModule1); 255177850Sdavidxu 256197445Sattilio final Path upgradeModule2 = base.resolve("upgradeModule2"); 257300043Skib new ModuleBuilder(tb, "m1x") 258197445Sattilio .exports("pkg2") 259197445Sattilio .classes("package pkg2; public class EC2 { }") 260300043Skib .build(upgradeModule2); 261177850Sdavidxu 262177850Sdavidxu Path src = base.resolve("src"); 263177850Sdavidxu tb.writeJavaFiles(src, "module m2x { requires m1x; }", 264177850Sdavidxu "package p; class A { void main() { pkg2.EC2.class.getName(); } }"); 265177850Sdavidxu 266177850Sdavidxu new JavacTask(tb, Task.Mode.CMDLINE) 267177850Sdavidxu .options("--module-path", module.toString(), 268177850Sdavidxu "--upgrade-module-path", upgradeModule1.toString(), 269177850Sdavidxu "--upgrade-module-path", upgradeModule2.toString()) 270144518Sdavidxu .files(findJavaFiles(src)) 271 .run() 272 .writeAll(); 273 274 Path src2 = base.resolve("src2"); 275 tb.writeJavaFiles(src2, "module m2x { requires m1x; }", 276 "package p; class A { void main() { pkg2.EC1.class.getName(); } }"); 277 278 final String log = new JavacTask(tb, Task.Mode.CMDLINE) 279 .options("-XDrawDiagnostics", 280 "--module-path", module.toString(), 281 "--upgrade-module-path", upgradeModule1.toString(), 282 "--upgrade-module-path", upgradeModule2.toString()) 283 .files(findJavaFiles(src2)) 284 .run(Task.Expect.FAIL) 285 .writeAll() 286 .getOutput(Task.OutputKind.DIRECT); 287 288 if (!log.contains("compiler.err.cant.resolve.location: kindname.class, EC1, , , (compiler.misc.location: kindname.package, pkg2, null)")) { 289 throw new Exception("Expected output was not found"); 290 } 291 } 292} 293