package com.jamesmurty.utils;

public class TestXMLBuilder2 extends BaseXMLBuilderTests {

    @Override
    public Class<? extends BaseXMLBuilder> XMLBuilderToTest() throws Exception {
        return XMLBuilder2.class;
    }

    @Override
    protected boolean isRuntimeExceptionsOnly() {
        return true;
    }

}

package com.jamesmurty.utils;

import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;

public class TestXMLBuilder2 extends BaseXMLBuilderTests {

    @Override
    public Class<? extends BaseXMLBuilder> XMLBuilderToTest() throws Exception {
        return XMLBuilder2.class;
    }

    @Override
    protected boolean isRuntimeExceptionsOnly() {
        return true;
    }

    // NOTE: No checked exceptions for API calls made in this test method
    public void testNoCheckedExceptions() {
        XMLBuilder2 builder = XMLBuilder2.create("Blah");
        builder = XMLBuilder2.parse(EXAMPLE_XML_DOC);
        builder.stripWhitespaceOnlyTextNodes();
        builder.asString();
        builder.elementAsString();
        builder.xpathQuery("/*", XPathConstants.NODESET);
        builder.xpathFind("/Projects");
    }

    public void testExceptionWrappedInXMLBuilderRuntimeException() {
        XMLBuilder2 builder = XMLBuilder2.parse(EXAMPLE_XML_DOC);
        try {
            builder.xpathFind("/BadPath");
            fail("Expected XMLBuilderRuntimeException");
        } catch (XMLBuilderRuntimeException e) {
            assertEquals(XMLBuilderRuntimeException.class, e.getClass());
            Throwable cause = e.getCause();
            assertEquals(XPathExpressionException.class, cause.getClass());
            assertTrue(cause.getMessage().contains("does not resolve to an Element"));
        }
    }

}

Add unit tests for XMLBuilder2 exception wrapping feature, re #4