X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Ftest%2Forg%2Fwamblee%2Fxml%2FXmlUtils.java;h=638d64e4e98e79e789893221acac89fb30c0c39e;hb=0c4e12b44524f0ef5c26255807ca2a67ab3f652a;hp=c83bdae8fb465ad93f4d1c55a288b437d52dc342;hpb=d072c523829f9be6522b983962b0e1ea15788dad;p=utils diff --git a/support/test/org/wamblee/xml/XmlUtils.java b/support/test/org/wamblee/xml/XmlUtils.java index c83bdae8..638d64e4 100644 --- a/support/test/org/wamblee/xml/XmlUtils.java +++ b/support/test/org/wamblee/xml/XmlUtils.java @@ -12,13 +12,15 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ + */ package org.wamblee.xml; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; +import java.util.TreeMap; import junit.framework.TestCase; @@ -26,86 +28,129 @@ import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; - - /** - * XML test support utilities. + * XML test support utilities. */ public final class XmlUtils { /** - * Disabled constructor. - * + * Disabled constructor. + * */ - private XmlUtils() { + private XmlUtils() { // Empty } - + + /** + * Checks equality of two XML documents excluding comment and processing + * nodes and trimming the text of the elements. In case of problems, it + * provides an xpath-like expression describing where the problem is. + * + * @param aMsg + * @param aExpected + * @param aActual + */ + public static void assertEquals(String aMsg, + org.w3c.dom.Document aExpected, org.w3c.dom.Document aActual) { + assertEquals(aMsg, DomUtils.convert(aExpected), DomUtils + .convert(aActual)); + } + /** - * Checks equality of two XML documents excluding comment and processing nodes and - * trimming the text of the elements. + * Checks equality of two XML documents excluding comment and processing + * nodes and trimming the text of the elements. In case of problems, it + * provides an xpath-like expression describing where the problem is. + * * @param aMsg * @param aExpected * @param aActual */ - public static void assertEquals(String aMsg, Document aExpected, Document aActual) { - assertEquals(aMsg, aExpected.getRootElement(), aActual.getRootElement()); + public static void assertEquals(String aMsg, Document aExpected, + Document aActual) { + assertEquals(aMsg + "/" + aExpected.getRootElement().getName(), aExpected.getRootElement(), aActual.getRootElement()); } - + /** - * Checks equality of two XML elements excluding comment and processing nodes and trimming - * the text of the elements. + * Checks equality of two XML elements excluding comment and processing + * nodes and trimming the text of the elements. In case of problems, it + * provides an xpath-like expression describing where the problem is. + * * @param aMsg * @param aExpected * @param aActual */ - public static void assertEquals(String aMsg, Element aExpected, Element aActual) { - + public static void assertEquals(String aMsg, Element aExpected, + Element aActual) { + // Name. - TestCase.assertEquals(aMsg + "/name()", aExpected.getName(), aActual.getName()); - + TestCase.assertEquals(aMsg + "/name()", aExpected.getName(), aActual + .getName()); + // Text - TestCase.assertEquals(aMsg + "/text()", aExpected.getTextTrim(), aActual.getTextTrim()); - + TestCase.assertEquals(aMsg + "/text()", aExpected.getTextTrim(), + aActual.getTextTrim()); + // Attributes - List expectedAttrs = aExpected.attributes(); + List expectedAttrs = aExpected.attributes(); Collections.sort(expectedAttrs, new AttributeComparator()); - List actualAttrs = aActual.attributes(); + List actualAttrs = aActual.attributes(); Collections.sort(actualAttrs, new AttributeComparator()); - - TestCase.assertEquals(aMsg + "/#attributes", expectedAttrs.size(), actualAttrs.size()); - for (int i = 0; i < expectedAttrs.size(); i++) { - String msg = aMsg + "/attribute(" + i + ")"; + + TestCase.assertEquals("count(" + aMsg + "/@*)", expectedAttrs.size(), + actualAttrs.size()); + for (int i = 0; i < expectedAttrs.size(); i++) { + String msg = aMsg + "/@" + expectedAttrs.get(i).getName(); assertEquals(msg, expectedAttrs.get(i), actualAttrs.get(i)); } - - // Nested elements. + + // Nested elements. List expectedElems = aExpected.elements(); - List actualElems = aActual.elements(); - TestCase.assertEquals(aMsg + "/#elements", expectedElems.size(), actualElems.size()); - for (int i = 0; i < expectedElems.size(); i++) { - String msg = aMsg + "/element(" + i + ")"; + List actualElems = aActual.elements(); + TestCase.assertEquals("count(" + aMsg + "/*)", expectedElems.size(), + actualElems.size()); + // determine the how-manyth element of the given name we are at. + // Maps element name to the last used index (or null if not yet used) + Map elementIndex = new TreeMap(); + for (int i = 0; i < expectedElems.size(); i++) { + String elemName = expectedElems.get(i).getName(); + Integer index = elementIndex.get(elemName); + if (index == null) { + index = 1; + } else { + index++; + } + elementIndex.put(elemName, index); + String msg = aMsg + "/" + expectedElems.get(i).getName() + "[" + + index + "]"; + assertEquals(msg, expectedElems.get(i), actualElems.get(i)); } } - + /** - * Checks equality of two attributes. + * Checks equality of two attributes. In case of problems, it + * provides an xpath-like expression describing where the problem is. + * * @param aMsg * @param aExpected * @param aActual */ - public static void assertEquals(String aMsg, Attribute aExpected, Attribute aActual) { - TestCase.assertEquals(aMsg + "@", aExpected.getName() + ":name", aActual.getName()); - TestCase.assertEquals(aMsg + "@" + aExpected.getName() + ":value", - aExpected.getValue(), aActual.getValue()); + public static void assertEquals(String aMsg, Attribute aExpected, + Attribute aActual) { + TestCase.assertEquals(aMsg + ":name", aExpected.getName(), aActual + .getName()); + TestCase.assertEquals(aMsg + ":value", aExpected.getValue(), aActual + .getValue()); } - + /** - * Comparator which compares attributes by name. + * Comparator which compares attributes by name. */ - private static final class AttributeComparator implements Comparator { - /* (non-Javadoc) + private static final class AttributeComparator implements + Comparator { + /* + * (non-Javadoc) + * * @see java.util.Comparator#compare(T, T) */ public int compare(Attribute aAttribute1, Attribute aAttribute2) {