# HG changeset patch
# User Mihai Ibanescu <https://issues.rpath.com/>
# Date 1251405293 14400
# Node ID ad42f4b755594a874edca453e3520d77da869917
# Parent  37211e9328ecf7f1ca100c743edb11dc60681e12
Tests for element groups

diff -r 37211e9328ec -r ad42f4b75559 tests/groups.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/groups.xml	Thu Aug 27 16:34:53 2009 -0400
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns="http://example.com/schema2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="groups.xsd">
+  <node1>
+    <node1node1>value 1 1</node1node1>
+    <group1>group1 1</group1>
+    <group2>group2 1</group2>
+    <node1node2>value 1 2</node1node2>
+  </node1>
+  <node2>
+    <node2node1>value 2 1</node2node1>
+    <group1>group1 2</group1>
+    <group2>group2 2</group2>
+    <node2node2>value 2 2</node2node2>
+  </node2>
+</root>
diff -r 37211e9328ec -r ad42f4b75559 tests/groups.xsd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/groups.xsd	Thu Aug 27 16:34:53 2009 -0400
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://example.com/schema2"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"
+    targetNamespace="http://example.com/schema2"
+    elementFormDefault="qualified" attributeFormDefault="unqualified">
+  <xsd:element name="root">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element name="node1" type="node1Type"/>
+        <xsd:element name="node2" type="node2Type"/>
+      </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:group name="elementgroup">
+    <xsd:sequence>
+      <xsd:element name="group1" type="xsd:string"/>
+      <xsd:element name="group2" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:group>
+
+  <xsd:complexType name="node1Type">
+    <xsd:sequence>
+      <xsd:element name="node1node1" type="xsd:string"/>
+      <xsd:group ref="elementgroup"/>
+      <xsd:element name="node1node2" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="node2Type">
+    <xsd:sequence>
+      <xsd:element name="node2node1" type="xsd:string"/>
+      <xsd:group ref="elementgroup"/>
+      <xsd:element name="node2node2" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+</xsd:schema>
diff -r 37211e9328ec -r ad42f4b75559 tests/test.py
--- a/tests/test.py	Thu Aug 27 14:40:10 2009 -0400
+++ b/tests/test.py	Thu Aug 27 16:34:53 2009 -0400
@@ -43,6 +43,29 @@
         #self.failUnless(len(result) < 130 and result.find('Generated') > -1)
         self.failUnless(check_result(result))
 
+    def test_element_groups(self):
+        cmdTempl = 'python generateDS.py --no-dates --silence --member-specs=list -f -o tests/%s_sup.py -s tests/%s_sub.py --super=%s_sup tests/%s.xsd'
+        t_ = 'groups'
+        cmd = cmdTempl % (t_, t_, t_, t_)
+        result, _ = self.execute(cmd, cwd='..')
+
+        # Verify the structure
+        cmdTempl = '''python -c "import %s_sub; print [ x.name for x in %s_sub.node1TypeSub._member_data_items ]; print [ x.name for x in %s_sub.node2TypeSub._member_data_items ]"'''
+        cmd = cmdTempl % (t_, t_, t_)
+        result, _ = self.execute(cmd)
+        self.failUnlessEqual(result, """\
+['node1node1', 'group1', 'group2', 'node1node2']
+['node2node1', 'group1', 'group2', 'node2node2']
+""")
+
+        # load the XML, and verify the proper data was loaded
+        cmdTempl = '''python -c "import %s_sub; obj = %s_sub.parse('%s.xml'); fields = [ x.name for x in obj.node1._member_data_items ]; print [ getattr(obj.node1, x) for x in fields ]; fields = [ x.name for x in obj.node2._member_data_items ]; print [ getattr(obj.node2, x) for x in fields ]"'''
+        cmd = cmdTempl % (t_, t_, t_)
+        result, _ = self.execute(cmd)
+        self.failUnlessEqual(result, """\
+[u'value 1 1', u'group1 1', u'group2 1', u'value 1 2']
+[u'value 2 1', u'group1 2', u'group2 2', u'value 2 2']
+""")
 
 def check_result(result):
     flag1 = 0
