Fix compileJavaAgainstKotlin tests

- Use another API to get file name out of a javac diagnostic
  (.getSource().getName()'s behavior changed in JDK 8)
- Delete .txt files for those tests which check that javac reported a
  compilation error; the order and content of declarations in those
  files is undefined
This commit is contained in:
Alexander Udalov
2017-03-16 19:36:40 +03:00
committed by Dmitry Jemerov
parent 4edfd0d960
commit 3c96099f7c
16 changed files with 18 additions and 105 deletions
@@ -1,13 +0,0 @@
package test
public sealed class Season {
private constructor Season()
public final class Cold : test.Season {
public constructor Cold()
}
public final class Warm : test.Season {
public constructor Warm()
}
}
@@ -1,13 +0,0 @@
package test
public sealed class Season {
private constructor Season()
public final class Cold : test.Season {
public constructor Cold()
}
public final class Warm : test.Season {
public constructor Warm()
}
}
@@ -1,9 +0,0 @@
package test
@test.meta public/*package*/ final annotation class MyAnn : kotlin.Annotation {
public/*package*/ constructor MyAnn()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.ANNOTATION_CLASS}) public final annotation class meta : kotlin.Annotation {
public constructor meta()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class classifier : kotlin.Annotation {
public constructor classifier()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CONSTRUCTOR}) public final annotation class constructor : kotlin.Annotation {
public constructor constructor()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {}) public final annotation class empty : kotlin.Annotation {
public constructor empty()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FIELD}) public final annotation class field : kotlin.Annotation {
public constructor field()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION}) public final annotation class function : kotlin.Annotation {
public constructor function()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_GETTER}) public final annotation class getter : kotlin.Annotation {
public constructor getter()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.LOCAL_VARIABLE}) public final annotation class local : kotlin.Annotation {
public constructor local()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION}) public final annotation class multiple : kotlin.Annotation {
public constructor multiple()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) public final annotation class parameter : kotlin.Annotation {
public constructor parameter()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY}) public final annotation class property : kotlin.Annotation {
public constructor property()
}
@@ -1,5 +0,0 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_SETTER}) public final annotation class setter : kotlin.Annotation {
public constructor setter()
}
@@ -552,7 +552,7 @@ public class KotlinTestUtils {
} }
} }
public static void compileKotlinWithJava( public static boolean compileKotlinWithJava(
@NotNull List<File> javaFiles, @NotNull List<File> javaFiles,
@NotNull List<File> ktFiles, @NotNull List<File> ktFiles,
@NotNull File outDir, @NotNull File outDir,
@@ -567,12 +567,12 @@ public class KotlinTestUtils {
boolean mkdirs = outDir.mkdirs(); boolean mkdirs = outDir.mkdirs();
assert mkdirs : "Not created: " + outDir; assert mkdirs : "Not created: " + outDir;
} }
if (!javaFiles.isEmpty()) { if (javaFiles.isEmpty()) return true;
compileJavaFiles(javaFiles, Arrays.asList(
"-classpath", outDir.getPath() + File.pathSeparator + ForTestCompileRuntime.runtimeJarForTests(), return compileJavaFiles(javaFiles, Arrays.asList(
"-d", outDir.getPath() "-classpath", outDir.getPath() + File.pathSeparator + ForTestCompileRuntime.runtimeJarForTests(),
), javaErrorFile); "-d", outDir.getPath()
} ), javaErrorFile);
} }
public interface TestFileFactory<M, F> { public interface TestFileFactory<M, F> {
@@ -802,11 +802,11 @@ public class KotlinTestUtils {
return comments; return comments;
} }
public static void compileJavaFiles(@NotNull Collection<File> files, List<String> options) throws IOException { public static boolean compileJavaFiles(@NotNull Collection<File> files, List<String> options) throws IOException {
compileJavaFiles(files, options, null); return compileJavaFiles(files, options, null);
} }
public static void compileJavaFiles(@NotNull Collection<File> files, List<String> options, @Nullable File javaErrorFile) throws IOException { private static boolean compileJavaFiles(@NotNull Collection<File> files, List<String> options, @Nullable File javaErrorFile) throws IOException {
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler(); JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnosticCollector = new DiagnosticCollector<JavaFileObject>(); DiagnosticCollector<JavaFileObject> diagnosticCollector = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = javaCompiler.getStandardFileManager(diagnosticCollector, Locale.ENGLISH, Charset.forName("utf-8")); StandardJavaFileManager fileManager = javaCompiler.getStandardFileManager(diagnosticCollector, Locale.ENGLISH, Charset.forName("utf-8"));
@@ -828,13 +828,14 @@ public class KotlinTestUtils {
else { else {
assertEqualsToFile(javaErrorFile, errorsToString(diagnosticCollector, false)); assertEqualsToFile(javaErrorFile, errorsToString(diagnosticCollector, false));
} }
return success;
} finally { } finally {
fileManager.close(); fileManager.close();
} }
} }
@NotNull @NotNull
private static String errorsToString(@NotNull DiagnosticCollector<JavaFileObject> diagnosticCollector, boolean humanReadable) { private static String errorsToString(@NotNull DiagnosticCollector<JavaFileObject> diagnosticCollector, boolean humanReadable) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
for (javax.tools.Diagnostic<? extends JavaFileObject> diagnostic : diagnosticCollector.getDiagnostics()) { for (javax.tools.Diagnostic<? extends JavaFileObject> diagnostic : diagnosticCollector.getDiagnostics()) {
if (diagnostic.getKind() != javax.tools.Diagnostic.Kind.ERROR) continue; if (diagnostic.getKind() != javax.tools.Diagnostic.Kind.ERROR) continue;
@@ -843,7 +844,7 @@ public class KotlinTestUtils {
builder.append(diagnostic).append("\n"); builder.append(diagnostic).append("\n");
} }
else { else {
builder.append(diagnostic.getSource().getName()).append(":") builder.append(new File(diagnostic.getSource().toUri()).getName()).append(":")
.append(diagnostic.getLineNumber()).append(":") .append(diagnostic.getLineNumber()).append(":")
.append(diagnostic.getColumnNumber()).append(":") .append(diagnostic.getColumnNumber()).append(":")
.append(diagnostic.getCode()).append("\n"); .append(diagnostic.getCode()).append("\n");
@@ -65,12 +65,13 @@ public abstract class AbstractCompileJavaAgainstKotlinTest extends TestCaseWithT
Assert.assertTrue(ktFilePath.endsWith(".kt")); Assert.assertTrue(ktFilePath.endsWith(".kt"));
File ktFile = new File(ktFilePath); File ktFile = new File(ktFilePath);
File javaFile = new File(ktFilePath.replaceFirst("\\.kt$", ".java")); File javaFile = new File(ktFilePath.replaceFirst("\\.kt$", ".java"));
File expectedFile = new File(ktFilePath.replaceFirst("\\.kt$", ".txt"));
File javaErrorFile = new File(ktFilePath.replaceFirst("\\.kt$", ".javaerr.txt")); File javaErrorFile = new File(ktFilePath.replaceFirst("\\.kt$", ".javaerr.txt"));
File out = new File(tmpdir, "out"); File out = new File(tmpdir, "out");
compileKotlinWithJava(Collections.singletonList(javaFile), Collections.singletonList(ktFile), boolean compiledSuccessfully =
out, getTestRootDisposable(), javaErrorFile); compileKotlinWithJava(Collections.singletonList(javaFile), Collections.singletonList(ktFile),
out, getTestRootDisposable(), javaErrorFile);
if (!compiledSuccessfully) return;
KotlinCoreEnvironment environment = KotlinCoreEnvironment.createForTests( KotlinCoreEnvironment environment = KotlinCoreEnvironment.createForTests(
getTestRootDisposable(), getTestRootDisposable(),
@@ -82,6 +83,7 @@ public abstract class AbstractCompileJavaAgainstKotlinTest extends TestCaseWithT
PackageViewDescriptor packageView = analysisResult.getModuleDescriptor().getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME); PackageViewDescriptor packageView = analysisResult.getModuleDescriptor().getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME);
assertFalse("Nothing found in package " + LoadDescriptorUtil.TEST_PACKAGE_FQNAME, packageView.isEmpty()); assertFalse("Nothing found in package " + LoadDescriptorUtil.TEST_PACKAGE_FQNAME, packageView.isEmpty());
File expectedFile = new File(ktFilePath.replaceFirst("\\.kt$", ".txt"));
validateAndCompareDescriptorWithFile(packageView, CONFIGURATION, expectedFile); validateAndCompareDescriptorWithFile(packageView, CONFIGURATION, expectedFile);
} }
} }