package edu.stanford.nlp.objectbank; // Copyright 2010, Stanford NLP // Author: John Bauer // Test that the XMLBeginEndIterator will successfully find a bunch of // text inside xml tags. // TODO: can add tests for the String->Object conversion and some of // the other options the XMLBeginEndIterator has import junit.framework.TestCase; import java.io.BufferedReader; import java.io.StringReader; import java.util.ArrayList; public class XMLBeginEndIteratorTest extends TestCase { public static final String TEST_STRING = "<xml><tagger>\n <text>\n This tests the xml input.\n </text> \n This should not be found. \n <text>\n This should be found.\n </text>\n <text>\n The dog's barking kept the\n neighbors up all night.\n </text>\n</tagging></xml>"; public static final String EMPTY_TEST_STRING = "<text></text>"; public static final String SINGLE_TAG_TEST_STRING = "<xml><text>This tests the xml input with single tags<text/>, which should not close the input</text><text/>and should not open it either.</xml>"; public static final String NESTING_TEST_STRING = "<xml><text>A<text>B</text>C</text>D <text>A<text>B</text>C<text>D</text>E</text>F <text>A<text>B</text>C<text>D<text/></text>E</text>F</xml>"; public static final String TAG_IN_TEXT_STRING = "<xml><bar>The dog's barking kept the neighbors up all night</bar></xml>"; public static final String TWO_TAGS_STRING = "<xml><foo>This is the first sentence</foo><bar>The dog's barking kept the neighbors up all night</bar><foo>The owner could not stop the dog from barking</foo></xml>"; public static ArrayList<String> getResults(XMLBeginEndIterator<String> iterator) { ArrayList<String> results = new ArrayList<String>(); while (iterator.hasNext()) { results.add(iterator.next()); } return results; } public static void compareResults(XMLBeginEndIterator<String> iterator, String... expectedResults) { ArrayList<String> results = getResults(iterator); assertEquals(expectedResults.length, results.size()); for (int i = 0; i < expectedResults.length; ++i) { assertEquals(expectedResults[i], results.get(i)); } } public void testNotFound() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(TEST_STRING)), "zzzz"); compareResults(iterator); // eg, should be empty } public void testFound() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(TEST_STRING)), "text"); compareResults(iterator, "\n This tests the xml input.\n ", "\n This should be found.\n ", "\n The dog's barking kept the\n neighbors up all night.\n "); } public void testEmpty() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(EMPTY_TEST_STRING)), "text"); compareResults(iterator, ""); } public void testSingleTags() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(SINGLE_TAG_TEST_STRING)), "text"); compareResults(iterator, "This tests the xml input with single tags, which should not close the input"); } public void testNesting() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(NESTING_TEST_STRING)), "text", false, false, true); compareResults(iterator, "ABC", "ABCDE", "ABCDE"); } public void testInternalTags() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(NESTING_TEST_STRING)), "text", true, false, true); compareResults(iterator, "A<text>B</text>C", "A<text>B</text>C<text>D</text>E", "A<text>B</text>C<text>D<text/></text>E"); } public void testContainingTags() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(NESTING_TEST_STRING)), "text", true, true, true); compareResults(iterator, "<text>A<text>B</text>C</text>", "<text>A<text>B</text>C<text>D</text>E</text>", "<text>A<text>B</text>C<text>D<text/></text>E</text>"); } public void testTagInText() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(TAG_IN_TEXT_STRING)), "bar"); compareResults(iterator, "The dog's barking kept the neighbors up all night"); } public void testTwoTags() { XMLBeginEndIterator<String> iterator = new XMLBeginEndIterator<String>(new BufferedReader(new StringReader(TWO_TAGS_STRING)), "foo|bar"); compareResults(iterator, "This is the first sentence", "The dog's barking kept the neighbors up all night", "The owner could not stop the dog from barking"); } }