Author: fmui
Date: Fri Oct 29 12:08:40 2010
New Revision: 1028710
URL: http://svn.apache.org/viewvc?rev=1028710&view=rev
Log:
- completed type test (can someone please verfiy?!)
- made HTML reports *a bit* nicer
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/TypesTest.java
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
URL:
http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java?rev=1028710&r1=1028709&r2=1028710&view=diff
==============================================================================
---
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
(original)
+++
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
Fri Oct 29 12:08:40 2010
@@ -679,6 +679,192 @@ public abstract class AbstractSessionTes
return (result.getStatus().getLevel() <= OK.getLevel() ? null :
result);
}
+ protected CmisTestResult assertEquals(TypeDefinition expected,
TypeDefinition actual, CmisTestResult success,
+ CmisTestResult failure) {
+
+ List<CmisTestResult> results = new ArrayList<CmisTestResult>();
+
+ CmisTestResult f;
+
+ if ((expected == null) && (actual == null)) {
+ return success;
+ }
+
+ if (expected == null) {
+ f = createResult(FAILURE, "Expected type defintion is null, but
actual type defintion is not!");
+ addResultChild(failure, f);
+
+ return failure;
+ }
+
+ if (actual == null) {
+ f = createResult(FAILURE, "Actual type defintion is null, but
expected type defintion is not!");
+ addResultChild(failure, f);
+
+ return failure;
+ }
+
+ f = createResult(FAILURE, "Type ids don't match!");
+ addResult(results, assertEquals(expected.getId(), actual.getId(),
null, f));
+
+ f = createResult(FAILURE, "Base type ids don't match!");
+ addResult(results, assertEquals(expected.getBaseTypeId(),
actual.getBaseTypeId(), null, f));
+
+ f = createResult(FAILURE, "Parent type ids don't match!");
+ addResult(results, assertEquals(expected.getParentTypeId(),
actual.getParentTypeId(), null, f));
+
+ f = createResult(FAILURE, "Query names don't match!");
+ addResult(results, assertEquals(expected.getQueryName(),
actual.getQueryName(), null, f));
+
+ f = createResult(FAILURE, "Local names don't match!");
+ addResult(results, assertEquals(expected.getLocalName(),
actual.getLocalName(), null, f));
+
+ f = createResult(FAILURE, "Local namespaces don't match!");
+ addResult(results, assertEquals(expected.getLocalNamespace(),
actual.getLocalNamespace(), null, f));
+
+ f = createResult(FAILURE, "Display names don't match!");
+ addResult(results, assertEquals(expected.getDisplayName(),
actual.getDisplayName(), null, f));
+
+ f = createResult(FAILURE, "Descriptions don't match!");
+ addResult(results, assertEquals(expected.getDescription(),
actual.getDescription(), null, f));
+
+ f = createResult(FAILURE, "Controllable ACl flags don't match!");
+ addResult(results, assertEquals(expected.isControllableAcl(),
actual.isControllableAcl(), null, f));
+
+ f = createResult(FAILURE, "Controllable Policy flags don't match!");
+ addResult(results, assertEquals(expected.isControllablePolicy(),
actual.isControllablePolicy(), null, f));
+
+ f = createResult(FAILURE, "Creatable flags don't match!");
+ addResult(results, assertEquals(expected.isCreatable(),
actual.isCreatable(), null, f));
+
+ f = createResult(FAILURE, "Fileable flags don't match!");
+ addResult(results, assertEquals(expected.isFileable(),
actual.isFileable(), null, f));
+
+ f = createResult(FAILURE, "Fulltext indexed flags don't match!");
+ addResult(results, assertEquals(expected.isFulltextIndexed(),
actual.isFulltextIndexed(), null, f));
+
+ f = createResult(FAILURE, "Queryable flags don't match!");
+ addResult(results, assertEquals(expected.isQueryable(),
actual.isQueryable(), null, f));
+
+ f = createResult(FAILURE, "Included in supertype query flags don't
match!");
+ addResult(results,
+ assertEquals(expected.isIncludedInSupertypeQuery(),
actual.isIncludedInSupertypeQuery(), null, f));
+
+ if ((expected.getPropertyDefinitions() != null) &&
(actual.getPropertyDefinitions() != null)) {
+ Map<String, PropertyDefinition<?>> epd =
expected.getPropertyDefinitions();
+ Map<String, PropertyDefinition<?>> apd =
actual.getPropertyDefinitions();
+
+ f = createResult(FAILURE, "Different number of property
defintions!");
+ addResult(results, assertEquals(epd.size(), apd.size(), null, f));
+
+ for (PropertyDefinition<?> pd : epd.values()) {
+ f = createResult(FAILURE, "Property definition mismatch: " +
pd.getId());
+ addResult(results, assertEquals(pd, apd.get(pd.getId()), null,
f));
+ }
+ }
+
+ if (getWorst(results).getLevel() <= OK.getLevel()) {
+ for (CmisTestResult result : results) {
+ addResultChild(success, result);
+ }
+
+ return success;
+ } else {
+ for (CmisTestResult result : results) {
+ addResultChild(failure, result);
+ }
+
+ return failure;
+ }
+ }
+
+ protected CmisTestResult assertEquals(PropertyDefinition<?> expected,
PropertyDefinition<?> actual,
+ CmisTestResult success, CmisTestResult failure) {
+
+ List<CmisTestResult> results = new ArrayList<CmisTestResult>();
+
+ CmisTestResult f;
+
+ if ((expected == null) && (actual == null)) {
+ return success;
+ }
+
+ if (expected == null) {
+ f = createResult(FAILURE, "Expected property defintion is null,
but actual property defintion is not!");
+ addResultChild(failure, f);
+
+ return failure;
+ }
+
+ if (actual == null) {
+ f = createResult(FAILURE, "Actual property defintion is null, but
expected property defintion is not!");
+ addResultChild(failure, f);
+
+ return failure;
+ }
+
+ f = createResult(FAILURE, "Property ids don't match!");
+ addResult(results, assertEquals(expected.getId(), actual.getId(),
null, f));
+
+ f = createResult(FAILURE, "Local names don't match!");
+ addResult(results, assertEquals(expected.getLocalName(),
actual.getLocalName(), null, f));
+
+ f = createResult(FAILURE, "Local namespaces don't match!");
+ addResult(results, assertEquals(expected.getLocalNamespace(),
actual.getLocalNamespace(), null, f));
+
+ f = createResult(FAILURE, "Display names don't match!");
+ addResult(results, assertEquals(expected.getDisplayName(),
actual.getDisplayName(), null, f));
+
+ f = createResult(FAILURE, "Query names don't match!");
+ addResult(results, assertEquals(expected.getQueryName(),
actual.getQueryName(), null, f));
+
+ f = createResult(FAILURE, "Property types don't match!");
+ addResult(results, assertEquals(expected.getPropertyType(),
actual.getPropertyType(), null, f));
+
+ f = createResult(FAILURE, "Cardinalities don't match!");
+ addResult(results, assertEquals(expected.getCardinality(),
actual.getCardinality(), null, f));
+
+ f = createResult(FAILURE, "Descriptions don't match!");
+ addResult(results, assertEquals(expected.getDescription(),
actual.getDescription(), null, f));
+
+ f = createResult(FAILURE, "Updatability flags don't match!");
+ addResult(results, assertEquals(expected.getUpdatability(),
actual.getUpdatability(), null, f));
+
+ f = createResult(FAILURE, "Default values don't match!");
+ addResult(results, assertEqualLists(expected.getDefaultValue(),
actual.getDefaultValue(), null, f));
+
+ f = createResult(FAILURE, "Inherited flags don't match!");
+ addResult(results, assertEquals(expected.isInherited(),
actual.isInherited(), null, f));
+
+ f = createResult(FAILURE, "Required flags don't match!");
+ addResult(results, assertEquals(expected.isRequired(),
actual.isRequired(), null, f));
+
+ f = createResult(FAILURE, "Queryable flags don't match!");
+ addResult(results, assertEquals(expected.isQueryable(),
actual.isQueryable(), null, f));
+
+ f = createResult(FAILURE, "Orderable flags don't match!");
+ addResult(results, assertEquals(expected.isOrderable(),
actual.isOrderable(), null, f));
+
+ f = createResult(FAILURE, "Open choice flags don't match!");
+ addResult(results, assertEquals(expected.isOpenChoice(),
actual.isOpenChoice(), null, f));
+
+ if (getWorst(results).getLevel() <= OK.getLevel()) {
+ for (CmisTestResult result : results) {
+ addResultChild(success, result);
+ }
+
+ return success;
+ } else {
+ for (CmisTestResult result : results) {
+ addResultChild(failure, result);
+ }
+
+ return failure;
+ }
+ }
+
+ // --- helpers ---
+
protected void addResult(List<CmisTestResult> results, CmisTestResult
result) {
if (result != null) {
if (result instanceof CmisTestResultImpl) {
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java
URL:
http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java?rev=1028710&r1=1028709&r2=1028710&view=diff
==============================================================================
---
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java
(original)
+++
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/HtmlReport.java
Fri Oct 29 12:08:40 2010
@@ -20,6 +20,7 @@ package org.apache.chemistry.opencmis.tc
import java.io.IOException;
import java.io.Writer;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -39,9 +40,20 @@ public class HtmlReport extends Abstract
public void createReport(Map<String, String> parameters,
List<CmisTestGroup> groups, Writer writer)
throws IOException {
writer.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"
\"http://www.w3.org/TR/html4/strict.dtd\">\n");
- writer.write("<html><head><title>Report</title></head><body>\n");
+ writer.write("<html><head>\n<title>Report</title>\n");
+ writer.write("<style TYPE=\"text/css\">\n");
+ writer.write(".tckResultINFO { margin-left: 5px; margin-right: 5px;
}\n");
+ writer.write(".tckResultSKIPPED { margin-left: 5px; margin-right: 5px;
background-color: #FFFFFF; }\n");
+ writer.write(".tckResultOK { margin-left: 5px; margin-right: 5px;
background-color: #00FF00; }\n");
+ writer.write(".tckResultWARNING { margin-left: 5px; margin-right: 5px;
background-color: #FFFF00; }\n");
+ writer.write(".tckResultFAILURE { margin-left: 5px; margin-right: 5px;
background-color: #FF6000; }\n");
+ writer.write(".tckResultUNEXPECTED_EXCEPTION { margin-left: 5px;
margin-right: 5px; background-color: #FF0000; }\n");
+ writer.write("</style>");
- writer.write("\n<h1>Report</h1>\n");
+ writer.write("</head><body>\n");
+
+ writer.write("\n<h1>OpenCMIS TCK Report</h1>\n");
+ writer.write((new Date()) + "\n");
writer.write("\n<h2>Parameters</h2>\n");
@@ -81,13 +93,15 @@ public class HtmlReport extends Abstract
if (test.getResults() != null) {
for (CmisTestResult result : test.getResults()) {
+ writer.write("<div style=\"padding: 5px;\">\n");
printResult(result, writer);
+ writer.write("</div>\n");
}
}
}
private void printResult(CmisTestResult result, Writer writer) throws
IOException {
- writer.write("<div style=\"padding:5px\">\n");
+ writer.write("<div class=\"tckResult" + result.getStatus().name() +
"\">\n");
writer.write("<b>" + result.getStatus() + "</b>: " +
result.getMessage());
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/TypesTest.java
URL:
http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/TypesTest.java?rev=1028710&r1=1028709&r2=1028710&view=diff
==============================================================================
---
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/TypesTest.java
(original)
+++
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/TypesTest.java
Fri Oct 29 12:08:40 2010
@@ -21,9 +21,11 @@ package org.apache.chemistry.opencmis.tc
import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.chemistry.opencmis.client.api.ItemIterable;
import org.apache.chemistry.opencmis.client.api.ObjectType;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.Tree;
@@ -93,14 +95,17 @@ public class TypesTest extends AbstractS
addResult(createResult(WARNING, "Policy type not available!", e,
false));
}
- runTypeChecks(session, session.getTypeDescendants(null, -1, true));
+ int numOfTypes = runTypeChecks(session,
session.getTypeDescendants(null, -1, true));
+
+ addResult(createInfoResult("Checked " + numOfTypes + " type
definitions."));
}
- private void runTypeChecks(Session session, List<Tree<ObjectType>> types) {
+ private int runTypeChecks(Session session, List<Tree<ObjectType>> types) {
if (types == null) {
- return;
+ return 0;
}
+ int numOfTypes = 0;
CmisTestResult failure;
for (Tree<ObjectType> tree : types) {
@@ -108,10 +113,87 @@ public class TypesTest extends AbstractS
addResult(assertNotNull(tree, null, failure));
if (tree != null) {
+ numOfTypes++;
+
addResult(checkTypeDefinition(session, tree.getItem(), "Type
spec compliance: "
+ tree.getItem().getId()));
- runTypeChecks(session, tree.getChildren());
+
+ // clear the cache to ensure that the type definition is
+ // reloaded from the repository
+ session.clear();
+
+ try {
+ TypeDefinition reloadedType =
session.getTypeDefinition(tree.getItem().getId());
+
+ addResult(checkTypeDefinition(session, reloadedType, "Type
spec compliance: "
+ + (reloadedType == null ? "?" :
reloadedType.getId())));
+
+ failure = createResult(FAILURE,
+ "Type fetched via getTypeDescendants() is does not
macth type fetched via getTypeDefinition(): "
+ + tree.getItem().getId());
+ addResult(assertEquals(tree.getItem(), reloadedType, null,
failure));
+ } catch (CmisObjectNotFoundException e) {
+ addResult(createResult(FAILURE,
+ "Type fetched via getTypeDescendants() is not
available via getTypeDefinition(): "
+ + tree.getItem().getId(), e, false));
+ }
+
+ // clear the cache again to ensure that the type definition
+ // children are reloaded from the repository
+ session.clear();
+
+ try {
+ ItemIterable<ObjectType> reloadedTypeChildren =
session.getTypeChildren(tree.getItem().getId(),
+ true);
+
+ // check type children
+ Map<String, ObjectType> typeChilden = new HashMap<String,
ObjectType>();
+ for (ObjectType childType : reloadedTypeChildren) {
+ addResult(checkTypeDefinition(session, childType,
"Type spec compliance: "
+ + (childType == null ? "?" :
childType.getId())));
+
+ if (childType != null) {
+ typeChilden.put(childType.getId(), childType);
+ }
+ }
+
+ // compare type children and type descendants
+ if (tree.getChildren() == null) {
+ failure = createResult(FAILURE,
+ "Type children fetched via
getTypeDescendants() don't match type children fetched via getTypeChildren(): "
+ + tree.getItem().getId());
+ addResult(assertEquals(0, typeChilden.size(), null,
failure));
+ } else {
+ // collect the children
+ Map<String, ObjectType> typeDescendants = new
HashMap<String, ObjectType>();
+ for (Tree<ObjectType> childType : tree.getChildren()) {
+ if ((childType != null) && (childType.getItem() !=
null)) {
+
typeDescendants.put(childType.getItem().getId(), childType.getItem());
+ }
+ }
+
+ failure = createResult(FAILURE,
+ "Type children fetched via
getTypeDescendants() don't match type children fetched via getTypeChildren(): "
+ + tree.getItem().getId());
+ addResult(assertEquals(typeDescendants.size(),
typeChilden.size(), null, failure));
+
+ for (ObjectType compareType :
typeDescendants.values()) {
+ failure = createResult(FAILURE,
+ "Type fetched via getTypeDescendants()
doesn't match type fetched via getTypeChildren(): "
+ + tree.getItem().getId());
+ addResult(assertEquals(compareType,
typeChilden.get(compareType.getId()), null, failure));
+ }
+ }
+ } catch (CmisObjectNotFoundException e) {
+ addResult(createResult(FAILURE,
+ "Type children fetched via getTypeDescendants() is
not available via getTypeChildren(): "
+ + tree.getItem().getId(), e, false));
+ }
+
+ numOfTypes += runTypeChecks(session, tree.getChildren());
}
}
+
+ return numOfTypes;
}
}