Implemented kotlin quick fix provider for create android resource quick fixes

#KT-10465 Fixed
#KT-12880 Fixed
This commit is contained in:
Vyacheslav Gerasimov
2016-11-03 13:56:02 +03:00
parent 29b9521596
commit 9534934f43
32 changed files with 327 additions and 11 deletions
@@ -28,13 +28,15 @@ import com.intellij.util.PathUtil
import junit.framework.TestCase
import org.jetbrains.kotlin.android.KotlinAndroidTestCase
import org.jetbrains.kotlin.idea.jsonUtils.getString
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
import org.jetbrains.kotlin.psi.KtFile
import java.io.File
abstract class AbstractAndroidResourceIntentionTest : KotlinAndroidTestCase() {
companion object {
val COM_MYAPP_PACKAGE_PATH = "com/myapp/"
}
fun doTest(path: String) {
val configFile = File(path)
val testDataPath = configFile.parent
@@ -43,17 +45,18 @@ abstract class AbstractAndroidResourceIntentionTest : KotlinAndroidTestCase() {
val config = JsonParser().parse(FileUtil.loadFile(File(path), true)) as JsonObject
val intentionClass = config.getString("intentionClass")
val intentionClass = if (config.has("intentionClass")) config.getString("intentionClass") else null
val intentionText = if (config.has("intentionText")) config.getString("intentionText") else null
val isApplicableExpected = if (config.has("isApplicable")) config.get("isApplicable").asBoolean else true
val rFile = if (config.has("rFile")) config.get("rFile").asString else null
val resDirectory = if (config.has("resDirectory")) config.get("resDirectory").asString else null
if (rFile != null) {
myFixture.copyFileToProject(rFile, "gen/" + PathUtil.getFileName(rFile))
myFixture.copyFileToProject(rFile, "gen/$COM_MYAPP_PACKAGE_PATH" + PathUtil.getFileName(rFile))
}
else {
if (File(testDataPath + "/R.java").isFile) {
myFixture.copyFileToProject("R.java", "gen/R.java")
myFixture.copyFileToProject("R.java", "gen/${COM_MYAPP_PACKAGE_PATH}R.java")
}
}
@@ -69,9 +72,26 @@ abstract class AbstractAndroidResourceIntentionTest : KotlinAndroidTestCase() {
val sourceFile = myFixture.copyFileToProject("main.kt", "src/main.kt")
myFixture.configureFromExistingVirtualFile(sourceFile)
DirectiveBasedActionUtils.checkForUnexpectedErrors(myFixture.file as KtFile)
val intentionAction: IntentionAction?
if (intentionClass != null) {
intentionAction = Class.forName(intentionClass).newInstance() as IntentionAction
}
else if (intentionText != null) {
intentionAction = myFixture.getAvailableIntention(intentionText)
if (intentionAction != null && !isApplicableExpected) {
TestCase.fail("Intention action should not be available")
}
}
else {
intentionAction = null
}
val intentionAction = Class.forName(intentionClass).newInstance() as IntentionAction
if (intentionAction == null) {
if (isApplicableExpected) {
TestCase.fail("Couldn't find intention action")
}
return
}
TestCase.assertEquals(isApplicableExpected, intentionAction.isAvailable(myFixture.project, myFixture.editor, myFixture.file))
if (!isApplicableExpected) {
@@ -84,7 +104,6 @@ abstract class AbstractAndroidResourceIntentionTest : KotlinAndroidTestCase() {
myFixture.launchAction(intentionAction)
FileDocumentManager.getInstance().saveAllDocuments()
DirectiveBasedActionUtils.checkForUnexpectedErrors(myFixture.file as KtFile)
myFixture.checkResultByFile("/expected/main.kt")
assertResourcesEqual(testDataPath + "/expected/res")
@@ -35,6 +35,42 @@ public class AndroidResourceIntentionTestGenerated extends AbstractAndroidResour
KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/android/resourceIntentions"), Pattern.compile("^(.+)\\.test$"));
}
@TestMetadata("createColorValueResource/alreadyExists/alreadyExists.test")
public void testCreateColorValueResource_alreadyExists_AlreadyExists() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/createColorValueResource/alreadyExists/alreadyExists.test");
doTest(fileName);
}
@TestMetadata("createColorValueResource/simpleFunction/simpleFunction.test")
public void testCreateColorValueResource_simpleFunction_SimpleFunction() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/createColorValueResource/simpleFunction/simpleFunction.test");
doTest(fileName);
}
@TestMetadata("createLayoutResourceFile/alreadyExists/alreadyExists.test")
public void testCreateLayoutResourceFile_alreadyExists_AlreadyExists() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/createLayoutResourceFile/alreadyExists/alreadyExists.test");
doTest(fileName);
}
@TestMetadata("createLayoutResourceFile/simpleFunction/simpleFunction.test")
public void testCreateLayoutResourceFile_simpleFunction_SimpleFunction() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/createLayoutResourceFile/simpleFunction/simpleFunction.test");
doTest(fileName);
}
@TestMetadata("createStringValueResource/alreadyExists/alreadyExists.test")
public void testCreateStringValueResource_alreadyExists_AlreadyExists() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/createStringValueResource/alreadyExists/alreadyExists.test");
doTest(fileName);
}
@TestMetadata("createStringValueResource/simpleFunction/simpleFunction.test")
public void testCreateStringValueResource_simpleFunction_SimpleFunction() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/createStringValueResource/simpleFunction/simpleFunction.test");
doTest(fileName);
}
@TestMetadata("kotlinAndroidAddStringResource/activityExtension/activityExtension.test")
public void testKotlinAndroidAddStringResource_activityExtension_ActivityExtension() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/resourceIntentions/kotlinAndroidAddStringResource/activityExtension/activityExtension.test");