/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.xslt.base; import static org.junit.Assert.*; import java.io.InputStream; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamSource; import org.junit.Test; import com.enonic.cms.core.xslt.XsltProcessor; public abstract class BaseXsltProcessorTest<T extends XsltProcessor> { protected abstract Transformer createTransformer( final Source source ) throws Exception; protected abstract T createProcessor( Transformer transformer ) throws Exception; protected final T createProcessor( final Class<?> loader, final String xslName ) throws Exception { final Source source = loadXml( loader, xslName ); final Transformer transformer = createTransformer( source ); return createProcessor( transformer ); } protected final Source loadXml( final Class<?> loader, final String xmlName ) throws Exception { final InputStream in = loader.getResourceAsStream( xmlName ); assertNotNull( "File [" + xmlName + "] does not exist", in ); return new StreamSource( in ); } protected final String doProcess( final XsltProcessor processor ) throws Exception { return processor.process( loadXml( BaseXsltProcessor.class, "process_input.xml" ) ); } @Test public final void testOutputProperties_none() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_none.xsl" ); assertNotNull( processor ); assertEquals( "text/plain; charset=utf-8", processor.getContentType() ); assertEquals( null, processor.getOutputEncoding() ); assertEquals( null, processor.getOutputMediaType() ); assertEquals( null, processor.getOutputMethod() ); } @Test public final void testOutputProperties_mediaType() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_mediaType.xsl" ); assertNotNull( processor ); assertEquals( "application/json; charset=utf-8", processor.getContentType() ); assertEquals( null, processor.getOutputEncoding() ); assertEquals( "application/json", processor.getOutputMediaType() ); assertEquals( null, processor.getOutputMethod() ); } @Test public final void testOutputProperties_method_html() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_method_html.xsl" ); assertNotNull( processor ); assertEquals( "text/html; charset=utf-8", processor.getContentType() ); assertEquals( null, processor.getOutputEncoding() ); assertEquals( null, processor.getOutputMediaType() ); assertEquals( "html", processor.getOutputMethod() ); } @Test public final void testOutputProperties_method_xhtml() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_method_xhtml.xsl" ); assertNotNull( processor ); assertEquals( "text/html; charset=utf-8", processor.getContentType() ); assertEquals( null, processor.getOutputEncoding() ); assertEquals( null, processor.getOutputMediaType() ); assertEquals( "xhtml", processor.getOutputMethod() ); } @Test public final void testOutputProperties_method_xml() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_method_xml.xsl" ); assertNotNull( processor ); assertEquals( "text/xml; charset=utf-8", processor.getContentType() ); assertEquals( null, processor.getOutputEncoding() ); assertEquals( null, processor.getOutputMediaType() ); assertEquals( "xml", processor.getOutputMethod() ); } @Test public final void testOutputProperties_encoding() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_encoding.xsl" ); assertNotNull( processor ); assertEquals( "text/plain; charset=ISO-8859-1", processor.getContentType() ); assertEquals( "ISO-8859-1", processor.getOutputEncoding() ); assertEquals( null, processor.getOutputMediaType() ); assertEquals( null, processor.getOutputMethod() ); } @Test public final void testOutputProperties_all() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "outputProperties_all.xsl" ); assertNotNull( processor ); assertEquals( "application/rss+xml; charset=ISO-8859-1", processor.getContentType() ); assertEquals( "ISO-8859-1", processor.getOutputEncoding() ); assertEquals( "application/rss+xml", processor.getOutputMediaType() ); assertEquals( "xml", processor.getOutputMethod() ); } @Test public final void testProcess_simple() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "process_simple.xsl" ); assertNotNull( processor ); final String result = doProcess( processor ); assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dummy a=\"1\" b=\"2\"/>", result ); } @Test public final void testProcess_omitXmlDecl() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "process_simple.xsl" ); assertNotNull( processor ); processor.setOmitXmlDecl( true ); final String result = doProcess( processor ); assertEquals( "<dummy a=\"1\" b=\"2\"/>", result ); } @Test public final void testProcess_parameters() throws Exception { final XsltProcessor processor = createProcessor( BaseXsltProcessorTest.class, "process_simple.xsl" ); assertNotNull( processor ); processor.setOmitXmlDecl( true ); processor.setParameter( "param1", 3 ); processor.setParameter( "param2", true ); final String result1 = doProcess( processor ); assertEquals( "<dummy a=\"3\" b=\"true\"/>", result1 ); processor.setParameter( "param1", 3.1 ); processor.setParameter( "param2", "b" ); final String result2 = doProcess( processor ); assertEquals( "<dummy a=\"3.1\" b=\"b\"/>", result2 ); processor.setParameter( "param1", 3.2f ); processor.setParameter( "param2", null ); final String result3 = doProcess( processor ); assertEquals( "<dummy a=\"3.2\" b=\"b\"/>", result3 ); } }