blob: 9100b11c206ee48cd23c6807f519ff7dbdc1dcf6 [file] [log] [blame]
/*
* Copyright 2000-2014 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.codeInsight;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.xml.XmlAttributeDescriptor;
import com.intellij.xml.XmlElementDescriptor;
import com.intellij.xml.XmlNSDescriptor;
import com.intellij.xml.impl.schema.XmlElementDescriptorImpl;
import com.intellij.xml.impl.schema.XmlNSDescriptorImpl;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NonNls;
/**
* @author Mike
*/
public class XmlSchemaTest extends LightCodeInsightTestCase {
private XmlTag SHIP_TO;
private XmlTag UNKNOWN_TAG;
@Override
protected void setUp() throws Exception {
super.setUp();
SHIP_TO = XmlTestUtil.tag("shipTo", getProject());
UNKNOWN_TAG = XmlTestUtil.tag("xxx", getProject());
}
public void testDocumentDescriptor1() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:element name=\"comment\" type=\"xsd:string\"/>" +
"</xsd:schema>");
assertNotNull(NSDescriptor);
assertNotNull(NSDescriptor.getElementDescriptor(XmlTestUtil.tag("purchaseOrder", getProject())));
assertNotNull(NSDescriptor.getElementDescriptor(XmlTestUtil.tag("comment", getProject())));
assertNull(NSDescriptor.getElementDescriptor(UNKNOWN_TAG));
}
public void testElementDescriptor1() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:element name=\"comment\" type=\"xsd:string\"/>" +
"</xsd:schema>");
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(XmlTestUtil.tag("purchaseOrder", getProject()));
assertEquals("purchaseOrder", elementDescriptor.getName());
elementDescriptor = NSDescriptor.getElementDescriptor(XmlTestUtil.tag("comment", getProject()));
assertEquals("comment", elementDescriptor.getName());
}
public void testElementDescriptor2() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"comment\" type=\"xsd:string\"/>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("comment", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(0, elements.length);
XmlAttributeDescriptor[] descriptors = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(0, descriptors.length);
assertEquals(elementDescriptor.getContentType(), XmlElementDescriptor.CONTENT_TYPE_MIXED);
}
public void testElementDescriptor3() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element name=\"shipTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"billTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"items\" type=\"Items\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(3, elements.length);
assertEquals("shipTo", elements[0].getName());
assertEquals("billTo", elements[1].getName());
assertEquals("items", elements[2].getName());
assertEquals("shipTo", elementDescriptor.getElementDescriptor(SHIP_TO, null).getName());
assertNull(elementDescriptor.getElementDescriptor(UNKNOWN_TAG, null));
}
public void testElementDescriptor4() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\"/>" +
" <xsd:attribute name=\"name\" type=\"xsd:string\"/>" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(2, attributes.length);
assertEquals("orderDate", attributes[0].getName());
assertEquals("name", attributes[1].getName());
assertEquals("name", elementDescriptor.getAttributeDescriptor("name", tag).getName());
assertNull(elementDescriptor.getAttributeDescriptor("xxx", tag));
}
public void testElementDescriptor5() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element name=\"shipTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"billTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"items\" type=\"Items\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"<xsd:complexType name=\"USAddress\">" +
" <xsd:sequence>" +
" <xsd:element name=\"name\" type=\"xsd:string\"/>" +
" <xsd:element name=\"street\" type=\"xsd:string\"/>" +
" <xsd:element name=\"city\" type=\"xsd:string\"/>" +
" <xsd:element name=\"state\" type=\"xsd:string\"/>" +
" <xsd:element name=\"zip\" type=\"xsd:decimal\"/>" +
" </xsd:sequence>" +
" <xsd:attribute name=\"country\" type=\"xsd:NMTOKEN\" fixed=\"US\"/>" +
"</xsd:complexType>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag).getElementDescriptor(SHIP_TO, null);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(5, elements.length);
assertEquals("name", elements[0].getName());
assertEquals("street", elements[1].getName());
assertEquals("city", elements[2].getName());
assertEquals("state", elements[3].getName());
assertEquals("zip", elements[4].getName());
final XmlTag context = tag.findFirstSubTag(elements[2].getName());
assertEquals(0, elements[2].getElementsDescriptors(context).length);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(context);
assertEquals(1, attributes.length);
assertEquals("country", attributes[0].getName());
}
public void testElementDescriptor6() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element name=\"shipTo\">" +
" <xsd:complexType name=\"USAddress\">" +
" <xsd:sequence>" +
" <xsd:element name=\"name\" type=\"xsd:string\"/>" +
" <xsd:element name=\"street\" type=\"xsd:string\"/>" +
" <xsd:element name=\"city\" type=\"xsd:string\"/>" +
" <xsd:element name=\"state\" type=\"xsd:string\"/>" +
" <xsd:element name=\"zip\" type=\"xsd:decimal\"/>" +
" </xsd:sequence>" +
" <xsd:attribute name=\"country\" type=\"xsd:NMTOKEN\" fixed=\"US\"/>" +
" </xsd:complexType>" +
" </xsd:element>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag).getElementDescriptor(SHIP_TO, null);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(5, elements.length);
assertEquals("name", elements[0].getName());
assertEquals("street", elements[1].getName());
assertEquals("city", elements[2].getName());
assertEquals("state", elements[3].getName());
assertEquals("zip", elements[4].getName());
final XmlTag context = tag.findFirstSubTag(elements[2].getName());
assertEquals(0, elements[2].getElementsDescriptors(context).length);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(context);
assertEquals(1, attributes.length);
assertEquals("country", attributes[0].getName());
}
public void testElementDescriptor7() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\">" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element name=\"shipTo\">" +
" <xsd:complexType name=\"USAddress\">" +
" <xsd:sequence>" +
" <xsd:element name=\"name\" type=\"xsd:string\"/>" +
" <xsd:element name=\"street\" type=\"xsd:string\"/>" +
" <xsd:element name=\"city\" type=\"xsd:string\"/>" +
" <xsd:element name=\"state\" type=\"xsd:string\"/>" +
" <xsd:element name=\"zip\" type=\"xsd:decimal\"/>" +
" </xsd:sequence>" +
" <xsd:attribute name=\"country\" type=\"xsd:NMTOKEN\" fixed=\"US\"/>" +
" </xsd:complexType>" +
" </xsd:element>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:element>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(0, attributes.length);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(1, elements.length);
assertEquals("shipTo", elements[0].getName());
}
public void testElementDescriptor8() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element ref=\"items\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"<xsd:element name=\"items\" type=\"xsd:string\"/>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(1, elements.length);
assertEquals("items", elements[0].getName());
assertEquals("items", elementDescriptor.getElementDescriptor(XmlTestUtil.tag("items", getProject()), null).getName());
assertNull(elementDescriptor.getElementDescriptor(UNKNOWN_TAG, null));
}
public void testElementDescriptor9() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:group ref=\"ddd:mainBookElements\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"<xsd:group name=\"mainBookElements\">" +
" <xsd:sequence>" +
" <xsd:element name=\"title\" type=\"nameType\"/>" +
" <xsd:element name=\"author\" type=\"nameType\"/>" +
" </xsd:sequence>" +
"</xsd:group>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(2, elements.length);
assertEquals("title", elements[0].getName());
assertEquals("author", elements[1].getName());
assertEquals("title", elementDescriptor.getElementDescriptor(XmlTestUtil.tag("title", getProject()), null).getName());
assertNull(elementDescriptor.getElementDescriptor(UNKNOWN_TAG, null));
}
public void testElementDescriptor10() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attributeGroup ref=\"ddd:bookAttributes\"/>" +
"</xsd:complexType>" +
"<xsd:attributeGroup name=\"bookAttributes\">" +
" <xsd:attribute name=\"isbn\" type=\"xs:string\" use=\"required\"/>" +
" <xsd:attribute name=\"available\" type=\"xs:string\"/>" +
"</xsd:attributeGroup>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(2, attributes.length);
assertEquals("isbn", attributes[0].getName());
assertEquals("available", attributes[1].getName());
assertEquals("isbn", elementDescriptor.getAttributeDescriptor("isbn", tag).getName());
assertNull(elementDescriptor.getAttributeDescriptor("xxx", tag));
}
public void testElementDescriptor11() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:complexContent>" +
" <xsd:restriction base=\"PurchaseOrderType2\">" +
" <xsd:element name=\"shipTo2\" type=\"USAddress\"/>" +
" <xsd:element name=\"items\" type=\"Items\"/>" +
" </xsd:restriction>" +
" </xsd:complexContent>" +
"</xsd:complexType>" +
"<xsd:complexType name=\"PurchaseOrderType2\">" +
" <xsd:sequence>" +
" <xsd:element name=\"shipTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"billTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"items\" type=\"Items\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(4, elements.length);
assertEquals("shipTo", elements[0].getName());
assertEquals("billTo", elements[1].getName());
assertEquals("shipTo2", elements[2].getName());
assertEquals("items", elements[3].getName());
}
public void testElementDescriptor15() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:complexContent>" +
" <xsd:extension base=\"PurchaseOrderType2\">" +
" <xsd:element name=\"shipTo2\" type=\"USAddress\"/>" +
" </xsd:extension>" +
" </xsd:complexContent>" +
"</xsd:complexType>" +
"<xsd:complexType name=\"PurchaseOrderType2\">" +
" <xsd:sequence>" +
" <xsd:element name=\"shipTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"billTo\" type=\"USAddress\"/>" +
" <xsd:element name=\"items\" type=\"Items\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(4, elements.length);
assertEquals("shipTo", elements[0].getName());
assertEquals("billTo", elements[1].getName());
assertEquals("items", elements[2].getName());
assertEquals("shipTo2", elements[3].getName());
}
public void testElementDescriptor12() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:complexContent>" +
" <xsd:restriction base=\"PurchaseOrderType2\">" +
" <xsd:attribute name=\"orderDate2\" type=\"xsd:date\"/>" +
" <xsd:attribute name=\"name\" type=\"xsd:date\"/>" +
" </xsd:restriction>" +
" </xsd:complexContent>" +
"</xsd:complexType>" +
"<xsd:complexType name=\"PurchaseOrderType2\">" +
" <xsd:sequence>" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\"/>" +
" <xsd:attribute name=\"name\" type=\"xsd:string\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(3, attributes.length);
assertEquals("orderDate", attributes[0].getName());
assertEquals("orderDate2", attributes[1].getName());
assertEquals("name", attributes[2].getName());
}
public void testElementDescriptor13() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\">" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element ref=\"shipTo\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:element>" +
"<xsd:element name=\"shipTo\" abstract=\"true\">" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
final XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(0, elements.length);
}
public void testElementDescriptor14() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema targetNamespace=\"http://www.deansoft.com/AddressBook\" xmlns:ab=\"http://www.deansoft.com/AddressBook\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\">" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element ref=\"shipTo\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:element>" +
"<xsd:element name=\"shipTo\" abstract=\"true\">" +
" <xsd:complexType name=\"USAddress\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\"/>" +
" <xsd:element name=\"items\" type=\"Items\"/>" +
" </xsd:complexType>" +
"</xsd:element>" +
"<xsd:element name=\"name\" substitutionGroup=\"ab:shipTo\"/>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", "http://www.deansoft.com/AddressBook", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
final XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(1, elements.length);
assertEquals("name", elements[0].getName());
XmlAttributeDescriptor[] attrs = elements[0].getAttributesDescriptors(tag);
assertEquals(1, attrs.length);
assertEquals("orderDate", attrs[0].getName());
XmlElementDescriptor[] element0Descriptors = elements[0].getElementsDescriptors(tag.findFirstSubTag(elements[0].getName()));
assertEquals(1, element0Descriptors.length);
assertEquals("items", element0Descriptors[0].getName());
}
public void testAttributeDescriptor1() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\"/>" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor attribute = elementDescriptor.getAttributeDescriptor("orderDate", tag);
assertTrue(!attribute.isEnumerated());
assertTrue(!attribute.isFixed());
assertTrue(!attribute.isRequired());
assertNull(attribute.getDefaultValue());
}
public void testAttributeDescriptorProhibited() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\" use=\"prohibited\" />" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(0, attributes.length);
}
public void testAttributeDescriptorProhibited2() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:complexContent>" +
" <xsd:restriction base=\"PurchaseOrderType2\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\" use=\"prohibited\"/>" +
" </xsd:restriction>" +
" </xsd:complexContent>" +
"</xsd:complexType>" +
"<xsd:complexType name=\"PurchaseOrderType2\">" +
" <xsd:sequence>" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\"/>" +
" <xsd:attribute name=\"name\" type=\"xsd:string\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor[] attributes = elementDescriptor.getAttributesDescriptors(tag);
assertEquals(1, attributes.length);
assertEquals("name", attributes[0].getName());
}
public void testAttributeDescriptor2() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\" use=\"required\" default=\" 2002 \"/>" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor attribute = elementDescriptor.getAttributeDescriptor("orderDate", tag);
assertTrue(!attribute.isEnumerated());
assertTrue(!attribute.isFixed());
assertTrue(attribute.isRequired());
assertEquals(" 2002 ", attribute.getDefaultValue());
}
public void testAttributeDescriptor3() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\" fixed=\"1 01 2001\"/>" +
"</xsd:complexType>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor attribute = elementDescriptor.getAttributeDescriptor("orderDate", tag);
assertTrue(!attribute.isEnumerated());
assertTrue(attribute.isFixed());
assertTrue(!attribute.isRequired());
assertEquals("1 01 2001", attribute.getDefaultValue());
}
public void testAttributeDescriptor4() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:attribute ref=\"orderDate\" use=\"required\"/>" +
"</xsd:complexType>" +
" <xsd:attribute name=\"orderDate\" type=\"xsd:date\" fixed=\"1 01 2001\"/>" +
"</xsd:schema>");
final XmlTag tag = XmlTestUtil.tag("purchaseOrder", getProject());
XmlElementDescriptor elementDescriptor = NSDescriptor.getElementDescriptor(tag);
XmlAttributeDescriptor attribute = elementDescriptor.getAttributeDescriptor("orderDate", tag);
assertNotNull(attribute);
assertTrue(!attribute.isEnumerated());
assertTrue(attribute.isFixed());
assertTrue(attribute.isRequired());
assertEquals("1 01 2001", attribute.getDefaultValue());
}
public void testNamespace1() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
"<xs:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xs:element name=\"comment\" type=\"xs:string\"/>" +
"</xs:schema>");
assertNotNull(NSDescriptor);
assertNotNull(NSDescriptor.getElementDescriptor(XmlTestUtil.tag("purchaseOrder", getProject())));
assertNotNull(NSDescriptor.getElementDescriptor(XmlTestUtil.tag("comment", getProject())));
assertNull(NSDescriptor.getElementDescriptor(UNKNOWN_TAG));
}
public void testNamespace2() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema targetNamespace=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" >" +
"<xsd:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<xsd:complexType name=\"PurchaseOrderType\">" +
" <xsd:sequence>" +
" <xsd:element ref=\"xsd:items\"/>" +
" </xsd:sequence>" +
"</xsd:complexType>" +
"<xsd:element name=\"items\" type=\"xsd:string\"/>" +
"</xsd:schema>");
XmlTag tag = XmlTestUtil.tag("purchaseOrder", "http://www.w3.org/2001/XMLSchema", getProject());
XmlElementDescriptorImpl elementDescriptor = (XmlElementDescriptorImpl)NSDescriptor.getElementDescriptor(tag);
XmlElementDescriptor[] elements = elementDescriptor.getElementsDescriptors(tag);
assertEquals(1, elements.length);
assertEquals("items", elements[0].getName());
assertEquals("items", elementDescriptor.getElementDescriptor("items").getName());
assertNull(elementDescriptor.getElementDescriptor("xxx"));
}
public void testNamespace3() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xs:schema xmlns=\"http://www.w3.org/2001/XMLSchema\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
"<xs:element name=\"purchaseOrder\" type=\"PurchaseOrderType\"/>" +
"<element name=\"comment\" type=\"xs:string\"/>" +
"</xs:schema>");
assertNotNull(NSDescriptor);
assertNotNull(NSDescriptor.getElementDescriptor(XmlTestUtil.tag("purchaseOrder", "http://www.w3.org/2001/XMLSchema", getProject())));
assertNotNull(NSDescriptor.getElementDescriptor(XmlTestUtil.tag("comment", "http://www.w3.org/2001/XMLSchema", getProject())));
assertNull(NSDescriptor.getElementDescriptor(UNKNOWN_TAG));
}
//public void testAny1() throws Exception {
// XmlDocumentDescriptor documentDescriptor = createDescriptorImpl(
// "<xsd:schema targetNamespace=\"http://foo\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" >" +
// " <xsd:element name=\"root\">" +
// " <xsd:complexType>" +
// " <xsd:sequence minOccurs=\"1\" maxOccurs=\"1\">" +
// " <xsd:any namespace=\"##other\" minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\"/>" +
// " </xsd:sequence>" +
// " </xsd:complexType>" +
// " </xsd:element>" +
// "</xsd:schema>"
// );
//
// XmlFile xmlFile = (XmlFile)createFile("file.xml",
// "<root xmlns=\"http://foo\">" +
// " <a:a xmlns:a=\"http://bar\" />" +
// "</root>"
// );
//
// XmlElementDescriptor rootDescriptor = documentDescriptor.getElementDescriptor(xmlFile.saveToString().getRootTag());
// assertNotNull(rootDescriptor);
//
// XmlTag aTag = xmlFile.saveToString().getRootTag().findSubTag("a:a");
// assertNotNull(aTag);
// XmlElementDescriptor aDescriptor = documentDescriptor.getElementDescriptor(aTag);
// assertNotNull(aDescriptor);
//}
public void testAny2() throws Exception {
PsiFile dtdFile = createFile("test.xml", "<xsd:schema targetNamespace=\"http://foo\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" >" +
" <xsd:element name=\"root\">" +
" <xsd:complexType>" +
" <xsd:sequence minOccurs=\"1\" maxOccurs=\"1\">" +
" <xsd:any namespace=\"##other\" minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\"/>" +
" </xsd:sequence>" +
" </xsd:complexType>" +
" </xsd:element>" +
"</xsd:schema>");
XmlNSDescriptor NSDescriptor = new XmlNSDescriptorImpl((XmlFile)dtdFile);
XmlFile xmlFile = (XmlFile)createFile("file.xml",
"<foo:root xmlns:foo=\"http://foo\">" +
" <foo:a xmlns:a=\"http://bar\" />" +
"</foo:root>"
);
XmlElementDescriptor rootDescriptor = NSDescriptor.getElementDescriptor(xmlFile.getDocument().getRootTag());
assertNotNull(rootDescriptor);
XmlTag aTag = xmlFile.getDocument().getRootTag().findFirstSubTag("foo:a");
assertNotNull(aTag);
//XmlElementDescriptor aDescriptor = NSDescriptor.getElementDescriptor(aTag);
//assertNull(aDescriptor);
}
public void testAny3() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema targetNamespace=\"http://foo\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" >" +
" <xsd:element name=\"root\">" +
" <xsd:complexType>" +
" <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>" +
" </xsd:complexType>" +
" </xsd:element>" +
"</xsd:schema>"
);
XmlFile xmlFile = (XmlFile)createFile("file.xml",
"<root xmlns=\"http://foo\" y:a=\"1\">" +
"</root>"
);
final XmlTag rootTag = xmlFile.getDocument().getRootTag();
XmlElementDescriptor rootDescriptor = NSDescriptor.getElementDescriptor(rootTag);
assertNotNull(rootDescriptor);
XmlAttribute attribute = rootTag.getAttribute("y:a", XmlUtil.EMPTY_URI);
assertNotNull(attribute);
XmlAttributeDescriptor aDescriptor = rootDescriptor.getAttributeDescriptor("y:a", rootTag);
assertNotNull(aDescriptor);
}
public void testAny4() throws Exception {
XmlNSDescriptor NSDescriptor = createDescriptor(
"<xsd:schema targetNamespace=\"http://foo\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" >" +
" <xsd:element name=\"root\">" +
" <xsd:complexType>" +
" <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>" +
" </xsd:complexType>" +
" </xsd:element>" +
"</xsd:schema>"
);
XmlFile xmlFile = (XmlFile)createFile("file.xml",
"<root xmlns=\"http://foo\" a=\"1\">" +
"</root>"
);
final XmlTag rootTag = xmlFile.getDocument().getRootTag();
XmlElementDescriptor rootDescriptor = NSDescriptor.getElementDescriptor(rootTag);
assertNotNull(rootDescriptor);
XmlAttribute attribute = rootTag.getAttribute("a", XmlUtil.EMPTY_URI);
assertNotNull(attribute);
XmlAttributeDescriptor aDescriptor = rootDescriptor.getAttributeDescriptor("a", rootTag);
assertNull(aDescriptor);
attribute = rootTag.getAttribute("a", "http://foo");
assertNull(attribute);
attribute = rootTag.getAttribute("a", XmlUtil.ANT_URI);
assertNull(attribute);
}
private static XmlNSDescriptor createDescriptor(@NonNls String dtdText) {
PsiFile dtdFile = createFile("test.xml", dtdText);
return new XmlNSDescriptorImpl((XmlFile)dtdFile);
}
}