/** * Copyright © 2010-2011 Nokia * * 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 com.github.restdriver.matchers; import java.io.IOException; import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLUnit; import org.hamcrest.Description; import org.hamcrest.TypeSafeMatcher; import org.xml.sax.SAXException; import com.github.restdriver.exception.RuntimeAssertionFailure; /** * Hamcrest matcher for comparing two strings containing XML and determining whether they are * equivalent (ignoring whitespace, attribute and element ordering etc.). */ public class IsEquivalentXml extends TypeSafeMatcher<String> { private final String xml; /** * Creates a new instance of the matcher. * * @param xml The XML to compare with. */ public IsEquivalentXml(String xml) { this.xml = xml; } @Override public final void describeTo(Description description) { description.appendText("A string with XML equivalent to: " + xml); } @Override protected boolean matchesSafely(String item) { try { Diff diff = XMLUnit.compareXML(xml, item); return diff.identical(); } catch (IOException e) { throw new RuntimeAssertionFailure("Failed to compare XML", e); } catch (SAXException e) { throw new RuntimeAssertionFailure("Failed to compare XML", e); } } }