ResolveTest.java revision 3741:1fc501869aa8
1/* 2 * Copyright (c) 2013, 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 * @summary tests for module resolution 27 * @library /tools/lib 28 * @modules 29 * jdk.compiler/com.sun.tools.javac.api 30 * jdk.compiler/com.sun.tools.javac.main 31 * @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase 32 * @run main ResolveTest 33 */ 34 35import java.nio.file.*; 36 37import toolbox.JavacTask; 38import toolbox.Task; 39import toolbox.ToolBox; 40 41public class ResolveTest extends ModuleTestBase { 42 public static void main(String... args) throws Exception { 43 ResolveTest t = new ResolveTest(); 44 t.runTests(); 45 } 46 47 @Test 48 public void testMissingSimpleTypeUnnamedModule(Path base) throws Exception { 49 Path src = base.resolve("src"); 50 tb.writeJavaFiles(src, "class C { D d; }"); 51 52 String log = new JavacTask(tb) 53 .options("-XDrawDiagnostics") 54 .files(findJavaFiles(src)) 55 .run(Task.Expect.FAIL) 56 .writeAll() 57 .getOutput(Task.OutputKind.DIRECT); 58 59 if (!log.contains("C.java:1:11: compiler.err.cant.resolve.location: " 60 + "kindname.class, D, , , (compiler.misc.location: kindname.class, C, null)")) 61 throw new Exception("expected output not found"); 62 } 63 64 @Test 65 public void testMissingSimpleTypeNamedModule(Path base) throws Exception { 66 Path src = base.resolve("src"); 67 tb.writeJavaFiles(src, 68 "module m { }", 69 "class C { D d; }"); 70 71 String log = new JavacTask(tb) 72 .options("-XDrawDiagnostics") 73 .files(findJavaFiles(src)) 74 .run(Task.Expect.FAIL) 75 .writeAll() 76 .getOutput(Task.OutputKind.DIRECT); 77 78 if (!log.contains("C.java:1:11: compiler.err.cant.resolve.location: " 79 + "kindname.class, D, , , (compiler.misc.location: kindname.class, C, null)")) 80 throw new Exception("expected output not found"); 81 } 82 83 @Test 84 public void testUnexportedTypeUnreadableModule(Path base) throws Exception { 85 Path src = base.resolve("src"); 86 tb.writeJavaFiles(src.resolve("m1"), 87 "module m1 { }", 88 "package p1; public class C1 { }"); 89 tb.writeJavaFiles(src.resolve("m2"), 90 "module m2 { }", 91 "package p2; public class C2 { p1.C1 c; }"); 92 Path modules = base.resolve("modules"); 93 Files.createDirectories(modules); 94 95 String log = new JavacTask(tb) 96 .options("-XDrawDiagnostics", "--module-source-path", src.toString()) 97 .outdir(modules) 98 .files(findJavaFiles(src)) 99 .run(Task.Expect.FAIL) 100 .writeAll() 101 .getOutput(Task.OutputKind.DIRECT); 102 103 if (!log.contains("C2.java:1:33: compiler.err.not.def.access.package.cant.access: p1.C1, p1")) 104 throw new Exception("expected output not found"); 105 } 106 107 @Test 108 public void testUnexportedTypeReadableModule(Path base) throws Exception { 109 Path src = base.resolve("src"); 110 tb.writeJavaFiles(src.resolve("m1"), 111 "module m1 { }", 112 "package p1; public class C1 { }"); 113 tb.writeJavaFiles(src.resolve("m2"), 114 "module m2 { requires m1; }", 115 "package p2; public class C2 { p1.C1 c; }"); 116 Path modules = base.resolve("modules"); 117 Files.createDirectories(modules); 118 119 String log = new JavacTask(tb) 120 .options("-XDrawDiagnostics", "--module-source-path", src.toString()) 121 .outdir(modules) 122 .files(findJavaFiles(src)) 123 .run(Task.Expect.FAIL) 124 .writeAll() 125 .getOutput(Task.OutputKind.DIRECT); 126 127 if (!log.contains("C2.java:1:33: compiler.err.not.def.access.package.cant.access: p1.C1, p1")) 128 throw new Exception("expected output not found"); 129 } 130 131 @Test 132 public void testQualifiedExportedTypeReadableModule(Path base) throws Exception { 133 Path src = base.resolve("src"); 134 tb.writeJavaFiles(src.resolve("m1"), 135 "module m1 { exports p1 to m3; }", 136 "package p1; public class C1 { }"); 137 tb.writeJavaFiles(src.resolve("m2"), 138 "module m2 { requires m1; }", 139 "package p2; public class C2 { p1.C1 c; }"); 140 tb.writeJavaFiles(src.resolve("m3"), 141 "module m3 { requires m1; }"); 142 Path modules = base.resolve("modules"); 143 Files.createDirectories(modules); 144 145 String log = new JavacTask(tb) 146 .options("-XDrawDiagnostics", "--module-source-path", src.toString()) 147 .outdir(modules) 148 .files(findJavaFiles(src)) 149 .run(Task.Expect.FAIL) 150 .writeAll() 151 .getOutput(Task.OutputKind.DIRECT); 152 153 if (!log.contains("C2.java:1:33: compiler.err.not.def.access.package.cant.access: p1.C1, p1")) 154 throw new Exception("expected output not found"); 155 } 156 157 @Test 158 public void testExportedTypeUnreadableModule(Path base) throws Exception { 159 Path src = base.resolve("src"); 160 tb.writeJavaFiles(src.resolve("m1"), 161 "module m1 { exports p1; }", 162 "package p1; public class C1 { }"); 163 tb.writeJavaFiles(src.resolve("m2"), 164 "module m2 { }", 165 "package p2; public class C2 { p1.C1 c; }"); 166 Path modules = base.resolve("modules"); 167 Files.createDirectories(modules); 168 169 String log = new JavacTask(tb) 170 .options("-XDrawDiagnostics", "--module-source-path", src.toString()) 171 .outdir(modules) 172 .files(findJavaFiles(src)) 173 .run(Task.Expect.FAIL) 174 .writeAll() 175 .getOutput(Task.OutputKind.DIRECT); 176 177 if (!log.contains("C2.java:1:33: compiler.err.not.def.access.package.cant.access: p1.C1, p1")) 178 throw new Exception("expected output not found"); 179 } 180 181 @Test 182 public void testExportedTypeReadableModule(Path base) throws Exception { 183 Path src = base.resolve("src"); 184 tb.writeJavaFiles(src.resolve("m1"), 185 "module m1 { exports p1; }", 186 "package p1; public class C1 { }"); 187 tb.writeJavaFiles(src.resolve("m2"), 188 "module m2 { requires m1; }", 189 "package p2; public class C2 { p1.C1 c; }"); 190 Path modules = base.resolve("modules"); 191 Files.createDirectories(modules); 192 193 new JavacTask(tb) 194 .options("-XDrawDiagnostics", "--module-source-path", src.toString()) 195 .outdir(modules) 196 .files(findJavaFiles(src)) 197 .run() 198 .writeAll(); 199 } 200 201 @Test 202 public void testExportedTypeReadableModule2(Path base) throws Exception { 203 Path src = base.resolve("src"); 204 tb.writeJavaFiles(src.resolve("m1"), 205 "module m1 { exports p1 to m2; }", 206 "package p1; public class C1 { }"); 207 tb.writeJavaFiles(src.resolve("m2"), 208 "module m2 { requires m1; }", 209 "package p2; public class C2 { p1.C1 c; }"); 210 Path modules = base.resolve("modules"); 211 Files.createDirectories(modules); 212 213 new JavacTask(tb) 214 .options("-XDrawDiagnostics", "--module-source-path", src.toString()) 215 .outdir(modules) 216 .files(findJavaFiles(src)) 217 .run() 218 .writeAll(); 219 } 220} 221