package com.jetbrains.dart.analysisServer; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.SelectionModel; 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.ServerExtractMethodRefactoring; 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 DartExtractMethodRefactoringTest 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/extract/method"; } public void testFunctionAll() throws Throwable { final String testName = getTestName(false); doTest(testName + ".dart", true, false); } public void testMethodAll() throws Throwable { final String testName = getTestName(false); doTest(testName + ".dart", true, false); } public void testMethodGetter() throws Throwable { final String testName = getTestName(false); doTest(testName + ".dart", true, true); } public void testMethodSingle() throws Throwable { final String testName = getTestName(false); doTest(testName + ".dart", false, false); } @NotNull private ServerExtractMethodRefactoring 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 SelectionModel selectionModel = getEditor().getSelectionModel(); int offset = selectionModel.getSelectionStart(); final int length = selectionModel.getSelectionEnd() - offset; return new ServerExtractMethodRefactoring(getProject(), psiFile.getVirtualFile(), offset, length); } private void doTest(String filePath, boolean all, boolean asGetter) { final ServerExtractMethodRefactoring refactoring = createRefactoring(filePath); // check initial conditions final RefactoringStatus initialConditions = refactoring.checkInitialConditions(); assertNotNull(initialConditions); assertTrue(initialConditions.isOK()); // configure refactoring.setName("test"); refactoring.setExtractAll(all); refactoring.setCreateGetter(asGetter); // 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"); } }