From 013cb0c90a1f38022b6a4a4ba0c55b937ab819b8 Mon Sep 17 00:00:00 2001 From: Bertrand Delacretaz Date: Fri, 15 Sep 2006 12:05:25 +0000 Subject: [PATCH] BasePDFTestCase extracted from PDFAConformanceTestCase, will be used to create more PDF renderer tests git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@446585 13f79535-47bb-0310-9956-ffa450edef68 --- .../fop/render/pdf/BasePDFTestCase.java | 70 +++++++++++++++++++ .../render/pdf/PDFAConformanceTestCase.java | 63 ++++------------- 2 files changed, 85 insertions(+), 48 deletions(-) create mode 100644 test/java/org/apache/fop/render/pdf/BasePDFTestCase.java diff --git a/test/java/org/apache/fop/render/pdf/BasePDFTestCase.java b/test/java/org/apache/fop/render/pdf/BasePDFTestCase.java new file mode 100644 index 000000000..cf7fe3eff --- /dev/null +++ b/test/java/org/apache/fop/render/pdf/BasePDFTestCase.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package org.apache.fop.render.pdf; + +import java.io.File; + +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.sax.SAXResult; +import javax.xml.transform.stream.StreamSource; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.output.ByteArrayOutputStream; +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 junit.framework.TestCase; + +/** Base class for automated tests that create PDF files + * $Id$ + */ + +public class BasePDFTestCase extends TestCase { + protected final FopFactory fopFactory = FopFactory.newInstance(); + protected final TransformerFactory tFactory = TransformerFactory.newInstance(); + + protected BasePDFTestCase(String name) { + super(name); + } + + /** + * Convert a test FO file to PDF + * @param foFile the FO file + * @param ua the preconfigured user agent + * @param dumpPdfFile if true, dumps the generated PDF file to a file name (foFile).pdf and returns it as a File + * @throws Exception if the conversion fails + */ + protected File convertFO(File foFile, FOUserAgent ua, boolean dumpPdfFile) throws Exception { + File outFile = null; + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, ua, baout); + Transformer transformer = tFactory.newTransformer(); + Source src = new StreamSource(foFile); + SAXResult res = new SAXResult(fop.getDefaultHandler()); + transformer.transform(src, res); + if (dumpPdfFile) { + outFile = new File(foFile.getParentFile(), foFile.getName() + ".pdf"); + FileUtils.writeByteArrayToFile(outFile, baout.toByteArray()); + } + return outFile; + } +} diff --git a/test/java/org/apache/fop/render/pdf/PDFAConformanceTestCase.java b/test/java/org/apache/fop/render/pdf/PDFAConformanceTestCase.java index ca647a4b6..c46b08179 100644 --- a/test/java/org/apache/fop/render/pdf/PDFAConformanceTestCase.java +++ b/test/java/org/apache/fop/render/pdf/PDFAConformanceTestCase.java @@ -21,30 +21,16 @@ package org.apache.fop.render.pdf; import java.io.File; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.sax.SAXResult; -import javax.xml.transform.stream.StreamSource; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.output.ByteArrayOutputStream; 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.pdf.PDFConformanceException; -import junit.framework.TestCase; - /** * Tests PDF/A-1 functionality. */ -public class PDFAConformanceTestCase extends TestCase { +public class PDFAConformanceTestCase extends BasePDFTestCase { - private TransformerFactory tFactory = TransformerFactory.newInstance(); - private FopFactory fopFactory = FopFactory.newInstance(); private File foBaseDir = new File("test/xml/pdf-a"); + private boolean dumpPDF = Boolean.getBoolean("PDFAConformanceTestCase.dumpPDF"); /** * Main constructor @@ -58,27 +44,12 @@ public class PDFAConformanceTestCase extends TestCase { throw new RuntimeException("Configuring the FopFactory failed: " + e.getMessage()); } } - - /** - * Convert the test file - * @param foFile the FO file - * @param ua the preconfigured user agent - * @throws Exception if the conversion fails - */ - protected void convertFO(File foFile, FOUserAgent ua) throws Exception { - ua.getRendererOptions().put("pdf-a-mode", "PDF/A-1b"); - File outFile = null; - ByteArrayOutputStream baout = new ByteArrayOutputStream(); - Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, ua, baout); - Transformer transformer = tFactory.newTransformer(); - Source src = new StreamSource(foFile); - SAXResult res = new SAXResult(fop.getDefaultHandler()); - transformer.transform(src, res); - if (false) { - //Write to file for debugging - outFile = new File(foFile.getParentFile(), foFile.getName() + ".pdf"); - FileUtils.writeByteArrayToFile(outFile, baout.toByteArray()); - } + + /** create an FOUserAgent for our tests */ + protected FOUserAgent getUserAgent() { + final FOUserAgent a = fopFactory.newFOUserAgent(); + a.getRendererOptions().put("pdf-a-mode", "PDF/A-1b"); + return a; } /** @@ -86,9 +57,8 @@ public class PDFAConformanceTestCase extends TestCase { * @throws Exception if the test fails */ public void testAllOk() throws Exception { - FOUserAgent ua = fopFactory.newFOUserAgent(); File foFile = new File(foBaseDir, "minimal-pdf-a.fo"); - convertFO(foFile, ua); + convertFO(foFile, getUserAgent(), dumpPDF); } /** @@ -96,11 +66,11 @@ public class PDFAConformanceTestCase extends TestCase { * @throws Exception if the test fails */ public void testNoEncryption() throws Exception { - FOUserAgent ua = fopFactory.newFOUserAgent(); + final FOUserAgent ua = getUserAgent(); ua.getRendererOptions().put("owner-password", "mypassword"); //To enabled encryption File foFile = new File(foBaseDir, "minimal-pdf-a.fo"); try { - convertFO(foFile, ua); + convertFO(foFile, ua, dumpPDF); fail("Expected PDFConformanceException. PDF/A-1 and PDF encryption don't go together."); } catch (PDFConformanceException e) { //Good! @@ -112,10 +82,9 @@ public class PDFAConformanceTestCase extends TestCase { * @throws Exception if the test fails */ public void testFontNotEmbedded() throws Exception { - FOUserAgent ua = fopFactory.newFOUserAgent(); File foFile = new File(foBaseDir, "base14-font.fo"); try { - convertFO(foFile, ua); + convertFO(foFile, getUserAgent(), dumpPDF); fail("Expected PDFConformanceException. PDF/A-1 wants all fonts embedded."); } catch (PDFConformanceException e) { //Good! @@ -127,10 +96,9 @@ public class PDFAConformanceTestCase extends TestCase { * @throws Exception if the test fails */ public void testEPSUsage() throws Exception { - FOUserAgent ua = fopFactory.newFOUserAgent(); File foFile = new File(foBaseDir, "with-eps.fo"); try { - convertFO(foFile, ua); + convertFO(foFile, getUserAgent(), dumpPDF); fail("Expected PDFConformanceException. PDF/A-1 does not allow PostScript XObjects."); } catch (PDFConformanceException e) { //Good! @@ -142,13 +110,12 @@ public class PDFAConformanceTestCase extends TestCase { * @throws Exception if the test fails */ public void testImages() throws Exception { - FOUserAgent ua = fopFactory.newFOUserAgent(); File foFile = new File(foBaseDir, "with-rgb-images.fo"); - convertFO(foFile, ua); + convertFO(foFile, getUserAgent(), dumpPDF); foFile = new File(foBaseDir, "with-cmyk-images.fo"); try { - convertFO(foFile, ua); + convertFO(foFile, getUserAgent(), dumpPDF); fail("Expected PDFConformanceException. PDF/A-1 does not allow PostScript XObjects."); } catch (PDFConformanceException e) { //Good! -- 2.39.5