1 16 package scriptella.driver.xpath; 17 18 import org.w3c.dom.Document ; 19 import org.xml.sax.SAXException ; 20 import scriptella.AbstractTestCase; 21 import scriptella.configuration.StringResource; 22 import scriptella.spi.AbstractConnection; 23 import scriptella.spi.IndexedQueryCallback; 24 import scriptella.spi.MockParametersCallbacks; 25 import scriptella.spi.ParametersCallback; 26 import scriptella.spi.Resource; 27 28 import javax.xml.parsers.DocumentBuilder ; 29 import javax.xml.parsers.DocumentBuilderFactory ; 30 import javax.xml.parsers.ParserConfigurationException ; 31 import java.io.IOException ; 32 33 39 public class XPathQueryExecutorTest extends AbstractTestCase { 40 private DocumentBuilder documentBuilder; 41 42 protected void setUp() throws Exception { 43 documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 44 } 45 46 public void test() throws ParserConfigurationException , IOException , SAXException { 47 Document doc = documentBuilder.parse(getClass().getResourceAsStream("xml1.xml")); 48 Resource res = new StringResource("/html/body/table/tr"); 49 XPathQueryExecutor exec = new XPathQueryExecutor(doc, res, new XPathExpressionCompiler(), new AbstractConnection.StatementCounter()); 50 IndexedQueryCallback callback = new IndexedQueryCallback() { 51 52 protected void processRow(final ParametersCallback parameters, final int rowNumber) { 53 if (rowNumber == 0) { 54 assertEquals("red", parameters.getParameter("bgcolor")); 55 assertEquals("Column1", ((String []) parameters.getParameter("th"))[0]); 56 assertEquals("Column2", ((String []) parameters.getParameter("th"))[1]); 57 } else { 58 assertEquals(String.valueOf(rowNumber * 2 - 1), ((String []) parameters.getParameter("td"))[0]); 59 assertEquals(String.valueOf(rowNumber * 2), ((String []) parameters.getParameter("td"))[1]); 60 } 61 } 62 }; 63 exec.execute(callback, MockParametersCallbacks.NULL); 64 assertEquals(3,callback.getRowsNumber()); 65 } 66 67 public void test2() throws ParserConfigurationException , IOException , SAXException { 68 Document doc = documentBuilder.parse(getClass().getResourceAsStream("xml2.xml")); 69 Resource res = new StringResource(" /xml/element[@attribute=1] | /xml/element[not(@attribute)]"); 70 XPathQueryExecutor exec = new XPathQueryExecutor(doc, res, new XPathExpressionCompiler(), new AbstractConnection.StatementCounter()); 71 IndexedQueryCallback callback = new IndexedQueryCallback() { 72 73 protected void processRow(final ParametersCallback parameters, final int rowNumber) { 74 if (rowNumber == 0) { 75 assertEquals("1", parameters.getParameter("attribute")); 76 } else { 77 assertEquals("", parameters.getParameter("element")); 78 } 79 } 80 }; 81 exec.execute(callback, MockParametersCallbacks.NULL); 82 assertEquals(2,callback.getRowsNumber()); 83 res = new StringResource(" /xml/$element2 "); 85 exec = new XPathQueryExecutor(doc, res, new XPathExpressionCompiler(), new AbstractConnection.StatementCounter()); 86 callback = new IndexedQueryCallback() { 87 88 protected void processRow(final ParametersCallback parameters, final int rowNumber) { 89 if (rowNumber == 0) { 90 assertEquals("1", parameters.getParameter("attribute")); 91 } else { 92 assertEquals("el2", parameters.getParameter("element2")); 93 } 94 } 95 }; 96 exec.execute(callback, MockParametersCallbacks.NAME); 97 assertEquals(2,callback.getRowsNumber()); 98 } 99 100 } 101 | Popular Tags |