package org.angularjs.codeInsight; import com.intellij.lang.javascript.JSTestUtils; import com.intellij.lang.javascript.dialects.JSLanguageLevel; import com.intellij.lang.javascript.inspections.JSUnresolvedFunctionInspection; import com.intellij.lang.javascript.inspections.JSUnresolvedVariableInspection; import com.intellij.lang.javascript.inspections.JSUnusedGlobalSymbolsInspection; import com.intellij.lang.javascript.inspections.JSUnusedLocalSymbolsInspection; import com.intellij.lang.javascript.psi.JSFunction; import com.intellij.lang.javascript.psi.ecma6.TypeScriptFunction; import com.intellij.lang.javascript.psi.ecma6.impl.TypeScriptFieldImpl; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; import com.intellij.util.ThrowableRunnable; import org.angularjs.AngularTestUtil; /** * @author Dennis.Ushakov */ public class ContextTest extends LightPlatformCodeInsightFixtureTestCase { @Override protected String getTestDataPath() { return AngularTestUtil.getBaseTestDataPath(getClass()) + "context"; } public void testInlineTemplateCompletion2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), (ThrowableRunnable<Exception>)() -> myFixture.testCompletion("component.ts", "component.after.ts", "angular2.js")); } public void testInlineTemplateResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("component.after.ts", "angular2.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("=\"onComple<caret>tedButton()", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("component.after.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, JSFunction.class); }); } public void testInlineTemplateMethodResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("templateMethod.ts", "angular2.js", "customer.ts", "customer2.ts"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("ca<caret>ll()", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("customer.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFunction.class); }); } public void testNonInlineTemplateCompletion2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), (ThrowableRunnable<Exception>)() -> myFixture.testCompletion("template.completion.html", "template.html", "angular2.js", "template.completion.ts")); } public void testNonInlineTemplateResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("template.html", "angular2.js", "template.ts"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("myCu<caret>", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("template.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFieldImpl.class); }); } public void testNonInlineTemplateUsage2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.enableInspections(JSUnusedLocalSymbolsInspection.class, JSUnusedGlobalSymbolsInspection.class); myFixture.configureByFiles("template.usage.ts", "template.usage.html", "angular2.js"); myFixture.checkHighlighting(); }); } public void testNonInlineTemplateMethodResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("templateMethod.html", "angular2.js", "templateMethod.ts", "customer.ts", "customer2.ts"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("ca<caret>ll()", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("customer.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFunction.class); }); } public void testNonInlineTemplateDefinitionResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("definition.html", "angular2.js", "definition.ts", "definition2.ts"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("tit<caret>le", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("definition.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFieldImpl.class); }); } public void testInlineTemplateDefinitionResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("definition.ts", "angular2.js", "definition2.ts"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("tit<caret>le", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("definition.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFieldImpl.class); }); } public void testNonInlineTemplatePropertyResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("definition2.html", "angular2.js", "definition2.ts"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("check<caret>ed", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("definition2.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFieldImpl.class); }); } public void testInlineTemplatePropertyResolve2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.configureByFiles("definition2.ts", "angular2.js"); int offsetBySignature = AngularTestUtil.findOffsetBySignature("check<caret>ed", myFixture.getFile()); PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature); assertNotNull(ref); PsiElement resolve = ref.resolve(); assertNotNull(resolve); assertEquals("definition2.ts", resolve.getContainingFile().getName()); assertInstanceOf(resolve, TypeScriptFieldImpl.class); }); } public void testInlineTemplateCreateFunction2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.enableInspections(JSUnresolvedFunctionInspection.class); myFixture.getAllQuickFixes("createFunction.ts", "angular2.js"); myFixture.launchAction(myFixture.findSingleIntention("Create Method 'fetchFromApi'")); myFixture.checkResultByFile("createFunction.fixed.ts", true); }); } public void testInlineTemplateCreateField2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.enableInspections(JSUnresolvedVariableInspection.class); myFixture.getAllQuickFixes("createField.ts", "angular2.js"); myFixture.launchAction(myFixture.findSingleIntention("Create Field 'todo'")); myFixture.checkResultByFile("createField.fixed.ts", true); }); } public void testNonInlineTemplateCreateFunction2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.enableInspections(JSUnresolvedFunctionInspection.class); myFixture.getAllQuickFixes("createFunction.html", "createFunction.ts", "angular2.js"); myFixture.launchAction(myFixture.findSingleIntention("Create Method 'fetchFromApi'")); myFixture.checkResultByFile("createFunction.ts", "createFunction.fixed.ts", true); }); } public void testNonInlineTemplateCreateField2TypeScript() throws Exception { JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> { myFixture.enableInspections(JSUnresolvedVariableInspection.class); myFixture.getAllQuickFixes("createField.html", "createField.ts", "angular2.js"); myFixture.launchAction(myFixture.findSingleIntention("Create Field 'todo'")); myFixture.checkResultByFile("createField.ts", "createField.fixed.ts", true); }); } }