Fix NoErrorsInStdlibTest

stdlib was analyzed with an older version of itself in the classpath. But
without that older version stdlib still depends on a built-in part
(builtins, runtime.jvm, reflection), so we compile those as a separate library
beforehand
This commit is contained in:
Alexander Udalov
2014-08-26 14:59:44 +04:00
parent 50903050ff
commit 7dd0613f96
2 changed files with 18 additions and 14 deletions
@@ -58,7 +58,7 @@ public class ForTestCompileRuntime {
}
}
private static void compileBuiltIns(@NotNull File destDir) throws IOException {
public static void compileBuiltIns(@NotNull File destDir) throws IOException {
compileKotlinToJvm("built-ins", destDir,
BUILT_INS_SRC_PATH + File.pathSeparator + RUNTIME_JVM_SRC_PATH + File.pathSeparator + REFLECTION_SRC_PATH,
BUILT_INS_SRC_PATH, RUNTIME_JVM_SRC_PATH, REFLECTION_SRC_PATH);
@@ -18,10 +18,7 @@ package org.jetbrains.jet.plugin.highlighter
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.jet.plugin.ProjectDescriptorWithStdlibSources
import com.intellij.openapi.roots.ModuleRootManager
import org.jetbrains.jet.plugin.JetJdkAndLibraryProjectDescriptor
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.vfs.VfsUtil
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.cli.common.messages.AnalyzerWithCompilerReport
@@ -31,30 +28,34 @@ import org.jetbrains.jet.plugin.PluginTestCaseBase
import kotlin.test.assertEquals
import org.jetbrains.jet.plugin.caches.resolve.getBindingContext
import org.jetbrains.jet.lang.diagnostics.Severity
import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.jet.JetTestUtils
import kotlin.test.assertTrue
public class NoErrorsInStdlibTest: LightCodeInsightFixtureTestCase() {
public class NoErrorsInStdlibTest : LightCodeInsightFixtureTestCase() {
public fun testNoErrors() {
val orderEntries = ModuleRootManager.getInstance(myModule!!)!!.getOrderEntries()
val orderEntry = orderEntries.find { it.getPresentableName() == JetJdkAndLibraryProjectDescriptor.LIBRARY_NAME }!!
val root = orderEntry.getFiles(OrderRootType.SOURCES)[0]
val root = myFixture.copyDirectoryToProject("../libraries/stdlib/src", "")
val psiManager = getPsiManager() // workaround for KT-3974 IllegalAccessError when accessing protected method inherited by outer class
var totalErrors = 0
var hasAtLeastOneFile = false
VfsUtil.processFileRecursivelyWithoutIgnored(root) { file ->
if (!file!!.isDirectory()) {
val psiFile = psiManager.findFile(file)
if (psiFile is JetFile) {
var bindingContext = psiFile.getBindingContext()
hasAtLeastOneFile = true
val bindingContext = psiFile.getBindingContext()
val errors = bindingContext.getDiagnostics().all().filter { it.getSeverity() == Severity.ERROR }
if (!errors.isEmpty()) {
System.err.println("${psiFile.getName()}: ${errors.size()} errors")
if (errors.isNotEmpty()) {
System.err.println("${psiFile.getName()}: ${errors.size} errors")
AnalyzerWithCompilerReport.reportDiagnostics(
bindingContext.getDiagnostics(), MessageCollectorPlainTextToStream.PLAIN_TEXT_TO_SYSTEM_ERR)
bindingContext.getDiagnostics(), MessageCollectorPlainTextToStream.PLAIN_TEXT_TO_SYSTEM_ERR
)
totalErrors += errors.size()
totalErrors += errors.size
}
}
}
@@ -63,10 +64,13 @@ public class NoErrorsInStdlibTest: LightCodeInsightFixtureTestCase() {
}
assertEquals(0, totalErrors)
assertTrue(hasAtLeastOneFile)
}
override fun getProjectDescriptor(): LightProjectDescriptor {
return object : ProjectDescriptorWithStdlibSources() {
val dir = JetTestUtils.tmpDir("noErrorsInStdlibTest")
ForTestCompileRuntime.compileBuiltIns(dir)
return object : JetJdkAndLibraryProjectDescriptor(dir) {
override fun getSdk(): Sdk? = PluginTestCaseBase.fullJdk()
}
}