\r
import java.util.Date;\r
import java.util.List;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
import java.util.UUID;\r
import java.util.Vector;\r
\r
\r
private Date closeDate;\r
private List<TestResultPart> parts = new Vector<TestResultPart>();\r
+ \r
+ private Map<String, String> attributes = new TreeMap<String, String>();\r
\r
public void addResultPart(TestResultPart part) {\r
if (throwError && part.getStatus() == ERROR) {\r
return currentTestRunUuid;\r
}\r
\r
+ public Map<String, String> getAttributes() {\r
+ return attributes;\r
+ }\r
+\r
}\r
package org.argeo.slc.core.test;\r
\r
import java.util.Date;\r
+import java.util.Map;\r
\r
/** The result of a test */\r
public interface TestResult extends TestStatus, TestRunAware {\r
* result is not closed.\r
*/\r
public Date getCloseDate();\r
+\r
+ /** Additional arbitrary meta data */\r
+ public Map<String, String> getAttributes();\r
}\r
private TreeSPath currentPath;\r
private TestRun currentTestRun;\r
\r
- private Map<String, String> rootTags = new TreeMap<String, String>();\r
-\r
private Date closeDate;\r
\r
private boolean isClosed = false;\r
private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
private SortedMap<TreeSPath, StructureElement> elements = new TreeMap<TreeSPath, StructureElement>();\r
\r
+ private Map<String, String> attributes = new TreeMap<String, String>();\r
+\r
/** Sets the list of listeners. */\r
public void setListeners(List<TestResultListener<TreeTestResult>> listeners) {\r
this.listeners = listeners;\r
if (!elements.containsKey(p)) {\r
StructureElement elem = registry.getElement(p);\r
if (elem != null) {\r
-\r
- if (elements.size() == 0\r
- && (elem instanceof SimpleSElement)) {\r
- SimpleSElement sElem = ((SimpleSElement) elem)\r
- .clone();\r
- sElem.getTags().putAll(rootTags);\r
- elem = sElem;\r
- }\r
-\r
elements.put(p, elem);\r
}\r
} else {\r
}\r
}\r
\r
- public Map<String, String> getRootTags() {\r
- return rootTags;\r
+ public Map<String, String> getAttributes() {\r
+ return attributes;\r
}\r
\r
- public void setRootTags(Map<String, String> rootTags) {\r
- this.rootTags = rootTags;\r
+ public void setAttributes(Map<String, String> attributes) {\r
+ this.attributes = attributes;\r
}\r
-\r
}\r
assertEquals(expected.getUser(), reached.getUser());\r
assertEquals(expected.getType(), reached.getType());\r
assertEquals(expected.getStatus(), reached.getStatus());\r
+ \r
+ // Attributes\r
assertEquals(expected.getAttributes().size(), reached.getAttributes()\r
.size());\r
for (String key : expected.getAttributes().keySet()) {\r
registry.register(path, elem);\r
\r
TreeTestResult ttr = createSimpleTreeTestResult();\r
+ ttr.getAttributes().put("testCase", "UNIT");\r
+\r
+ // Simulate test run\r
ttr.notifyCurrentPath(registry, path);\r
ttr.notifyTestRun(testRun);\r
testRun.setTestResult(ttr);\r
assertEquals(expected.getUuid(), reached.getUuid());\r
assertDateSec(expected.getCloseDate(), reached.getCloseDate());\r
\r
+ // Attributes\r
+ assertEquals(expected.getAttributes().size(), reached.getAttributes()\r
+ .size());\r
+ for (String key : expected.getAttributes().keySet()) {\r
+ String expectedValue = expected.getAttributes().get(key);\r
+ String reachedValue = reached.getAttributes().get(key);\r
+ assertNotNull(reachedValue);\r
+ assertEquals(expectedValue, reachedValue);\r
+ }\r
+\r
+ // Result parts\r
assertEquals(expected.getResultParts().size(), reached.getResultParts()\r
.size());\r
for (TreeSPath path : expected.getResultParts().keySet()) {\r
assertPartSubList(lstExpected, lstReached);\r
}\r
\r
+ // Elements\r
assertEquals(expected.getElements().size(), reached.getElements()\r
.size());\r
for (TreeSPath path : expected.getElements().keySet()) {\r
<bind-xml name="uuid" node="attribute" />\r
</field>\r
<field name="closeDate" />\r
+ <field name="attributes" collection="map">
+ <bind-xml name="attribute" location="attributes">
+ <class name="org.exolab.castor.mapping.MapItem">
+ <map-to
+ ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />
+ <field name="key" type="string">
+ <bind-xml name="name" node="attribute" />
+ </field>
+ <field name="value" type="string">
+ <bind-xml node="text" />
+ </field>
+ </class>
+ </bind-xml>
+ </field>
<field name="resultParts" collection="map">\r
<bind-xml name="result-part" location="result-parts">\r
<class name="org.exolab.castor.mapping.MapItem">\r
<xs:all>\r
<xs:element name="close-date" type="xs:dateTime"\r
minOccurs="0" />\r
+ <xs:element name="attributes" minOccurs="0"
+ type="slc:AttributesType" />
<xs:element name="result-parts" minOccurs="0"\r
type="slc:ResultPartsType" />\r
<xs:element name="elements" minOccurs="0"\r