blob: 1a9466bec275dccfa1600073a981b6b991ae1023 [file] [log] [blame]
package org.jetbrains.android.refactoring;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.actions.InlineAction;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.android.AndroidTestCase;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidInlineLayoutTest extends AndroidTestCase {
private static final String BASE_PATH = "refactoring/inlineLayout/";
public void test1() throws Exception {
doTestCommonInlineThisOnly();
}
public void test2() throws Exception {
doTestCommonInlineThisOnly();
}
public void test3() throws Exception {
doTestCommonInlineThisOnly();
}
public void test4() throws Exception {
doTestCommonInlineThisOnly();
}
public void test5() throws Exception {
doTestCommonInlineThisOnly();
}
public void test6() throws Exception {
doTestCommonInlineThisOnly();
}
public void test7() throws Exception {
doTestCommonInlineThisOnly();
}
public void test8() throws Exception {
doTestCommonInlineAll();
}
public void test9() throws Exception {
final String testName = getTestName(true);
myFixture.copyFileToProject(BASE_PATH + testName + ".xml", "res/layout/test.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + testName + "_included.xml", "res/layout/included.xml");
myFixture.configureFromExistingVirtualFile(f);
AndroidInlineLayoutHandler.setTestConfig(new AndroidInlineTestConfig(true));
try {
final Presentation p = myFixture.testAction(new InlineAction());
assertTrue(p.isEnabled());
assertTrue(p.isVisible());
}
finally {
AndroidInlineLayoutHandler.setTestConfig(null);
}
myFixture.checkResultByFile("res/layout/test.xml", BASE_PATH + testName + "_after.xml", true);
assertNull(myFixture.getTempDirFixture().getFile("res/layout/included.xml"));
}
public void test10() throws Exception {
doTestCommonInlineThisOnly();
}
public void test11() throws Exception {
doTestCommonInlineThisOnly();
}
public void test12() throws Exception {
doTestCommonInlineThisOnly();
}
public void test13() throws Exception {
doTestCommonInlineThisOnly();
}
public void test14() throws Exception {
doTestCommonInlineThisOnly();
}
public void test15() throws Exception {
myFixture.copyFileToProject(BASE_PATH + getTestName(true) + "_included.xml", "res/layout-land/included.xml");
doTestCommonInlineActionWithConflicts(false, true);
myFixture.checkResultByFile("res/layout/test.xml", BASE_PATH + getTestName(true) + "_after.xml", true);
}
public void test16() throws Exception {
myFixture.copyFileToProject("R.java", "gen/p1/p2/R.java");
myFixture.copyFileToProject(BASE_PATH + "MyActivity.java", "src/p1/p2/MyActivity.java");
doTestCommonInlineActionWithConflicts(false, true);
myFixture.checkResultByFile("res/layout/test.xml", BASE_PATH + getTestName(true) + "_after.xml", true);
}
public void test17() throws Exception {
doTestCommonInlineAction(true);
}
public void test18() throws Exception {
doTestCommonInlineAction(false);
}
public void test19() throws Exception {
doTestInlineIncludeActionDisabled();
}
public void test20() throws Exception {
doTestInlineIncludeActionError(true);
}
public void test21() throws Exception {
doTestInlineIncludeAction(false);
}
public void test22() throws Exception {
myFixture.copyFileToProject(BASE_PATH + getTestName(true) + "_included.xml", "res/layout/included.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + getTestName(true) + ".xml", "res/layout/test.xml");
myFixture.configureFromExistingVirtualFile(f);
AndroidInlineLayoutHandler.setTestConfig(new AndroidInlineTestConfig(true));
try {
myFixture.testAction(new InlineAction());
fail();
}
catch (IncorrectOperationException e) {
assertTrue(e.getMessage().length() > 0);
}
finally {
AndroidInlineLayoutHandler.setTestConfig(null);
}
}
private void doTestCommonInlineThisOnly() throws Exception {
doTestCommonInlineAction(true);
myFixture.checkResultByFile("res/layout/included.xml",
BASE_PATH + getTestName(true) + "_included.xml", true);
}
private void doTestCommonInlineAll() throws Exception {
doTestCommonInlineAction(false);
assertNull(myFixture.getTempDirFixture().getFile("res/layout/included.xml"));
}
private void doTestCommonInlineActionWithConflicts(boolean inlineThisOnly, boolean configureFromIncludedFile) {
final String testName = getTestName(true);
final VirtualFile included = myFixture.copyFileToProject(BASE_PATH + testName + "_included.xml", "res/layout/included.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + testName + ".xml", "res/layout/test.xml");
myFixture.configureFromExistingVirtualFile(configureFromIncludedFile ? included : f);
final AndroidInlineTestConfig config = new AndroidInlineTestConfig(inlineThisOnly);
AndroidInlineLayoutHandler.setTestConfig(config);
myFixture.testAction(new InlineAction());
final MultiMap<PsiElement,String> conflicts = config.getConflicts();
assertEquals(1, conflicts.keySet().size());
assertEquals(1, conflicts.values().size());
}
private void doTestCommonInlineAction(boolean inlineThisOnly) {
final String testName = getTestName(true);
myFixture.copyFileToProject(BASE_PATH + testName + "_included.xml", "res/layout/included.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + testName + ".xml", "res/layout/test.xml");
myFixture.configureFromExistingVirtualFile(f);
AndroidInlineLayoutHandler.setTestConfig(new AndroidInlineTestConfig(inlineThisOnly));
try {
final Presentation p = myFixture.testAction(new InlineAction());
assertTrue(p.isEnabled());
assertTrue(p.isVisible());
}
finally {
AndroidInlineLayoutHandler.setTestConfig(null);
}
myFixture.checkResultByFile(BASE_PATH + testName + "_after.xml", true);
}
private void doTestInlineIncludeAction(boolean inlineThisOnly) {
final String testName = getTestName(true);
myFixture.copyFileToProject(BASE_PATH + testName + "_included.xml", "res/layout/included.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + testName + ".xml", "res/layout/test.xml");
myFixture.configureFromExistingVirtualFile(f);
final Presentation p = myFixture.testAction(new AndroidInlineIncludeAction(new AndroidInlineTestConfig(inlineThisOnly)));
assertTrue(p.isEnabled());
assertTrue(p.isVisible());
myFixture.checkResultByFile(BASE_PATH + testName + "_after.xml", true);
}
private void doTestInlineIncludeActionDisabled() {
final String testName = getTestName(true);
myFixture.copyFileToProject(BASE_PATH + testName + "_included.xml", "res/layout/included.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + testName + ".xml", "res/layout/test.xml");
myFixture.configureFromExistingVirtualFile(f);
final Presentation p = myFixture.testAction(new AndroidInlineIncludeAction(new AndroidInlineTestConfig(true)));
assertTrue(p.isVisible());
assertFalse(p.isEnabled());
}
private void doTestInlineIncludeActionError(boolean inlineThisOnly) {
final String testName = getTestName(true);
myFixture.copyFileToProject(BASE_PATH + testName + "_included.xml", "res/layout/included.xml");
final VirtualFile f = myFixture.copyFileToProject(BASE_PATH + testName + ".xml", "res/layout/test.xml");
myFixture.configureFromExistingVirtualFile(f);
try {
myFixture.testAction(new AndroidInlineIncludeAction(new AndroidInlineTestConfig(inlineThisOnly)));
fail();
}
catch (IncorrectOperationException e) {
assertTrue(e.getMessage().length() > 0);
}
}
}