added XMLDocument, XMLSchema, and XSLTransformation classes.
[utils] / support / general / src / test / java / org / wamblee / xml / XSLTransformationTest.java
diff --git a/support/general/src/test/java/org/wamblee/xml/XSLTransformationTest.java b/support/general/src/test/java/org/wamblee/xml/XSLTransformationTest.java
new file mode 100644 (file)
index 0000000..3cc494c
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2005-2011 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.wamblee.xml;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.wamblee.io.ClassPathResource;
+import org.wamblee.io.FileSystemUtils;
+import org.wamblee.io.InputResource;
+
+import static org.wamblee.xml.XMLDocument.*;
+
+import static junit.framework.TestCase.*;
+
+/**
+ * Tests the XSL transformation
+ * 
+ * @author Erik Brakkee
+ */
+public class XSLTransformationTest  {
+    private static final String PREFIX = "org/wamblee/xml/";
+    private static final String INCLUDED_XSL_FILE = "utilities.xsl";
+    private static final String REPORT_XML = "report.xml";
+    private static final String REPORT_TO_HTML_XSLT = "reportToHtml.xsl";
+    private static final String REPORT_TO_HTML2_XSLT = "reportToHtml2.xsl";
+    private static final String REPORT_TO_HTML_INVALID_XSLT = "reportToHtml-invalid.xsl";
+    private static final String REPORT_TO_HTML_NONWELLFORMED_XSLT = "reportToHtml-nonwellformed.xsl";
+    private static final String REPORT_TO_TEXT_XSLT = "reportToText.xsl";
+
+    private String getResourcePath(String aResource) {
+        return getClass().getPackage().getName().replaceAll("\\.", "/") + "/" +
+            aResource;
+    }
+
+    /**
+     * Transforms a file while using the default resolver, where the included
+     * file can be found. Verifies the transformation is done correctly.
+     * 
+     */
+    @Test
+    public void testTransformUsingDefaultResolver() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        XMLDocument transformed = xmldoc.transform(getClass().getResource(REPORT_TO_HTML_XSLT).toURI());
+       
+        Document expected = xmldocument(getClass().getResource("output-reportToHtml-report.xml").toURI()).getDocument();
+
+        Document output = transformed.getDocument();
+        XmlUtils.assertEquals("byte[] transform", expected, output);
+    }
+    
+    @Test
+    public void testTransformUsingDefaultResolverTextTransform() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        String transformed = xmldoc.write(new XSLTransformation(getClass().getResource(REPORT_TO_HTML_XSLT).toURI()));
+       
+        XMLDocument xmldocTransformed = xmldocument("read-transformed-text", new ByteArrayInputStream(transformed.getBytes()));
+        Document expected = xmldocument("output-reportToHtml-report.xml", 
+            new ClassPathResource(
+                getResourcePath("output-reportToHtml-report.xml"))
+                .getInputStream()).getDocument();
+        XmlUtils
+            .assertEquals("text transform", expected, xmldocTransformed.getDocument());
+    }
+   
+    /**
+     * Transforms a file using the default resolver where the included file
+     * cannot be found. Verifies that a TransformerException is thrown.
+     * 
+     */
+    @Test(expected = XMLException.class)
+    public void testTransformUsingDefaultResolverFails() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        XMLDocument transformed = xmldoc.transform(getClass().getResource(REPORT_TO_HTML2_XSLT).toURI());
+    }
+
+    /**
+     * Transforms a file using an invalid Xslt. Verifies that a
+     * TransformerException is thrown.
+     * 
+     */
+    @Test(expected = XMLException.class)
+    public void testTransformInvalidXslt() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        XMLDocument transformed = xmldoc.transform(getClass().getResource(REPORT_TO_HTML_INVALID_XSLT).toURI());
+    }
+
+    /**
+     * Transforms a file using a non-well formed xslt. Verifies that a
+     * TransformerException is thrown.
+     * 
+     */
+    @Test(expected=XMLException.class)
+    public void testTransformNonWellformedXslt() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        XMLDocument transformed = xmldoc.transform(getClass().getResource(REPORT_TO_HTML_NONWELLFORMED_XSLT).toURI());
+    }
+
+    /**
+     * Transforms a file using a class path resolver.
+     * 
+     */
+    @Test
+    public void testTransformUsingClassPathResolver() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        XMLDocument transformed = xmldoc.transform(PREFIX + REPORT_TO_HTML2_XSLT, new ClasspathUriResolver());
+        Document output1 = transformed.getDocument();
+        
+        Document expected = xmldocument(getClass().getResource("output-reportToHtml-report.xml").toURI()).getDocument();
+        XmlUtils.assertEquals("doc", expected, output1);
+    }
+
+    /**
+     * Transforms a file to text output. Verifies the file is transformed
+     * correctly.
+     * 
+     */
+    @Test
+    public void testTransformToTextOutput() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        String transformed = xmldoc.write(new XSLTransformation(PREFIX + REPORT_TO_TEXT_XSLT, new ClasspathUriResolver()));
+     
+        String expected = "Hello world!";
+        assertEquals("text transform", expected, transformed);
+    }
+
+    /**
+     * Tests resolving a file using {@link XslTransformer#resolve(String)} with
+     * the default resolver where the file does not exist.
+     * 
+     */
+    @Test(expected = XMLException.class)
+    public void testResolveWithDefaultResolverFileNotFound() throws Exception {
+        XMLDocument xmldoc = xmldocument(PREFIX + REPORT_XML, new ClasspathUriResolver());
+        XMLDocument transformed = xmldoc.transform(PREFIX + "utilities-nonexistent.xsl", new ClasspathUriResolver());
+    }
+}