Repository: incubator-juneau Updated Branches: refs/heads/master 61d3f3a9c -> 82eca2873
https://issues.apache.org/jira/browse/JUNEAU-2 Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/82eca287 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/82eca287 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/82eca287 Branch: refs/heads/master Commit: 82eca287337afa5040781b5ff10edfe3e22135dd Parents: 61d3f3a Author: jamesbognar <[email protected]> Authored: Thu Aug 4 12:38:17 2016 -0400 Committer: jamesbognar <[email protected]> Committed: Thu Aug 4 12:38:17 2016 -0400 ---------------------------------------------------------------------- .../test/java/org/apache/juneau/TestUtils.java | 112 +++++++++++++------ .../java/org/apache/juneau/jena/CT_Rdf.java | 6 +- 2 files changed, 78 insertions(+), 40 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/82eca287/org.apache.juneau/src/test/java/org/apache/juneau/TestUtils.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau/src/test/java/org/apache/juneau/TestUtils.java b/org.apache.juneau/src/test/java/org/apache/juneau/TestUtils.java index dda6a97..5820f29 100755 --- a/org.apache.juneau/src/test/java/org/apache/juneau/TestUtils.java +++ b/org.apache.juneau/src/test/java/org/apache/juneau/TestUtils.java @@ -277,21 +277,87 @@ public class TestUtils { * This method is primarily meant for debugging purposes. */ private static final String sortXml(String xml) throws Exception { - - xml = xml.replaceAll("\\w+\\:", ""); // Strip out all namespaces. + xml = xml.replaceAll("\\w+\\:", "").replaceAll(">\\s+<", "><"); // Strip out all namespaces and whitespace. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setIgnoringElementContentWhitespace(true); - dbf.setNamespaceAware(false); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(new StringReader(xml))); - DOMSource s = new DOMSource(doc); + SortedNode n = new SortedNode(doc.getDocumentElement()); + return n.toString(); + } + + /** + * A sorted node in a DOM tree. + */ + private static class SortedNode implements Comparable<SortedNode> { + public String name, text="", attrs=""; + public List<SortedNode> children = new LinkedList<SortedNode>(); + + SortedNode(Element e) { + this.name = e.getNodeName(); + NamedNodeMap attrs = e.getAttributes(); + if (attrs != null) { + StringBuilder sb = new StringBuilder(); + Set<String> attrNames = new TreeSet<String>(); + for (int i = 0; i < attrs.getLength(); i++) + attrNames.add(attrs.item(i).getNodeName()); + for (String n : attrNames) { + Node node = attrs.getNamedItem(n); + sb.append(" ").append(n).append("='").append(node.getNodeValue()).append("'"); + } + this.attrs = sb.toString(); + } + NodeList nl = e.getChildNodes(); + for (int i = 0; i < nl.getLength(); i++) { + Node n = nl.item(i); + if (n instanceof Element) + children.add(new SortedNode((Element)nl.item(i))); + if (n instanceof Text) + this.text += ((Text)n).getNodeValue(); + } + Collections.sort(children); + } + + @Override + public int compareTo(SortedNode n) { + int i = name.compareTo(n.name); + if (i != 0) + return i; + i = attrs.compareTo(n.attrs); + if (i != 0) + return i; + i = text.compareTo(n.text); + if (i != 0) + return i; + return 0; + } - StringWriter sw = new StringWriter(); - StreamResult sr = new StreamResult(sw); - XML_SORT_TRANSFORMER.transform(s, sr); - return sw.toString().replace('"', '\'').replace("\r", ""); + public String toString() { + return toString(0, new StringBuilder()).toString(); + } + + public StringBuilder toString(int depth ,StringBuilder sb) { + indent(depth, sb).append("<").append(name).append(attrs); + if (children.isEmpty() && text.isEmpty()) { + sb.append("/>\n"); + return sb; + } + sb.append(">\n"); + if (! text.isEmpty()) + indent(depth+1, sb).append(text).append("\n"); + for (SortedNode c : children) { + c.toString(depth+1, sb); + } + indent(depth, sb).append("</").append(name).append(">\n"); + return sb; + } + } + + private static StringBuilder indent(int depth, StringBuilder sb) { + for (int i = 0; i < depth; i++) + sb.append("\t"); + return sb; } /** @@ -303,34 +369,6 @@ public class TestUtils { assertEquals(sortXml(expected), sortXml(actual)); } - private static Transformer XML_SORT_TRANSFORMER; - static { - try { - String xsl = "" - + " <xsl:stylesheet version='1.0'" - + " xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" - + " <xsl:output omit-xml-declaration='yes' indent='yes'/>" - + " <xsl:strip-space elements='*'/>" - + " <xsl:template match='node()|@*'>" - + " <xsl:copy>" - + " <xsl:apply-templates select='@*'>" - + " <xsl:sort select='name()'/>" - + " </xsl:apply-templates>" - + " <xsl:apply-templates select='node()'>" - + " <xsl:sort select='name()'/>" - + " <xsl:sort select='text()'/>" - + " </xsl:apply-templates>" - + " </xsl:copy>" - + " </xsl:template>" - + " </xsl:stylesheet>"; - TransformerFactory tf = TransformerFactory.newInstance(); - StreamSource ss = new StreamSource(new StringReader(xsl)); - XML_SORT_TRANSFORMER = tf.newTransformer(ss); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - /** * Assert that the object equals the specified string after running it through JsonSerializer.DEFAULT_LAX.toString(). */ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/82eca287/org.apache.juneau/src/test/java/org/apache/juneau/jena/CT_Rdf.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau/src/test/java/org/apache/juneau/jena/CT_Rdf.java b/org.apache.juneau/src/test/java/org/apache/juneau/jena/CT_Rdf.java index 54ca8b8..d04cb10 100755 --- a/org.apache.juneau/src/test/java/org/apache/juneau/jena/CT_Rdf.java +++ b/org.apache.juneau/src/test/java/org/apache/juneau/jena/CT_Rdf.java @@ -548,7 +548,7 @@ public class CT_Rdf { + "\n <jp:f3 resource='http://localhost/f3/1'/>" + "\n </rdf:Description>" + "\n</rdf:RDF>"; - // TODO: https://issues.apache.org/jira/browse/JUNEAU-2 assertXmlEquals(expected, rdfXml); + assertXmlEquals(expected, rdfXml); l = p.parseCollection(rdfXml, LinkedList.class, D.class); D[] da = l.toArray(new D[l.size()]); @@ -564,7 +564,7 @@ public class CT_Rdf { + "\n <jp:f3 resource='http://localhost/f3/1'/>" + "\n </rdf:Description>" + "\n</rdf:RDF>"; - // TODO: https://issues.apache.org/jira/browse/JUNEAU-2 assertXmlEquals(expected, rdfXml); + assertXmlEquals(expected, rdfXml); da = p.parse(rdfXml, D[].class); rdfXml = s.serialize(da); @@ -579,7 +579,7 @@ public class CT_Rdf { + "\n <jp:f3 resource='http://localhost/f3/1'/>" + "\n </rdf:Description>" + "\n</rdf:RDF>"; - // TODO: https://issues.apache.org/jira/browse/JUNEAU-2assertXmlEquals(expected, rdfXml); + assertXmlEquals(expected, rdfXml); } public static class D {
