Android Extensions: Support LayoutContainer in code generation

This commit is contained in:
Yan Zhulanow
2017-06-05 22:46:37 +03:00
parent a69f9729e0
commit 423a09e46a
32 changed files with 279 additions and 56 deletions
@@ -69,7 +69,7 @@ abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() {
}
private fun doMultiFileTest(path: String, additionalFiles: Collection<String>? = null) {
val files = ArrayList<String>(2)
val files = mutableListOf<String>()
FileUtil.processFilesRecursively(File(path), object : Processor<File> {
override fun process(file: File?): Boolean {
when (file!!.name) {
@@ -86,6 +86,11 @@ abstract class AbstractAndroidBoxTest : AbstractBlackBoxCodegenTest() {
return true
}
})
for (file in File("plugins/android-extensions/android-extensions-runtime/src").walk()) {
if (file.extension == "kt") files += relativePath(file.absoluteFile)
}
Collections.sort(files)
if (additionalFiles != null) {
files.addAll(additionalFiles)
@@ -16,26 +16,21 @@
package org.jetbrains.kotlin.android.synthetic.test
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.AbstractBytecodeTextTest
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
abstract class AbstractAndroidBytecodeShapeTest : AbstractBytecodeTextTest() {
private fun createAndroidAPIEnvironment(path: String) {
return createEnvironmentForConfiguration(KotlinTestUtils.newConfiguration(ConfigurationKind.ALL, TestJdkKind.ANDROID_API), path)
}
private fun createEnvironmentForConfiguration(configuration: CompilerConfiguration, path: String) {
val layoutPaths = getResPaths(path)
myEnvironment = createTestEnvironment(configuration, layoutPaths).apply {
val runtimeLibrary = File("out/production/android-extensions-runtime")
updateClasspath(listOf(JvmClasspathRoot(runtimeLibrary)))
}
myEnvironment = createTestEnvironment(configuration, layoutPaths)
addAERuntimeLibrary(myEnvironment)
}
override fun doTest(path: String) {
@@ -38,6 +38,12 @@ public class AndroidBoxTestGenerated extends AbstractAndroidBoxTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("plugins/android-extensions/android-extensions-compiler/testData/codegen/android"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false);
}
@TestMetadata("androidEntity")
public void testAndroidEntity() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("plugins/android-extensions/android-extensions-compiler/testData/codegen/android/androidEntity/");
doCompileAgainstAndroidSdkTest(fileName);
}
@TestMetadata("fqNameInAttr")
public void testFqNameInAttr() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("plugins/android-extensions/android-extensions-compiler/testData/codegen/android/fqNameInAttr/");
@@ -95,6 +101,12 @@ public class AndroidBoxTestGenerated extends AbstractAndroidBoxTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("plugins/android-extensions/android-extensions-compiler/testData/codegen/android"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false);
}
@TestMetadata("androidEntity")
public void testAndroidEntity() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("plugins/android-extensions/android-extensions-compiler/testData/codegen/android/androidEntity/");
doFakeInvocationTest(fileName);
}
@TestMetadata("fqNameInAttr")
public void testFqNameInAttr() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("plugins/android-extensions/android-extensions-compiler/testData/codegen/android/fqNameInAttr/");
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.android.synthetic.res.CliAndroidLayoutXmlFileManager
import org.jetbrains.kotlin.android.synthetic.res.CliAndroidPackageFragmentProviderExtension
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -50,9 +51,18 @@ fun KtUsefulTestCase.createTestEnvironment(configuration: CompilerConfiguration,
ClassBuilderInterceptorExtension.registerExtension(project, AndroidOnDestroyClassBuilderInterceptorExtension())
PackageFragmentProviderExtension.registerExtension(project, CliAndroidPackageFragmentProviderExtension())
addAERuntimeLibrary(myEnvironment)
return myEnvironment
}
fun addAERuntimeLibrary(environment: KotlinCoreEnvironment) {
environment.apply {
val runtimeLibrary = File("out/production/android-extensions-runtime")
updateClasspath(listOf(JvmClasspathRoot(runtimeLibrary)))
}
}
fun getResPaths(path: String): List<String> {
return File(path).listFiles { it -> it.name.startsWith("res") && it.isDirectory }!!.map { "$path${it.name}/" }
}