/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.jsfunit.analysis.util; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import junit.framework.TestCase; import org.jboss.jsfunit.analysis.StreamProvider; import org.jboss.jsfunit.analysis.StringStreamProvider; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.SAXParseException; /** * A ParserUtilsTest. * * @author <a href="adrian@jboss.com">Adrian Brock</a> * @version $Revision: 1.1 $ */ public class ParserUtilsTest extends TestCase { class BadStringStreamProvider extends StringStreamProvider { private String path; public BadStringStreamProvider(String xml, String path) { super(xml); this.path = path; } public InputStream getInputStream(String path) { if (path != null && path.equals(this.path)) { return super.getInputStream(path); } else { return null; } } } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getDocumentBuilder()}. */ public void testGetDocumentBuilder() { Object tempObj = ParserUtils.getDocumentBuilder(); assertNotNull(tempObj); assertTrue(DocumentBuilder.class.isAssignableFrom(tempObj.getClass())); } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getXml(java.lang.String, org.jboss.jsfunit.analysis.StreamProvider)}. */ public void testGetXmlFileFound() { assertNotNull(ParserUtils.getXml("testPath", new BadStringStreamProvider("test", "testPath"))); } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getXml(java.lang.String, org.jboss.jsfunit.analysis.StreamProvider)}. */ public void testGetXmlFileNotFound() { try { ParserUtils.getXml("badPath", new BadStringStreamProvider("test", "testPath")); fail("RuntimeException expected"); } catch (RuntimeException re) { assertEquals("Could not locate file 'badPath'", re.getMessage()); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getDocument(java.lang.String)}. */ public void testGetDocumentNullXml() { try { Document testDoc = ParserUtils.getDocument(null); assertNotNull(testDoc); } catch (IllegalArgumentException iae) { assertEquals("input must not be null", iae.getMessage()); } catch (Throwable t) { fail("wrong exception " + t.getClass().getName()); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getDocument(java.lang.String)}. */ public void testGetDocumentBadXml() { try { Document testDoc = ParserUtils.getDocument("bad xml"); assertNotNull(testDoc); } catch (SAXParseException spe) { assertEquals("Content is not allowed in prolog.", spe.getMessage()); } catch (Throwable t) { fail("wrong exception " + t.getClass().getName()); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getDocument(java.lang.String)}. */ public void testGetDocument() { try { Document testDoc = ParserUtils.getDocument("<root></root>"); assertNotNull(testDoc); } catch (Throwable t) { fail("should be ok..."); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#query(org.w3c.dom.Node, java.lang.String, java.lang.String)}. */ public void testQueryNull() { try { ParserUtils.query(null, null, null); } catch (NullPointerException npe) { assertEquals("document was null null", npe.getMessage()); } try { Document testDoc = ParserUtils.getDocument("<?xml version=\"1.0\"?><a id=\"test\" />"); ParserUtils.query(testDoc, null, "test"); } catch (Throwable t) { assertEquals("Could not run XPath query 'null' on document test", t.getMessage()); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#query(org.w3c.dom.Node, java.lang.String, java.lang.String)}. */ public void testQuery() { try { Document testDoc = ParserUtils.getDocument("<?xml version=\"1.0\"?><root><a id=\"test\"></a></root>"); NodeList results = ParserUtils.query(testDoc, "//a", "test"); assertNotNull(results); assertEquals(1,results.getLength()); } catch (Throwable t) { t.printStackTrace(); fail("supposed to work"); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#querySingle(org.w3c.dom.Node, java.lang.String, java.lang.String)}. */ public void testQuerySingle() { try { Document testDoc = ParserUtils.getDocument("<?xml version=\"1.0\"?><root><a id=\"test\">content</a></root>"); String result = ParserUtils.querySingle(testDoc, "//a", "test"); assertNotNull(result); assertEquals("content",result); } catch (Throwable t) { t.printStackTrace(); fail("supposed to work"); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#querySingle(org.w3c.dom.Node, java.lang.String, java.lang.String)}. */ public void testQuerySingleNotFound() { try { Document testDoc = ParserUtils.getDocument("<?xml version=\"1.0\"?><root><b id=\"test\"></b></root>"); String result = ParserUtils.querySingle(testDoc, "//a", "test"); assertNull(result); } catch (Throwable t) { t.printStackTrace(); fail("supposed to work"); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#querySingle(org.w3c.dom.Node, java.lang.String, java.lang.String)}. */ public void testQuerySingleDuplicate() { try { Document testDoc = ParserUtils.getDocument("<?xml version=\"1.0\"?><root><a id=\"test\"></a><a id=\"test2\"></a></root>"); ParserUtils.querySingle(testDoc, "//a", "test"); fail("expected to crash"); } catch (Throwable t) { assertEquals("query //a returned 2 results. Should have been one.", t.getMessage()); assertTrue(t instanceof RuntimeException); } } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getDomDocument(java.lang.String, org.jboss.jsfunit.analysis.StreamProvider)}. */ public void testGetDomDocumentStringStreamProvider() { StreamProvider streamProvider = new StringStreamProvider("<?xml version=\"1.0\"?><root><a id=\"test\"></a><a id=\"test2\"></a></root>"); Document result = ParserUtils.getDomDocument("test",streamProvider); assertNotNull(result); assertTrue(Document.class.isAssignableFrom(result.getClass())); } /** * Test method for {@link org.jboss.jsfunit.analysis.util.ParserUtils#getDomDocument(java.io.InputStream, java.lang.String)}. */ public void testGetDomDocumentInputStreamStringNull() { try { ParserUtils.getDomDocument((InputStream)null, "test"); } catch (Throwable t) { assertEquals("Could not parse document 'test'", t.getMessage()); assertTrue(t instanceof RuntimeException); } } }