Author: julien(a)jboss.com
Date: 2007-10-10 13:00:10 -0400 (Wed, 10 Oct 2007)
New Revision: 8590
Added:
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/generic/
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/generic/GenericTestSuiteDef.java
modules/test/trunk/unit/src/resources/test/org/jboss/test/unit/runner/model/f2.xml
Modified:
modules/test/trunk/unit/src/main/org/jboss/test/unit/runner/model/ModelTests.java
modules/test/trunk/unit/src/main/org/jboss/unit/api/Assert.java
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/ModelBuilder.java
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/composite/CompositeTestSuiteDef.java
modules/test/trunk/unit/src/resources/jboss-unit-jar/org/jboss/unit/runner/model/jboss-unit_1_0.xsd
Log:
started to work on generic test suite
Modified:
modules/test/trunk/unit/src/main/org/jboss/test/unit/runner/model/ModelTests.java
===================================================================
---
modules/test/trunk/unit/src/main/org/jboss/test/unit/runner/model/ModelTests.java 2007-10-10
15:34:37 UTC (rev 8589)
+++
modules/test/trunk/unit/src/main/org/jboss/test/unit/runner/model/ModelTests.java 2007-10-10
17:00:10 UTC (rev 8590)
@@ -28,14 +28,18 @@
import org.jboss.unit.runner.model.ParametersDef;
import org.jboss.unit.runner.model.TestDef;
import org.jboss.unit.runner.model.TestSuiteDef;
+import org.jboss.unit.runner.model.generic.GenericTestSuiteDef;
import org.jboss.unit.runner.model.composite.CompositeTestSuiteDef;
import org.jboss.unit.runner.model.pojo.POJOTestSuiteDef;
import org.jboss.unit.runner.model.pojo.TestDefDef;
import static org.jboss.unit.util.CollectionTools.list;
import static org.jboss.unit.util.CollectionTools.set;
import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
import java.io.InputStream;
+import java.io.IOException;
import java.util.Iterator;
/**
@@ -48,87 +52,111 @@
{
testParameterValueDef();
+ buildFromXML1();
+ buildFromXML2();
+
+
+ }
+
+ private static TestSuiteDef buildTestSuite(String resourceId)
+ {
try
{
- InputStream in = ModelTests.class.getResourceAsStream("f1.xml");
+ InputStream in = ModelTests.class.getResourceAsStream(resourceId);
ModelBuilder builder = new ModelBuilder(new InputSource(in));
- TestSuiteDef suite = builder.build();
+ return builder.build();
+ }
+ catch (Exception e)
+ {
+ throw createFailure(e);
+ }
+ }
- CompositeTestSuiteDef composite = assertInstanceOf(suite,
CompositeTestSuiteDef.class);
+ private static void buildFromXML2()
+ {
+ TestSuiteDef suite = buildTestSuite("f2.xml");
- assertNotNull(composite.getSuites());
- assertFalse(composite.getSuites().isEmpty());
+ CompositeTestSuiteDef composite = assertInstanceOf(suite,
CompositeTestSuiteDef.class);
+ assertNotNull(composite.getSuites());
+ assertEquals(1, composite.getSuites().size());
+ GenericTestSuiteDef generic = assertInstanceOf(composite.getSuites().get(0),
GenericTestSuiteDef.class);
+ assertEquals("foo_generic", generic.getClassName());
- POJOTestSuiteDef pojoSuite =
assertInstanceOf(composite.getSuites().iterator().next(), POJOTestSuiteDef.class);
+ //
+ ParametersDef parameters = assertNotNull(generic.getParameters());
+ assertEquals(set("red"), parameters.getNames());
+ }
- TestDefDef myTestDef = pojoSuite.getTestDef("MyTest");
- assertNotNull(myTestDef);
- assertEquals("MyTest", myTestDef.getId());
- assertNotNull(myTestDef.getTestClass());
- assertEquals("org.foo.bar.MyTest",
myTestDef.getTestClass().getName());
- assertNotNull(myTestDef.getTestClass().getTestCases());
- assertEquals(0, myTestDef.getTestClass().getTestCases().size());
+ private static void buildFromXML1()
+ {
+ TestSuiteDef suite = buildTestSuite("f1.xml");
- TestDefDef myTestDef2 = pojoSuite.getTestDef("MyTest2");
- assertNotNull(myTestDef2);
- assertEquals("MyTest2", myTestDef2.getId());
- assertNotNull(myTestDef2.getTestClass());
- assertEquals("org.foo.bar.MyTest2",
myTestDef2.getTestClass().getName());
- assertNotNull(myTestDef2.getTestClass().getTestCases());
- assertEquals(2, myTestDef2.getTestClass().getTestCases().size());
- assertNotNull(myTestDef2.getTestClass().getTestCase("foo"));
- assertEquals("foo",
myTestDef2.getTestClass().getTestCase("foo").getName());
- assertNotNull(myTestDef2.getTestClass().getTestCase("bar"));
- assertEquals("bar",
myTestDef2.getTestClass().getTestCase("bar").getName());
+ CompositeTestSuiteDef composite = assertInstanceOf(suite,
CompositeTestSuiteDef.class);
+ assertNotNull(composite.getSuites());
+ assertFalse(composite.getSuites().isEmpty());
- assertEquals(2, pojoSuite.getTests().size());
+ POJOTestSuiteDef pojoSuite =
assertInstanceOf(composite.getSuites().iterator().next(), POJOTestSuiteDef.class);
- //
- Iterator<TestDef> iterator = pojoSuite.getTests().iterator();
- TestDef test1 = iterator.next();
- assertEquals("MyTest", test1.getRefId());
- ParametersDef parameters = test1.getParameters();
- assertNotNull(parameters);
- assertEquals(set("blah", "foo"), parameters.getNames());
- ParameterValueDef blah = parameters.getParameter("blah");
- assertEquals(list("bluh"), blah.list());
- ParameterValueDef foo = parameters.getParameter("foo");
- assertEquals(list("bar1", null), foo.list());
+ TestDefDef myTestDef = pojoSuite.getTestDef("MyTest");
+ assertNotNull(myTestDef);
+ assertEquals("MyTest", myTestDef.getId());
+ assertNotNull(myTestDef.getTestClass());
+ assertEquals("org.foo.bar.MyTest", myTestDef.getTestClass().getName());
+ assertNotNull(myTestDef.getTestClass().getTestCases());
+ assertEquals(0, myTestDef.getTestClass().getTestCases().size());
- //
- TestDef test2 = iterator.next();
- assertNotNull(test2.getRefId());
- ParametersDef test2Parameters = test2.getParameters();
- assertNotNull(test2Parameters);
- assertEquals(set("foo"), test2Parameters.getNames());
- ParameterValueDef fff = test2Parameters.getParameter("foo");
- assertEquals(list("bar"), fff.list());
+ TestDefDef myTestDef2 = pojoSuite.getTestDef("MyTest2");
+ assertNotNull(myTestDef2);
+ assertEquals("MyTest2", myTestDef2.getId());
+ assertNotNull(myTestDef2.getTestClass());
+ assertEquals("org.foo.bar.MyTest2",
myTestDef2.getTestClass().getName());
+ assertNotNull(myTestDef2.getTestClass().getTestCases());
+ assertEquals(2, myTestDef2.getTestClass().getTestCases().size());
+ assertNotNull(myTestDef2.getTestClass().getTestCase("foo"));
+ assertEquals("foo",
myTestDef2.getTestClass().getTestCase("foo").getName());
+ assertNotNull(myTestDef2.getTestClass().getTestCase("bar"));
+ assertEquals("bar",
myTestDef2.getTestClass().getTestCase("bar").getName());
- //
- TestDefDef myTestDef3 = pojoSuite.getTestDef(test2.getRefId());
- assertNotNull(myTestDef3);
+ assertEquals(2, pojoSuite.getTests().size());
- assertEquals(test2.getRefId(), myTestDef3.getId());
- assertNotNull(myTestDef3.getTestClass());
- assertEquals("org.foo.bar.OtherTest",
myTestDef3.getTestClass().getName());
- assertNotNull(myTestDef3.getTestClass().getTestCases());
- assertEquals(0, myTestDef3.getTestClass().getTestCases().size());
+ //
+ Iterator<TestDef> iterator = pojoSuite.getTests().iterator();
+ TestDef test1 = iterator.next();
+ assertEquals("MyTest", test1.getRefId());
+ ParametersDef parameters = test1.getParameters();
+ assertNotNull(parameters);
+ assertEquals(set("blah", "foo"), parameters.getNames());
+ ParameterValueDef blah = parameters.getParameter("blah");
+ assertEquals(list("bluh"), blah.list());
+ ParameterValueDef foo = parameters.getParameter("foo");
+ assertEquals(list("bar1", null), foo.list());
+ //
+ TestDef test2 = iterator.next();
+ assertNotNull(test2.getRefId());
+ ParametersDef test2Parameters = test2.getParameters();
+ assertNotNull(test2Parameters);
+ assertEquals(set("foo"), test2Parameters.getNames());
+ ParameterValueDef fff = test2Parameters.getParameter("foo");
+ assertEquals(list("bar"), fff.list());
- //
+ //
+ TestDefDef myTestDef3 = pojoSuite.getTestDef(test2.getRefId());
+ assertNotNull(myTestDef3);
+
+ assertEquals(test2.getRefId(), myTestDef3.getId());
+ assertNotNull(myTestDef3.getTestClass());
+ assertEquals("org.foo.bar.OtherTest",
myTestDef3.getTestClass().getName());
+ assertNotNull(myTestDef3.getTestClass().getTestCases());
+ assertEquals(0, myTestDef3.getTestClass().getTestCases().size());
+
+
+ //
// ParametersDef suiteParams = pojoSuite.getParameters();
// assertNotNull(suiteParams);
// assertEquals(set("red"), suiteParams.getMap().keySet());
// ParameterValueDef blue = suiteParams.getMap().get("red");
// assertEquals(list("blue"), blue.list());
-
- }
- catch (Exception e)
- {
- fail(e);
- }
-
-
}
private static void testParameterValueDef()
Modified: modules/test/trunk/unit/src/main/org/jboss/unit/api/Assert.java
===================================================================
--- modules/test/trunk/unit/src/main/org/jboss/unit/api/Assert.java 2007-10-10 15:34:37
UTC (rev 8589)
+++ modules/test/trunk/unit/src/main/org/jboss/unit/api/Assert.java 2007-10-10 17:00:10
UTC (rev 8590)
@@ -53,14 +53,22 @@
}
}
- public static void assertNotNull(Object actual)
+ public static <T> T assertNotNull(T actual)
{
- assertNotSame(null, actual);
+ return assertNotNull(null, actual);
}
- public static void assertNotNull(String msg, Object actual)
+ public static <T> T assertNotNull(String msg, T actual)
{
- assertNotSame(msg, null, actual);
+ if (actual == null)
+ {
+ if (msg != null)
+ {
+ msg = "Expected a non null object";
+ }
+ fail(msg);
+ }
+ return actual;
}
public static void assertNull(Object actual)
Modified: modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/ModelBuilder.java
===================================================================
---
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/ModelBuilder.java 2007-10-10
15:34:37 UTC (rev 8589)
+++
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/ModelBuilder.java 2007-10-10
17:00:10 UTC (rev 8590)
@@ -32,7 +32,9 @@
import org.jboss.unit.runner.model.pojo.POJOTestSuiteDef;
import org.jboss.unit.runner.model.pojo.TestClassDef;
import org.jboss.unit.runner.model.pojo.TestCaseDef;
+import org.jboss.unit.runner.model.pojo.TestDefDef;
import org.jboss.unit.runner.model.composite.CompositeTestSuiteDef;
+import org.jboss.unit.runner.model.generic.GenericTestSuiteDef;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
@@ -123,7 +125,10 @@
private TestSuiteDef buildTestSuite(Element suiteElt)
{
- if (suiteElt.getNodeName().equals("jboss-unit") ||
suiteElt.getNodeName().equals("suite"))
+ String suiteName = suiteElt.getNodeName();
+
+ //
+ if (suiteName.equals("jboss-unit") ||
suiteName.equals("suite"))
{
CompositeTestSuiteDef composite = new CompositeTestSuiteDef();
for (Element childSuiteElt : children(suiteElt))
@@ -133,39 +138,91 @@
}
return composite;
}
- else if (suiteElt.getNodeName().equals("pojo"))
+ else if (suiteName.equals("pojo"))
{
return buildPOJOTestSuite(suiteElt);
}
+ else if (suiteName.equals("generic"))
+ {
+ return buildGenericTestSuite(suiteElt);
+ }
//
throw new AssertionError();
}
+ private TestSuiteDef buildGenericTestSuite(Element suiteElt)
+ {
+ Element classElt = child(suiteElt, "class");
+ if (classElt == null)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ Attr attr = classElt.getAttributeNode("name");
+ if (attr == null)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ String className = attr.getValue();
+ GenericTestSuiteDef suite = new GenericTestSuiteDef(className);
+
+ //
+ for (Element testElt : children(suiteElt, "test"))
+ {
+ Attr refidAttr = testElt.getAttributeNode("refid");
+ if (refidAttr == null)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ String refid = refidAttr.getValue();
+
+ //
+ TestDef test = new TestDef(refid);
+
+ //
+ test.setParameters(buildParameters(testElt));
+
+ //
+ suite.addTest(test);
+ }
+
+ //
+ suite.setParameters(buildParameters(suiteElt));
+
+ //
+ return suite;
+ }
+
private TestClassDef buildTestClassDef(Element classElt)
{
- Node nameAttr = classElt.getAttributes().getNamedItem("name");
- if (nameAttr == null || !(nameAttr instanceof Attr))
+ Attr nameAttr = classElt.getAttributeNode("name");
+ if (nameAttr == null)
{
throw new IllegalArgumentException();
}
//
- String classname = ((Attr)nameAttr).getValue();
+ String classname = nameAttr.getValue();
TestClassDef testClass = new TestClassDef(classname);
//
for (Element caseElt : children(classElt, "case"))
{
- Node caseNameAttr = caseElt.getAttributes().getNamedItem("name");
- if (caseNameAttr == null || !(caseNameAttr instanceof Attr))
+ Attr caseNameAttr = caseElt.getAttributeNode("name");
+ if (caseNameAttr == null)
{
throw new IllegalArgumentException();
}
//
- testClass.addTestCase(new TestCaseDef(((Attr)caseNameAttr).getValue()));
+ testClass.addTestCase(new TestCaseDef(caseNameAttr.getValue()));
}
//
@@ -179,14 +236,14 @@
//
for (Element testDefElt : children(suiteElt, "test-def"))
{
- Node idAttr = testDefElt.getAttributes().getNamedItem("id");
- if (idAttr == null || !(idAttr instanceof Attr))
+ Attr idAttr = testDefElt.getAttributeNode("id");
+ if (idAttr == null)
{
throw new IllegalArgumentException();
}
//
- String id = ((Attr)idAttr).getValue();
+ String id = idAttr.getValue();
//
Element classElt = child(testDefElt, "class");
@@ -199,7 +256,7 @@
TestClassDef testClass = buildTestClassDef(classElt);
//
- org.jboss.unit.runner.model.pojo.TestDefDef testDef = new
org.jboss.unit.runner.model.pojo.TestDefDef(id);
+ TestDefDef testDef = new TestDefDef(id);
testDef.setTestClass(testClass);
//
@@ -209,7 +266,7 @@
//
for (Element testElt : children(suiteElt, "test"))
{
- Node refidAttr = testElt.getAttributes().getNamedItem("refid");
+ Attr refidAttr = testElt.getAttributeNode("refid");
Element classElt = child(testElt, "class");
//
@@ -218,11 +275,7 @@
//
if (refidAttr != null)
{
- if (!(refidAttr instanceof Attr))
- {
- throw new IllegalArgumentException();
- }
- refid = ((Attr)refidAttr).getValue();
+ refid = refidAttr.getValue();
}
else if (classElt != null)
{
@@ -230,7 +283,7 @@
TestClassDef testClass = buildTestClassDef(classElt);
- org.jboss.unit.runner.model.pojo.TestDefDef testDef = new
org.jboss.unit.runner.model.pojo.TestDefDef(id);
+ TestDefDef testDef = new TestDefDef(id);
testDef.setTestClass(testClass);
@@ -273,7 +326,7 @@
List<String> values = new ArrayList<String>();
- Attr attr = (Attr)parameterElt.getAttributes().getNamedItem("value");
+ Attr attr = parameterElt.getAttributeNode("value");
int src = NO_SOURCE;
Modified:
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/composite/CompositeTestSuiteDef.java
===================================================================
---
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/composite/CompositeTestSuiteDef.java 2007-10-10
15:34:37 UTC (rev 8589)
+++
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/composite/CompositeTestSuiteDef.java 2007-10-10
17:00:10 UTC (rev 8590)
@@ -50,7 +50,7 @@
suites.add(suite);
}
- public Collection<TestSuiteDef> getSuites()
+ public List<TestSuiteDef> getSuites()
{
return suites;
}
Added:
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/generic/GenericTestSuiteDef.java
===================================================================
---
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/generic/GenericTestSuiteDef.java
(rev 0)
+++
modules/test/trunk/unit/src/main/org/jboss/unit/runner/model/generic/GenericTestSuiteDef.java 2007-10-10
17:00:10 UTC (rev 8590)
@@ -0,0 +1,54 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.unit.runner.model.generic;
+
+import org.jboss.unit.runner.model.TestSuiteDef;
+import org.jboss.unit.runner.model.BuilderException;
+import org.jboss.unit.runner.TestRunner;
+import org.jboss.unit.runner.impl.generic.GenericTestRunner;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class GenericTestSuiteDef extends TestSuiteDef
+{
+
+ /** . */
+ private String className;
+
+ public GenericTestSuiteDef(String className)
+ {
+ this.className = className;
+ }
+
+ public String getClassName()
+ {
+ return className;
+ }
+
+ public TestRunner createRunner() throws BuilderException
+ {
+ return new GenericTestRunner(this);
+ }
+}
Modified:
modules/test/trunk/unit/src/resources/jboss-unit-jar/org/jboss/unit/runner/model/jboss-unit_1_0.xsd
===================================================================
---
modules/test/trunk/unit/src/resources/jboss-unit-jar/org/jboss/unit/runner/model/jboss-unit_1_0.xsd 2007-10-10
15:34:37 UTC (rev 8589)
+++
modules/test/trunk/unit/src/resources/jboss-unit-jar/org/jboss/unit/runner/model/jboss-unit_1_0.xsd 2007-10-10
17:00:10 UTC (rev 8590)
@@ -26,6 +26,7 @@
<xsd:sequence>
<xsd:element name="suite" type="suiteType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="pojo" type="pojoType"
minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="generic" type="genericType"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
@@ -75,6 +76,29 @@
<xsd:attribute name="refid" type="xsd:string"/>
</xsd:complexType>
+ <xsd:complexType name="genericType">
+ <xsd:annotation><xsd:documentation>The generic element defines a
generic test suite. It contains a global parameter set
+ and a set of tests to execute.</xsd:documentation></xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="class" minOccurs="1"
maxOccurs="1">
+ <xsd:complexType>
+ <xsd:attribute name="name" type="xsd:string"
use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="parameter" type="parameterType"
minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="test" type="generic_testType"
minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="generic_testType">
+ <xsd:annotation><xsd:documentation>A test element specifies a test to
execute. It must refer to an existing test definition.
+ The nested parameters are used to parameterize the test
configuration.</xsd:documentation></xsd:annotation>
+ <xsd:sequence>
+ <xsd:element name="parameter" type="parameterType"
minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="refid" type="xsd:string"
use="required"/>
+ </xsd:complexType>
+
<xsd:complexType name="parameterType">
<xsd:annotation><xsd:documentation>A parameter
element.</xsd:documentation></xsd:annotation>
<xsd:sequence>
Added: modules/test/trunk/unit/src/resources/test/org/jboss/test/unit/runner/model/f2.xml
===================================================================
--- modules/test/trunk/unit/src/resources/test/org/jboss/test/unit/runner/model/f2.xml
(rev 0)
+++
modules/test/trunk/unit/src/resources/test/org/jboss/test/unit/runner/model/f2.xml 2007-10-10
17:00:10 UTC (rev 8590)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jboss-unit
+ xmlns="urn:jboss:jboss-unit:1.0"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:jboss-unit:1.0 jboss-unit_1_0.xsd">
+ <generic>
+ <class name="foo_generic"/>
+ <parameter name="red" value="blue"/>
+ </generic>
+</jboss-unit>