summaryrefslogtreecommitdiff
path: root/xsd-tests/schema
diff options
context:
space:
mode:
Diffstat (limited to 'xsd-tests/schema')
-rw-r--r--xsd-tests/schema/anonymous/buildfile22
-rw-r--r--xsd-tests/schema/anonymous/driver.cxx9
-rw-r--r--xsd-tests/schema/anonymous/test.xsd143
-rw-r--r--xsd-tests/schema/any-attribute/buildfile12
-rw-r--r--xsd-tests/schema/any-attribute/test.xsd22
-rw-r--r--xsd-tests/schema/any-attribute/testscript8
-rw-r--r--xsd-tests/schema/any-type/buildfile24
-rw-r--r--xsd-tests/schema/any-type/driver.cxx9
-rw-r--r--xsd-tests/schema/any-type/test.xsd22
-rw-r--r--xsd-tests/schema/any/.gitignore5
-rw-r--r--xsd-tests/schema/any/buildfile47
-rw-r--r--xsd-tests/schema/any/driver.cxx.in9
-rw-r--r--xsd-tests/schema/any/fail.xsd19
-rw-r--r--xsd-tests/schema/any/test.xsd19
-rw-r--r--xsd-tests/schema/attribute-group/.gitignore1
-rw-r--r--xsd-tests/schema/attribute-group/buildfile22
-rw-r--r--xsd-tests/schema/attribute-group/driver.cxx9
-rw-r--r--xsd-tests/schema/attribute-group/global.xsd50
-rw-r--r--xsd-tests/schema/attribute/.gitignore3
-rw-r--r--xsd-tests/schema/attribute/buildfile27
-rw-r--r--xsd-tests/schema/attribute/driver.cxx11
-rw-r--r--xsd-tests/schema/attribute/global.xsd21
-rw-r--r--xsd-tests/schema/attribute/local.xsd37
-rw-r--r--xsd-tests/schema/attribute/ref.xsd42
-rw-r--r--xsd-tests/schema/cardinality/buildfile22
-rw-r--r--xsd-tests/schema/cardinality/driver.cxx9
-rw-r--r--xsd-tests/schema/cardinality/test.xsd46
-rw-r--r--xsd-tests/schema/chameleon/.gitignore1
-rw-r--r--xsd-tests/schema/chameleon/buildfile27
-rw-r--r--xsd-tests/schema/chameleon/driver.cxx10
-rw-r--r--xsd-tests/schema/chameleon/includer.xsd17
-rw-r--r--xsd-tests/schema/chameleon/schemas/.gitignore1
-rw-r--r--xsd-tests/schema/chameleon/schemas/includee.xsd12
-rw-r--r--xsd-tests/schema/enumeration/buildfile22
-rw-r--r--xsd-tests/schema/enumeration/driver.cxx9
-rw-r--r--xsd-tests/schema/enumeration/test.xsd89
-rw-r--r--xsd-tests/schema/forward/buildfile22
-rw-r--r--xsd-tests/schema/forward/driver.cxx9
-rw-r--r--xsd-tests/schema/forward/test.xsd32
-rw-r--r--xsd-tests/schema/group/.gitignore1
-rw-r--r--xsd-tests/schema/group/buildfile27
-rw-r--r--xsd-tests/schema/group/driver.cxx10
-rw-r--r--xsd-tests/schema/group/global.xsd39
-rw-r--r--xsd-tests/schema/group/test.xsd148
-rw-r--r--xsd-tests/schema/import/.gitignore1
-rw-r--r--xsd-tests/schema/import/buildfile27
-rw-r--r--xsd-tests/schema/import/driver.cxx9
-rw-r--r--xsd-tests/schema/import/importer.xsd20
-rw-r--r--xsd-tests/schema/import/schemas/.gitignore1
-rw-r--r--xsd-tests/schema/import/schemas/importee.xsd15
-rw-r--r--xsd-tests/schema/include/.gitignore1
-rw-r--r--xsd-tests/schema/include/buildfile27
-rw-r--r--xsd-tests/schema/include/driver.cxx9
-rw-r--r--xsd-tests/schema/include/includer.xsd17
-rw-r--r--xsd-tests/schema/include/schemas/.gitignore1
-rw-r--r--xsd-tests/schema/include/schemas/includee.xsd14
-rw-r--r--xsd-tests/schema/inheritance/.gitignore1
-rw-r--r--xsd-tests/schema/inheritance/buildfile30
-rw-r--r--xsd-tests/schema/inheritance/cycle.xsd34
-rw-r--r--xsd-tests/schema/inheritance/sourced-forward/.gitignore1
-rw-r--r--xsd-tests/schema/inheritance/sourced-forward/includee.xsd10
-rw-r--r--xsd-tests/schema/inheritance/sourced-forward/includer.xsd14
-rw-r--r--xsd-tests/schema/inheritance/testscript8
-rw-r--r--xsd-tests/schema/list/anonymous/test.xsd16
-rw-r--r--xsd-tests/schema/list/any-simple-type/test.xsd12
-rw-r--r--xsd-tests/schema/list/buildfile31
-rw-r--r--xsd-tests/schema/list/test.xsd72
-rw-r--r--xsd-tests/schema/list/testscript8
-rw-r--r--xsd-tests/schema/no-namespace/buildfile22
-rw-r--r--xsd-tests/schema/no-namespace/driver.cxx9
-rw-r--r--xsd-tests/schema/no-namespace/test.xsd15
-rw-r--r--xsd-tests/schema/recursive/buildfile22
-rw-r--r--xsd-tests/schema/recursive/driver.cxx9
-rw-r--r--xsd-tests/schema/recursive/test.xsd43
-rw-r--r--xsd-tests/schema/ref-type/invalid/buildfile12
-rw-r--r--xsd-tests/schema/ref-type/invalid/invalid-0.xsd17
-rw-r--r--xsd-tests/schema/ref-type/invalid/invalid-1.xsd11
-rw-r--r--xsd-tests/schema/ref-type/invalid/testscript16
-rw-r--r--xsd-tests/schema/ref-type/valid/.gitignore6
-rw-r--r--xsd-tests/schema/ref-type/valid/buildfile35
-rw-r--r--xsd-tests/schema/ref-type/valid/driver.cxx.in9
-rw-r--r--xsd-tests/schema/ref-type/valid/idref.xsd42
-rw-r--r--xsd-tests/schema/ref-type/valid/idrefs.xsd43
-rw-r--r--xsd-tests/schema/restriction/buildfile22
-rw-r--r--xsd-tests/schema/restriction/driver.cxx9
-rw-r--r--xsd-tests/schema/restriction/test.xsd67
-rw-r--r--xsd-tests/schema/union/buildfile22
-rw-r--r--xsd-tests/schema/union/driver.cxx9
-rw-r--r--xsd-tests/schema/union/test.xsd65
89 files changed, 2030 insertions, 0 deletions
diff --git a/xsd-tests/schema/anonymous/buildfile b/xsd-tests/schema/anonymous/buildfile
new file mode 100644
index 0000000..cc01697
--- /dev/null
+++ b/xsd-tests/schema/anonymous/buildfile
@@ -0,0 +1,22 @@
+# file : schema/anonymous/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/anonymous/driver.cxx b/xsd-tests/schema/anonymous/driver.cxx
new file mode 100644
index 0000000..f902fdb
--- /dev/null
+++ b/xsd-tests/schema/anonymous/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/anonymous/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/anonymous/test.xsd b/xsd-tests/schema/anonymous/test.xsd
new file mode 100644
index 0000000..cba3300
--- /dev/null
+++ b/xsd-tests/schema/anonymous/test.xsd
@@ -0,0 +1,143 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- Test 'type' name escaping. -->
+ <xsd:element name="type">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+
+ <!-- Anonymous type via global element. -->
+ <xsd:element name="global_element">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+
+ <!-- Anonymous type via global attribute. -->
+ <xsd:attribute name="global_attribute">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+ </xsd:attribute>
+
+
+
+ <!-- Anonymous type via local element. -->
+ <xsd:complexType name="local_element_type">
+ <xsd:sequence>
+ <xsd:element name="local_element">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+
+ <!-- Anonymous type via local attribute. -->
+ <xsd:complexType name="local_attribute_type">
+ <xsd:attribute name="local_attribute">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:complexType>
+
+<!--
+
+ Various weird anonymous type combinations (some of them are fruits of a
+ really sick imagination).
+
+-->
+
+ <xsd:element name="tasks">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="test:periodicTask"/>
+ <xsd:element ref="test:braindamageTask"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="periodicTask">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="test:tasks"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="braindamageTask">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="test:tasks"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:complexType name="PropertySeq">
+ <xsd:sequence>
+ <xsd:element name="propery">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="value">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="typecode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:NCName">
+ <xsd:enumeration value="string"/>
+ <xsd:enumeration value="integer"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="content" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:element name="periods">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="period" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+ <xsd:element name="typecode">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:NCName">
+ <xsd:enumeration value="string"/>
+ <xsd:enumeration value="integer"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+</xsd:schema>
diff --git a/xsd-tests/schema/any-attribute/buildfile b/xsd-tests/schema/any-attribute/buildfile
new file mode 100644
index 0000000..e4275a4
--- /dev/null
+++ b/xsd-tests/schema/any-attribute/buildfile
@@ -0,0 +1,12 @@
+# file : schema/any-attribute/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Test that the invalid schema files compilation expectedly fails.
+#
+./: testscript xsd{*} $xsd
+
+testscript{*}:
+{
+ test = $xsd
+ test.arguments = cxx-tree --std c++11
+}
diff --git a/xsd-tests/schema/any-attribute/test.xsd b/xsd-tests/schema/any-attribute/test.xsd
new file mode 100644
index 0000000..55419c4
--- /dev/null
+++ b/xsd-tests/schema/any-attribute/test.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+
+ <xsd:complexType name="type">
+ <xsd:attribute name="a" type="xsd:string"/>
+ <xsd:anyAttribute namespace="##other" processContents="skip"/>
+ <xsd:attributeGroup ref="test:agroup"/>
+ </xsd:complexType>
+
+ <xsd:attributeGroup name="agroup">
+ <xsd:attribute name="b" type="xsd:string"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:attributeGroup>
+
+ <xsd:element name="root" type="test:type"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/any-attribute/testscript b/xsd-tests/schema/any-attribute/testscript
new file mode 100644
index 0000000..d9da7c1
--- /dev/null
+++ b/xsd-tests/schema/any-attribute/testscript
@@ -0,0 +1,8 @@
+# file : schema/any-attribute/testscript
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+: decl-after-any-attribute
+:
+$* --output-dir $~ $src_base/test.xsd 2>>/"EOE" != 0
+ $src_base/test.xsd:12:44: error: anyAttribute must not be followed by other declarations
+ EOE
diff --git a/xsd-tests/schema/any-type/buildfile b/xsd-tests/schema/any-type/buildfile
new file mode 100644
index 0000000..e575562
--- /dev/null
+++ b/xsd-tests/schema/any-type/buildfile
@@ -0,0 +1,24 @@
+# file : schema/any-type/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0]) 2>>?~%EOE%
+ %.+(warning F00\d|info):.+%.+
+ EOE
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/any-type/driver.cxx b/xsd-tests/schema/any-type/driver.cxx
new file mode 100644
index 0000000..a94f099
--- /dev/null
+++ b/xsd-tests/schema/any-type/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/any-type/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/any-type/test.xsd b/xsd-tests/schema/any-type/test.xsd
new file mode 100644
index 0000000..9e3ff79
--- /dev/null
+++ b/xsd-tests/schema/any-type/test.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:complexType name="person">
+ <xsd:sequence>
+ <xsd:element name="name"/> <!-- type="anyType" -->
+ <xsd:element name="name2" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="name3" type="xsd:anyType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="id"/> <!-- type="anySimpleType" -->
+ <xsd:attribute name="id2" type="xsd:anySimpleType" use="required"/>
+ </xsd:complexType>
+
+ <xsd:element name="person" type="test:person"/>
+
+ <xsd:element name="name"/> <!-- type="anyType" -->
+
+</xsd:schema>
diff --git a/xsd-tests/schema/any/.gitignore b/xsd-tests/schema/any/.gitignore
new file mode 100644
index 0000000..fca6147
--- /dev/null
+++ b/xsd-tests/schema/any/.gitignore
@@ -0,0 +1,5 @@
+driver-test
+driver-fail
+driver-test.?xx
+driver-fail.?xx
+fail.?xx
diff --git a/xsd-tests/schema/any/buildfile b/xsd-tests/schema/any/buildfile
new file mode 100644
index 0000000..6b76348
--- /dev/null
+++ b/xsd-tests/schema/any/buildfile
@@ -0,0 +1,47 @@
+# file : schema/any/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+for sc: test fail
+{
+ dr = "driver-$sc"
+
+ ./: exe{$dr}: cxx{$dr} {hxx cxx}{$sc} $libs
+
+ cxx{$dr}: in{driver}
+ {
+ # Note: we can't use $sc$ in driver.cxx.in since it will be substituted by
+ # the latest $sc value.
+ #
+ sch = $sc
+ }
+}
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+<{hxx cxx}{fail}>: xsd{fail} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0]) 2>>?~%EOE%
+ %.+(warning T001:|info:).+%{9}
+ EOE
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/any/driver.cxx.in b/xsd-tests/schema/any/driver.cxx.in
new file mode 100644
index 0000000..9c36761
--- /dev/null
+++ b/xsd-tests/schema/any/driver.cxx.in
@@ -0,0 +1,9 @@
+// file : schema/any/driver.cxx.in
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "$sch$.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/any/fail.xsd b/xsd-tests/schema/any/fail.xsd
new file mode 100644
index 0000000..2eb9513
--- /dev/null
+++ b/xsd-tests/schema/any/fail.xsd
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:element name="foo" type="xsd:string"/>
+
+ <xsd:complexType name="person">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element ref="test:foo"/>
+ <xsd:any namespace="##any" processContents="strict"/>
+ <xsd:any namespace="http://www.codesynthesis.com/xmlns/test" processContents="strict"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/any/test.xsd b/xsd-tests/schema/any/test.xsd
new file mode 100644
index 0000000..ff896fd
--- /dev/null
+++ b/xsd-tests/schema/any/test.xsd
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:complexType name="person">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:any namespace="##other" processContents="strict" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID"/>
+ <xsd:anyAttribute namespace="##other" processContents="strict"/>
+ </xsd:complexType>
+
+ <xsd:element name="person" type="test:person"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/attribute-group/.gitignore b/xsd-tests/schema/attribute-group/.gitignore
new file mode 100644
index 0000000..a935c30
--- /dev/null
+++ b/xsd-tests/schema/attribute-group/.gitignore
@@ -0,0 +1 @@
+global.?xx
diff --git a/xsd-tests/schema/attribute-group/buildfile b/xsd-tests/schema/attribute-group/buildfile
new file mode 100644
index 0000000..b9ca83b
--- /dev/null
+++ b/xsd-tests/schema/attribute-group/buildfile
@@ -0,0 +1,22 @@
+# file : schema/attribute-group/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -global} {hxx cxx}{global} $libs
+
+<{hxx cxx}{global}>: xsd{global} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/attribute-group/driver.cxx b/xsd-tests/schema/attribute-group/driver.cxx
new file mode 100644
index 0000000..328cef4
--- /dev/null
+++ b/xsd-tests/schema/attribute-group/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/attribute-group/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "global.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/attribute-group/global.xsd b/xsd-tests/schema/attribute-group/global.xsd
new file mode 100644
index 0000000..6ee0539
--- /dev/null
+++ b/xsd-tests/schema/attribute-group/global.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- Simple case. -->
+
+ <xsd:attributeGroup name="gfoo_1">
+ <xsd:attribute name="foo_1_1" type="xsd:string"/>
+ <xsd:attribute name="foo_1_2" type="xsd:string"/>
+ </xsd:attributeGroup>
+
+ <xsd:attributeGroup name="gfoo_2">
+ <xsd:attributeGroup ref="gfoo_1"/>
+ <xsd:attribute name="foo_2_1" type="xsd:string"/>
+ <xsd:attribute name="foo_2_2" type="xsd:string"/>
+ </xsd:attributeGroup>
+
+ <xsd:complexType name="Foo">
+ <xsd:attributeGroup ref="gfoo_2"/>
+ </xsd:complexType>
+
+
+
+ <!-- Forward reference. -->
+
+ <xsd:attributeGroup name="gbar_3">
+ <xsd:attribute name="bar_3_1" type="xsd:string"/>
+ <xsd:attribute name="bar_3_2" type="xsd:string"/>
+ <xsd:attributeGroup ref="gbar_1"/>
+ </xsd:attributeGroup>
+
+ <xsd:complexType name="Bar">
+ <xsd:attributeGroup ref="gbar_2"/>
+ </xsd:complexType>
+
+ <xsd:attributeGroup name="gbar_2">
+ <xsd:attributeGroup ref="gbar_3"/>
+ <xsd:attribute name="bar_2_1" type="xsd:string"/>
+ <xsd:attribute name="bar_2_2" type="xsd:string"/>
+ </xsd:attributeGroup>
+
+ <xsd:attributeGroup name="gbar_1">
+ <xsd:attribute name="bar_1_1" type="xsd:string"/>
+ <xsd:attribute name="bar_1_2" type="xsd:string"/>
+ </xsd:attributeGroup>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/attribute/.gitignore b/xsd-tests/schema/attribute/.gitignore
new file mode 100644
index 0000000..88cd012
--- /dev/null
+++ b/xsd-tests/schema/attribute/.gitignore
@@ -0,0 +1,3 @@
+global.?xx
+local.?xx
+ref.?xx
diff --git a/xsd-tests/schema/attribute/buildfile b/xsd-tests/schema/attribute/buildfile
new file mode 100644
index 0000000..00e5410
--- /dev/null
+++ b/xsd-tests/schema/attribute/buildfile
@@ -0,0 +1,27 @@
+# file : schema/attribute/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+fs = global local ref
+
+exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs
+
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+ }}
+}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/attribute/driver.cxx b/xsd-tests/schema/attribute/driver.cxx
new file mode 100644
index 0000000..3d29b36
--- /dev/null
+++ b/xsd-tests/schema/attribute/driver.cxx
@@ -0,0 +1,11 @@
+// file : schema/attribute/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "ref.hxx"
+#include "global.hxx"
+#include "local.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/attribute/global.xsd b/xsd-tests/schema/attribute/global.xsd
new file mode 100644
index 0000000..e2dcc93
--- /dev/null
+++ b/xsd-tests/schema/attribute/global.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- Typed with named type. -->
+
+ <xsd:attribute name="foo" type="xsd:string"/>
+
+
+ <!-- Typed with anonymous type. -->
+
+ <xsd:attribute name="bar">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+ </xsd:attribute>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/attribute/local.xsd b/xsd-tests/schema/attribute/local.xsd
new file mode 100644
index 0000000..7a7a480
--- /dev/null
+++ b/xsd-tests/schema/attribute/local.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+
+ <!-- Typed with named type. -->
+
+ <xsd:complexType name="Foo">
+ <xsd:attribute name="foo" type="xsd:string"/>
+ </xsd:complexType>
+
+
+ <!-- Forward reference to a yet undeclared type. -->
+
+ <xsd:complexType name="Bar">
+ <xsd:attribute name="bar" type="Bar2"/>
+ </xsd:complexType>
+
+ <xsd:simpleType name="Bar2">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+
+ <!-- Typed with anonymous type. -->
+
+ <xsd:complexType name="Baz">
+ <xsd:attribute name="baz">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/attribute/ref.xsd b/xsd-tests/schema/attribute/ref.xsd
new file mode 100644
index 0000000..d806ff3
--- /dev/null
+++ b/xsd-tests/schema/attribute/ref.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+
+ <!-- Easy case. -->
+
+ <xsd:attribute name="foo" type="xsd:string"/>
+
+ <xsd:complexType name="Foo2">
+ <xsd:attribute ref="foo"/>
+ </xsd:complexType>
+
+
+
+ <!-- Forward reference to a yet undeclared attribute. -->
+
+ <xsd:complexType name="Bar3">
+ <xsd:attribute ref="bar"/>
+ </xsd:complexType>
+
+ <xsd:attribute name="bar" type="xsd:string"/>
+
+
+
+ <!-- Reference to an attribute with a forward reference to a yet
+ undeclared type. -->
+
+ <xsd:attribute name="baz" type="Baz2"/>
+
+ <xsd:complexType name="Baz3">
+ <xsd:attribute ref="baz"/>
+ </xsd:complexType>
+
+ <xsd:simpleType name="Baz2">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/cardinality/buildfile b/xsd-tests/schema/cardinality/buildfile
new file mode 100644
index 0000000..cfbb732
--- /dev/null
+++ b/xsd-tests/schema/cardinality/buildfile
@@ -0,0 +1,22 @@
+# file : schema/cardinality/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/cardinality/driver.cxx b/xsd-tests/schema/cardinality/driver.cxx
new file mode 100644
index 0000000..d8b218e
--- /dev/null
+++ b/xsd-tests/schema/cardinality/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/cardinality/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/cardinality/test.xsd b/xsd-tests/schema/cardinality/test.xsd
new file mode 100644
index 0000000..b27f923
--- /dev/null
+++ b/xsd-tests/schema/cardinality/test.xsd
@@ -0,0 +1,46 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!--
+ This test tries to cover various cardinality cases with
+ built-in and user-defined types.
+ -->
+
+ <xsd:complexType name="Foo">
+ <xsd:sequence>
+ <xsd:element name="foo" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="Bar">
+ <xsd:sequence>
+
+ <xsd:element name="one-int" type="xsd:int"/>
+ <xsd:element name="opt-int" type="xsd:int" minOccurs="0"/>
+ <xsd:element name="seq-int" type="xsd:int" maxOccurs="unbounded"/>
+
+ <xsd:element name="one-string" type="xsd:string"/>
+ <xsd:element name="opt-string" type="xsd:string" minOccurs="0"/>
+ <xsd:element name="seq-string" type="xsd:string" maxOccurs="unbounded"/>
+
+ <xsd:element name="one-foo" type="test:Foo"/>
+ <xsd:element name="opt-foo" type="test:Foo" minOccurs="0"/>
+ <xsd:element name="seq-foo" type="test:Foo" maxOccurs="unbounded"/>
+
+ </xsd:sequence>
+
+ <xsd:attribute name="one-int-a" type="xsd:int" use="required"/>
+ <xsd:attribute name="opt-int-a" type="xsd:int"/>
+
+ <xsd:attribute name="one-string-a" type="xsd:string" use="required"/>
+ <xsd:attribute name="opt-string-a" type="xsd:string"/>
+
+ </xsd:complexType>
+
+ <xsd:element name="bar" type="test:Bar"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/chameleon/.gitignore b/xsd-tests/schema/chameleon/.gitignore
new file mode 100644
index 0000000..4ec7484
--- /dev/null
+++ b/xsd-tests/schema/chameleon/.gitignore
@@ -0,0 +1 @@
+includer.?xx
diff --git a/xsd-tests/schema/chameleon/buildfile b/xsd-tests/schema/chameleon/buildfile
new file mode 100644
index 0000000..0143422
--- /dev/null
+++ b/xsd-tests/schema/chameleon/buildfile
@@ -0,0 +1,27 @@
+# file : schema/chameleon/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+fs = includer schemas/includee
+
+exe{driver}: {hxx cxx}{** -{$fs}} {hxx cxx}{$fs} $libs
+
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $directory($path($>[0])) \
+ $path($<[0])
+ }}
+}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/chameleon/driver.cxx b/xsd-tests/schema/chameleon/driver.cxx
new file mode 100644
index 0000000..7b408ef
--- /dev/null
+++ b/xsd-tests/schema/chameleon/driver.cxx
@@ -0,0 +1,10 @@
+// file : schema/chameleon/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "includer.hxx"
+#include "schemas/includee.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/chameleon/includer.xsd b/xsd-tests/schema/chameleon/includer.xsd
new file mode 100644
index 0000000..c93ea18
--- /dev/null
+++ b/xsd-tests/schema/chameleon/includer.xsd
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:Test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:include schemaLocation="schemas/includee.xsd"/>
+
+ <xsd:simpleType name="derived">
+ <xsd:restriction base="Test:base"/>
+ </xsd:simpleType>
+
+ <xsd:element name="element" type="Test:base"/>
+ <xsd:attribute name="attribute" type="Test:base"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/chameleon/schemas/.gitignore b/xsd-tests/schema/chameleon/schemas/.gitignore
new file mode 100644
index 0000000..dcf4bb9
--- /dev/null
+++ b/xsd-tests/schema/chameleon/schemas/.gitignore
@@ -0,0 +1 @@
+includee.?xx
diff --git a/xsd-tests/schema/chameleon/schemas/includee.xsd b/xsd-tests/schema/chameleon/schemas/includee.xsd
new file mode 100644
index 0000000..d89b9c4
--- /dev/null
+++ b/xsd-tests/schema/chameleon/schemas/includee.xsd
@@ -0,0 +1,12 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd">
+
+ <xsd:simpleType name="base">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+ <xsd:element name="base_e" type="base"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/enumeration/buildfile b/xsd-tests/schema/enumeration/buildfile
new file mode 100644
index 0000000..efb6b9e
--- /dev/null
+++ b/xsd-tests/schema/enumeration/buildfile
@@ -0,0 +1,22 @@
+# file : schema/enumeration/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/enumeration/driver.cxx b/xsd-tests/schema/enumeration/driver.cxx
new file mode 100644
index 0000000..406c8ab
--- /dev/null
+++ b/xsd-tests/schema/enumeration/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/enumeration/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/enumeration/test.xsd b/xsd-tests/schema/enumeration/test.xsd
new file mode 100644
index 0000000..b8253d9
--- /dev/null
+++ b/xsd-tests/schema/enumeration/test.xsd
@@ -0,0 +1,89 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- string-based -->
+
+ <xsd:simpleType name="StringEnum">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="one"/>
+ <xsd:enumeration value="two"/>
+ <xsd:enumeration value="three"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="StringSimple">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+ <!-- inheritance of a enum from a simple type -->
+ <xsd:simpleType name="StringSimpleRestriction">
+ <xsd:restriction base="test:StringSimple">
+ <xsd:enumeration value="one"/>
+ <xsd:enumeration value="two"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <!-- inheritance of a enum from a strig-based enum -->
+ <xsd:simpleType name="StringEnumRestriction">
+ <xsd:restriction base="test:StringEnum">
+ <xsd:enumeration value="one"/>
+ <xsd:enumeration value="two"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <!-- inheritance of a complex type from a string-based enum -->
+ <xsd:complexType name="StringComplex">
+ <xsd:simpleContent>
+ <xsd:extension base="test:StringEnumRestriction">
+ <xsd:attribute name="lang" type="xsd:language"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+
+
+ <!-- non string-based -->
+
+ <xsd:simpleType name="IntEnum">
+ <xsd:restriction base="xsd:int">
+ <xsd:enumeration value="1"/>
+ <xsd:enumeration value="2"/>
+ <xsd:enumeration value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="IntSimple">
+ <xsd:restriction base="xsd:int"/>
+ </xsd:simpleType>
+
+ <!-- inheritance of a enum from a simple type -->
+ <xsd:simpleType name="IntSimpleRestriction">
+ <xsd:restriction base="test:IntSimple">
+ <xsd:enumeration value="1"/>
+ <xsd:enumeration value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <!-- inheritance of a enum from a enum -->
+ <xsd:simpleType name="IntEnumRestriction">
+ <xsd:restriction base="test:IntEnum">
+ <xsd:enumeration value="1"/>
+ <xsd:enumeration value="2"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <!-- inheritance of a complex type from a enum -->
+ <xsd:complexType name="IntComplex">
+ <xsd:simpleContent>
+ <xsd:extension base="test:IntEnumRestriction">
+ <xsd:attribute name="lang" type="xsd:language"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+
+</xsd:schema>
diff --git a/xsd-tests/schema/forward/buildfile b/xsd-tests/schema/forward/buildfile
new file mode 100644
index 0000000..969f99f
--- /dev/null
+++ b/xsd-tests/schema/forward/buildfile
@@ -0,0 +1,22 @@
+# file : schema/forward/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/forward/driver.cxx b/xsd-tests/schema/forward/driver.cxx
new file mode 100644
index 0000000..ee6519e
--- /dev/null
+++ b/xsd-tests/schema/forward/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/forward/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/forward/test.xsd b/xsd-tests/schema/forward/test.xsd
new file mode 100644
index 0000000..c7cc24e
--- /dev/null
+++ b/xsd-tests/schema/forward/test.xsd
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+<!--
+
+ Various weird forward reference combinations.
+
+-->
+
+ <!-- case 1 -->
+
+ <xsd:complexType name="Type1A">
+ <xsd:complexContent>
+ <xsd:extension base="test:Type1B">
+ <xsd:sequence>
+ <xsd:element name="bar" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="Type1B">
+ <xsd:sequence>
+ <xsd:element name="foo" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/group/.gitignore b/xsd-tests/schema/group/.gitignore
new file mode 100644
index 0000000..a935c30
--- /dev/null
+++ b/xsd-tests/schema/group/.gitignore
@@ -0,0 +1 @@
+global.?xx
diff --git a/xsd-tests/schema/group/buildfile b/xsd-tests/schema/group/buildfile
new file mode 100644
index 0000000..dd926dd
--- /dev/null
+++ b/xsd-tests/schema/group/buildfile
@@ -0,0 +1,27 @@
+# file : schema/group/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+fs = test global
+
+exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs
+
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+ }}
+}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/group/driver.cxx b/xsd-tests/schema/group/driver.cxx
new file mode 100644
index 0000000..e754194
--- /dev/null
+++ b/xsd-tests/schema/group/driver.cxx
@@ -0,0 +1,10 @@
+// file : schema/group/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+#include "global.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/group/global.xsd b/xsd-tests/schema/group/global.xsd
new file mode 100644
index 0000000..27ccadf
--- /dev/null
+++ b/xsd-tests/schema/group/global.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- Simple case. -->
+
+ <xsd:group name="gfoo">
+ <xsd:sequence>
+ <xsd:element name="foo_1" type="xsd:string"/>
+ <xsd:element name="foo_2" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:group>
+
+
+ <xsd:complexType name="Foo">
+ <xsd:group ref="gfoo"/>
+ </xsd:complexType>
+
+
+
+ <!-- Forward reference. -->
+
+ <xsd:complexType name="Bar">
+ <xsd:group ref="gbar"/>
+ </xsd:complexType>
+
+ <xsd:group name="gbar">
+ <xsd:choice>
+ <xsd:element name="bar_1" type="xsd:string"/>
+ <xsd:element ref="bar_2"/>
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:element name="bar_2" type="xsd:string"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/group/test.xsd b/xsd-tests/schema/group/test.xsd
new file mode 100644
index 0000000..7527cbb
--- /dev/null
+++ b/xsd-tests/schema/group/test.xsd
@@ -0,0 +1,148 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!--
+
+ Various weird group combinations.
+
+ -->
+
+ <!-- case 1 -->
+
+ <xsd:group name="g1">
+ <xsd:sequence>
+ <xsd:element name="e1" type="xsd:string"/>
+ <xsd:element name="e2" type="xsd:long"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:complexType name="Type1">
+ <xsd:sequence>
+ <xsd:group ref="test:g1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <!-- case 2 -->
+
+ <xsd:group name="g2">
+ <xsd:sequence>
+ <xsd:element ref="test:g2e1"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:complexType name="TypeTwo">
+ <xsd:sequence>
+ <xsd:group ref="test:g2"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="g2e1" type="xsd:string"/>
+
+ <!-- case 3 -->
+
+ <xsd:complexType name="Type3">
+ <xsd:sequence>
+ <xsd:group ref="test:g3"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:group name="g3">
+ <xsd:sequence>
+ <xsd:element ref="test:g3e1"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:element name="g3e1" type="xsd:string"/>
+
+ <!-- case 4 -->
+
+ <xsd:complexType name="Type4A">
+ <xsd:sequence>
+ <xsd:group ref="test:g4" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="Type4B">
+ <xsd:sequence minOccurs="0">
+ <xsd:group ref="test:g4"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:group name="g4">
+ <xsd:sequence>
+ <xsd:element name="e1" type="xsd:string"/>
+ <xsd:element name="e2" type="xsd:long" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:group>
+
+ <xsd:complexType name="Type4C">
+ <xsd:sequence>
+ <xsd:group ref="test:g4" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <!-- case 5 -->
+
+ <xsd:group name="g5-1">
+ <xsd:choice>
+ <xsd:group ref="test:g5-2"/>
+ <xsd:element name="e1" type="xsd:string"/>
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:group name="g5-2">
+ <xsd:choice>
+ <xsd:group ref="test:g5-3"/>
+ <xsd:element name="e2" type="xsd:string"/>
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:group name="g5-3">
+ <xsd:choice>
+ <xsd:element name="e3" type="xsd:long"/>
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:complexType name="Type5">
+ <xsd:choice>
+ <xsd:group ref="test:g5-1"/>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <!-- case 6 -->
+
+ <xsd:group name="g6-3">
+ <xsd:choice>
+ <xsd:group ref="test:g6-1"/>
+ <xsd:element name="e_3_1" type="xsd:string"/>
+ <xsd:element name="e_3_2" type="xsd:string"/>
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:complexType name="Type6">
+ <xsd:choice>
+ <xsd:group ref="test:g6-2"/>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:group name="g6-2">
+ <xsd:choice>
+ <xsd:group ref="test:g6-3"/>
+ <xsd:element name="e_2_1" type="xsd:string"/>
+ <xsd:element name="e_2_2" type="xsd:string"/>
+ </xsd:choice>
+ </xsd:group>
+
+ <xsd:group name="g6-1">
+ <xsd:choice>
+ <xsd:element name="e_1_1" type="xsd:string"/>
+ <xsd:element name="e_1_2" type="xsd:string"/>
+ </xsd:choice>
+ </xsd:group>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/import/.gitignore b/xsd-tests/schema/import/.gitignore
new file mode 100644
index 0000000..6cdf6db
--- /dev/null
+++ b/xsd-tests/schema/import/.gitignore
@@ -0,0 +1 @@
+importer.?xx
diff --git a/xsd-tests/schema/import/buildfile b/xsd-tests/schema/import/buildfile
new file mode 100644
index 0000000..9e6aec5
--- /dev/null
+++ b/xsd-tests/schema/import/buildfile
@@ -0,0 +1,27 @@
+# file : schema/import/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+fs = importer schemas/importee
+
+exe{driver}: {hxx cxx}{** -{$fs}} {hxx cxx}{$fs} $libs
+
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $directory($path($>[0])) \
+ $path($<[0])
+ }}
+}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/import/driver.cxx b/xsd-tests/schema/import/driver.cxx
new file mode 100644
index 0000000..a94b2f3
--- /dev/null
+++ b/xsd-tests/schema/import/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/import/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "importer.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/import/importer.xsd b/xsd-tests/schema/import/importer.xsd
new file mode 100644
index 0000000..82fc33c
--- /dev/null
+++ b/xsd-tests/schema/import/importer.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:Test="http://www.codesynthesis.com/xmlns/test"
+ xmlns:Impl="http://www.codesynthesis.com/xmlns/test/impl"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test/impl">
+
+ <!-- <xsd::element name="foo" type="xsd:string"/> -->
+
+ <xsd:import namespace="http://www.codesynthesis.com/xmlns/test" schemaLocation="schemas/importee.xsd"/>
+
+ <xsd:simpleType name="derived">
+ <xsd:restriction base="Test:base"/>
+ </xsd:simpleType>
+
+ <xsd:element name="element" type="Test:base"/>
+ <xsd:attribute name="attribute" type="Test:base"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/import/schemas/.gitignore b/xsd-tests/schema/import/schemas/.gitignore
new file mode 100644
index 0000000..945fcfc
--- /dev/null
+++ b/xsd-tests/schema/import/schemas/.gitignore
@@ -0,0 +1 @@
+importee.?xx
diff --git a/xsd-tests/schema/import/schemas/importee.xsd b/xsd-tests/schema/import/schemas/importee.xsd
new file mode 100644
index 0000000..9b03315
--- /dev/null
+++ b/xsd-tests/schema/import/schemas/importee.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+
+ <xsd:simpleType name="base">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+ <xsd:element name="base_e" type="test:base"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/include/.gitignore b/xsd-tests/schema/include/.gitignore
new file mode 100644
index 0000000..4ec7484
--- /dev/null
+++ b/xsd-tests/schema/include/.gitignore
@@ -0,0 +1 @@
+includer.?xx
diff --git a/xsd-tests/schema/include/buildfile b/xsd-tests/schema/include/buildfile
new file mode 100644
index 0000000..904e819
--- /dev/null
+++ b/xsd-tests/schema/include/buildfile
@@ -0,0 +1,27 @@
+# file : schema/include/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+fs = includer schemas/includee
+
+exe{driver}: {hxx cxx}{** -{$fs}} {hxx cxx}{$fs} $libs
+
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $directory($path($>[0])) \
+ $path($<[0])
+ }}
+}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/include/driver.cxx b/xsd-tests/schema/include/driver.cxx
new file mode 100644
index 0000000..779d9d6
--- /dev/null
+++ b/xsd-tests/schema/include/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/include/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "includer.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/include/includer.xsd b/xsd-tests/schema/include/includer.xsd
new file mode 100644
index 0000000..c93ea18
--- /dev/null
+++ b/xsd-tests/schema/include/includer.xsd
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:Test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:include schemaLocation="schemas/includee.xsd"/>
+
+ <xsd:simpleType name="derived">
+ <xsd:restriction base="Test:base"/>
+ </xsd:simpleType>
+
+ <xsd:element name="element" type="Test:base"/>
+ <xsd:attribute name="attribute" type="Test:base"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/include/schemas/.gitignore b/xsd-tests/schema/include/schemas/.gitignore
new file mode 100644
index 0000000..dcf4bb9
--- /dev/null
+++ b/xsd-tests/schema/include/schemas/.gitignore
@@ -0,0 +1 @@
+includee.?xx
diff --git a/xsd-tests/schema/include/schemas/includee.xsd b/xsd-tests/schema/include/schemas/includee.xsd
new file mode 100644
index 0000000..0a928f5
--- /dev/null
+++ b/xsd-tests/schema/include/schemas/includee.xsd
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:simpleType name="base">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+ <xsd:element name="base_e" type="test:base"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/inheritance/.gitignore b/xsd-tests/schema/inheritance/.gitignore
new file mode 100644
index 0000000..9891c35
--- /dev/null
+++ b/xsd-tests/schema/inheritance/.gitignore
@@ -0,0 +1 @@
+cycle.?xx
diff --git a/xsd-tests/schema/inheritance/buildfile b/xsd-tests/schema/inheritance/buildfile
new file mode 100644
index 0000000..48c6dde
--- /dev/null
+++ b/xsd-tests/schema/inheritance/buildfile
@@ -0,0 +1,30 @@
+# file : schema/inheritance/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+fs = cycle sourced-forward/includer
+
+./: {hxx cxx}{$fs}
+
+# Make sure that the schema files are compilable.
+#
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --output-dir $directory($path($>[0])) \
+ $path($<[0])
+ }}
+}
+
+# Test that the invalid schema files compilation expectedly fails.
+#
+./: testscript xsd{** -{$fs}} $xsd
+
+testscript{*}:
+{
+ test = $xsd
+ test.arguments = cxx-tree --std c++11
+}
diff --git a/xsd-tests/schema/inheritance/cycle.xsd b/xsd-tests/schema/inheritance/cycle.xsd
new file mode 100644
index 0000000..c705311
--- /dev/null
+++ b/xsd-tests/schema/inheritance/cycle.xsd
@@ -0,0 +1,34 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:complexType name="Base">
+ <xsd:sequence>
+ <xsd:element name="e1">
+ <xsd:complexType>
+ <xsd:complexContent>
+ <xsd:extension base="test:Derived">
+ <xsd:sequence>
+ <xsd:element name="e2" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="Derived">
+ <xsd:complexContent>
+ <xsd:extension base="test:Base">
+ <xsd:sequence>
+ <xsd:element name="e3" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/inheritance/sourced-forward/.gitignore b/xsd-tests/schema/inheritance/sourced-forward/.gitignore
new file mode 100644
index 0000000..4ec7484
--- /dev/null
+++ b/xsd-tests/schema/inheritance/sourced-forward/.gitignore
@@ -0,0 +1 @@
+includer.?xx
diff --git a/xsd-tests/schema/inheritance/sourced-forward/includee.xsd b/xsd-tests/schema/inheritance/sourced-forward/includee.xsd
new file mode 100644
index 0000000..531027d
--- /dev/null
+++ b/xsd-tests/schema/inheritance/sourced-forward/includee.xsd
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd">
+
+ <xsd:simpleType name="Derived">
+ <xsd:restriction base="Base"/>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/inheritance/sourced-forward/includer.xsd b/xsd-tests/schema/inheritance/sourced-forward/includer.xsd
new file mode 100644
index 0000000..7d18efc
--- /dev/null
+++ b/xsd-tests/schema/inheritance/sourced-forward/includer.xsd
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:include schemaLocation="includee.xsd"/>
+
+ <xsd:simpleType name="Base">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/inheritance/testscript b/xsd-tests/schema/inheritance/testscript
new file mode 100644
index 0000000..5cc649d
--- /dev/null
+++ b/xsd-tests/schema/inheritance/testscript
@@ -0,0 +1,8 @@
+# file : schema/inheritance/testscript
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+: base-not-found
+:
+$* --output-dir $~ $src_base/sourced-forward/includee.xsd 2>>/"EOE" != 0
+ $src_base/sourced-forward/includee.xsd:7:35: error: base type 'Base' not found in 'Derived' definition
+ EOE
diff --git a/xsd-tests/schema/list/anonymous/test.xsd b/xsd-tests/schema/list/anonymous/test.xsd
new file mode 100644
index 0000000..7db39ba
--- /dev/null
+++ b/xsd-tests/schema/list/anonymous/test.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:simpleType name="IntList">
+ <xsd:list>
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:int"/>
+ </xsd:simpleType>
+ </xsd:list>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/list/any-simple-type/test.xsd b/xsd-tests/schema/list/any-simple-type/test.xsd
new file mode 100644
index 0000000..29fe95c
--- /dev/null
+++ b/xsd-tests/schema/list/any-simple-type/test.xsd
@@ -0,0 +1,12 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:simpleType name="any">
+ <xsd:list itemType="xsd:anySimpleType"/>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/list/buildfile b/xsd-tests/schema/list/buildfile
new file mode 100644
index 0000000..5d8f7fc
--- /dev/null
+++ b/xsd-tests/schema/list/buildfile
@@ -0,0 +1,31 @@
+# file : schema/list/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+fs = test anonymous/test
+
+./: {hxx cxx}{$fs}
+
+# Make sure that the schema files are compilable.
+#
+for f: $fs
+{
+ <{hxx cxx}{$f}>: xsd{$f} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $directory($path($>[0])) \
+ $path($<[0])
+ }}
+}
+
+# Test that the invalid schema files compilation expectedly fails.
+#
+./: testscript xsd{** -{$fs}} $xsd
+
+testscript{*}:
+{
+ test = $xsd
+ test.arguments = cxx-tree --std c++11
+}
diff --git a/xsd-tests/schema/list/test.xsd b/xsd-tests/schema/list/test.xsd
new file mode 100644
index 0000000..e16a58d
--- /dev/null
+++ b/xsd-tests/schema/list/test.xsd
@@ -0,0 +1,72 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:simpleType name="IntList">
+ <xsd:list itemType="xsd:int"/>
+ </xsd:simpleType>
+
+ <!-- local element with anonymous list inside. -->
+
+ <xsd:complexType name="Foo">
+ <xsd:sequence>
+ <xsd:element name="string-list">
+ <xsd:simpleType>
+ <xsd:list itemType="xsd:string"/>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <!-- global element with anonymous list inside. -->
+
+ <xsd:element name="string-list">
+ <xsd:simpleType>
+ <xsd:list itemType="xsd:string"/>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+
+ <!-- global element and global list with conflicting names -->
+
+ <xsd:simpleType name="long-list">
+ <xsd:list itemType="xsd:long"/>
+ </xsd:simpleType>
+
+ <xsd:element name="long-list" type="test:long-list"/>
+
+
+ <!-- forward reference -->
+
+ <xsd:simpleType name="int-list">
+ <xsd:list itemType="test:int"/>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="int">
+ <xsd:restriction base="xsd:int"/>
+ </xsd:simpleType>
+
+
+ <!-- inheritance from list -->
+
+ <xsd:complexType name="IntComplex">
+ <xsd:simpleContent>
+ <xsd:extension base="test:IntList">
+ <xsd:attribute name="foo" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="IntComplexEmpty">
+ <xsd:simpleContent>
+ <xsd:extension base="test:IntList">
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/list/testscript b/xsd-tests/schema/list/testscript
new file mode 100644
index 0000000..0916be0
--- /dev/null
+++ b/xsd-tests/schema/list/testscript
@@ -0,0 +1,8 @@
+# file : schema/list/testscript
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+: invalid-definition
+:
+$* --output-dir $~ $src_base/any-simple-type/test.xsd 2>>/"EOE" != 0
+ $src_base/any-simple-type/test.xsd:9:45: error: item type definition must have variety of atomic or union where all member types must be atomic
+ EOE
diff --git a/xsd-tests/schema/no-namespace/buildfile b/xsd-tests/schema/no-namespace/buildfile
new file mode 100644
index 0000000..e407218
--- /dev/null
+++ b/xsd-tests/schema/no-namespace/buildfile
@@ -0,0 +1,22 @@
+# file : schema/no-namespace/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/no-namespace/driver.cxx b/xsd-tests/schema/no-namespace/driver.cxx
new file mode 100644
index 0000000..ef62942
--- /dev/null
+++ b/xsd-tests/schema/no-namespace/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/no-namespace/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/no-namespace/test.xsd b/xsd-tests/schema/no-namespace/test.xsd
new file mode 100644
index 0000000..b426e8a
--- /dev/null
+++ b/xsd-tests/schema/no-namespace/test.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd">
+
+
+ <xsd:complexType name="Test">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="test" type="Test"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/recursive/buildfile b/xsd-tests/schema/recursive/buildfile
new file mode 100644
index 0000000..34542c6
--- /dev/null
+++ b/xsd-tests/schema/recursive/buildfile
@@ -0,0 +1,22 @@
+# file : schema/recursive/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/recursive/driver.cxx b/xsd-tests/schema/recursive/driver.cxx
new file mode 100644
index 0000000..55c33cd
--- /dev/null
+++ b/xsd-tests/schema/recursive/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/recursive/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/recursive/test.xsd b/xsd-tests/schema/recursive/test.xsd
new file mode 100644
index 0000000..6efc7d2
--- /dev/null
+++ b/xsd-tests/schema/recursive/test.xsd
@@ -0,0 +1,43 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:element name="BooleanExpression">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element name="literal" type="xsd:boolean"/>
+ <xsd:element ref="test:AND"/>
+ <xsd:element ref="test:OR"/>
+ <xsd:element ref="test:XOR"/>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="AND">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="test:BooleanExpression" maxOccurs="2"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="OR">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="test:BooleanExpression" maxOccurs="2"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="XOR">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="test:BooleanExpression" maxOccurs="2"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/ref-type/invalid/buildfile b/xsd-tests/schema/ref-type/invalid/buildfile
new file mode 100644
index 0000000..42c7bfb
--- /dev/null
+++ b/xsd-tests/schema/ref-type/invalid/buildfile
@@ -0,0 +1,12 @@
+# file : schema/ref-type/invalid/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Test that the invalid schema files compilation expectedly fails.
+#
+./: testscript xsd{*} $xsd
+
+testscript{*}:
+{
+ test = $xsd
+ test.arguments = cxx-tree --std c++11
+}
diff --git a/xsd-tests/schema/ref-type/invalid/invalid-0.xsd b/xsd-tests/schema/ref-type/invalid/invalid-0.xsd
new file mode 100644
index 0000000..7ce82ed
--- /dev/null
+++ b/xsd-tests/schema/ref-type/invalid/invalid-0.xsd
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ xmlns:phony="http://www.codesynthesis.com/xmlns/phony"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- unresolvable namespace prefix -->
+
+ <xsd:attribute name="attribute1" type="xsd:IDREF" xse:refType="author"/>
+ <xsd:attribute name="attribute2" type="xsd:IDREF" xse:refType="t:author"/>
+
+ <!-- unresolvable namespace -->
+
+ <xsd:attribute name="attribute3" type="xsd:IDREF" xse:refType="phony:author"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/ref-type/invalid/invalid-1.xsd b/xsd-tests/schema/ref-type/invalid/invalid-1.xsd
new file mode 100644
index 0000000..d989065
--- /dev/null
+++ b/xsd-tests/schema/ref-type/invalid/invalid-1.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- unresolvable type -->
+
+ <xsd:attribute name="attribute" type="xsd:IDREF" xse:refType="test:author"/>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/ref-type/invalid/testscript b/xsd-tests/schema/ref-type/invalid/testscript
new file mode 100644
index 0000000..ce2e049
--- /dev/null
+++ b/xsd-tests/schema/ref-type/invalid/testscript
@@ -0,0 +1,16 @@
+# file : schema/ref-type/invalid/testscript
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+: unresolvable-namespace-prefix
+:
+$* --output-dir $~ $src_base/invalid-0.xsd 2>>~%EOE%d != 0
+ %\.+invalid-0.xsd:10:75: error: unable to resolve namespace ''%
+ %\.+invalid-0.xsd:11:77: error: unable to resolve namespace prefix 't' in 't:author'%
+ %\.+invalid-0.xsd:15:81: error: unable to resolve namespace 'http://www.codesynthesis.com/xmlns/phony'%
+ EOE
+
+: unresolvable-type
+:
+$* --output-dir $~ $src_base/invalid-1.xsd 2>>~%EOE%d != 0
+ %\.+invalid-1.xsd:9:79: error: unable to resolve type 'author' in namespace 'http://www.codesynthesis.com/xmlns/test'%
+ EOE
diff --git a/xsd-tests/schema/ref-type/valid/.gitignore b/xsd-tests/schema/ref-type/valid/.gitignore
new file mode 100644
index 0000000..fd203ec
--- /dev/null
+++ b/xsd-tests/schema/ref-type/valid/.gitignore
@@ -0,0 +1,6 @@
+driver-idref
+driver-idrefs
+driver-idref.?xx
+driver-idrefs.?xx
+idref.?xx
+idrefs.?xx
diff --git a/xsd-tests/schema/ref-type/valid/buildfile b/xsd-tests/schema/ref-type/valid/buildfile
new file mode 100644
index 0000000..0534fce
--- /dev/null
+++ b/xsd-tests/schema/ref-type/valid/buildfile
@@ -0,0 +1,35 @@
+# file : schema/ref-type/valid/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+for sc: idref idrefs
+{
+ dr = "driver-$sc"
+
+ ./: exe{$dr}: cxx{$dr} {hxx cxx}{$sc} $libs
+
+ cxx{$dr}: in{driver}
+ {
+ # Note: we can't use $sc$ in driver.cxx.in since it will be substituted by
+ # the latest $sc value.
+ #
+ sch = $sc
+ }
+
+ <{hxx cxx}{$sc}>: xsd{$sc} $xsd
+ {{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+ }}
+}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/ref-type/valid/driver.cxx.in b/xsd-tests/schema/ref-type/valid/driver.cxx.in
new file mode 100644
index 0000000..434aa40
--- /dev/null
+++ b/xsd-tests/schema/ref-type/valid/driver.cxx.in
@@ -0,0 +1,9 @@
+// file : schema/ref-type/valid/driver.cxx.in
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "$sch$.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/ref-type/valid/idref.xsd b/xsd-tests/schema/ref-type/valid/idref.xsd
new file mode 100644
index 0000000..49ebe40
--- /dev/null
+++ b/xsd-tests/schema/ref-type/valid/idref.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- attribute -->
+
+ <xsd:attribute name="attribute" type="xsd:IDREF" xse:refType="test:a-author"/>
+
+ <xsd:complexType name="a-author">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="test:a-author"/>
+ </xsd:complexType>
+
+
+ <!-- element -->
+
+ <xsd:element name="element" type="xsd:IDREF" xse:refType="test:e-author"/>
+
+ <xsd:complexType name="e-author">
+ <xsd:sequence>
+ <xsd:element name="recommends" type="xsd:IDREF" xse:refType="test:e-author"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <!-- base -->
+
+ <xsd:simpleType name="author-ref">
+ <xsd:restriction base="xsd:IDREF" xse:refType="test:e-author"/>
+ </xsd:simpleType>
+
+
+ <!-- itemType -->
+
+ <xsd:simpleType name="author-refs">
+ <xsd:list itemType="xsd:IDREF" xse:refType="test:e-author"/>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/ref-type/valid/idrefs.xsd b/xsd-tests/schema/ref-type/valid/idrefs.xsd
new file mode 100644
index 0000000..b68ed03
--- /dev/null
+++ b/xsd-tests/schema/ref-type/valid/idrefs.xsd
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- attribute -->
+
+ <xsd:attribute name="attribute" type="xsd:IDREFS" xse:refType="test:a-author"/>
+
+ <xsd:complexType name="a-author">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="recommends" type="xsd:IDREFS" xse:refType="test:a-author"/>
+ </xsd:complexType>
+
+
+ <!-- element -->
+
+ <xsd:element name="element" type="xsd:IDREFS" xse:refType="test:e-author"/>
+
+ <xsd:complexType name="e-author">
+ <xsd:sequence>
+ <xsd:element name="recommends" type="xsd:IDREFS" xse:refType="test:e-author"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <!-- base -->
+
+ <xsd:simpleType name="author-refs">
+ <xsd:restriction base="xsd:IDREFS" xse:refType="test:e-author"/>
+ </xsd:simpleType>
+
+
+ <!-- itemType - illegal -->
+ <!--
+ <xsd:simpleType name="author-refss">
+ <xsd:list itemType="xsd:IDREFS" xse:refType="test:e-author"/>
+ </xsd:simpleType>
+ -->
+
+</xsd:schema>
diff --git a/xsd-tests/schema/restriction/buildfile b/xsd-tests/schema/restriction/buildfile
new file mode 100644
index 0000000..c05718a
--- /dev/null
+++ b/xsd-tests/schema/restriction/buildfile
@@ -0,0 +1,22 @@
+# file : schema/restriction/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/restriction/driver.cxx b/xsd-tests/schema/restriction/driver.cxx
new file mode 100644
index 0000000..2ffeb74
--- /dev/null
+++ b/xsd-tests/schema/restriction/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/restriction/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/restriction/test.xsd b/xsd-tests/schema/restriction/test.xsd
new file mode 100644
index 0000000..331ba78
--- /dev/null
+++ b/xsd-tests/schema/restriction/test.xsd
@@ -0,0 +1,67 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <!-- Simple content. -->
+
+ <xsd:complexType name="SimpleBase">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="lang" type="xsd:language"/>
+ <xsd:attribute name="note" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="SimpleType">
+ <xsd:simpleContent>
+ <xsd:restriction base="test:SimpleBase">
+ <xsd:maxLength value="255"/>
+ <xsd:attribute name="lang">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:language">
+ <xsd:enumeration value="en"/>
+ <xsd:enumeration value="es"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:restriction>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+ <!-- Complex content. -->
+
+ <xsd:complexType name="ComplexBase">
+ <xsd:sequence>
+ <xsd:element name="lang" type="xsd:language"/>
+ <xsd:element name="note" type="xsd:string" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <xsd:complexType name="ComplexType">
+ <xsd:complexContent>
+ <xsd:restriction base="test:ComplexBase">
+ <xsd:sequence>
+ <xsd:element name="lang" type="xsd:language"/>
+ <xsd:element name="note" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="AnyType">
+ <xsd:complexContent>
+ <xsd:restriction base="xsd:anyType">
+ <xsd:sequence>
+ <xsd:element name="lang" type="xsd:language"/>
+ <xsd:element name="note" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/xsd-tests/schema/union/buildfile b/xsd-tests/schema/union/buildfile
new file mode 100644
index 0000000..00d0a83
--- /dev/null
+++ b/xsd-tests/schema/union/buildfile
@@ -0,0 +1,22 @@
+# file : schema/union/buildfile
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+# Just make sure that the schema files and the xsd-generated C++ mappings are
+# compilable.
+#
+import libs = libxsd%lib{xsd}
+import libs += libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs
+
+<{hxx cxx}{test}>: xsd{test} $xsd
+{{
+ diag xsd ($<[0]) # @@ TMP
+
+ $xsd cxx-tree --std c++11 \
+ --root-element-all \
+ --output-dir $out_base \
+ $path($<[0])
+}}
+
+cxx.poptions =+ "-I$out_base"
diff --git a/xsd-tests/schema/union/driver.cxx b/xsd-tests/schema/union/driver.cxx
new file mode 100644
index 0000000..45f290f
--- /dev/null
+++ b/xsd-tests/schema/union/driver.cxx
@@ -0,0 +1,9 @@
+// file : schema/union/driver.cxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include "test.hxx"
+
+int
+main (int, char*[])
+{
+}
diff --git a/xsd-tests/schema/union/test.xsd b/xsd-tests/schema/union/test.xsd
new file mode 100644
index 0000000..706f6f2
--- /dev/null
+++ b/xsd-tests/schema/union/test.xsd
@@ -0,0 +1,65 @@
+<?xml version="1.0" ?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"
+ xmlns:test="http://www.codesynthesis.com/xmlns/test"
+ targetNamespace="http://www.codesynthesis.com/xmlns/test">
+
+ <xsd:simpleType name="IntUnion">
+ <xsd:union memberTypes="xsd:int xsd:string"/>
+ </xsd:simpleType>
+
+ <!-- local element with anonymous union inside. -->
+
+ <xsd:complexType name="Foo">
+ <xsd:sequence>
+ <xsd:element name="string-union">
+ <xsd:simpleType>
+ <xsd:union memberTypes="xsd:int xsd:string"/>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <!-- global element with anonymous union inside. -->
+
+ <xsd:element name="string-union">
+ <xsd:simpleType>
+ <xsd:union memberTypes="xsd:int xsd:string"/>
+ </xsd:simpleType>
+ </xsd:element>
+
+
+
+ <!-- global element and global union with conflicting names -->
+
+ <xsd:simpleType name="long-union">
+ <xsd:union memberTypes="xsd:long xsd:string"/>
+ </xsd:simpleType>
+
+ <xsd:element name="long-union" type="test:long-union"/>
+
+
+ <!-- forward reference -->
+
+ <xsd:simpleType name="int-union">
+ <xsd:union memberTypes="test:int xsd:string"/>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="int">
+ <xsd:restriction base="xsd:int"/>
+ </xsd:simpleType>
+
+
+ <!-- inheritance from union -->
+
+ <xsd:complexType name="IntComplex">
+ <xsd:simpleContent>
+ <xsd:extension base="test:IntUnion">
+ <xsd:attribute name="foo" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
+</xsd:schema>