blob: 5affd23a7c3dd14c094acb09104bbdb6b33bafeb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.tests.util.Util;
import junit.framework.Test;
public class ClasspathJmodTests extends ModuleCompilationTests {
static {
// TESTS_NAMES = new String[] { "testPackageConflict4a" };
// TESTS_NUMBERS = new int[] { 1 };
// TESTS_RANGE = new int[] { 298, -1 };
}
public ClasspathJmodTests(String name) {
super(name);
}
public void setUp() throws Exception {
super.setUp();
System.setProperty("modules.to.load", "java.base");
}
public void tearDown() throws Exception {
super.tearDown();
System.setProperty("modules.to.load", "");
}
public static Test suite() {
return buildMinimalComplianceTestSuite(testClass(), F_9);
}
public static Class<?> testClass() {
return ClasspathJmodTests.class;
}
private String getJavaSqlJMod() {
String home = Util.getJREDirectory();
return home + File.separator + "jmods" + File.separator + "java.sql.jmod" + File.pathSeparator;
}
public void test001() {
File outputDirectory = new File(OUTPUT_DIR);
Util.flushDirectoryContent(outputDirectory);
String out = "bin";
String directory = OUTPUT_DIR + File.separator + "src";
String moduleLoc = directory + File.separator + "mod.one";
List<String> files = new ArrayList<>();
writeFileCollecting(files, moduleLoc, "module-info.java",
"module mod.one { \n" +
" requires java.sql;\n" +
"}");
writeFileCollecting(files, moduleLoc + File.separator + "p", "X.java",
"package p;\n" +
"public class X {\n" +
" public static java.sql.Connection getConnection() {\n" +
" return null;\n" +
" }\n" +
"}");
StringBuffer buffer = new StringBuffer();
buffer.append("-d " + OUTPUT_DIR + File.separator + out )
.append(" -9 ")
.append(" --module-path \"")
.append(getJavaSqlJMod())
.append("\" ")
.append(" --module-source-path " + "\"" + directory + "\"");
runConformModuleTest(files,
buffer,
"",
"",
false,
"p.X");
}
public void test002() {
File outputDirectory = new File(OUTPUT_DIR);
Util.flushDirectoryContent(outputDirectory);
String out = "bin";
String directory = OUTPUT_DIR + File.separator + "src";
String moduleLoc = directory + File.separator + "mod.one";
List<String> files = new ArrayList<>();
writeFileCollecting(files, moduleLoc, "module-info.java",
"module mod.one { \n" +
" requires java.sql;\n" +
"}");
writeFileCollecting(files, moduleLoc + File.separator + "p", "X.java",
"package p;\n" +
"public class X {\n" +
" public static java.sql.Connection getConnection() {\n" +
" return null;\n" +
" }\n" +
"}");
StringBuffer buffer = new StringBuffer();
buffer.append("-d " + OUTPUT_DIR + File.separator + out )
.append(" -9 ")
.append(" --module-path \"")
.append("\" ")
.append(" --module-source-path " + "\"" + directory + "\"");
runNegativeModuleTest(files,
buffer,
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.one/module-info.java (at line 2)\n" +
" requires java.sql;\n" +
" ^^^^^^^^\n" +
"java.sql cannot be resolved to a module\n" +
"----------\n" +
"----------\n" +
"2. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.one/p/X.java (at line 3)\n" +
" public static java.sql.Connection getConnection() {\n" +
" ^^^^^^^^\n" +
"java.sql cannot be resolved to a type\n" +
"----------\n" +
"2 problems (2 errors)\n",
false,
"p.X");
}
public void test003() {
File outputDirectory = new File(OUTPUT_DIR);
Util.flushDirectoryContent(outputDirectory);
String out = "bin";
String directory = OUTPUT_DIR + File.separator + "src";
String moduleLoc = directory + File.separator + "mod.one";
List<String> files = new ArrayList<>();
writeFileCollecting(files, moduleLoc, "module-info.java",
"module mod.one { \n" +
" requires java.sql;\n" +
"}");
writeFileCollecting(files, moduleLoc + File.separator + "p", "X.java",
"package p;\n" +
"public class X {\n" +
" public static java.sql.Connection getConnection() {\n" +
" return null;\n" +
" }\n" +
"}");
StringBuffer buffer = new StringBuffer();
buffer.append("-d " + OUTPUT_DIR + File.separator + out )
.append(" -9 ")
.append(" -classpath \"")
.append(getJavaSqlJMod())
.append("\" ")
.append(" --module-source-path " + "\"" + directory + "\"");
runNegativeModuleTest(files,
buffer,
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.one/module-info.java (at line 2)\n" +
" requires java.sql;\n" +
" ^^^^^^^^\n" +
"java.sql cannot be resolved to a module\n" +
"----------\n" +
"----------\n" +
"2. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.one/p/X.java (at line 3)\n" +
" public static java.sql.Connection getConnection() {\n" +
" ^^^^^^^^\n" +
"java.sql cannot be resolved to a type\n" +
"----------\n" +
"2 problems (2 errors)\n",
false,
"p.X");
}
public void test004() {
File outputDirectory = new File(OUTPUT_DIR);
Util.flushDirectoryContent(outputDirectory);
String out = "bin";
String directory = OUTPUT_DIR + File.separator + "src";
String moduleLoc = directory + File.separator + "mod.one";
List<String> files = new ArrayList<>();
writeFileCollecting(files, moduleLoc, "module-info.java",
"module mod.one { \n" +
"}");
writeFileCollecting(files, moduleLoc + File.separator + "p", "X.java",
"package p;\n" +
"public class X {\n" +
" public static java.sql.Connection getConnection() {\n" +
" return null;\n" +
" }\n" +
"}");
StringBuffer buffer = new StringBuffer();
buffer.append("-d " + OUTPUT_DIR + File.separator + out )
.append(" -9 ")
.append(" --module-path \"")
.append(getJavaSqlJMod())
.append("\" ")
.append(" --module-source-path " + "\"" + directory + "\"");
runNegativeModuleTest(files,
buffer,
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/mod.one/p/X.java (at line 3)\n" +
" public static java.sql.Connection getConnection() {\n" +
" ^^^^^^^^\n" +
"java.sql cannot be resolved to a type\n" +
"----------\n" +
"1 problem (1 error)\n",
false,
"p.X");
}
public void test005() {
File outputDirectory = new File(OUTPUT_DIR);
Util.flushDirectoryContent(outputDirectory);
String out = "bin";
String directory = OUTPUT_DIR + File.separator + "src";
String moduleLoc = directory + File.separator + "mod.one";
List<String> files = new ArrayList<>();
writeFileCollecting(files, moduleLoc, "module-info.java",
"module mod.one { \n" +
" exports p;\n" +
" requires mod.two;\n" +
" requires transitive java.sql;\n" +
"}");
writeFileCollecting(files, moduleLoc + File.separator + "p", "X.java",
"package p;\n" +
"import q.Y;\n" +
"public class X {\n" +
" public static java.sql.Connection getConnection() {\n" +
" return Y.con;\n" +
" }\n" +
"}");
moduleLoc = directory + File.separator + "mod.two";
writeFileCollecting(files, moduleLoc, "module-info.java",
"module mod.two { \n" +
" exports q;\n" +
" requires java.sql;\n" +
"}");
writeFileCollecting(files, moduleLoc + File.separator + "q", "Y.java",
"package q;\n" +
"public class Y {\n" +
" public static java.sql.Connection con = null;\n" +
"}");
StringBuffer buffer = new StringBuffer();
buffer.append("-d " + OUTPUT_DIR + File.separator + out )
.append(" -9 ")
.append(" --module-path \"")
.append(getJavaSqlJMod())
.append("\" ")
.append(" -warn:-exports") // Y.con unreliably refers to Connection (missing requires transitive)
.append(" --module-source-path " + "\"" + directory + "\"");
runConformModuleTest(files,
buffer,
"",
"",
false);
}
}