MultiModuleModeTest.java revision 3294:9adfb22ff08f
159191Skris/* 259191Skris * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. 359191Skris * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 459191Skris * 559191Skris * This code is free software; you can redistribute it and/or modify it 659191Skris * under the terms of the GNU General Public License version 2 only, as 759191Skris * published by the Free Software Foundation. 859191Skris * 959191Skris * This code is distributed in the hope that it will be useful, but WITHOUT 1059191Skris * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1159191Skris * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1259191Skris * version 2 for more details (a copy is included in the LICENSE file that 1359191Skris * accompanied this code). 1459191Skris * 1559191Skris * You should have received a copy of the GNU General Public License version 1659191Skris * 2 along with this work; if not, write to the Free Software Foundation, 1759191Skris * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1859191Skris * 1959191Skris * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2059191Skris * or visit www.oracle.com if you need additional information or have any 2159191Skris * questions. 2259191Skris */ 2359191Skris 2459191Skris/* 2559191Skris * @test 2659191Skris * @summary tests for multi-module mode compilation 2759191Skris * @library /tools/lib 2859191Skris * @modules 2959191Skris * jdk.compiler/com.sun.tools.javac.api 3059191Skris * jdk.compiler/com.sun.tools.javac.main 3159191Skris * jdk.jdeps/com.sun.tools.javap 3259191Skris * @build ToolBox ModuleTestBase 3359191Skris * @run main MultiModuleModeTest 34 */ 35 36import java.nio.file.Files; 37import java.nio.file.Path; 38import java.util.ArrayList; 39import java.util.Arrays; 40import java.util.List; 41 42public class MultiModuleModeTest extends ModuleTestBase { 43 44 public static void main(String... args) throws Exception { 45 new MultiModuleModeTest().runTests(); 46 } 47 48 @Test 49 void testDuplicateModules(Path base) throws Exception { 50 Path src = base.resolve("src"); 51 Path src_m1 = src.resolve("m1"); 52 tb.writeJavaFiles(src_m1, "module m1 { }"); 53 Path src_m2 = src.resolve("m2"); 54 tb.writeJavaFiles(src_m2, "module m1 { }"); 55 Path classes = base.resolve("classes"); 56 tb.createDirectories(classes); 57 58 String log = tb.new JavacTask() 59 .options("-XDrawDiagnostics", 60 "-modulesourcepath", src.toString()) 61 .outdir(classes) 62 .files(findJavaFiles(src)) 63 .run(ToolBox.Expect.FAIL) 64 .writeAll() 65 .getOutput(ToolBox.OutputKind.DIRECT); 66 67 if (!log.contains("module-info.java:1:1: compiler.err.duplicate.module: m1")) 68 throw new Exception("expected output not found"); 69 } 70 71 @Test 72 void testCantFindModule(Path base) throws Exception { 73 Path src = base.resolve("src"); 74 Path src_m1 = src.resolve("m1"); 75 tb.writeJavaFiles(src_m1, "module m1 { }"); 76 Path misc = base.resolve("misc"); 77 tb.writeJavaFiles(misc, "package p; class C { }"); 78 Path classes = base.resolve("classes"); 79 tb.createDirectories(classes); 80 81 String log = tb.new JavacTask() 82 .options("-XDrawDiagnostics", 83 "-modulesourcepath", src.toString()) 84 .outdir(classes) 85 .files(join(findJavaFiles(src), findJavaFiles(misc))) 86 .run(ToolBox.Expect.FAIL) 87 .writeAll() 88 .getOutput(ToolBox.OutputKind.DIRECT); 89 90 if (!log.contains("C.java:1:1: compiler.err.unnamed.pkg.not.allowed.named.modules")) 91 throw new Exception("expected output not found"); 92 } 93 94 @Test 95 void testModuleNameMismatch(Path base) throws Exception { 96 Path src = base.resolve("src"); 97 Path src_m1 = src.resolve("m1"); 98 tb.writeJavaFiles(src_m1, "module m2 { }"); 99 Path classes = base.resolve("classes"); 100 tb.createDirectories(classes); 101 102 String log = tb.new JavacTask() 103 .options("-XDrawDiagnostics", 104 "-modulesourcepath", src.toString()) 105 .outdir(classes) 106 .files(findJavaFiles(src)) 107 .run(ToolBox.Expect.FAIL) 108 .writeAll() 109 .getOutput(ToolBox.OutputKind.DIRECT); 110 111 if (!log.contains("module-info.java:1:8: compiler.err.module.name.mismatch: m2, m1")) 112 throw new Exception("expected output not found"); 113 } 114 115 @Test 116 void testImplicitModuleSource(Path base) throws Exception { 117 Path src = base.resolve("src"); 118 tb.writeJavaFiles(src.resolve("m1"), "module m1 { }"); 119 tb.writeJavaFiles(src.resolve("m2"), "module m2 { requires m1; }"); 120 Path modules = base.resolve("modules"); 121 Files.createDirectories(modules); 122 123 tb.new JavacTask() 124 .options("-modulesourcepath", src.toString()) 125 .outdir(modules) 126 .files(src.resolve("m2/module-info.java")) 127 .run() 128 .writeAll(); 129 } 130 131 @Test 132 void testImplicitModuleClass(Path base) throws Exception { 133 Path src1 = base.resolve("src1"); 134 tb.writeJavaFiles(src1.resolve("m1"), "module m1 { }"); 135 Path modules1 = base.resolve("modules1"); 136 Files.createDirectories(modules1); 137 138 tb.new JavacTask() 139 .options("-modulesourcepath", src1.toString()) 140 .outdir(modules1) 141 .files(src1.resolve("m1/module-info.java")) 142 .run() 143 .writeAll(); 144 145 Path src2= base.resolve("src2"); 146 tb.writeJavaFiles(src2.resolve("m2"), "module m2 { requires m1; }"); 147 Path modules2 = base.resolve("modules2"); 148 Files.createDirectories(modules2); 149 150 tb.new JavacTask() 151 .options("-modulepath", modules1.toString(), 152 "-modulesourcepath", src2.toString()) 153 .outdir(modules2) 154 .files(src2.resolve("m2/module-info.java")) 155 .run() 156 .writeAll(); 157 } 158 159 Path[] join(Path[] a, Path[] b) { 160 List<Path> result = new ArrayList<>(); 161 result.addAll(Arrays.asList(a)); 162 result.addAll(Arrays.asList(b)); 163 return result.toArray(new Path[result.size()]); 164 } 165} 166