| /* |
| * 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.util.xml; |
| |
| import com.intellij.codeInspection.InspectionManager; |
| import com.intellij.lang.annotation.HighlightSeverity; |
| import com.intellij.openapi.fileTypes.StdFileTypes; |
| import com.intellij.psi.PsiClass; |
| import com.intellij.psi.PsiFileFactory; |
| import com.intellij.psi.xml.XmlFile; |
| import com.intellij.psi.xml.XmlTag; |
| import com.intellij.util.xml.highlighting.*; |
| import com.intellij.util.xml.impl.DomTestCase; |
| |
| import java.util.Arrays; |
| |
| /** |
| * @author peter |
| */ |
| public class DomAnnotationsTest extends DomTestCase { |
| |
| @Override |
| protected <T extends DomElement> T createElement(final String xml, final Class<T> aClass) { |
| final String name = "a.xml"; |
| final XmlFile file = (XmlFile)PsiFileFactory.getInstance(getProject()).createFileFromText(name, StdFileTypes.XML, xml, 0, |
| true); |
| final XmlTag tag = file.getDocument().getRootTag(); |
| final String rootTagName = tag != null ? tag.getName() : "root"; |
| final T element = getDomManager().getFileElement(file, aClass, rootTagName).getRootElement(); |
| assertNotNull(element); |
| assertSame(tag, element.getXmlTag()); |
| return element; |
| } |
| |
| public void testResolveProblemsAreReportedOnlyOnce() throws Throwable { |
| final MyElement myElement = createElement("<a><my-class>abc</my-class></a>", MyElement.class); |
| |
| new MockDomInspection(MyElement.class).checkFile(DomUtil.getFile(myElement), InspectionManager.getInstance(getProject()), true); |
| final DomElementsProblemsHolder holder = DomElementAnnotationsManager.getInstance(getProject()).getProblemHolder(myElement); |
| |
| final DomElement element = myElement.getMyClass(); |
| assertEquals(0, holder.getProblems(myElement).size()); |
| assertEquals(0, holder.getProblems(myElement).size()); |
| assertEquals(1, holder.getProblems(element).size()); |
| assertEquals(1, holder.getProblems(element).size()); |
| assertEquals(1, holder.getProblems(myElement, true, true).size()); |
| assertEquals(1, holder.getProblems(myElement, true, true).size()); |
| } |
| |
| public void testMinSeverity() throws Throwable { |
| final MyElement element = createElement("<a/>", MyElement.class); |
| final DomElementsProblemsHolderImpl holder = new DomElementsProblemsHolderImpl(DomUtil.getFileElement(element)); |
| final DomElementProblemDescriptorImpl error = new DomElementProblemDescriptorImpl(element, "abc", HighlightSeverity.ERROR); |
| final DomElementProblemDescriptorImpl warning = new DomElementProblemDescriptorImpl(element, "abc", HighlightSeverity.WARNING); |
| holder.addProblem(error, MockDomInspection.class); |
| holder.addProblem(warning, MockDomInspection.class); |
| assertEquals(Arrays.asList(error), holder.getProblems(element, true, true, HighlightSeverity.ERROR)); |
| assertEquals(Arrays.asList(error, warning), holder.getProblems(element, true, true, HighlightSeverity.WARNING)); |
| } |
| |
| public interface MyElement extends DomElement{ |
| GenericDomValue<PsiClass> getMyClass(); |
| } |
| |
| } |