/* * Copyright 2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * 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 junit.framework.TestCase; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; /** * XML test support utilities. */ public final class XmlUtils { /** * Disabled constructor. * */ private XmlUtils() { // Empty } /** * Checks equality of two XML documents excluding comment and processing nodes and * trimming the text of the elements. * @param aMsg * @param aExpected * @param aActual */ public static void assertEquals(String aMsg, Document aExpected, Document aActual) { assertEquals(aMsg, aExpected.getRootElement(), aActual.getRootElement()); } /** * Checks equality of two XML elements excluding comment and processing nodes and trimming * the text of the elements. * @param aMsg * @param aExpected * @param aActual */ public static void assertEquals(String aMsg, Element aExpected, Element aActual) { // Name. TestCase.assertEquals(aMsg + "/name()", aExpected.getName(), aActual.getName()); // Text TestCase.assertEquals(aMsg + "/text()", aExpected.getTextTrim(), aActual.getTextTrim()); // Attributes List expectedAttrs = aExpected.attributes(); Collections.sort(expectedAttrs, new AttributeComparator()); 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 + ")"; assertEquals(msg, expectedAttrs.get(i), actualAttrs.get(i)); } // 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 + ")"; assertEquals(msg, expectedElems.get(i), actualElems.get(i)); } } /** * Checks equality of two attributes. * @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()); } /** * Comparator which compares attributes by name. */ private static final class AttributeComparator implements Comparator { /* (non-Javadoc) * @see java.util.Comparator#compare(T, T) */ public int compare(Attribute aAttribute1, Attribute aAttribute2) { return aAttribute1.getName().compareTo(aAttribute2.getName()); } } }