summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Ahumada <sergio.ahumada@digia.com>2013-10-08 10:14:22 +0200
committerSergio Ahumada <sergio.ahumada@digia.com>2013-10-08 10:14:38 +0200
commit9c1470888d8fa1dc3220ea411b8429bf8e9df688 (patch)
treeb99c8711ef3148c357c4b2b79f37cfd8e4181d64
parent4ff1e9aaad338778801f0e73290705d02192f579 (diff)
parent3c63cedb5d3defd831eb2d8bfdeb883121737ef3 (diff)
downloadqtxmlpatterns-9c1470888d8fa1dc3220ea411b8429bf8e9df688.tar.gz
Merge branch 'stable' into dev
Change-Id: Icbade3b8a1098b442dccb04c85c597e9c7adc423
-rw-r--r--src/xmlpatterns/schema/qxsdschemahelper.cpp2
-rw-r--r--tests/auto/xmlpatternsvalidator/files/substitution-group-invalid.xml3
-rw-r--r--tests/auto/xmlpatternsvalidator/files/substitution-group-valid.xml3
-rw-r--r--tests/auto/xmlpatternsvalidator/files/substitution-group.xsd15
-rw-r--r--tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp12
5 files changed, 34 insertions, 1 deletions
diff --git a/src/xmlpatterns/schema/qxsdschemahelper.cpp b/src/xmlpatterns/schema/qxsdschemahelper.cpp
index 8072d92..c5e0ee0 100644
--- a/src/xmlpatterns/schema/qxsdschemahelper.cpp
+++ b/src/xmlpatterns/schema/qxsdschemahelper.cpp
@@ -635,7 +635,7 @@ bool XsdSchemaHelper::substitutionGroupOkTransitive(const XsdElement::Ptr &head,
NamedSchemaComponent::BlockingConstraints checkSet(blockSet);
checkSet |= head->disallowedSubstitutions();
- if (head->type()->isComplexType()) {
+ if (head->type()->isComplexType() && head->type()->isDefinedBySchema()) {
const XsdComplexType::Ptr complexType(head->type());
checkSet |= complexType->prohibitedSubstitutions();
}
diff --git a/tests/auto/xmlpatternsvalidator/files/substitution-group-invalid.xml b/tests/auto/xmlpatternsvalidator/files/substitution-group-invalid.xml
new file mode 100644
index 0000000..a4ca0c6
--- /dev/null
+++ b/tests/auto/xmlpatternsvalidator/files/substitution-group-invalid.xml
@@ -0,0 +1,3 @@
+<outer>
+ <innerInvalid>foo</innerInvalid>
+</outer>
diff --git a/tests/auto/xmlpatternsvalidator/files/substitution-group-valid.xml b/tests/auto/xmlpatternsvalidator/files/substitution-group-valid.xml
new file mode 100644
index 0000000..54d81a0
--- /dev/null
+++ b/tests/auto/xmlpatternsvalidator/files/substitution-group-valid.xml
@@ -0,0 +1,3 @@
+<outer>
+ <innerValid>foo</innerValid>
+</outer>
diff --git a/tests/auto/xmlpatternsvalidator/files/substitution-group.xsd b/tests/auto/xmlpatternsvalidator/files/substitution-group.xsd
new file mode 100644
index 0000000..7143bb5
--- /dev/null
+++ b/tests/auto/xmlpatternsvalidator/files/substitution-group.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <xs:element name="outer">
+ <xs:complexType>
+ <xs:choice>
+ <xs:element ref="MySub"/>
+ <xs:element ref="MyBadSub"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="MySub" abstract="true"/>
+ <xs:element name="MyBadSub" type="xs:string" block="substitution"/>
+ <xs:element name="innerValid" substitutionGroup="MySub" type="xs:string"/>
+ <xs:element name="innerInvalid" substitutionGroup="MyBadSub" type="xs:string"/>
+</xs:schema>
diff --git a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp
index fb94e09..19a20ba 100644
--- a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp
+++ b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp
@@ -228,6 +228,18 @@ void tst_XmlPatternsValidator::xsdSupport_data() const
<< (QStringList() << path + QLatin1String("dateTime-with-microseconds.xml")
<< path + QLatin1String("dateTime-with-microseconds.xsd"))
<< QString();
+
+ QTest::newRow("A document with a valid substitution group")
+ << 0
+ << (QStringList() << path + QLatin1String("substitution-group-valid.xml")
+ << path + QLatin1String("substitution-group.xsd"))
+ << QString();
+
+ QTest::newRow("A document attempting to use a prohibited substitution")
+ << 1
+ << (QStringList() << path + QLatin1String("substitution-group-invalid.xml")
+ << path + QLatin1String("substitution-group.xsd"))
+ << QString();
}
QTEST_MAIN(tst_XmlPatternsValidator)