package net.thucydides.core.hamcrest; import org.hamcrest.Description; import org.hamcrest.StringDescription; import org.junit.Test; import static net.thucydides.core.hamcrest.XMLMatchers.isSimilarTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; public class WhenUsingTheXMLMatcherTest { @Test public void should_match_identical_xml_documents() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; assertThat(anXmlDocument, isSimilarTo(anXmlDocument)); } @Test public void should_not_match_different_xml_documents() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; String aDifferentXmlDocument = "<loan><item code='a'>Item A</item></loan>"; assertThat(anXmlDocument, not(isSimilarTo(aDifferentXmlDocument))); } @Test public void should_not_match_invalid_xml_document() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; String aDifferentXmlDocument = "<loan><item code='a'>Item A</item><>"; assertThat(anXmlDocument, not(isSimilarTo(aDifferentXmlDocument))); } @Test public void should_ignore_different_quotes_for_matches() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; String anotherXmlDocument = "<sale><item code=\"a\">Item A</item></sale>"; assertThat(anXmlDocument, isSimilarTo(anotherXmlDocument)); } @Test public void should_ignore_white_space_for_matches() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; String anotherXmlDocument = "<sale> <item code='a'>Item A</item></sale>"; assertThat(anXmlDocument, isSimilarTo(anotherXmlDocument)); } @Test public void should_display_expected_xml_document_when_failing() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; XMLIsSimilarMatcher matcher = new XMLIsSimilarMatcher(anXmlDocument); Description description = new StringDescription(); matcher.describeTo(description); assertThat(description.toString(), is("an XML document equivalent to <sale><item code='a'>Item A</item></sale>")); } @Test public void should_display_the_error_message_if_available() { String anXmlDocument = "<sale><item code='a'>Item A</item></sale>"; String aDifferentXmlDocument = "<loan><item code='a'>Item A</item></loan>"; XMLIsSimilarMatcher matcher = new XMLIsSimilarMatcher(anXmlDocument); matcher.matchesSafely(aDifferentXmlDocument); Description description = new StringDescription(); matcher.describeTo(description); assertThat(description.toString(), containsString("an XML document equivalent to <sale><item code='a'>Item A</item></sale>")); assertThat(description.toString(), containsString("[different]")); } }