You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2012/12/30 14:04:17 UTC
svn commit: r1426927 - in /webservices/commons/trunk/modules/axiom/modules:
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/
axiom-testsuite/src/main/java/org/apache/axiom/ts/om/
axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sour...
Author: veithen
Date: Sun Dec 30 13:04:17 2012
New Revision: 1426927
URL: http://svn.apache.org/viewvc?rev=1426927&view=rev
Log:
Expanded the code coverage generated by TestSerializeToXMLWriterFromReader and fixed an issue that caused OMSourcedElement#getXMLStreamReaderWithoutCaching to unnecessarily build nodes. This also sheds some light on AXIOM-201 and AXIOM-431.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMNavigator.java
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestSerializeToXMLWriterFromReader.java
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMNavigator.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMNavigator.java?rev=1426927&r1=1426926&r2=1426927&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMNavigator.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMNavigator.java Sun Dec 30 13:04:17 2012
@@ -44,7 +44,7 @@ public class OMNavigator {
// root, the traversal is terminated
/** Field root */
- private OMSerializable root;
+ private OMContainer root;
/** Field backtracked */
private boolean backtracked;
@@ -61,30 +61,17 @@ public class OMNavigator {
// be considered as an interior node or a leaf node.
private boolean isDataSourceALeaf = false;
- /** Constructor OMNavigator. */
- public OMNavigator() {
- }
-
/**
* Constructor OMNavigator.
*
* @param node
*/
- public OMNavigator(OMSerializable node) {
- init(node);
- }
-
- /**
- * Method init.
- *
- * @param node
- */
- public void init(OMSerializable node) {
+ public OMNavigator(OMContainer node) {
next = node;
root = node;
backtracked = false;
}
-
+
/**
* Indicate if an OMSourcedElement with a OMDataSource
* should be considered as an interior element node or as
@@ -194,7 +181,8 @@ public class OMNavigator {
* @return first child or null
*/
private OMNode _getFirstChild(OMContainer node) {
- if (isOMSourcedElement(node)) {
+ // TODO: We have a problem if the tree has parts constructed by different builders; this is related to AXIOM-201 and AXIOM-431
+ if (node.getBuilder() != root.getBuilder()) {
OMNode first = node.getFirstOMChild();
OMNode sibling = first;
while (sibling != null) {
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java?rev=1426927&r1=1426926&r2=1426927&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java Sun Dec 30 13:04:17 2012
@@ -461,7 +461,14 @@ public class OMTestSuiteBuilder extends
addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToWriter(metaFactory));
addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriter(metaFactory));
addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterEmbedded(metaFactory));
- addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterFromReader(metaFactory));
+ for (int expand = 0; expand <= 2; expand++) {
+ for (int count = 1; count <= 2; count++) {
+ addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterFromReader(metaFactory, false, false, expand, count));
+ addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterFromReader(metaFactory, false, true, expand, count));
+ addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterFromReader(metaFactory, true, false, expand, count));
+ addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterFromReader(metaFactory, true, true, expand, count));
+ }
+ }
addTest(new org.apache.axiom.ts.om.sourcedelement.TestSerializeToXMLWriterFromReaderEmbedded(metaFactory));
addTest(new org.apache.axiom.ts.om.sourcedelement.TestSetDataSource(metaFactory));
addTest(new org.apache.axiom.ts.om.sourcedelement.TestSetDataSourceOnAlreadyExpandedElement(metaFactory));
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestSerializeToXMLWriterFromReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestSerializeToXMLWriterFromReader.java?rev=1426927&r1=1426926&r2=1426927&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestSerializeToXMLWriterFromReader.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestSerializeToXMLWriterFromReader.java Sun Dec 30 13:04:17 2012
@@ -19,49 +19,89 @@
package org.apache.axiom.ts.om.sourcedelement;
import java.io.StringWriter;
-import java.util.Iterator;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.axiom.om.OMDocument;
+import org.apache.axiom.om.OMDataSource;
+import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMMetaFactory;
-import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMSourcedElement;
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.OMXMLParserWrapper;
-import org.apache.axiom.om.util.StAXUtils;
import org.apache.axiom.ts.AxiomTestCase;
+import org.custommonkey.xmlunit.XMLAssert;
/**
- * Tests OMSourcedElement getReader support
+ * Tests {@link OMSourcedElement#getXMLStreamReader(boolean)}.
*/
public class TestSerializeToXMLWriterFromReader extends AxiomTestCase {
- public TestSerializeToXMLWriterFromReader(OMMetaFactory metaFactory) {
+ private final boolean destructive;
+ private final boolean cache;
+ private final int expand;
+ private final int count;
+
+ /**
+ * Constructor.
+ *
+ * @param metaFactory
+ * the meta factory for the implementation to be tested
+ * @param destructive
+ * determines if the {@link OMDataSource} is destructive or not
+ * @param cache
+ * the argument to be passed to {@link OMSourcedElement#getXMLStreamReader(boolean)}
+ * @param expand
+ * determines if and how the sourced element should be expanded before calling
+ * {@link OMSourcedElement#getXMLStreamReader(boolean)}: 0 = don't expand; 1 =
+ * expand; 2 = expand and build
+ * @param count
+ * the number of times {@link OMSourcedElement#getXMLStreamReader(boolean)} will be
+ * called; the only meaningful values are 1 and 2
+ */
+ public TestSerializeToXMLWriterFromReader(OMMetaFactory metaFactory, boolean destructive, boolean cache, int expand, int count) {
super(metaFactory);
+ this.destructive = destructive;
+ this.cache = cache;
+ this.expand = expand;
+ this.count = count;
+ addTestProperty("destructive", String.valueOf(destructive));
+ addTestProperty("cache", String.valueOf(cache));
+ addTestProperty("expand", String.valueOf(expand));
+ addTestProperty("count", String.valueOf(count));
}
protected void runTest() throws Throwable {
- OMSourcedElement element = TestDocument.DOCUMENT1.createOMSourcedElement(metaFactory.getOMFactory(), false);
- StringWriter writer = new StringWriter();
- XMLStreamWriter xmlwriter = StAXUtils.createXMLStreamWriter(writer);
-
- OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXOMBuilder(
- metaFactory.getOMFactory(), element.getXMLStreamReader());
- OMDocument omDocument = builder.getDocument();
- Iterator it = omDocument.getChildren();
- while (it.hasNext()) {
- OMNode omNode = (OMNode) it.next();
- // TODO: quick fix required because OMChildrenIterator#next() no longer builds the node
- omNode.getNextOMSibling();
- omNode.serializeAndConsume(xmlwriter);
+ OMFactory factory = metaFactory.getOMFactory();
+ OMSourcedElement element = TestDocument.DOCUMENT1.createOMSourcedElement(factory, destructive);
+ if (expand != 0) {
+ element.getFirstOMChild();
+ }
+ if (expand == 2) {
+ element.build();
+ }
+ for (int iteration=0; iteration<count; iteration++) {
+ boolean expectException = iteration != 0 && expand != 2 && !cache && (destructive || expand == 1);
+ StringWriter writer = new StringWriter();
+ try {
+ OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXOMBuilder(factory, element.getXMLStreamReader(cache));
+ builder.getDocument().serialize(writer);
+ if (expectException) {
+ fail("Expected exception");
+ }
+ } catch (Exception ex) {
+ if (!expectException) {
+ throw ex;
+ } else {
+ continue;
+ }
+ }
+ XMLAssert.assertXMLEqual(TestDocument.DOCUMENT1.getContent(), writer.toString());
+ // If the underlying OMDataSource is non destructive, the expansion status should not have been
+ // changed by the call to getXMLStreamReader. If it is destructive and caching is enabled, then
+ // the sourced element should be expanded.
+ if (expand != 0 || (destructive && cache)) {
+ assertTrue(element.isExpanded());
+ assertEquals(expand == 2 || (expand == 1 && cache) || (expand == 0 && destructive && cache), element.isComplete());
+ } else {
+ assertFalse(element.isExpanded());
+ }
}
-
- xmlwriter.flush();
- String result = writer.toString();
-
- // We can't test for equivalence because the underlying OMSourceElement is
- // changed as it is serialized. So I am testing for an internal value.
- assertTrue("Serialized text error" + result, result.indexOf("1930110111") > 0);
- assertFalse("Element expansion when serializing", element.isExpanded());
}
}