package com.jetbrains.dart.analysisServer;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.jetbrains.lang.dart.assists.AssistUtils;
import com.jetbrains.lang.dart.assists.DartSourceEditException;
import com.jetbrains.lang.dart.ide.refactoring.ServerInlineMethodRefactoring;
import com.jetbrains.lang.dart.ide.refactoring.status.RefactoringStatus;
import com.jetbrains.lang.dart.util.DartTestUtils;
import org.dartlang.analysis.server.protocol.SourceChange;
import org.jetbrains.annotations.NotNull;
public class DartInlineMethodRefactoringTest extends CodeInsightFixtureTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
DartTestUtils.configureDartSdk(myModule, myFixture.getTestRootDisposable(), true);
myFixture.setTestDataPath(DartTestUtils.BASE_TEST_DATA_PATH + getBasePath());
}
@Override
protected String getBasePath() {
return "/analysisServer/refactoring/inline/method";
}
public void testFunctionSingle() throws Throwable {
final String testName = getTestName(false);
doTest(testName + ".dart", false);
}
public void testFunctionAll() throws Throwable {
final String testName = getTestName(false);
doTest(testName + ".dart", true);
}
public void testMethod() throws Throwable {
final String testName = getTestName(false);
doTest(testName + ".dart", true);
}
public void testSetter() throws Throwable {
final String testName = getTestName(false);
doTest(testName + ".dart", true);
}
@NotNull
private ServerInlineMethodRefactoring createRefactoring(String filePath) {
((CodeInsightTestFixtureImpl)myFixture).canChangeDocumentDuringHighlighting(true);
final PsiFile psiFile = myFixture.configureByFile(filePath);
myFixture.doHighlighting(); // make sure server is warmed up
// find the Element to rename
final int offset = getEditor().getCaretModel().getOffset();
return new ServerInlineMethodRefactoring(getProject(), psiFile.getVirtualFile(), offset, 0);
}
private void doTest(String filePath, boolean all) {
final ServerInlineMethodRefactoring refactoring = createRefactoring(filePath);
// check initial conditions
final RefactoringStatus initialConditions = refactoring.checkInitialConditions();
assertNotNull(initialConditions);
assertTrue(initialConditions.isOK());
// all
if (all) {
refactoring.setInlineAll(true);
refactoring.setDeleteSource(true);
}
// check final conditions
final RefactoringStatus finalConditions = refactoring.checkFinalConditions();
assertNotNull(finalConditions);
assertTrue(finalConditions.isOK());
// apply the SourceChange
final SourceChange change = refactoring.getChange();
assertNotNull(change);
ApplicationManager.getApplication().runWriteAction(() -> {
try {
AssistUtils.applySourceChange(myFixture.getProject(), change, false);
}
catch (DartSourceEditException e) {
fail(e.getMessage());
}
});
// validate
myFixture.checkResultByFile(getTestName(false) + ".after.dart");
}
}