aboutsummaryrefslogtreecommitdiff
path: root/tests/schema
diff options
context:
space:
mode:
Diffstat (limited to 'tests/schema')
-rw-r--r--tests/schema/annotation/makefile45
-rw-r--r--tests/schema/annotation/test-000.std67
-rw-r--r--tests/schema/annotation/test-000.xsd120
-rw-r--r--tests/schema/annotation/test-001.std36
-rw-r--r--tests/schema/annotation/test-001.xsd53
-rw-r--r--tests/schema/anonymous/makefile45
-rw-r--r--tests/schema/anonymous/test-000.std30
-rw-r--r--tests/schema/anonymous/test-000.xsd42
-rw-r--r--tests/schema/anonymous/test-001.std38
-rw-r--r--tests/schema/anonymous/test-001.xsd47
-rw-r--r--tests/schema/attribute-group/makefile46
-rw-r--r--tests/schema/attribute-group/test-000.std17
-rw-r--r--tests/schema/attribute-group/test-000.xsd31
-rw-r--r--tests/schema/attribute-group/test-001.std12
-rw-r--r--tests/schema/attribute-group/test-001.xsd20
-rw-r--r--tests/schema/element-group/makefile45
-rw-r--r--tests/schema/element-group/test-000.std33
-rw-r--r--tests/schema/element-group/test-000.xsd39
-rw-r--r--tests/schema/element-group/test-001.std137
-rw-r--r--tests/schema/element-group/test-001.xsd33
-rw-r--r--tests/schema/element-group/test-002.std24
-rw-r--r--tests/schema/element-group/test-002.xsd26
-rw-r--r--tests/schema/makefile22
23 files changed, 1008 insertions, 0 deletions
diff --git a/tests/schema/annotation/makefile b/tests/schema/annotation/makefile
new file mode 100644
index 0000000..2af53d6
--- /dev/null
+++ b/tests/schema/annotation/makefile
@@ -0,0 +1,45 @@
+# file : tests/schema/annotation/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make
+
+tests := 000 001
+
+driver := $(out_root)/tests/dump/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+
+# Convenience alias for default target.
+#
+.PHONY: $(out_base)/
+$(out_base)/: $(driver)
+
+
+# Test.
+#
+test_targets := $(addprefix $(out_base)/.test-,$(tests))
+
+.PHONY: $(test)
+
+$(test): $(test_targets)
+
+$(test_targets): driver := $(driver)
+
+.PHONY: $(out_base)/.test-%
+$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std
+ $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -)
+
+
+# Clean.
+#
+.PHONY: $(clean)
+
+$(clean):
+
+
+# Dependencies.
+#
+$(call import,$(src_root)/tests/dump/makefile)
diff --git a/tests/schema/annotation/test-000.std b/tests/schema/annotation/test-000.std
new file mode 100644
index 0000000..ed7f1e1
--- /dev/null
+++ b/tests/schema/annotation/test-000.std
@@ -0,0 +1,67 @@
+<schema documentation>
+primary
+{
+ namespace test
+ {
+ <list type documentation>
+ list list http://www.w3.org/2001/XMLSchema#string
+ <union type documentation>
+ union union
+ <enumeration type documentation>
+ enumeration enum: http://www.w3.org/2001/XMLSchema#string
+ {
+ <enumerator documentation (male)>
+ enumerator male
+ <enumerator documentation (female)>
+ enumerator female
+ }
+ <complex type documentation>
+ complex type
+ {
+ <local element efoo documentation>
+ element efoo
+ <local element ebar documentation>
+ element ebar
+ <local element ebaz documentation>
+ element ebaz
+ <any documentation>
+ any 'any #0'
+ <local attribute afoo documentation>
+ optional attribute afoo http://www.w3.org/2001/XMLSchema#string
+ <local attribute abar documentation>
+ optional attribute abar
+ {
+ <list type documentation>
+ list <anonymous> http://www.w3.org/2001/XMLSchema#string
+ }
+ <local attribute abaz documentation>
+ optional attribute abaz http://www.w3.org/2001/XMLSchema#string
+ <anyAttribute documentation>
+ any-attribute 'any-attribute #0'
+ [1, 1] sequence
+ {
+ [1, 1] element efoo http://www.w3.org/2001/XMLSchema#string
+ [1, 1] element ebar
+ {
+ complex <anonymous>
+ {
+ <nested local element efoo documentation>
+ element efoo
+ <nested local attribute afoo documentation>
+ optional attribute afoo http://www.w3.org/2001/XMLSchema#string
+ [1, 1] sequence
+ {
+ [1, 1] element efoo http://www.w3.org/2001/XMLSchema#string
+ }
+ }
+ }
+ [1, 1] element ebaz http://www.w3.org/2001/XMLSchema#string
+ [1, 1] any 'any #0'
+ }
+ }
+ <global element documentation>
+ element ebaz http://www.w3.org/2001/XMLSchema#string
+ <global attribute documentation>
+ attribute abaz http://www.w3.org/2001/XMLSchema#string
+ }
+}
diff --git a/tests/schema/annotation/test-000.xsd b/tests/schema/annotation/test-000.xsd
new file mode 100644
index 0000000..f768b45
--- /dev/null
+++ b/tests/schema/annotation/test-000.xsd
@@ -0,0 +1,120 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <annotation>
+ <documentation>schema documentation</documentation>
+ </annotation>
+
+ <simpleType name="list">
+ <annotation>
+ <documentation>list type documentation</documentation>
+ </annotation>
+ <list itemType="string"/>
+ </simpleType>
+
+ <simpleType name="union">
+ <annotation>
+ <documentation>union type documentation</documentation>
+ </annotation>
+ <union memberTypes="int string"/>
+ </simpleType>
+
+ <simpleType name="enum">
+ <annotation>
+ <documentation>enumeration type documentation</documentation>
+ </annotation>
+ <restriction base="string">
+ <enumeration value="male">
+ <annotation>
+ <documentation>enumerator documentation (male)</documentation>
+ </annotation>
+ </enumeration>
+ <enumeration value="female">
+ <annotation>
+ <documentation>enumerator documentation (female)</documentation>
+ </annotation>
+ </enumeration>
+ </restriction>
+ </simpleType>
+
+ <complexType name="type">
+ <annotation>
+ <documentation>complex type documentation</documentation>
+ </annotation>
+ <sequence>
+ <element name="efoo" type="string">
+ <annotation>
+ <documentation>local element efoo documentation</documentation>
+ </annotation>
+ </element>
+ <element name="ebar">
+ <annotation>
+ <documentation>local element ebar documentation</documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element name="efoo" type="string">
+ <annotation>
+ <documentation>nested local element efoo documentation</documentation>
+ </annotation>
+ </element>
+ </sequence>
+ <attribute name="afoo" type="string">
+ <annotation>
+ <documentation>nested local attribute afoo documentation</documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+ <element ref="t:ebaz">
+ <annotation>
+ <documentation>local element ebaz documentation</documentation>
+ </annotation>
+ </element>
+ <any namespace="##other">
+ <annotation>
+ <documentation>any documentation</documentation>
+ </annotation>
+ </any>
+ </sequence>
+ <attribute name="afoo" type="string">
+ <annotation>
+ <documentation>local attribute afoo documentation</documentation>
+ </annotation>
+ </attribute>
+ <attribute name="abar">
+ <annotation>
+ <documentation>local attribute abar documentation</documentation>
+ </annotation>
+ <simpleType>
+ <annotation>
+ <documentation>list type documentation</documentation>
+ </annotation>
+ <list itemType="string"/>
+ </simpleType>
+ </attribute>
+ <attribute ref="t:abaz">
+ <annotation>
+ <documentation>local attribute abaz documentation</documentation>
+ </annotation>
+ </attribute>
+ <anyAttribute namespace="##other">
+ <annotation>
+ <documentation>anyAttribute documentation</documentation>
+ </annotation>
+ </anyAttribute>
+ </complexType>
+
+ <element name="ebaz" type="string">
+ <annotation>
+ <documentation>global element documentation</documentation>
+ </annotation>
+ </element>
+
+ <attribute name="abaz" type="string">
+ <annotation>
+ <documentation>global attribute documentation</documentation>
+ </annotation>
+ </attribute>
+
+</schema>
diff --git a/tests/schema/annotation/test-001.std b/tests/schema/annotation/test-001.std
new file mode 100644
index 0000000..9e2c99a
--- /dev/null
+++ b/tests/schema/annotation/test-001.std
@@ -0,0 +1,36 @@
+primary
+{
+ namespace test
+ {
+ complex type
+ {
+ <global element ebar documentation>
+ element ebar
+ <group element efoo documentation>
+ element efoo
+ <global element ebar documentation>
+ element ebar
+ <global attribute abar documentation>
+ optional attribute abar http://www.w3.org/2001/XMLSchema#string
+ <group attribute afoo documentation>
+ optional attribute afoo http://www.w3.org/2001/XMLSchema#string
+ <global attribute abaz documentation>
+ optional attribute abaz http://www.w3.org/2001/XMLSchema#string
+ [1, 1] sequence
+ {
+ [1, 1] element ebar http://www.w3.org/2001/XMLSchema#string
+ [1, 1] choice
+ {
+ [1, 1] element efoo http://www.w3.org/2001/XMLSchema#string
+ [1, 1] element ebar http://www.w3.org/2001/XMLSchema#string
+ }
+ }
+ }
+ <global element ebar documentation>
+ element ebar http://www.w3.org/2001/XMLSchema#string
+ <global attribute abar documentation>
+ attribute abar http://www.w3.org/2001/XMLSchema#string
+ <global attribute abaz documentation>
+ attribute abaz http://www.w3.org/2001/XMLSchema#string
+ }
+}
diff --git a/tests/schema/annotation/test-001.xsd b/tests/schema/annotation/test-001.xsd
new file mode 100644
index 0000000..286f63a
--- /dev/null
+++ b/tests/schema/annotation/test-001.xsd
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <!-- Test various ref constructs. -->
+
+ <complexType name="type">
+ <sequence>
+ <element ref="t:ebar"/>
+ <group ref="t:eg"/>
+ </sequence>
+ <attribute ref="t:abar"/>
+ <attributeGroup ref="t:ag"/>
+ </complexType>
+
+ <group name="eg">
+ <choice>
+ <element name="efoo" type="string">
+ <annotation>
+ <documentation>group element efoo documentation</documentation>
+ </annotation>
+ </element>
+ <element ref="t:ebar"/>
+ </choice>
+ </group>
+
+ <element name="ebar" type="string">
+ <annotation>
+ <documentation>global element ebar documentation</documentation>
+ </annotation>
+ </element>
+
+ <attributeGroup name="ag">
+ <attribute name="afoo" type="string">
+ <annotation>
+ <documentation>group attribute afoo documentation</documentation>
+ </annotation>
+ </attribute>
+ <attribute ref="t:abaz"/>
+ </attributeGroup>
+
+ <attribute name="abar" type="string">
+ <annotation>
+ <documentation>global attribute abar documentation</documentation>
+ </annotation>
+ </attribute>
+
+ <attribute name="abaz" type="string">
+ <annotation>
+ <documentation>global attribute abaz documentation</documentation>
+ </annotation>
+ </attribute>
+
+</schema>
diff --git a/tests/schema/anonymous/makefile b/tests/schema/anonymous/makefile
new file mode 100644
index 0000000..2140789
--- /dev/null
+++ b/tests/schema/anonymous/makefile
@@ -0,0 +1,45 @@
+# file : tests/schema/annotation/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make
+
+tests := 000 001
+
+driver := $(out_root)/tests/dump/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+
+# Convenience alias for default target.
+#
+.PHONY: $(out_base)/
+$(out_base)/: $(driver)
+
+
+# Test.
+#
+test_targets := $(addprefix $(out_base)/.test-,$(tests))
+
+.PHONY: $(test)
+
+$(test): $(test_targets)
+
+$(test_targets): driver := $(driver)
+
+.PHONY: $(out_base)/.test-%
+$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std
+ $(call message,test $(out_base)/$*,$(driver) --anonymous $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -)
+
+
+# Clean.
+#
+.PHONY: $(clean)
+
+$(clean):
+
+
+# Dependencies.
+#
+$(call import,$(src_root)/tests/dump/makefile)
diff --git a/tests/schema/anonymous/test-000.std b/tests/schema/anonymous/test-000.std
new file mode 100644
index 0000000..7acb22b
--- /dev/null
+++ b/tests/schema/anonymous/test-000.std
@@ -0,0 +1,30 @@
+anonymous: test anon_item anon
+anonymous: test anon_nested_item anon_nested
+anonymous: test anon_nested_item_base anon_nested_item
+primary
+{
+ namespace test
+ {
+ list named http://www.w3.org/2001/XMLSchema#string
+ enumeration anon_item: http://www.w3.org/2001/XMLSchema#string
+ {
+ enumerator male
+ enumerator female
+ }
+ list anon test#anon_item1
+ list anon_nested test#anon_nested_item
+ enumeration anon_item1: http://www.w3.org/2001/XMLSchema#string
+ {
+ enumerator male
+ enumerator female
+ }
+ enumeration anon_nested_item: test#anon_nested_item_base
+ {
+ enumerator male
+ enumerator female
+ }
+ complex anon_nested_item_base: http://www.w3.org/2001/XMLSchema#string
+ {
+ }
+ }
+}
diff --git a/tests/schema/anonymous/test-000.xsd b/tests/schema/anonymous/test-000.xsd
new file mode 100644
index 0000000..ece8f4a
--- /dev/null
+++ b/tests/schema/anonymous/test-000.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <simpleType name="named">
+ <list itemType="string"/>
+ </simpleType>
+
+ <simpleType name="anon_item">
+ <restriction base="string">
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="anon">
+ <list>
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+ </list>
+ </simpleType>
+
+ <simpleType name="anon_nested">
+ <list>
+ <simpleType>
+ <restriction>
+ <simpleType>
+ <restriction base="string">
+ <maxLength value="20"/>
+ </restriction>
+ </simpleType>
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+ </list>
+ </simpleType>
+
+</schema>
diff --git a/tests/schema/anonymous/test-001.std b/tests/schema/anonymous/test-001.std
new file mode 100644
index 0000000..11a2aed
--- /dev/null
+++ b/tests/schema/anonymous/test-001.std
@@ -0,0 +1,38 @@
+anonymous: test anon_base anon
+anonymous: test anon_nested_base anon_nested
+anonymous: test anon_nested_base_base anon_nested_base
+primary
+{
+ namespace test
+ {
+ enumeration named: http://www.w3.org/2001/XMLSchema#string
+ {
+ enumerator male
+ enumerator female
+ }
+ enumeration anon_base: http://www.w3.org/2001/XMLSchema#string
+ {
+ enumerator male
+ enumerator female
+ }
+ enumeration anon: test#anon_base1
+ {
+ enumerator male
+ enumerator female
+ }
+ enumeration anon_nested: test#anon_nested_base
+ {
+ enumerator male
+ enumerator female
+ }
+ complex anon_base1: http://www.w3.org/2001/XMLSchema#string
+ {
+ }
+ complex anon_nested_base: test#anon_nested_base_base
+ {
+ }
+ complex anon_nested_base_base: http://www.w3.org/2001/XMLSchema#string
+ {
+ }
+ }
+}
diff --git a/tests/schema/anonymous/test-001.xsd b/tests/schema/anonymous/test-001.xsd
new file mode 100644
index 0000000..4a8414f
--- /dev/null
+++ b/tests/schema/anonymous/test-001.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <simpleType name="named">
+ <restriction base="string">
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="anon_base">
+ <restriction base="string">
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="anon">
+ <restriction>
+ <simpleType>
+ <restriction base="string">
+ <maxLength value="20"/>
+ </restriction>
+ </simpleType>
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="anon_nested">
+ <restriction>
+ <simpleType>
+ <restriction>
+ <simpleType>
+ <restriction base="string">
+ <maxLength value="40"/>
+ </restriction>
+ </simpleType>
+ <maxLength value="20"/>
+ </restriction>
+ </simpleType>
+ <enumeration value="male"/>
+ <enumeration value="female"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/tests/schema/attribute-group/makefile b/tests/schema/attribute-group/makefile
new file mode 100644
index 0000000..0e4d5ed
--- /dev/null
+++ b/tests/schema/attribute-group/makefile
@@ -0,0 +1,46 @@
+# file : tests/schema/attribute-group/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make
+
+tests := 000 001
+
+driver := $(out_root)/tests/dump/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+
+# Convenience alias for default target.
+#
+.PHONY: $(out_base)/
+$(out_base)/: $(driver)
+
+
+# Test.
+#
+test_targets := $(addprefix $(out_base)/.test-,$(tests))
+
+.PHONY: $(test)
+
+$(test): $(test_targets)
+
+$(test_targets): driver := $(driver)
+
+.PHONY: $(out_base)/.test-%
+$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std
+ $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -)
+
+
+
+# Clean.
+#
+.PHONY: $(clean)
+
+$(clean):
+
+
+# Dependencies.
+#
+$(call import,$(src_root)/tests/dump/makefile)
diff --git a/tests/schema/attribute-group/test-000.std b/tests/schema/attribute-group/test-000.std
new file mode 100644
index 0000000..61ad802
--- /dev/null
+++ b/tests/schema/attribute-group/test-000.std
@@ -0,0 +1,17 @@
+primary
+{
+ namespace test
+ {
+ complex type
+ {
+ optional attribute foo2 http://www.w3.org/2001/XMLSchema#string
+ required attribute bar2 http://www.w3.org/2001/XMLSchema#string
+ optional attribute foo3 http://www.w3.org/2001/XMLSchema#string
+ required attribute bar3 http://www.w3.org/2001/XMLSchema#string
+ }
+ attribute foo2 http://www.w3.org/2001/XMLSchema#string
+ attribute bar2 http://www.w3.org/2001/XMLSchema#string
+ attribute foo3 http://www.w3.org/2001/XMLSchema#string
+ attribute bar3 http://www.w3.org/2001/XMLSchema#string
+ }
+}
diff --git a/tests/schema/attribute-group/test-000.xsd b/tests/schema/attribute-group/test-000.xsd
new file mode 100644
index 0000000..9087a2b
--- /dev/null
+++ b/tests/schema/attribute-group/test-000.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <!-- Multiple levels of forward reference. -->
+
+ <complexType name="type">
+ <attributeGroup ref="t:g1"/>
+ </complexType>
+
+ <attributeGroup name="g1">
+ <attributeGroup ref="t:g2"/>
+ <attributeGroup ref="t:g3"/>
+ </attributeGroup>
+
+ <attributeGroup name="g2">
+ <attribute ref="t:foo2"/>
+ <attribute ref="t:bar2" use="required"/>
+ </attributeGroup>
+
+ <attributeGroup name="g3">
+ <attribute ref="t:foo3"/>
+ <attribute ref="t:bar3" use="required"/>
+ </attributeGroup>
+
+ <attribute name="foo2" type="string"/>
+ <attribute name="bar2" type="string"/>
+
+ <attribute name="foo3" type="string"/>
+ <attribute name="bar3" type="string"/>
+
+</schema>
diff --git a/tests/schema/attribute-group/test-001.std b/tests/schema/attribute-group/test-001.std
new file mode 100644
index 0000000..54a1e96
--- /dev/null
+++ b/tests/schema/attribute-group/test-001.std
@@ -0,0 +1,12 @@
+primary
+{
+ namespace test
+ {
+ complex type
+ {
+ any-attribute 'any-attribute #1'
+ optional attribute foo http://www.w3.org/2001/XMLSchema#string
+ any-attribute 'any-attribute #0'
+ }
+ }
+}
diff --git a/tests/schema/attribute-group/test-001.xsd b/tests/schema/attribute-group/test-001.xsd
new file mode 100644
index 0000000..dc44a70
--- /dev/null
+++ b/tests/schema/attribute-group/test-001.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <!-- AnyAttribute in attribute groups. -->
+
+ <complexType name="type">
+ <attributeGroup ref="t:g1"/>
+ <attributeGroup ref="t:g2"/>
+ </complexType>
+
+ <attributeGroup name="g1">
+ <anyAttribute namespace="http://www.foo.com"/>
+ </attributeGroup>
+
+ <attributeGroup name="g2">
+ <attribute name="foo" type="string"/>
+ <anyAttribute namespace="http://www.bar.com"/>
+ </attributeGroup>
+
+</schema>
diff --git a/tests/schema/element-group/makefile b/tests/schema/element-group/makefile
new file mode 100644
index 0000000..f3d3b41
--- /dev/null
+++ b/tests/schema/element-group/makefile
@@ -0,0 +1,45 @@
+# file : tests/schema/element-group/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make
+
+tests := 000 001 002
+
+driver := $(out_root)/tests/dump/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+
+# Convenience alias for default target.
+#
+.PHONY: $(out_base)/
+$(out_base)/: $(driver)
+
+
+# Test.
+#
+test_targets := $(addprefix $(out_base)/.test-,$(tests))
+
+.PHONY: $(test)
+
+$(test): $(test_targets)
+
+$(test_targets): driver := $(driver)
+
+.PHONY: $(out_base)/.test-%
+$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std
+ $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -)
+
+
+# Clean.
+#
+.PHONY: $(clean)
+
+$(clean):
+
+
+# Dependencies.
+#
+$(call import,$(src_root)/tests/dump/makefile)
diff --git a/tests/schema/element-group/test-000.std b/tests/schema/element-group/test-000.std
new file mode 100644
index 0000000..1652b68
--- /dev/null
+++ b/tests/schema/element-group/test-000.std
@@ -0,0 +1,33 @@
+primary
+{
+ namespace test
+ {
+ complex type
+ {
+ element foo2
+ element bar2
+ element foo3
+ element bar3
+ [1, 1] sequence
+ {
+ [0, unbounded] choice
+ {
+ [0, 1] choice
+ {
+ [1, 1] element foo2 http://www.w3.org/2001/XMLSchema#string
+ [0, 1] element bar2 http://www.w3.org/2001/XMLSchema#string
+ }
+ [1, unbounded] choice
+ {
+ [1, unbounded] element foo3 http://www.w3.org/2001/XMLSchema#string
+ [0, unbounded] element bar3 http://www.w3.org/2001/XMLSchema#string
+ }
+ }
+ }
+ }
+ element foo2 http://www.w3.org/2001/XMLSchema#string
+ element bar2 http://www.w3.org/2001/XMLSchema#string
+ element foo3 http://www.w3.org/2001/XMLSchema#string
+ element bar3 http://www.w3.org/2001/XMLSchema#string
+ }
+}
diff --git a/tests/schema/element-group/test-000.xsd b/tests/schema/element-group/test-000.xsd
new file mode 100644
index 0000000..1864b28
--- /dev/null
+++ b/tests/schema/element-group/test-000.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <!-- Multiple levels of forward reference. -->
+
+ <complexType name="type">
+ <sequence>
+ <group ref="t:g1" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <group name="g1">
+ <choice>
+ <group ref="t:g2" minOccurs="0"/>
+ <group ref="t:g3" maxOccurs="unbounded"/>
+ </choice>
+ </group>
+
+ <group name="g2">
+ <choice>
+ <element ref="t:foo2"/>
+ <element ref="t:bar2" minOccurs="0"/>
+ </choice>
+ </group>
+
+ <group name="g3">
+ <choice>
+ <element ref="t:foo3" maxOccurs="unbounded"/>
+ <element ref="t:bar3" minOccurs="0" maxOccurs="unbounded"/>
+ </choice>
+ </group>
+
+ <element name="foo2" type="string"/>
+ <element name="bar2" type="string"/>
+
+ <element name="foo3" type="string"/>
+ <element name="bar3" type="string"/>
+
+</schema>
diff --git a/tests/schema/element-group/test-001.std b/tests/schema/element-group/test-001.std
new file mode 100644
index 0000000..ae8c1fc
--- /dev/null
+++ b/tests/schema/element-group/test-001.std
@@ -0,0 +1,137 @@
+primary
+{
+ namespace test
+ {
+ complex type
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <anonymous>
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <recursive-anonymous>
+ }
+ [1, 1] element bar
+ {
+ complex <anonymous>
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <recursive-anonymous>
+ }
+ [1, 1] element bar
+ {
+ complex <recursive-anonymous>
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ [1, 1] element bar
+ {
+ complex <anonymous>
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <anonymous>
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <recursive-anonymous>
+ }
+ [1, 1] element bar
+ {
+ complex <recursive-anonymous>
+ }
+ }
+ }
+ }
+ }
+ [1, 1] element bar
+ {
+ complex <recursive-anonymous>
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ element bar
+ {
+ complex <anonymous>
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <anonymous>
+ {
+ element foo
+ element bar
+ [1, 1] sequence
+ {
+ [1, 1] choice
+ {
+ [1, 1] element foo
+ {
+ complex <recursive-anonymous>
+ }
+ [1, 1] element bar
+ {
+ complex <recursive-anonymous>
+ }
+ }
+ }
+ }
+ }
+ [1, 1] element bar
+ {
+ complex <recursive-anonymous>
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/schema/element-group/test-001.xsd b/tests/schema/element-group/test-001.xsd
new file mode 100644
index 0000000..c6059af
--- /dev/null
+++ b/tests/schema/element-group/test-001.xsd
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <!-- Recursive reference: g1->element->type->g1 -->
+
+ <complexType name="type">
+ <sequence>
+ <group ref="t:g1"/>
+ </sequence>
+ </complexType>
+
+ <group name="g1">
+ <choice>
+ <element name="foo">
+ <complexType>
+ <sequence>
+ <group ref="t:g1"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element ref="t:bar"/>
+ </choice>
+ </group>
+
+ <element name="bar">
+ <complexType>
+ <sequence>
+ <group ref="t:g1"/>
+ </sequence>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/tests/schema/element-group/test-002.std b/tests/schema/element-group/test-002.std
new file mode 100644
index 0000000..d2c60fe
--- /dev/null
+++ b/tests/schema/element-group/test-002.std
@@ -0,0 +1,24 @@
+primary
+{
+ namespace test
+ {
+ complex type
+ {
+ any 'any #1'
+ element foo
+ any 'any #0'
+ [1, 1] sequence
+ {
+ [0, unbounded] sequence
+ {
+ [1, 1] any 'any #1'
+ }
+ [0, unbounded] sequence
+ {
+ [1, 1] element foo http://www.w3.org/2001/XMLSchema#int
+ [1, 1] any 'any #0'
+ }
+ }
+ }
+ }
+}
diff --git a/tests/schema/element-group/test-002.xsd b/tests/schema/element-group/test-002.xsd
new file mode 100644
index 0000000..bc1bd70
--- /dev/null
+++ b/tests/schema/element-group/test-002.xsd
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <!-- Any in groups. -->
+
+ <complexType name="type">
+ <sequence>
+ <group ref="t:g1" minOccurs="0" maxOccurs="unbounded"/>
+ <group ref="t:g2" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <group name="g1">
+ <sequence>
+ <any namespace="http://www.foo.com"/>
+ </sequence>
+ </group>
+
+ <group name="g2">
+ <sequence>
+ <element name="foo" type="int"/>
+ <any namespace="http://www.bar.com"/>
+ </sequence>
+ </group>
+
+</schema>
diff --git a/tests/schema/makefile b/tests/schema/makefile
new file mode 100644
index 0000000..3023cab
--- /dev/null
+++ b/tests/schema/makefile
@@ -0,0 +1,22 @@
+# file : tests/schema
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make
+
+
+tests := annotation anonymous attribute-group element-group
+
+
+default := $(out_base)/
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+.PHONY: $(default) $(test) $(clean)
+
+$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests)))
+$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests)))
+$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests)))
+
+$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile))