blob: fa0dbd44f19cb10c26b1b1812243cdf0a7816a01 [file] [log] [blame]
package org.eclipse.jdt.core.tests.compiler.regression;
import java.io.File;
import javax.lang.model.SourceVersion;
import org.eclipse.jdt.core.tests.util.Util;
import junit.framework.Test;
public class MultiReleaseJarTests extends AbstractBatchCompilerTest {
static {
// TESTS_NAMES = new String[] { "test001" };
// TESTS_NUMBERS = new int[] { 1 };
// TESTS_RANGE = new int[] { 298, -1 };
}
private boolean isJRE10 = false;
public MultiReleaseJarTests(String name) {
super(name);
try {
SourceVersion valueOf = SourceVersion.valueOf("RELEASE_10");
if (valueOf != null) this.isJRE10 = true;
} catch(Exception e) {
}
}
public static Test suite() {
return buildMinimalComplianceTestSuite(testClass(), F_9);
}
public static Class<?> testClass() {
return MultiReleaseJarTests.class;
}
public void test001() {
String path = this.getCompilerTestsPluginDirectoryPath() + File.separator + "workspace" + File.separator + "multi.jar";
String[] libs = new String[1];
libs[0] = path;
runNegativeTest(
new String[] {
"src/X.java",
"import a.b.c.MultiVersion1.Inner;\n" +
"import p.q.r.MultiVersion2.Inner;\n" +
"public class X {\n" +
"}\n"},
"\"" + OUTPUT_DIR + File.separator + "src/X.java\"" +
" -classpath " + path + " --release 8 ",
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/X.java (at line 1)\n" +
" import a.b.c.MultiVersion1.Inner;\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"The import a.b.c.MultiVersion1.Inner cannot be resolved\n" +
"----------\n" +
"2. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/X.java (at line 2)\n" +
" import p.q.r.MultiVersion2.Inner;\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"The import p.q.r.MultiVersion2.Inner cannot be resolved\n" +
"----------\n" +
"2 problems (2 errors)\n",
false
);
}
public void test002() {
String path = this.getCompilerTestsPluginDirectoryPath() + File.separator + "workspace" + File.separator + "multi.jar";
String[] libs = new String[1];
libs[0] = path;
runNegativeTest(
new String[] {
"src/X.java",
"import a.b.c.MultiVersion1.Inner;\n" +
"import p.q.r.MultiVersion2.Inner;\n" +
"public class X {\n" +
"}\n"},
"\"" + OUTPUT_DIR + File.separator + "src/X.java\"" +
" -classpath " + path + " --release 9 ",
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/X.java (at line 1)\n" +
" import a.b.c.MultiVersion1.Inner;\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"The type a.b.c.MultiVersion1.Inner is not visible\n" +
"----------\n" +
"1 problem (1 error)\n",
false
);
}
public void test003() {
String path = this.getCompilerTestsPluginDirectoryPath() + File.separator + "workspace" + File.separator + "multi.jar";
String[] libs = new String[1];
libs[0] = path;
runConformTest(
new String[] {
"src/X.java",
"import p.q.r.MultiVersion3.Inner;\n" +
"public class X {\n" +
" Inner i = null;\n" +
" p.q.r.MultiVersion2.Inner i2 = null;\n" +
"}\n"},
"\"" + OUTPUT_DIR + File.separator + "src/X.java\"" +
" -classpath " + path + " --release 9 ",
"",
"",
false
);
}
public void test004() {
String path = this.getCompilerTestsPluginDirectoryPath() + File.separator + "workspace" + File.separator + "multi.jar";
String[] libs = new String[1];
libs[0] = path;
runNegativeTest(
new String[] {
"src/X.java",
"import p.q.r.MultiVersion3.Inner;\n" +
"import p.q.r.MultiVersion2.Inner;\n" +
"public class X {\n" +
" Inner i = null;\n" +
"}\n"},
"\"" + OUTPUT_DIR + File.separator + "src/X.java\"" +
" -classpath " + path + " --release 9 ",
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/X.java (at line 2)\n" +
" import p.q.r.MultiVersion2.Inner;\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"The import p.q.r.MultiVersion2.Inner collides with another import statement\n" +
"----------\n" +
"1 problem (1 error)\n",
false
);
}
public void test005() {
Util.flushDirectoryContent(new File(OUTPUT_DIR));
String path = this.getCompilerTestsPluginDirectoryPath() + File.separator + "workspace" + File.separator + "multi.jar";
String[] libs = new String[1];
libs[0] = path;
File directory = new File(OUTPUT_DIR + File.separator + "src" + File.separator + "MyModule" );
File out = new File(OUTPUT_DIR + File.separator + "out" );
if (!directory.exists()) {
if (!directory.mkdirs()) {
System.out.println("Could not create " + directory.toString());
return;
}
}
if (!out.exists()) {
if (!out.mkdirs()) {
System.out.println("Could not create " + directory.toString());
return;
}
}
runNegativeTest(
new String[] {
"src/MyModule/module-info.java",
"module MyModule {\n" +
" requires Version9;\n" +
"}",
"src/MyModule/p/X.java",
"package p;\n" +
"public class X {\n" +
" java.sql.Connection con = null;\n" +
"}\n"},
" -d \"" + out.toString() + "\" " +
" --module-source-path \"" + directory.toString() + "\" " +
" \"" + OUTPUT_DIR + File.separator + "src" + File.separator + "MyModule" + File.separator + "module-info.java\"" +
" \"" + OUTPUT_DIR + File.separator + "src" + File.separator + "MyModule" + File.separator + "p" + File.separator + "X.java\" " +
" --module-path " + path + " --release 9 ",
"",
"----------\n" +
"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/src/MyModule/p/X.java (at line 3)\n" +
" java.sql.Connection con = null;\n" +
" ^^^^^^^^^^^^^^^^^^^\n" +
"The type java.sql.Connection is not accessible\n" +
"----------\n" +
"1 problem (1 error)\n",
false
);
}
public void test006() {
if (!this.isJRE10) return;
String path = this.getCompilerTestsPluginDirectoryPath() + File.separator + "workspace" + File.separator + "multi.jar";
String[] libs = new String[1];
libs[0] = path;
File directory = new File(OUTPUT_DIR + File.separator + "src" + File.separator + "MyModule" );
File out = new File(OUTPUT_DIR + File.separator + "out" );
if (!directory.exists()) {
if (!directory.mkdirs()) {
System.out.println("Could not create " + directory.toString());
return;
}
}
if (!out.exists()) {
if (!directory.mkdirs()) {
System.out.println("Could not create " + directory.toString());
return;
}
}
runConformTest(
new String[] {
"src/MyModule/module-info.java",
"module MyModule {\n" +
" requires Version10;\n" +
"}",
"src/MyModule/p/X.java",
"package p;\n" +
"public class X {\n" +
" java.sql.Connection con = null;\n" +
"}\n"},
" -d \"" + out.toString() + "\" " +
" --module-source-path \"" + directory.toString() + "\" " +
" \"" + OUTPUT_DIR + File.separator + "src" + File.separator + "MyModule" + File.separator + "module-info.java\"" +
" \"" + OUTPUT_DIR + File.separator + "src" + File.separator + "MyModule" + File.separator + "p" + File.separator + "X.java\" " +
" --module-path " + path + " --release 10 ",
"",
"",
false
);
}
}