From bc9e1ee2d24401ed4f43d25e57f2f03f529eef6a Mon Sep 17 00:00:00 2001 From: Mikhail Mutcianko Date: Sun, 7 Sep 2014 17:44:17 +0400 Subject: [PATCH] fix android cross parser tests - reorganize tests folder structure - fix class attribute ignored in ide xml parser --- .../lang/resolve/android/AndroidXmlHandler.kt | 8 ++--- .../jet/plugin/android/AndroidXmlVisitor.kt | 3 +- .../android/crossParser/AndroidManifest.xml | 7 ++++ .../fqNameInAttr/AndroidManifest.xml | 33 ------------------- .../crossParser/fqNameInAttr/layout.kt | 9 ----- .../fqNameInAttr/{ => res}/layout/layout.xml | 0 .../fqNameInTag/AndroidManifest.xml | 33 ------------------- .../android/crossParser/fqNameInTag/layout.kt | 9 ----- .../fqNameInTag/{ => res}/layout/layout.xml | 0 .../crossParser/multiFile/AndroidManifest.xml | 33 ------------------- .../android/crossParser/multiFile/layout.kt | 30 ----------------- .../multiFile/{ => res}/layout/layout.xml | 0 .../multiFile/{ => res}/layout/layout1.xml | 0 .../crossParser/noIds/AndroidManifest.xml | 33 ------------------- .../android/crossParser/noIds/layout.kt | 6 ---- .../noIds/{ => res}/layout/layout.xml | 0 .../singleFile/AndroidManifest.xml | 33 ------------------- .../crossParser/singleFile/MyActivity.kt | 27 --------------- .../android/crossParser/singleFile/R.kt | 14 -------- .../android/crossParser/singleFile/layout.kt | 18 ---------- .../singleFile/{ => res}/layout/layout.xml | 0 .../jet/android/AbstractCrossParserTest.kt | 24 +++++++++----- .../jet/android/KotlinAndroidTestCase.java | 1 - 23 files changed, 29 insertions(+), 292 deletions(-) create mode 100644 idea/testData/android/crossParser/AndroidManifest.xml delete mode 100644 idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml delete mode 100644 idea/testData/android/crossParser/fqNameInAttr/layout.kt rename idea/testData/android/crossParser/fqNameInAttr/{ => res}/layout/layout.xml (100%) delete mode 100644 idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml delete mode 100644 idea/testData/android/crossParser/fqNameInTag/layout.kt rename idea/testData/android/crossParser/fqNameInTag/{ => res}/layout/layout.xml (100%) delete mode 100644 idea/testData/android/crossParser/multiFile/AndroidManifest.xml delete mode 100644 idea/testData/android/crossParser/multiFile/layout.kt rename idea/testData/android/crossParser/multiFile/{ => res}/layout/layout.xml (100%) rename idea/testData/android/crossParser/multiFile/{ => res}/layout/layout1.xml (100%) delete mode 100644 idea/testData/android/crossParser/noIds/AndroidManifest.xml delete mode 100644 idea/testData/android/crossParser/noIds/layout.kt rename idea/testData/android/crossParser/noIds/{ => res}/layout/layout.xml (100%) delete mode 100644 idea/testData/android/crossParser/singleFile/AndroidManifest.xml delete mode 100644 idea/testData/android/crossParser/singleFile/MyActivity.kt delete mode 100644 idea/testData/android/crossParser/singleFile/R.kt delete mode 100644 idea/testData/android/crossParser/singleFile/layout.kt rename idea/testData/android/crossParser/singleFile/{ => res}/layout/layout.xml (100%) diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt index 5a16f22a894..c2485cffa31 100644 --- a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt +++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt @@ -31,10 +31,10 @@ class AndroidXmlHandler(private val resourceManager: AndroidResourceManager, pri } override fun startElement(uri: String, localName: String, qName: String, attributes: Attributes) { - val hashMap = attributes.toMap() - val s = hashMap[resourceManager.idAttributeNoNamespace] - val className = hashMap[resourceManager.classAttributeNoNamespace] ?: localName - if (resourceManager.isResourceDeclarationOrUsage(s)) elementCallback(resourceManager.idToName(s), className) + val attributesMap = attributes.toMap() + val idAttr = attributesMap[resourceManager.idAttributeNoNamespace] + val classNameAttr = attributesMap[resourceManager.classAttributeNoNamespace] ?: localName + if (resourceManager.isResourceDeclarationOrUsage(idAttr)) elementCallback(resourceManager.idToName(idAttr), classNameAttr) } override fun endElement(uri: String?, localName: String, qName: String) { diff --git a/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt b/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt index 03f2d6fd314..77a16c5bda9 100644 --- a/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt +++ b/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt @@ -36,7 +36,8 @@ class AndroidXmlVisitor(val resourceManager: AndroidResourceManager, val element override fun visitXmlTag(tag: XmlTag?) { val attribute = tag?.getAttribute(resourceManager.idAttribute) if (attribute != null && attribute.getValue() != null) { - elementCallback(resourceManager.idToName(attribute.getValue()), tag!!.getLocalName(), attribute) + val classNameAttr = tag?.getAttribute(resourceManager.classAttributeNoNamespace)?.getValue() ?: tag?.getLocalName() + elementCallback(resourceManager.idToName(attribute.getValue()), classNameAttr!!, attribute) } tag?.acceptChildren(this) } diff --git a/idea/testData/android/crossParser/AndroidManifest.xml b/idea/testData/android/crossParser/AndroidManifest.xml new file mode 100644 index 00000000000..c82007dcc87 --- /dev/null +++ b/idea/testData/android/crossParser/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml b/idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml deleted file mode 100644 index 580c474f5de..00000000000 --- a/idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/testData/android/crossParser/fqNameInAttr/layout.kt b/idea/testData/android/crossParser/fqNameInAttr/layout.kt deleted file mode 100644 index 5ec16eef328..00000000000 --- a/idea/testData/android/crossParser/fqNameInAttr/layout.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.myapp - -import android.app.Activity -import android.view.View -import android.widget.* - -val Activity.MyButton: org.my.cool.Button - get() = findViewById(0) as org.my.cool.Button - diff --git a/idea/testData/android/crossParser/fqNameInAttr/layout/layout.xml b/idea/testData/android/crossParser/fqNameInAttr/res/layout/layout.xml similarity index 100% rename from idea/testData/android/crossParser/fqNameInAttr/layout/layout.xml rename to idea/testData/android/crossParser/fqNameInAttr/res/layout/layout.xml diff --git a/idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml b/idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml deleted file mode 100644 index 580c474f5de..00000000000 --- a/idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/testData/android/crossParser/fqNameInTag/layout.kt b/idea/testData/android/crossParser/fqNameInTag/layout.kt deleted file mode 100644 index 5ec16eef328..00000000000 --- a/idea/testData/android/crossParser/fqNameInTag/layout.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.myapp - -import android.app.Activity -import android.view.View -import android.widget.* - -val Activity.MyButton: org.my.cool.Button - get() = findViewById(0) as org.my.cool.Button - diff --git a/idea/testData/android/crossParser/fqNameInTag/layout/layout.xml b/idea/testData/android/crossParser/fqNameInTag/res/layout/layout.xml similarity index 100% rename from idea/testData/android/crossParser/fqNameInTag/layout/layout.xml rename to idea/testData/android/crossParser/fqNameInTag/res/layout/layout.xml diff --git a/idea/testData/android/crossParser/multiFile/AndroidManifest.xml b/idea/testData/android/crossParser/multiFile/AndroidManifest.xml deleted file mode 100644 index 580c474f5de..00000000000 --- a/idea/testData/android/crossParser/multiFile/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/testData/android/crossParser/multiFile/layout.kt b/idea/testData/android/crossParser/multiFile/layout.kt deleted file mode 100644 index 313d0b13d16..00000000000 --- a/idea/testData/android/crossParser/multiFile/layout.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.myapp - -import android.app.Activity -import android.view.View -import android.widget.* - -val Activity.item_detail_container: FrameLayout - get() = findViewById(0) as FrameLayout - -val Activity.textView1: TextView - get() = findViewById(0) as TextView - -val Activity.password: EditText - get() = findViewById(0) as EditText - -val Activity.login: Button - get() = findViewById(0) as Button - -val Activity.frameLayout: FrameLayout - get() = findViewById(0) as FrameLayout - -val Activity.passwordField: TextView - get() = findViewById(0) as TextView - -val Activity.passwordCaption: EditText - get() = findViewById(0) as EditText - -val Activity.loginButton: Button - get() = findViewById(0) as Button - diff --git a/idea/testData/android/crossParser/multiFile/layout/layout.xml b/idea/testData/android/crossParser/multiFile/res/layout/layout.xml similarity index 100% rename from idea/testData/android/crossParser/multiFile/layout/layout.xml rename to idea/testData/android/crossParser/multiFile/res/layout/layout.xml diff --git a/idea/testData/android/crossParser/multiFile/layout/layout1.xml b/idea/testData/android/crossParser/multiFile/res/layout/layout1.xml similarity index 100% rename from idea/testData/android/crossParser/multiFile/layout/layout1.xml rename to idea/testData/android/crossParser/multiFile/res/layout/layout1.xml diff --git a/idea/testData/android/crossParser/noIds/AndroidManifest.xml b/idea/testData/android/crossParser/noIds/AndroidManifest.xml deleted file mode 100644 index 580c474f5de..00000000000 --- a/idea/testData/android/crossParser/noIds/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/testData/android/crossParser/noIds/layout.kt b/idea/testData/android/crossParser/noIds/layout.kt deleted file mode 100644 index efb6ca1b54b..00000000000 --- a/idea/testData/android/crossParser/noIds/layout.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.myapp - -import android.app.Activity -import android.view.View -import android.widget.* - diff --git a/idea/testData/android/crossParser/noIds/layout/layout.xml b/idea/testData/android/crossParser/noIds/res/layout/layout.xml similarity index 100% rename from idea/testData/android/crossParser/noIds/layout/layout.xml rename to idea/testData/android/crossParser/noIds/res/layout/layout.xml diff --git a/idea/testData/android/crossParser/singleFile/AndroidManifest.xml b/idea/testData/android/crossParser/singleFile/AndroidManifest.xml deleted file mode 100644 index 580c474f5de..00000000000 --- a/idea/testData/android/crossParser/singleFile/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/testData/android/crossParser/singleFile/MyActivity.kt b/idea/testData/android/crossParser/singleFile/MyActivity.kt deleted file mode 100644 index 3d61c9fb897..00000000000 --- a/idea/testData/android/crossParser/singleFile/MyActivity.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.myapp - -import android.app.Activity -import android.view.View -import android.widget.* - -class MyActivity(): Activity() { - val textViewWidget = TextView() - val editTextWidget = EditText() - val buttonWidget = Button() - - override fun findViewById(id: Int): View? { - return when (id) { - R.id.textView1 -> textViewWidget - R.id.password -> editTextWidget - R.id.login -> buttonWidget - else -> null - } - } - - fun test(): String { - return if (password.toString() == "EditText" && - textView1.toString() == "TextView" && - login.toString() == "Button" ) - "OK" else "NOTOK" - } -} \ No newline at end of file diff --git a/idea/testData/android/crossParser/singleFile/R.kt b/idea/testData/android/crossParser/singleFile/R.kt deleted file mode 100644 index 3e9f1eb1b9f..00000000000 --- a/idea/testData/android/crossParser/singleFile/R.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.myapp - -class R { - class id { - class object { - val item_detail_container = 0 - val textView1 = 1 - val password = 2 - val textView2 = 3 - val passwordConfirmation = 4 - val login = 5 - } - } -} \ No newline at end of file diff --git a/idea/testData/android/crossParser/singleFile/layout.kt b/idea/testData/android/crossParser/singleFile/layout.kt deleted file mode 100644 index c8ebd646620..00000000000 --- a/idea/testData/android/crossParser/singleFile/layout.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.myapp - -import android.app.Activity -import android.view.View -import android.widget.* - -val Activity.item_detail_container: FrameLayout - get() = findViewById(0) as FrameLayout - -val Activity.textView1: TextView - get() = findViewById(0) as TextView - -val Activity.password: EditText - get() = findViewById(0) as EditText - -val Activity.login: Button - get() = findViewById(0) as Button - diff --git a/idea/testData/android/crossParser/singleFile/layout/layout.xml b/idea/testData/android/crossParser/singleFile/res/layout/layout.xml similarity index 100% rename from idea/testData/android/crossParser/singleFile/layout/layout.xml rename to idea/testData/android/crossParser/singleFile/res/layout/layout.xml diff --git a/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt b/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt index 8343baf6820..beaa0ae5c57 100644 --- a/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt +++ b/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt @@ -36,13 +36,15 @@ import com.intellij.ide.startup.impl.StartupManagerImpl import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess import org.jetbrains.jet.JetTestCaseBuilder import com.intellij.openapi.startup.StartupManager +import com.android.SdkConstants +import com.intellij.openapi.application.PathManager -public abstract class AbstractCrossParserTest : LightCodeInsightFixtureTestCase() { +public abstract class AbstractCrossParserTest : KotlinAndroidTestCase() { public fun doTest(path: String) { - val project = myFixture.getProject() + val project = myFixture!!.getProject() project.putUserData(TestConst.TESTDATA_PATH, path) - myFixture.copyDirectoryToProject(getTestName(true), "") - val cliParser = CliAndroidUIXmlProcessor(project, path + "/layout", path + "AndroidManifest.xml") + myFixture!!.copyDirectoryToProject(getResDir()!!, "res") + val cliParser = CliAndroidUIXmlProcessor(project, path + getResDir() + "/layout/", path + "../AndroidManifest.xml") val ideParser = IDEAndroidUIXmlProcessor(project) val cliResult = cliParser.parseToPsi(project)!!.getText() @@ -51,10 +53,9 @@ public abstract class AbstractCrossParserTest : LightCodeInsightFixtureTestCase( assertEquals(cliResult, ideResult) } override fun setUp() { + System.setProperty(KotlinAndroidTestCaseBase.SDK_PATH_PROPERTY, PathManager.getHomePath() + "/androidSDK/") + System.setProperty(KotlinAndroidTestCaseBase.PLATFORM_DIR_PROPERTY, "android-17") super.setUp() - myFixture.setTestDataPath(PluginTestCaseBase.getTestDataPathBase() + "/android/crossParser") - (StartupManager.getInstance(getProject()) as StartupManagerImpl).runPostStartupActivities() - VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory()) } private fun getEnvironment(testPath: String): JetCoreEnvironment { @@ -63,7 +64,14 @@ public abstract class AbstractCrossParserTest : LightCodeInsightFixtureTestCase( configuration.put(JVMConfigurationKeys.ANDROID_MANIFEST, testPath + "/AndroidManifest.xml") return JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration) } + override fun getTestDataPath(): String? { - return PluginTestCaseBase.getTestDataPathBase() + "/android/crossParser/" + return PluginTestCaseBase.getTestDataPathBase() + "/android/crossParser/" + getTestName(true) + "/" } + + override fun createManifest() { + myFixture!!.copyFileToProject("idea/testData/android/AndroidManifest.xml", SdkConstants.FN_ANDROID_MANIFEST_XML) + } + + override fun requireRecentSdk() = true } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java b/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java index 8b49044e4e5..6e4b3101ef3 100644 --- a/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java +++ b/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java @@ -114,7 +114,6 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase { createManifest(); myFacet = addAndroidFacet(myModule, sdkPath, getPlatformDir(), isToAddSdk()); - myFixture.copyDirectoryToProject(getResDir(), "res"); myAdditionalModules = new ArrayList();