| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.fop.intermediate; |
| |
| import java.io.File; |
| |
| import javax.xml.transform.ErrorListener; |
| import javax.xml.transform.Transformer; |
| import javax.xml.transform.TransformerException; |
| import javax.xml.transform.TransformerFactory; |
| import javax.xml.transform.dom.DOMResult; |
| import javax.xml.transform.sax.SAXResult; |
| import javax.xml.transform.stream.StreamSource; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.fail; |
| |
| import org.apache.fop.apps.FOPException; |
| import org.apache.fop.apps.FOUserAgent; |
| import org.apache.fop.apps.Fop; |
| import org.apache.fop.apps.FopFactory; |
| import org.apache.fop.apps.MimeConstants; |
| import org.apache.fop.events.Event; |
| import org.apache.fop.events.EventFormatter; |
| import org.apache.fop.events.EventListener; |
| import org.apache.fop.fonts.FontEventProducer; |
| import org.apache.fop.render.intermediate.IFContext; |
| import org.apache.fop.render.intermediate.IFDocumentHandler; |
| import org.apache.fop.render.intermediate.IFException; |
| import org.apache.fop.render.intermediate.IFSerializer; |
| |
| /** |
| * This test checks the correct mimicking of a different output format. |
| */ |
| public class IFMimickingTestCase { |
| |
| private FopFactory fopFactory; |
| |
| @Before |
| public void setUp() throws Exception { |
| File configFile = new File("test/test-no-xml-metrics.xconf"); |
| fopFactory = FopFactory.newInstance(configFile); |
| } |
| |
| /** |
| * Tests IF document handler mimicking with PDF output. |
| * @throws Exception if an error occurs |
| */ |
| @Test |
| public void testMimickingPDF() throws Exception { |
| doTestMimicking(MimeConstants.MIME_PDF); |
| } |
| |
| /** |
| * Tests IF document handler mimicking with PostScript output. |
| * @throws Exception if an error occurs |
| */ |
| @Test |
| public void testMimickingPS() throws Exception { |
| doTestMimicking(MimeConstants.MIME_POSTSCRIPT); |
| } |
| |
| /** |
| * Tests IF document handler mimicking with TIFF output. |
| * @throws Exception if an error occurs |
| */ |
| @Test |
| public void testMimickingTIFF() throws Exception { |
| doTestMimicking(MimeConstants.MIME_TIFF); |
| } |
| |
| private void doTestMimicking(String mime) throws FOPException, IFException, |
| TransformerException { |
| //Set up XMLRenderer to render to a DOM |
| DOMResult domResult = new DOMResult(); |
| |
| FOUserAgent userAgent = fopFactory.newFOUserAgent(); |
| userAgent.getEventBroadcaster().addEventListener(new EventListener() { |
| |
| public void processEvent(Event event) { |
| if (event.getEventGroupID().equals(FontEventProducer.class.getName())) { |
| fail("There must be no font-related event! Got: " |
| + EventFormatter.format(event)); |
| } |
| } |
| |
| }); |
| |
| //Create an instance of the target renderer so the XMLRenderer can use its font setup |
| IFDocumentHandler targetHandler = userAgent.getRendererFactory().createDocumentHandler( |
| userAgent, mime); |
| |
| //Setup painter |
| IFSerializer serializer = new IFSerializer(new IFContext(userAgent)); |
| serializer.mimicDocumentHandler(targetHandler); |
| serializer.setResult(domResult); |
| |
| userAgent.setDocumentHandlerOverride(serializer); |
| |
| Fop fop = fopFactory.newFop(userAgent); |
| |
| //minimal-pdf-a.fo uses the Gladiator font so is an ideal FO file for this test: |
| StreamSource src = new StreamSource(new File("test/xml/pdf-a/minimal-pdf-a.fo")); |
| |
| TransformerFactory tFactory = TransformerFactory.newInstance(); |
| Transformer transformer = tFactory.newTransformer(); |
| setErrorListener(transformer); |
| |
| transformer.transform(src, new SAXResult(fop.getDefaultHandler())); |
| } |
| |
| /** |
| * Sets an error listener which doesn't swallow errors like Xalan's default one. |
| * @param transformer the transformer to set the error listener on |
| */ |
| protected void setErrorListener(Transformer transformer) { |
| transformer.setErrorListener(new ErrorListener() { |
| |
| public void error(TransformerException exception) throws TransformerException { |
| throw exception; |
| } |
| |
| public void fatalError(TransformerException exception) throws TransformerException { |
| throw exception; |
| } |
| |
| public void warning(TransformerException exception) throws TransformerException { |
| //ignore |
| } |
| |
| }); |
| } |
| |
| } |