Package com.intellij.coldFusion

Source Code of com.intellij.coldFusion.CfmlCompletionTest

/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.coldFusion;

import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
import com.intellij.coldFusion.UI.config.CfmlMappingsConfig;
import com.intellij.coldFusion.UI.config.CfmlProjectConfiguration;
import com.intellij.coldFusion.model.CfmlLanguage;
import com.intellij.javaee.ExternalResourceManagerEx;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NonNls;

import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Created by Lera Nikolaenko
* Date: 04.12.2008
*/
public class CfmlCompletionTest extends JavaCodeInsightFixtureTestCase {

  @Override
  protected void setUp() throws Exception {
    super.setUp();
    CamelHumpMatcher.forceStartMatching(getTestRootDisposable());
  }

  static void addJavaClassToSubPackage(JavaCodeInsightTestFixture fixture) throws IOException {
    fixture.addFileToProject("subPackage/MyClass.java", "package subPackage;\n" +
                                                        "\n" +
                                                        "public class MyClass {\n" +
                                                        "}");
  }

  static PsiClass addJavaClassTo(JavaCodeInsightTestFixture fixture) throws IOException {
    return fixture.addClass("import java.util.Collection;\n" +
                            "import java.util.Collections;\n" +
                            "import java.util.LinkedList;\n" +
                            "\n" +
                            "public class MyClass {\n" +
                            "  private Collection<String> myCollection = new LinkedList<String>();\n" +
                            "  public static final int VERSION = 1;\n" +
                            "  public MyClass() {}\n" +
                            "  public void add(String s) {\n" +
                            "    myCollection.add(s);\n" +
                            "  }\n" +
                            "  public Collection<String> get() {\n" +
                            "    return Collections.unmodifiableCollection(myCollection);\n" +
                            "    \n" +
                            "  }\n" +
                            "  public static foo() {}\n" +
                            "}");
  }

  static PsiFile addOneComponentWithConstructorTo(JavaCodeInsightTestFixture fixture) throws IOException {
    return fixture.addFileToProject("ComponentWithConstructor.cfc",
                                    "<cfcomponent>\n" +
                                    "<cffunction name=\"init\">\n" +
                                    "    <cfargument name=\"arg1\">\n" +
                                    "    <cfargument name=\"arg2\">\n" +
                                    "</cffunction>" +
                                    "</cfcomponent>");
  }

  static PsiFile addOneComponentToResolve(JavaCodeInsightTestFixture fixture) throws IOException {
    return fixture.addFileToProject("MyComponentToResolve.cfc", "<cfcomponent>\n" +
                                                                "<cffunction name=\"init\">\n" +
                                                                "    <cfreturn this>\n" +
                                                                "</cffunction>\n" +
                                                                "    <cffunction name=\"foo\">\n" +
                                                                "</cffunction>\n" +
                                                                "</cfcomponent>");
  }

  static PsiFile addTwoComponents(JavaCodeInsightTestFixture fixture) throws IOException {
    fixture.addFileToProject("MyComponent2.cfc",
                             "<cfcomponent>\n" +
                             "</cfcomponent>");

    return fixture.addFileToProject("MyComponent1.cfc",
                                    "<cfcomponent>\n" +
                                    "</cfcomponent>");
  }

  static PsiFile addOneComponentTo(JavaCodeInsightTestFixture fixture) throws IOException {
    return fixture.addFileToProject("folder/subfolder/ComponentName.cfc",
                                    "<cfcomponent>\n" +
                                    "    <cffunction name=\"func1\">\n" +
                                    "    </cffunction>\n" +
                                    "\n" +
                                    "    <cffunction name=\"func2\">\n" +
                                    "    </cffunction>\n" +
                                    "</cfcomponent>");

  }

  static PsiFile addOneComponentToDir(JavaCodeInsightTestFixture fixture) throws IOException {
    return fixture.addFileToProject("subfolder/ComponentName.cfc",
                                    "<cfcomponent>\n" +
                                    "    <cffunction name=\"func1\">\n" +
                                    "    </cffunction>\n" +
                                    "\n" +
                                    "    <cffunction name=\"func2\">\n" +
                                    "    </cffunction>\n" +
                                    "</cfcomponent>");
  }

  public void testAttributeCompletionAtFileEnd() throws Throwable {
    doTest();
  }

  public void testAttributeCompletionAtFileMiddle() throws Throwable {
    doTest();
  }

  public void testAttributeVariants() throws Throwable {
    doTestCompletionVariants("returntype", "returnformat", "roles");
  }

  public void testAccessorsCompletion() throws Throwable {
    myFixture.addFileToProject("MyPropertyTagComponent.cfc", "<cfcomponent accessors=\"true\">\n" +
                                                             "\t<cfproperty name=\"Foo\" type=\"STRING\">\n" +
                                                             "</cfcomponent>");
    doTestCompletionVariants("getFoo()", "setFoo()", "Foo");
  }

  public void testPropertyGetterCompletion() throws Throwable {
    myFixture.addFileToProject("MyPropertyTagComponent.cfc", "<cfcomponent>\n" +
                                                             "\t<cfproperty name=\"Foo\" getter=\"true\" type=\"STRING\">\n" +
                                                             "</cfcomponent>");
    doTestCompletionVariants("getFoo()", "Foo");
  }

  public void testPropertySetterCompletion() throws Throwable {
    myFixture.addFileToProject("MyPropertyTagComponent.cfc", "<cfcomponent>\n" +
                                                             "\t<cfproperty name=\"Foo\" setter=\"true\" type=\"STRING\">\n" +
                                                             "</cfcomponent>");
    doTestCompletionVariants("setFoo()", "Foo");
  }

  public void testPropertyAccessorCompletionForPersistentComponent() throws Throwable {
    myFixture.addFileToProject("MyPropertyTagComponent.cfc", "<cfcomponent persistent=\"true\">\n" +
                                                             "\t<cfproperty name=\"foo\" type=\"STRING\">\n" +
                                                             "</cfcomponent>");
    doTestCompletionVariants("setFoo()", "getFoo()", "foo");
  }


  public void testMappedSuperClassCompletionInComponentTag() throws Throwable {
    doTest();
  }

  public void testMappedSuperClassCompletionInScriptComponent() throws Throwable {
    doTest();
  }

  public void testAttributeVariantsInPropertyTag() throws Throwable {
    doTest();
  }

  public void testAttributeVariantsInStartProperty() throws Throwable {
    doTestCompletionContainsVariants("name", "notnull");
  }

  public void testAttributeOrmTypeInProperty() throws Throwable {
    doTest();
  }

  public void testReturnTypeCompletion() throws Throwable {
    addOneComponentTo(myFixture);
    doTestCompletionContainsVariants("func1", "func2");
  }

  public void testReturnTypeCompletionInScriptFunctionDefinition() throws Throwable {
    doTestCompletionContainsVariants("String", "void", "Numeric");
  }

  public void testTagCompletionAtFileEnd() throws Throwable {
    doTestCompletionVariants("cffunction", "cffeed", "cffileupload", "cffinally", "cffile", "cfflush", "cfform", "cfformgroup",
                             "cfformitem", "cfftp");
  }

  public void testTagCompletionAfterAngleBracket() throws Throwable {
    final ExternalResourceManagerEx manager = ExternalResourceManagerEx.getInstanceEx();
    final String doctype = manager.getDefaultHtmlDoctype(getProject());
    manager.setDefaultHtmlDoctype(XmlUtil.XHTML_URI, getProject());
    try {
      doTestCompletionContainsVariants("cffunction", "center", "cfset", "h1");
    }
    finally {
      manager.setDefaultHtmlDoctype(doctype, getProject());
    }
  }

  public void testTagCompletionAfterC() throws Throwable {
    final ExternalResourceManagerEx manager = ExternalResourceManagerEx.getInstanceEx();
    final String doctype = manager.getDefaultHtmlDoctype(getProject());
    manager.setDefaultHtmlDoctype(XmlUtil.XHTML_URI, getProject());
    try {
      doTestCompletionContainsVariants("cffunction", "center", "cfset");
    }
    finally {
      manager.setDefaultHtmlDoctype(doctype, getProject());
    }
  }

  public void testTagCompletionAfterCf() throws Throwable {
    doTestCompletionContainsVariants("cffunction", "cfset");
  }

  public void testPropertyWordCompletionInScriptComponent() throws Throwable {
    doTest();
  }

  public void testSecondPropertyWordCompletionInScriptComponent() throws Throwable {
    doTestCompletionContainsVariants("property");
  }

  public void testNoPropertyWordCompletionInScriptComponent() throws Throwable {
    doTest();
  }

  public void testFunctionNamesCompletion() throws Throwable {
    doTestCompletionVariants("mid", "min", "mineFunc", "minute");
  }

  public void testVariableNamesCompletion() throws Throwable {
    doTestCompletionVariants("mid", "min", "mineVariable", "minute");
  }

  public void testVariableAndFunctionNamesCompletion() throws Throwable {
    doTestCompletionVariants("mineFunction", "mineVariable", "mid", "min", "minute");
  }

  public void testFunctionNameWithBracketsCompletion() throws Throwable {
    doTest();
  }

  public void testClassInstanceCompletion() throws Throwable {
    addJavaClassTo(myFixture);
    doTestCompletionVariants("VERSION", "init", "init");
  }

  public void testClassInstanceCompletionFromCreator() throws Throwable {
    addJavaClassTo(myFixture);
    doTestCompletionVariants("VERSION", "init", "init");
  }

  public void testClassInstanceCompletionAfterInit() throws Throwable {
    addJavaClassTo(myFixture);
    doTestCompletionVariants("VERSION", "add", "equals", "get", "getClass", "hashCode", "notify", "notifyAll", "toString", "wait", "wait",
                             "wait");
  }

  public void testClassInstanceCompletionAfterInitFromCreator() throws Throwable {
    addJavaClassTo(myFixture);
    doTestCompletionVariants("VERSION", "add", "equals", "get", "getClass", "hashCode", "notify", "notifyAll", "toString", "wait", "wait",
                             "wait");
  }

  public void testVariableFromCommentCompletion() throws Throwable {
    doTest();
    // doTestCompletionVariants("user");
  }

  public void testVariableFromCommentWithScopeCompletion() throws Throwable {
    doTest();
  }

  public void testScopedVariableCompletion() throws Throwable {
    doTestCompletionVariants("request.user", "request.some", "reque");
  }

  public void testAttributeValuesCompletion() throws Throwable {
    doTestCompletionVariants("cf_sql_bigint", "cf_sql_bit", "cf_sql_char", "cf_sql_blob", "cf_sql_clob", "cf_sql_date", "cf_sql_decimal",
                             "cf_sql_double", "cf_sql_float", "cf_sql_idstamp", "cf_sql_integer", "cf_sql_longvarchar", "cf_sql_money",
                             "cf_sql_money4", "cf_sql_numeric", "cf_sql_real", "cf_sql_refcursor", "cf_sql_smallint", "cf_sql_time",
                             "cf_sql_timestamp", "cf_sql_tinyint", "cf_sql_varchar");
  }


  public void testAttributeValuesForCustomTagCompletion() throws Throwable {
    doTest();
  }

  public void testAttributeCfloopArrayCompletionInCf8() throws Throwable {
    CfmlProjectConfiguration.State currentState = new CfmlProjectConfiguration.State();
    try {
      currentState.setLanguageLevel(CfmlLanguage.CF8);
      CfmlProjectConfiguration.getInstance(getProject()).loadState(currentState);
      doTest();
    }
    finally {
      currentState.setLanguageLevel(CfmlLanguage.CF9);
      CfmlProjectConfiguration.getInstance(getProject()).loadState(currentState);
    }
  }

  public void testAttributeCompletionWhenTagUppercased() throws Throwable {
    doTest();
  }

  public void testTagFunctionArgumentsCompletion() throws Throwable {
    doTestCompletionVariants("arguments.some1", "arguments.some2");
  }

  public void testScriptComponentAttributesCompletion() throws Throwable {
    doTestCompletionVariants("extends", "embedded", "entityname");
  }

  public void testAutocompletePathToExpandPath() throws Throwable {
    addTwoComponents(myFixture);
    doTestCompletionVariants("MyComponent2.cfc", "MyComponent1.cfc", "autocompletePathToExpandPath.test.cfml");
  }

  public void testAutocompletePathToExpandPathInScript() throws Throwable {
    addTwoComponents(myFixture);
    doTestCompletionVariants("MyComponent2.cfc", "MyComponent1.cfc", "autocompletePathToExpandPathInScript.test.cfml");
  }

  public void testAutocompletePathToComponent() throws Throwable {
    addOneComponentTo(myFixture);
    doTest();
  }

  public void testAutocompletePathToComponentInPresentOfMapping() throws Throwable {
    addOneComponentTo(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/folder/subfolder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("/myfolder/subfolder", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTest();
    } finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }

  public void testAutocompletePathToIncludeTagInPresentOfMapping() throws Throwable {
    addOneComponentTo(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/folder/subfolder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("/myfolder/subfolder", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTest();
    }
    finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }

  public void testAutocompletePathToModuleTag() throws Throwable {
    addTwoComponents(myFixture);
    doTestCompletionContainsVariants("MyComponent1.cfc","MyComponent2.cfc");
  }

  public void testNoCompletionToIncludeTagInPresentOfMapping() throws Throwable {
    addOneComponentTo(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/folder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("myfolder", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig());
    state.setMapps(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTest();
    }
    finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }

  public void testAutocompletePathToScriptIncludeInPresentOfMappingWithEnteredPath() throws Throwable {
    addOneComponentToDir(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/subfolder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("/lot", directoryName);
        mappings.put("/fot", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig());
    state.setMapps(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTestCompletionContainsVariants("lot", "fot");
    }
    finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }

  public void testAutocompletePathToIncludeTagInPresentOfMappingWithFile() throws Throwable {
    addOneComponentToDir(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/subfolder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("/abc", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTestCompletionContainsVariants("ComponentName.cfc");
    }
    finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }


  public void testAutocompletePathToScriptIncludeInPresentOfMapping() throws Throwable {
    addOneComponentTo(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/folder/subfolder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("/myfolder/subfolder", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTest();
    }
    finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }

  public void testAutocompletePathToScriptIncludeInPresentOfMappingWithFile() throws Throwable {
    addOneComponentToDir(myFixture);

    Map<String, String> mappings = new HashMap<String, String>();
    for (VirtualFile root : ProjectRootManager.getInstance(getProject()).getContentRoots()) {
      String directoryName = root.getPresentableUrl() + "/subfolder";
      VirtualFile fileByUrl = LocalFileSystem.getInstance().findFileByPath(directoryName);
      if (fileByUrl != null) {
        mappings.put("/subfolder", directoryName);
      }
    }

    CfmlProjectConfiguration.State defaultState = CfmlProjectConfiguration.getInstance(getProject()).getState();
    CfmlProjectConfiguration.State state = new CfmlProjectConfiguration.State(new CfmlMappingsConfig(mappings));
    try {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(state);
      doTestCompletionVariants("ComponentName.cfc");
    }
    finally {
      CfmlProjectConfiguration.getInstance(getProject()).loadState(defaultState);
    }
  }

  public void testCompleteChainFunctionsCall() throws Throwable {
    addOneComponentToResolve(myFixture);
    doTestCompletionVariants("init", "foo");
  }

  public void testCompleteChainFunctionsCallAfterConstructorCall() throws Throwable {
    addOneComponentToResolve(myFixture);
    doTestCompletionVariants("init", "foo");
  }

  public void testCompleteSuperFunctionsInTagDefinedComponent() throws Throwable {
    addOneComponentTo(myFixture);
    doTestCompletionVariants("func1", "func2");
  }

  public void testCompleteSuperFunctionsInScriptDefinedComponent() throws Throwable {
    addOneComponentTo(myFixture);
    doTestCompletionVariants("this.func1", "this.func2");
  }

  public void testFunctionsNamesCompletionFromFollowingDeclarations() throws Throwable {
    doTestCompletionVariants("func1", "func2", "func3", "func4", "func5");
  }

  public void testCompletionArgumentsNames() throws Throwable {
    doTestCompletionVariants("argument1", "argument2", "argumentCollection");
  }

  public void testCompletionArgumentsNamesFromScriptFunction() throws Throwable {
    doTestCompletionVariants("argument1", "argument2", "argumentCollection");
  }

  public void testDoNotOfferDeclaredAttributes() throws Throwable {
    doTestCompletionVariants("hint", "default", "required", "type");
  }

  public void testArgumentCompletionAtCreateObject() throws Throwable {
    doTestCompletionContainsVariants("com", "component", "java", "corba", "webservice");
  }

  public void testArgumentCompletionAtCompleteCreateObject() throws Throwable {
    doTestCompletionContainsVariants("com", "component", "java", "corba", "webservice");
  }

  public void testTagArgumentCompletionAtCreateObject() throws Throwable {
    doTestCompletionContainsVariants("com", "component", "java", "corba", "webservice");
  }

  public void testComponentArgumentCompletionAtCreateObject() throws Throwable {
    addOneComponentTo(myFixture);
    doTest();
  }

  public void testPredefinedVariablesForTagCompletion() throws Throwable {
    doTestCompletionContainsVariants("recordcount", "columnlist", "currentrow");
  }

  public void testPredefinedVariablesCompletion() throws Throwable {
    doTestCompletionContainsVariants("server.coldfusion.productversion", "server.coldfusion.rootdir");
  }

  public void testInsertPackageName() throws Throwable {
    addJavaClassToSubPackage(myFixture);
    doTest();
  }

  public void testVariableFromLocalScope() throws Throwable {
    doTest();
  }

  public void testArgumentCollection() throws Throwable {
    doTest();
  }

  public void testArgumentCollection2() throws Throwable {
    doTestCompletionVariants("argumentCollection", "argumentCollectionFoo");
  }

  public void testTagPropertyCompletion() throws Throwable {
    doTestCompletionVariants("prop1", "prop2");
  }

  public void testScopedPropertyCompletion() throws Throwable {
    doTestCompletionVariants("variables.prop1", "variables.prop2");
  }


  public void testThisScopedVariableCompletion() throws Throwable {
    doTest();
  }


  public void testPropertyCompletion() throws Throwable {
    doTestCompletionVariants("prop1", "prop2");
  }

  public void testStandardFunctionArgumentName() throws Throwable {
    doTestCompletionVariants("number1", "number2", "numberFormat");
  }

  public void testStandardFunctionArgumentName2() throws Throwable {
    doTest();
  }

  public void testCfml183() throws Throwable {
    doTest();
  }

  public void testCompleteNewArguments() throws Throwable {
    addOneComponentWithConstructorTo(myFixture);
    doTestCompletionVariants("arg1", "arg2", "argumentCollection");
  }

  public void testCompleteNew() throws Throwable {
    addTwoComponents(myFixture);
    doTestCompletionVariants("MyComponent1", "MyComponent2");
  }

  public void testCompleteStringedNew() throws Throwable {
    addTwoComponents(myFixture);
    doTestCompletionVariants("MyComponent1", "MyComponent2");
  }

  public void testOneVariantForVariables() throws Throwable {
    doTestCompletionVariants("variables.var1", "variables.var2");
  }

  public void testNoIntelliJIdeaRulezzSuggestion() throws Throwable {
    doTestCompletionVariants("fu1", "fu2");
  }

  public void testCompleteCfloopIndices() throws Throwable {
    doTestCompletionVariants("index1", "index2");
  }

  public void testGlobalVariablesCompletionInCfmlTagComponent() throws Throwable {
    doTest();
  }

  public void testGlobalVariablesCompletionInScriptComponent() throws Throwable {
    doTest("\n");
  }

  public void testScopedGlobalVariablesCompletionInCfmlTagComponent() throws Throwable {
    doTestCompletionContainsVariants("variables.injector");
  }

  private void doTestCompletionContainsVariants(String... items) {
    String inputDataFileName = Util.getInputDataFileName(getTestName(true));
    List<String> variants = myFixture.getCompletionVariants(inputDataFileName);
    assertTrue(variants.containsAll(Arrays.asList(items)));
  }

  private void doTestCompletionVariants(@NonNls String... items) throws Throwable {
    String inputDataFileName = Util.getInputDataFileName(getTestName(true));
    myFixture.testCompletionVariants(inputDataFileName, items);
  }

  private void doTest() throws Throwable {
    doTest("");
  }

  private void doTest(final String type) throws Throwable {
    String inputDataFileName = Util.getInputDataFileName(getTestName(true));
    String expectedResultFileName = Util.getExpectedDataFileName(getTestName(true));
    String[] input = {inputDataFileName};
    myFixture.testCompletionTyping(input, type, expectedResultFileName);
  }

  @Override
  protected String getTestDataPath() {
    return CfmlTestUtil.BASE_TEST_DATA_PATH + getBasePath();
  }

  @Override
  protected String getBasePath() {
    return "/completion";
  }

  protected PsiElement resolveReferenceAtCaret() throws Throwable {
    return myFixture.getReferenceAtCaretPositionWithAssertion(Util.getInputDataFileName(getTestName(true))).resolve();
  }
}
TOP

Related Classes of com.intellij.coldFusion.CfmlCompletionTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.