Author: doogie
Date: Thu Mar  5 02:40:06 2009
New Revision: 750296

URL: http://svn.apache.org/viewvc?rev=750296&view=rev
Log:
Add a <test-group> element, that is a sibling of <test-case>; this
element can take a list of child test definitions.

Modified:
    ofbiz/trunk/framework/testtools/dtd/test-suite.xsd
    ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/ModelTestSuite.java
    
ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/TestListContainer.java

Modified: ofbiz/trunk/framework/testtools/dtd/test-suite.xsd
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/testtools/dtd/test-suite.xsd?rev=750296&r1=750295&r2=750296&view=diff
==============================================================================
--- ofbiz/trunk/framework/testtools/dtd/test-suite.xsd (original)
+++ ofbiz/trunk/framework/testtools/dtd/test-suite.xsd Thu Mar  5 02:40:06 2009
@@ -36,9 +36,10 @@
     <!-- ELEMENTS start here -->
     <xs:element name="test-suite">
         <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="1" maxOccurs="unbounded" 
ref="test-case"/>
-            </xs:sequence>
+            <xs:choice minOccurs="1" maxOccurs="unbounded">
+                <xs:element ref="test-case"/>
+                <xs:element ref="test-group"/>
+           </xs:choice>
             <xs:attributeGroup ref="attlist.test-suite"/>
         </xs:complexType>
     </xs:element>
@@ -57,6 +58,16 @@
     <xs:attributeGroup name="attlist.test-case">
         <xs:attribute type="xs:string" name="case-name" use="required"/>
     </xs:attributeGroup>
+    <xs:element name="test-group">
+        <xs:annotation><xs:documentation></xs:documentation></xs:annotation>
+        <xs:complexType>
+            <xs:group minOccurs="1" maxOccurs="unbounded" 
ref="AllTestCaseTypes"/>
+            <xs:attributeGroup ref="attlist.test-group"/>
+        </xs:complexType>
+    </xs:element>
+    <xs:attributeGroup name="attlist.test-group">
+        <xs:attribute type="xs:string" name="case-name" use="required"/>
+    </xs:attributeGroup>
 
     <xs:element name="junit-test-suite" substitutionGroup="TestCaseTypes">
         <xs:annotation><xs:documentation>Used for JUnit test suites written as 
a Java class.</xs:documentation></xs:annotation>

Modified: 
ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/ModelTestSuite.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/ModelTestSuite.java?rev=750296&r1=750295&r2=750296&view=diff
==============================================================================
--- ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/ModelTestSuite.java 
(original)
+++ ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/ModelTestSuite.java 
Thu Mar  5 02:40:06 2009
@@ -28,6 +28,7 @@
 
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.ObjectType;
+import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.entity.GenericDelegator;
@@ -63,47 +64,60 @@
         this.delegator = 
GenericDelegator.getGenericDelegator(this.delegatorName);
         this.dispatcher = 
GenericDispatcher.getLocalDispatcher(this.dispatcherName, delegator);
         
-        for (Element testCaseElement : UtilXml.childElementList(mainElement, 
"test-case")) {
+        for (Element testCaseElement : UtilXml.childElementList(mainElement, 
UtilMisc.toSet("test-case", "test-group"))) {
             String caseName = testCaseElement.getAttribute("case-name");
+            String nodeName = testCaseElement.getNodeName();
             if (testCase == null || caseName.equals(testCase)) {
-                Element childElement = 
UtilXml.firstChildElement(testCaseElement);
-                String nodeName = childElement.getNodeName();
-                if ("junit-test-suite".equals(nodeName)) {
-                    String className = childElement.getAttribute("class-name");
-
-                    try {
-                        Class clz = ObjectType.loadClass(className);
-                        TestSuite suite = new TestSuite();
-                        suite.addTestSuite(clz);
-                        Enumeration testEnum = suite.tests();
-                        int testsAdded = 0;
-                        int casesAdded = 0;
-                        while (testEnum.hasMoreElements()) {
-                            Test tst = (Test) testEnum.nextElement();
-                            this.testList.add(tst);
-                            casesAdded += tst.countTestCases();
-                            testsAdded++;
-                        }
-                        Debug.logInfo("Added " + testsAdded + " tests [" + 
casesAdded + " cases] from the class: " + className, module);
-                    } catch (Exception e) {
-                        String errMsg = "Unable to load test suite class : " + 
className;
-                        Debug.logError(e, errMsg, module);
+                if (nodeName.equals("test-case")) {
+                    parseTestElement(caseName, 
UtilXml.firstChildElement(testCaseElement));
+                } else if (nodeName.equals("test-group")) {
+                    int i = 0;
+                    for (Element childElement: 
UtilXml.childElementList(testCaseElement)) {
+                        parseTestElement(caseName + '-' + i, childElement);
+                        i++;
                     }
-                } else if ("service-test".equals(nodeName)) {
-                    this.testList.add(new ServiceTest(caseName, this, 
childElement));
-                } else if ("simple-method-test".equals(nodeName)) {
-                    this.testList.add(new SimpleMethodTest(caseName, this, 
childElement));
-                } else if ("entity-xml".equals(nodeName)) {
-                    this.testList.add(new EntityXmlAssertTest(caseName, this, 
childElement));
-                } else if ("entity-xml-assert".equals(nodeName)) {
-                    // this is the old, deprecated name for the element, 
changed because it now does assert or load
-                    this.testList.add(new EntityXmlAssertTest(caseName, this, 
childElement));
-                } else if ("jython-test".equals(nodeName)) {
-                    this.testList.add(new JythonTest(caseName, this, 
childElement));
                 }
             }
         }
     }
+
+    private void parseTestElement(String caseName, Element testElement) {
+        String nodeName = testElement.getNodeName();
+        if ("junit-test-suite".equals(nodeName)) {
+            String className = testElement.getAttribute("class-name");
+
+            try {
+                Class clz = ObjectType.loadClass(className);
+                TestSuite suite = new TestSuite();
+                suite.addTestSuite(clz);
+                Enumeration testEnum = suite.tests();
+                int testsAdded = 0;
+                int casesAdded = 0;
+                while (testEnum.hasMoreElements()) {
+                    Test tst = (Test) testEnum.nextElement();
+                    this.testList.add(tst);
+                    casesAdded += tst.countTestCases();
+                    testsAdded++;
+                }
+                Debug.logInfo("Added " + testsAdded + " tests [" + casesAdded 
+ " cases] from the class: " + className, module);
+            } catch (Exception e) {
+                String errMsg = "Unable to load test suite class : " + 
className;
+                Debug.logError(e, errMsg, module);
+            }
+        } else if ("service-test".equals(nodeName)) {
+            this.testList.add(new ServiceTest(caseName, this, testElement));
+        } else if ("simple-method-test".equals(nodeName)) {
+            this.testList.add(new SimpleMethodTest(caseName, this, 
testElement));
+        } else if ("entity-xml".equals(nodeName)) {
+            this.testList.add(new EntityXmlAssertTest(caseName, this, 
testElement));
+        } else if ("entity-xml-assert".equals(nodeName)) {
+            // this is the old, deprecated name for the element, changed 
because it now does assert or load
+            this.testList.add(new EntityXmlAssertTest(caseName, this, 
testElement));
+        } else if ("jython-test".equals(nodeName)) {
+            this.testList.add(new JythonTest(caseName, this, testElement));
+        }
+
+    }
     
     String getSuiteName() {
         return this.suiteName;

Modified: 
ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/TestListContainer.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/TestListContainer.java?rev=750296&r1=750295&r2=750296&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/TestListContainer.java 
(original)
+++ 
ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/TestListContainer.java 
Thu Mar  5 02:40:06 2009
@@ -27,6 +27,7 @@
 import org.ofbiz.base.container.Container;
 import org.ofbiz.base.container.ContainerException;
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilXml;
 
 import java.io.File;
@@ -69,7 +70,7 @@
             try {
                 Document testSuiteDocument = testSuiteResource.getDocument();
                 Element documentElement = 
testSuiteDocument.getDocumentElement();
-                for (Element testCaseElement : 
UtilXml.childElementList(documentElement, "test-case")) {
+                for (Element testCaseElement : 
UtilXml.childElementList(documentElement, UtilMisc.toSet("test-case", 
"test-group"))) {
                     String caseName = 
testCaseElement.getAttribute("case-name");
                     pout.println(componentName + ":" + caseName);
                 }


Reply via email to