From 488ef6f50ee19b7e1f811b1b827cfc2b87584357 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 6 Nov 2014 15:32:57 +0300 Subject: [PATCH] Register plugin extensions in tests --- .../resolve/android/AbstractAndroidBoxTest.kt | 30 ++++++++++++++--- .../AbstractAndroidBytecodePersistenceTest.kt | 16 +++++++-- .../AbstractAndroidXml2KConversionTest.kt | 3 +- .../AndroidTestDeclarationsProvider.kt | 33 +++++++++++++++++++ .../jet/android/AbstractCrossParserTest.kt | 3 +- 5 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AndroidTestDeclarationsProvider.kt diff --git a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBoxTest.kt b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBoxTest.kt index fc51edd2f7c..a3b820f0848 100644 --- a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBoxTest.kt +++ b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBoxTest.kt @@ -32,6 +32,12 @@ import org.jetbrains.jet.codegen.CodegenTestFiles import java.util.regex.Pattern import org.jetbrains.jet.config.CompilerConfiguration import org.jetbrains.kotlin.android.AndroidConfigurationKeys +import org.jetbrains.jet.JetTestCaseBuilder +import com.intellij.openapi.application.PathManager +import org.jetbrains.jet.extensions.ExternalDeclarationsProvider +import org.jetbrains.kotlin.android.AndroidExpressionCodegen +import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension +import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() { @@ -44,9 +50,14 @@ public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() { } private fun createEnvironmentForConfiguration(configuration: CompilerConfiguration, path: String) { - configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, path + "layout/"); - configuration.put(AndroidConfigurationKeys.ANDROID_MANIFEST, path + "AndroidManifest.xml"); - myEnvironment = JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration); + val resPath = path + "layout/" + val manifestPath = path + "AndroidManifest.xml" + configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, resPath) + configuration.put(AndroidConfigurationKeys.ANDROID_MANIFEST, manifestPath) + myEnvironment = JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + val project = myEnvironment.getProject() + ExternalDeclarationsProvider.registerExtension(project, AndroidTestDeclarationsProvider(project, resPath, manifestPath)) + ExpressionCodegenExtension.registerExtension(project, AndroidExpressionCodegen()) } public fun doCompileAgainstAndroidSdkTest(path: String) { @@ -69,6 +80,13 @@ public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() { return !FileUtil.findFilesByMask(Pattern.compile("^0.kt$"), File(path)).empty } + override fun relativePath(file: File): String { + val stringToCut = "plugins/android-compiler-plugin/testData/codegen/" + val systemIndependentPath = file.getPath().replace(File.separatorChar, '/') + assert(systemIndependentPath.startsWith(stringToCut), "File path is not absolute: $file ") + return systemIndependentPath.substring(stringToCut.length()) + } + private fun doMultiFileTest(path: String, additionalFiles: Collection? = null) { val files = ArrayList(2) FileUtil.processFilesRecursively(File(path), object : Processor { @@ -85,7 +103,11 @@ public abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() { if (additionalFiles != null) { files.addAll(additionalFiles) } - myFiles = CodegenTestFiles.create(myEnvironment!!.getProject(), ArrayUtil.toStringArray(files)) + myFiles = CodegenTestFiles.create( + myEnvironment!!.getProject(), + ArrayUtil.toStringArray(files), + JetTestCaseBuilder.getHomeDirectory() + "/plugins/android-compiler-plugin/testData" + ) blackBox(); } } diff --git a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBytecodePersistenceTest.kt b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBytecodePersistenceTest.kt index d34d46bab51..a9dcf7e75f6 100644 --- a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBytecodePersistenceTest.kt +++ b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidBytecodePersistenceTest.kt @@ -24,6 +24,10 @@ import org.jetbrains.jet.config.CompilerConfiguration import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment import org.jetbrains.kotlin.android.AndroidConfigurationKeys +import org.jetbrains.jet.extensions.ExternalDeclarationsProvider +import org.jetbrains.jet.codegen.extensions.ExpressionCodegenExtension +import org.jetbrains.kotlin.android.AndroidExpressionCodegen +import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles public abstract class AbstractAndroidBytecodePersistenceTest : AbstractBytecodeTextTest() { @@ -36,10 +40,16 @@ public abstract class AbstractAndroidBytecodePersistenceTest : AbstractBytecodeT } private fun createEnvironmentForConfiguration(configuration: CompilerConfiguration, path: String) { - configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, path + "res/layout/"); - configuration.put(AndroidConfigurationKeys.ANDROID_MANIFEST, path + "../AndroidManifest.xml"); - myEnvironment = JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration); + val resPath = path + "res/layout/" + val manifestPath = path + "../AndroidManifest.xml" + configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, resPath) + configuration.put(AndroidConfigurationKeys.ANDROID_MANIFEST, manifestPath) + myEnvironment = JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + val project = myEnvironment.getProject() + ExternalDeclarationsProvider.registerExtension(project, AndroidTestDeclarationsProvider(project, resPath, manifestPath)) + ExpressionCodegenExtension.registerExtension(project, AndroidExpressionCodegen()) } + public override fun doTest(path: String) { val fileName = path + getTestName(true) + ".kt" createAndroidAPIEnvironment(path) diff --git a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidXml2KConversionTest.kt b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidXml2KConversionTest.kt index d85ac8e658c..ffb21a741b3 100644 --- a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidXml2KConversionTest.kt +++ b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AbstractAndroidXml2KConversionTest.kt @@ -29,6 +29,7 @@ import org.jetbrains.jet.TestJdkKind import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys import org.junit.Assert import kotlin.test.fail +import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() { @@ -54,6 +55,6 @@ public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() { val configuration = JetTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.MOCK_JDK) // configuration.put(JVMConfigurationKeys.ANDROID_RES_PATH, testPath + "/layout") // configuration.put(JVMConfigurationKeys.ANDROID_MANIFEST, testPath + "/AndroidManifest.xml") - return JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration) + return JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) } } diff --git a/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AndroidTestDeclarationsProvider.kt b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AndroidTestDeclarationsProvider.kt new file mode 100644 index 00000000000..dac02fab424 --- /dev/null +++ b/plugins/android-compiler-plugin/tests/org/jetbrains/jet/lang/resolve/android/AndroidTestDeclarationsProvider.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.android + +import com.intellij.openapi.project.Project +import org.jetbrains.jet.extensions.ExternalDeclarationsProvider +import org.jetbrains.jet.lang.psi.JetFile +import org.jetbrains.jet.utils.emptyOrSingletonList + +private class AndroidTestDeclarationsProvider( + val project: Project, + val resPath: String, + val manifestPath: String +) : ExternalDeclarationsProvider { + override fun getExternalDeclarations(): Collection { + val parser = CliAndroidUIXmlProcessor(project, resPath, manifestPath) + return emptyOrSingletonList(parser.parseToPsi(project)) + } +} \ No newline at end of file diff --git a/plugins/android-idea-plugin/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt b/plugins/android-idea-plugin/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt index d137143b068..ff14d1cddb7 100644 --- a/plugins/android-idea-plugin/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt +++ b/plugins/android-idea-plugin/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt @@ -27,6 +27,7 @@ import kotlin.test.assertEquals import org.jetbrains.jet.plugin.android.TestConst import org.jetbrains.jet.plugin.PluginTestCaseBase import org.jetbrains.kotlin.android.AndroidConfigurationKeys +import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles public abstract class AbstractCrossParserTest : KotlinAndroidTestCase() { public fun doTest(path: String) { @@ -46,7 +47,7 @@ public abstract class AbstractCrossParserTest : KotlinAndroidTestCase() { val configuration = JetTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.MOCK_JDK) configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, testPath + "/layout") configuration.put(AndroidConfigurationKeys.ANDROID_MANIFEST, testPath + "/AndroidManifest.xml") - return JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration) + return JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) } override fun getTestDataPath(): String? {