package com.intellij.flex.intentions; import com.intellij.flex.util.FlexTestUtils; import com.intellij.javascript.flex.css.FlexStylesIndexableSetContributor; import com.intellij.javascript.flex.mxml.schema.FlexSchemaHandler; import com.intellij.lang.javascript.ActionScriptFileType; import com.intellij.lang.javascript.CreateJSFunctionIntentionTestBase; import com.intellij.lang.javascript.JSTestOption; import com.intellij.lang.javascript.JSTestOptions; import com.intellij.lang.javascript.flex.FlexModuleType; import com.intellij.lang.javascript.inspections.JSValidateTypesInspection; import com.intellij.lang.javascript.psi.JSFunction; import com.intellij.lang.javascript.refactoring.extractMethod.ExtractedFunctionSignatureGenerator; import com.intellij.lang.javascript.refactoring.extractMethod.JSExtractFunctionHandler; import com.intellij.lang.javascript.refactoring.extractMethod.JSSignatureContext; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.util.Pass; import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.junit.Assert; import java.util.List; import static com.intellij.openapi.vfs.VfsUtilCore.convertFromUrl; import static com.intellij.openapi.vfs.VfsUtilCore.urlToPath; public class CreateASFunctionIntentionTest extends CreateJSFunctionIntentionTestBase { @Override protected void setUp() throws Exception { VfsRootAccess.allowRootAccess(getTestRootDisposable(), urlToPath(convertFromUrl(FlexSchemaHandler.class.getResource("z.xsd"))), urlToPath(convertFromUrl(FlexStylesIndexableSetContributor.class.getResource("FlexStyles.as")))); super.setUp(); } @Override protected void setUpJdk() { FlexTestUtils.setupFlexSdk(myModule, getTestName(false), getClass()); } @Override protected ModuleType getModuleType() { return FlexModuleType.getInstance(); } @Override @NonNls public String getBasePath() { return "/createfunction_as"; } @NotNull @Override public String getTestDataPath() { return FlexTestUtils.getTestDataPath(""); } @JSTestOptions(JSTestOption.WithFlexFacet) public void testAll() throws Exception { doTestAll(); } public void testCanGetIntroductionScopeForActionScriptClassMember() throws Exception { configureByText(ActionScriptFileType.INSTANCE, "package {\n" + "class test{\n" + " function foo() {\n" + " <caret>bar();\n" + " }\n" + "}\n" + "}"); JSExtractFunctionHandler extractFunctionHandler = new JSExtractFunctionHandler(); int offset = myEditor.getCaretModel().getOffset(); JSFunction function = PsiTreeUtil.getParentOfType(myFile.findElementAt(offset), JSFunction.class); List<JSExtractFunctionHandler.IntroductionScope> scopes = extractFunctionHandler.findBases(function); JSSignatureContext context = new JSSignatureContext() { @Override public boolean isActionScript() { return true; } @Override public boolean isAsync() { return false; } @Nullable @Override public PsiElement getAnchor() { return null; } @NotNull @Override public List<JSExtractFunctionHandler.IntroductionScope> getIntroductionScopes() { return scopes; } }; Pass<JSExtractFunctionHandler.IntroductionScope> callback = new Pass<JSExtractFunctionHandler.IntroductionScope>() { @Override public void pass(JSExtractFunctionHandler.IntroductionScope scope) { } }; JSExtractFunctionHandler.IntroductionScope actualScope = extractFunctionHandler .getIntroductionScope(myEditor, new ExtractedFunctionSignatureGenerator(), context, callback, "extractedFunction"); Assert.assertEquals(ContainerUtil.getFirstItem(scopes), actualScope); } public void testCreateConstructor() throws Exception { doTestTwoFiles(); } private void doTestTwoFiles() throws Exception { enableInspectionTool(new JSValidateTypesInspection()); String name = getTestName(false); String directory = "/" + name; String first = directory + "/" + name + ".as"; String secondName = name + "_2.as"; String second = directory + "/" + secondName; doTestFor(first, second); PsiFile secondFile = myFile.getContainingDirectory().findFile(secondName); setActiveEditor(createEditor(secondFile.getVirtualFile())); checkResultByFile(getBasePath() + "/after" + second); } }