public boolean testCase3()

in java/src/org/apache/qetest/trax/dom/DOMSourceAPITest.java [377:473]


    public boolean testCase3()
    {
        reporter.testCaseInit("More advanced functionality of DOMSources");

        TransformerFactory factory = null;
        DocumentBuilder docBuilder = null;
        Node xmlNode = null;
        Node xslNode = null;
        Node xslImpInclNode = null;
        Node xmlImpInclNode = null;

        try
        {
            // Startup a factory, create some nodes/DOMs
            factory = TransformerFactory.newInstance();
            factory.setErrorListener(new DefaultErrorHandler());
            DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
            dfactory.setNamespaceAware(true);
            docBuilder = dfactory.newDocumentBuilder();
            reporter.logTraceMsg("parsing xml, xsl files");
            xslNode = docBuilder.parse(new InputSource(testFileInfo.inputName));
            xmlNode = docBuilder.parse(new InputSource(testFileInfo.xmlName));
            xslImpInclNode = docBuilder.parse(new InputSource(impInclFileInfo.inputName));
            xmlImpInclNode = docBuilder.parse(new InputSource(impInclFileInfo.xmlName));
        }
        catch (Throwable t)
        {
            reporter.checkErr("Problem with factory; testcase may not work");
            reporter.logThrowable(reporter.ERRORMSG, t, "Problem with factory; testcase may not work");
        }
        try
        {
            // Re-use DOMSource for stylesheet
            DOMSource xmlSource1 = new DOMSource(xmlNode);
            DOMResult result1 = new DOMResult(docBuilder.newDocument());
            DOMSource xslSource = new DOMSource(xslNode);
            Transformer transformer1 = factory.newTransformer(xslSource);
            transformer1.setErrorListener(new DefaultErrorHandler());
            transformer1.transform(xmlSource1, result1);
            Node node1 = result1.getNode();
            serializeDOMAndCheck(node1, testFileInfo.goldName, "transform first time xslSource worked");
            // Use same Source for the stylesheet
            DOMSource xmlSource2 = new DOMSource(xmlNode);
            DOMResult result2 = new DOMResult(docBuilder.newDocument());
            Transformer transformer2 = factory.newTransformer(xslSource);
            transformer2.setErrorListener(new DefaultErrorHandler());
            transformer2.transform(xmlSource2, result2);
            Node node2 = result2.getNode();
            serializeDOMAndCheck(node2, testFileInfo.goldName, "transform second time xslSource worked");

            // Re-use DOMSource for XML doc; with the same stylesheet
            DOMResult result3 = new DOMResult(docBuilder.newDocument());
            Transformer transformer3 = factory.newTransformer(xslSource);
            transformer3.setErrorListener(new DefaultErrorHandler());
            transformer3.transform(xmlSource2, result3);
            Node node3 = result3.getNode();
            serializeDOMAndCheck(node3, testFileInfo.goldName, "transform reusing both xsl/xml Sources");
        }
        catch (Throwable t)
        {
            reporter.checkFail("Problem with reuse xslSource");
            reporter.logThrowable(reporter.ERRORMSG, t, "Problem reuse xslSource");
        }

        try
        {
            // Re-use DOMSource after setNode to different one
            DOMSource xmlSource = new DOMSource(xmlNode);
            DOMSource xslSource = new DOMSource(xslNode);
            Transformer transformer1 = factory.newTransformer(xslSource);
            transformer1.setErrorListener(new DefaultErrorHandler());
            DOMResult result1 = new DOMResult(docBuilder.newDocument());
            transformer1.transform(xmlSource, result1);
            Node node1 = result1.getNode();
            serializeDOMAndCheck(node1, testFileInfo.goldName, "transform with original Sources");

            // Use same Sources, but change Nodes for xml,xsl
            xmlSource.setNode(xmlImpInclNode);
            xmlSource.setSystemId(impInclFileInfo.xmlName);
            xslSource.setNode(xslImpInclNode);
            xslSource.setSystemId(impInclFileInfo.inputName);
            Transformer transformer2 = factory.newTransformer(xslSource);
            transformer2.setErrorListener(new DefaultErrorHandler());
            DOMResult result2 = new DOMResult(docBuilder.newDocument());
            transformer2.transform(xmlSource, result2);
            Node node2 = result2.getNode();
            serializeDOMAndCheck(node2, impInclFileInfo.goldName, "transform after xml/xslSource.setNode, setSystemId");
        }
        catch (Throwable t)
        {
            reporter.checkFail("Problem with reuse after setNode");
            reporter.logThrowable(reporter.ERRORMSG, t, "Problem with reuse after setNode");
        }

        reporter.testCaseClose();
        return true;
    }