package org.angularjs.codeInsight;
import com.intellij.codeInspection.htmlInspections.RequiredAttributesInspection;
import com.intellij.lang.javascript.JSTestUtils;
import com.intellij.lang.javascript.dialects.JSLanguageLevel;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
import com.intellij.util.ThrowableRunnable;
import com.intellij.xml.util.CheckValidXmlInScriptBodyInspection;
import org.angularjs.AngularTestUtil;
import java.util.List;
/**
* @author Dennis.Ushakov
*/
public class TagsTest extends LightPlatformCodeInsightFixtureTestCase {
@Override
protected String getTestDataPath() {
return AngularTestUtil.getBaseTestDataPath(getClass()) + "tags";
}
public void testStandardTagsCompletion() {
myFixture.testCompletion("standard.html", "standard.after.html", "angular.js");
}
public void testStandardAttributesCompletion() {
myFixture.testCompletion("standardAttributes.html", "standardAttributes.after.html", "angular.js");
}
public void testStandardTagsResolve() {
myFixture.configureByFiles("standard.after.html", "angular.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("ng-fo<caret>rm", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("angular.js", resolve.getContainingFile().getName());
}
public void testCustomTagsCompletion() {
myFixture.testCompletion("custom.html", "custom.after.html", "angular.js", "custom.js");
}
public void testCustomTagsCompletion13() {
myFixture.testCompletion("custom13.html", "custom13.after.html", "angular13.js", "custom.js");
}
public void testCustomTagsCompletion15() {
myFixture.testCompletion("custom13.html", "custom13.after.html", "angular13.js", "custom15.js");
}
public void testCustomTagsCompletion20TypeScript() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(),
() -> myFixture.testCompletion("custom.html", "custom.after.html", "angular2.js", "custom.ts"));
}
public void testCustomTagsCompletion20JavaScript() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(),
() -> myFixture.testCompletion("custom.html", "custom.after.html", "angular2.js", "custom2.js"));
}
public void testCustomTagsViaFunctionCompletion() {
myFixture.testCompletion("customViaFunction.html", "customViaFunction.after.html", "angular.js", "custom.js");
}
public void testCustomTagsArrayViaFunctionCompletion() {
myFixture.testCompletion("customArrayViaFunction.html", "customArrayViaFunction.after.html", "angular.js", "custom.js");
}
public void testCustomTagsViaFunctionForwardCompletion() {
myFixture.testCompletion("customViaFunctionForward.html", "customViaFunctionForward.after.html", "angular.js", "custom.js");
}
public void testCustomTagsArrayCompletion() {
myFixture.testCompletion("customArray.html", "customArray.after.html", "angular.js", "custom.js");
}
public void testCustomAttributesCompletion() {
myFixture.testCompletion("customAttributes.html", "customAttributes.after.html", "angular.js", "custom.js");
}
public void testCommonAttributesCompletion() {
myFixture.testCompletion("commonAttributes.html", "commonAttributes.after.html", "angular.js", "custom.js");
}
public void testCustomTagsResolve() {
myFixture.configureByFiles("custom.after.html", "angular.js", "custom.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("my-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.js", resolve.getContainingFile().getName());
assertEquals("'myCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testCustomTagsResolve15() {
myFixture.configureByFiles("custom13.after.html", "angular.js", "custom15.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("new-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom15.js", resolve.getContainingFile().getName());
assertEquals("'newCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testCustomTagsResolve20TypeScriptComponent() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("custom.after.html", "angular2.js", "custom.ts");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("my-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.ts", resolve.getContainingFile().getName());
assertEquals("Component({\n" +
" selector: 'my-customer',\n" +
" properties: {\n" +
" 'id':'dependency'\n" +
" }\n" +
"})", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
public void testCustomTagsResolve20TypeScriptDirective() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("custom.after.html", "angular2.js", "custom_directive.ts");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("my-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom_directive.ts", resolve.getContainingFile().getName());
assertEquals("Directive({\n" +
" selector: 'my-customer',\n" +
" properties: {\n" +
" 'id':'dependency'\n" +
" }\n" +
"})", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
public void testCustomTagsResolve20JavaScript() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("custom.after.html", "angular2.js", "custom2.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("my-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom2.js", resolve.getContainingFile().getName());
assertEquals("new angular.ComponentAnnotation({\n" +
" selector: 'my-customer'\n" +
" })", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
public void testCustomTagsViaFunctionResolve() {
myFixture.configureByFiles("customViaFunction.after.html", "angular.js", "custom.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("function-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.js", resolve.getContainingFile().getName());
assertEquals("'functionCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testCustomTagsViaFunctionForwardResolve() {
myFixture.configureByFiles("customViaFunctionForward.after.html", "angular.js", "custom.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("great-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.js", resolve.getContainingFile().getName());
assertEquals("'greatCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testCustomTagsArrayViaFunctionResolve() {
myFixture.configureByFiles("customArrayViaFunction.after.html", "angular.js", "custom.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("array-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.js", resolve.getContainingFile().getName());
assertEquals("'arrayCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testCustomTagsArrayResolve() {
myFixture.configureByFiles("customArray.after.html", "angular.js", "custom.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("her-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.js", resolve.getContainingFile().getName());
assertEquals("'herCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testOverride() {
myFixture.enableInspections(CheckValidXmlInScriptBodyInspection.class);
myFixture.configureByFiles("override.html", "angular.js");
myFixture.checkHighlighting();
}
public void testProperNamespace() {
myFixture.enableInspections(RequiredAttributesInspection.class);
myFixture.configureByFiles("namespace.html", "angular.js", "custom.js");
myFixture.checkHighlighting();
}
public void testCustomTagsCompletionCss() {
myFixture.testCompletion("customCss.html", "customCss.after.html", "angular.js", "custom.js");
}
public void testCustomTagsResolveCss() {
myFixture.configureByFiles("customCss.after.html", "angular.js", "custom.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("my-cus<caret>tomer", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("custom.js", resolve.getContainingFile().getName());
assertEquals("'myCustomer'", AngularTestUtil.getDirectiveDefinitionText(resolve));
}
public void testNoCompletionInXml() {
final List<String> variants = myFixture.getCompletionVariants("standard.xml", "angular.js");
assertDoesntContain(variants, "ng-form", "form", "script");
}
public void testCustomSpaceSeparated() {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(),
() -> {
final List<String> variants = myFixture.getCompletionVariants("customSpaceSeparated.html", "customSpaceSeparated.ts", "angular2.js");
assertContainsElements(variants, "dummy-list", "dummy-nav-list");
});
}
public void testUnclosed() {
myFixture.configureByFiles("unclosed.html", "angular.js", "custom.js");
myFixture.checkHighlighting();
}
public void testInlineTemplateHtmlTags() {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
List<String> variants = myFixture.getCompletionVariants("inline_template.ts", "angular2.js");
assertContainsElements(variants, "a", "img", "my-customer");
});
}
public void testNgContainerCompletion20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(),
() -> myFixture.testCompletion("ngContainer.html", "ngContainer.after.html", "angular2.js"));
}
public void testNgContainerResolve20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("ngContainer.after.html", "angular2.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("ng-<caret>container", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("ngContainer.after.html", resolve.getContainingFile().getName());
assertEquals("<ng-container></ng-container>", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
public void testNgTemplateCompletion20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(),
() -> myFixture.testCompletion("ngTemplate.html", "ngTemplate.after.html", "angular2.js"));
}
public void testNgTemplateResolve20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("ngTemplate.after.html", "angular2.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("ng-<caret>template", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("ngTemplate.after.html", resolve.getContainingFile().getName());
assertEquals("<ng-template></ng-template>", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
public void testNgContentCompletion20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(),
() -> myFixture.testCompletion("ngContent.html", "ngContent.after.html", "angular2.js"));
}
public void testNgContentResolve20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("ngContent.after.html", "angular2.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("ng-<caret>content", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("ngContent.after.html", resolve.getContainingFile().getName());
assertEquals("<ng-content></ng-content>", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
public void testComplexSelectorList2() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, getProject(), (ThrowableRunnable<Exception>)() -> {
myFixture.configureByFiles("ionic.html", "angular2.js", "ionic.js");
myFixture.completeBasic();
assertContainsElements(myFixture.getLookupElementStrings(), "ion-item");
});
}
public void testNoNormalizedResolve20() throws Exception {
JSTestUtils.testWithinLanguageLevel(JSLanguageLevel.ES6, myFixture.getProject(), () -> {
myFixture.configureByFiles("noNormalized.ts", "angular2.js");
int offsetBySignature = AngularTestUtil.findOffsetBySignature("app_<caret>hello", myFixture.getFile());
PsiReference ref = myFixture.getFile().findReferenceAt(offsetBySignature);
assertNotNull(ref);
PsiElement resolve = ref.resolve();
assertNotNull(resolve);
assertEquals("noNormalized.ts", resolve.getContainingFile().getName());
assertEquals("Component({\n" +
" selector: 'app_hello',\n" +
" template: '<app_hello></app_hello>',\n" +
"})", AngularTestUtil.getDirectiveDefinitionText(resolve));
});
}
}