package org.angularjs.codeInsight; import com.intellij.lang.javascript.JSTestUtils; import com.intellij.lang.javascript.JavaScriptFileType; import com.intellij.lang.javascript.psi.JSDefinitionExpression; import com.intellij.lang.javascript.psi.JSProperty; import com.intellij.lang.javascript.psi.JSVariable; import com.intellij.lang.javascript.psi.stubs.JSImplicitElement; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; import org.angularjs.AngularTestUtil; /** * @author Dennis.Ushakov */ public class DependencyInjectionTest extends LightPlatformCodeInsightFixtureTestCase { @Override protected String getTestDataPath() { return AngularTestUtil.getBaseTestDataPath(getClass()) + "di"; } @Override protected void setUp() throws Exception { super.setUp(); JSTestUtils.forbidStubAstSwitch(myFixture::getFile, getProject(), this, myFixture.getTestRootDisposable()); } public void testInjectedServiceCompletion() { myFixture.testCompletionTyping("di.js", "\n", "di.after.js", "angular.js"); } public void testInjectedServiceResolve() { myFixture.configureByFiles("di.resolve.js", "angular.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("myService.fo<caret>o();", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertInstanceOf(resolve, JSProperty.class); } public void testInjectedConstantCompletion() { myFixture.testCompletionTyping("constant.js", "\n", "constant.after.js", "angular.js"); } public void testInjectedConstantResolve() { myFixture.configureByFiles("constant.resolve.js", "angular.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("myService.fo<caret>o();", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertInstanceOf(resolve, JSProperty.class); } public void testInjectedStaticResolve() { myFixture.configureByFiles("static.js", "angular.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("DomUtils.createSVG<caret>ElementTemplate(", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertInstanceOf(resolve, JSDefinitionExpression.class); } public void testInjectedParameterCompletion() { myFixture.testCompletion("parameter.js", "parameter.after.js", "angular.js"); } public void testInjectedParameterResolve() { myFixture.configureByFiles("parameter.resolve.js", "angular.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("function (my<caret>Service)", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertInstanceOf(resolve, JSImplicitElement.class); assertEquals("'myService'", AngularTestUtil.getDirectiveDefinitionText(resolve)); } public void testInjectedParameterToVarResolve() { myFixture.configureByFiles("parameterToVar.resolve.js", "angular.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("function (my<caret>Service)", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertInstanceOf(resolve, JSVariable.class); } public void testInjectedNamedParameterCompletion() { myFixture.testCompletion("namedParameter.js", "namedParameter.after.js", "angular.js"); } public void testInjectedNamedParameterResolve() { myFixture.configureByFiles("namedParameter.resolve.js", "angular.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("function (my<caret>Service)", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertInstanceOf(resolve, JSImplicitElement.class); assertEquals("'myService'", AngularTestUtil.getDirectiveDefinitionText(resolve)); } public void testPropertyInitializedWithInjectedParameter() { myFixture.copyFileToProject("property.to.parameter.js"); myFixture.copyFileToProject("angular.js"); myFixture.configureByText(JavaScriptFileType.INSTANCE, "someRef.serv.<caret>"); myFixture.completeBasic(); } }