From 937b5b3d50ada4cb2f9607810914adb7888fe9ab Mon Sep 17 00:00:00 2001 From: Maximilian Berger Date: Tue, 16 Sep 2008 08:56:12 +0000 Subject: [PATCH] Re-enabled image loader testcases Made sure SVG converters use SVG flavor (updated in commons) Added new ImageLoaderTest which tests JPGs embedded in SVG git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@695776 13f79535-47bb-0310-9956-ffa450edef68 --- lib/xmlgraphics-commons-1.4svn.jar | Bin 527869 -> 528722 bytes .../loader/batik/ImageConverterSVG2G2D.java | 7 +- .../loader/batik/ImageLoaderFactorySVG.java | 3 +- .../image/loader/batik/ImageLoaderSVG.java | 4 +- .../org/apache/fop/StandardTestSuite.java | 4 + .../loader/batik/ImageLoaderTestCase.java | 70 ++++++++++++++++-- 6 files changed, 74 insertions(+), 14 deletions(-) diff --git a/lib/xmlgraphics-commons-1.4svn.jar b/lib/xmlgraphics-commons-1.4svn.jar index 6d8181de890296759488e9d3ba8e28652f749eb5..7328fa62b1fb8ae34ff707bf64c0bf4dcfce715b 100644 GIT binary patch delta 30062 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 Kht9yLZTDYkz)$}G delta 29141 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 @@ -132,7 +131,7 @@ public class ImageConverterSVG2G2D extends AbstractImageConverter { /** {@inheritDoc} */ public ImageFlavor getSourceFlavor() { - return ImageFlavor.XML_DOM; + return XMLNamespaceEnabledImageFlavor.SVG_DOM; } /** {@inheritDoc} */ diff --git a/src/java/org/apache/fop/image/loader/batik/ImageLoaderFactorySVG.java b/src/java/org/apache/fop/image/loader/batik/ImageLoaderFactorySVG.java index 9203bf7e8..b37ba925b 100644 --- a/src/java/org/apache/fop/image/loader/batik/ImageLoaderFactorySVG.java +++ b/src/java/org/apache/fop/image/loader/batik/ImageLoaderFactorySVG.java @@ -20,6 +20,7 @@ package org.apache.fop.image.loader.batik; import org.apache.xmlgraphics.image.loader.ImageFlavor; +import org.apache.xmlgraphics.image.loader.XMLNamespaceEnabledImageFlavor; import org.apache.xmlgraphics.image.loader.impl.AbstractImageLoaderFactory; import org.apache.xmlgraphics.image.loader.spi.ImageLoader; import org.apache.xmlgraphics.util.MimeConstants; @@ -30,7 +31,7 @@ import org.apache.xmlgraphics.util.MimeConstants; public class ImageLoaderFactorySVG extends AbstractImageLoaderFactory { private static final ImageFlavor[] FLAVORS = new ImageFlavor[] { - ImageFlavor.XML_DOM}; + XMLNamespaceEnabledImageFlavor.SVG_DOM}; private static final String[] MIMES = new String[] { MimeConstants.MIME_SVG}; diff --git a/src/java/org/apache/fop/image/loader/batik/ImageLoaderSVG.java b/src/java/org/apache/fop/image/loader/batik/ImageLoaderSVG.java index 483d6c502..c5c113b04 100644 --- a/src/java/org/apache/fop/image/loader/batik/ImageLoaderSVG.java +++ b/src/java/org/apache/fop/image/loader/batik/ImageLoaderSVG.java @@ -23,12 +23,12 @@ import java.io.IOException; import java.util.Map; import org.apache.batik.dom.svg.SVGDOMImplementation; - import org.apache.xmlgraphics.image.loader.Image; import org.apache.xmlgraphics.image.loader.ImageException; import org.apache.xmlgraphics.image.loader.ImageFlavor; import org.apache.xmlgraphics.image.loader.ImageInfo; import org.apache.xmlgraphics.image.loader.ImageSessionContext; +import org.apache.xmlgraphics.image.loader.XMLNamespaceEnabledImageFlavor; import org.apache.xmlgraphics.image.loader.impl.AbstractImageLoader; import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM; import org.apache.xmlgraphics.util.MimeConstants; @@ -45,7 +45,7 @@ public class ImageLoaderSVG extends AbstractImageLoader { * @param targetFlavor the target flavor */ public ImageLoaderSVG(ImageFlavor targetFlavor) { - if (!(ImageFlavor.XML_DOM.equals(targetFlavor))) { + if (!(XMLNamespaceEnabledImageFlavor.SVG_DOM.equals(targetFlavor))) { throw new IllegalArgumentException("Unsupported target ImageFlavor: " + targetFlavor); } this.targetFlavor = targetFlavor; diff --git a/test/java/org/apache/fop/StandardTestSuite.java b/test/java/org/apache/fop/StandardTestSuite.java index c20683912..290b29050 100644 --- a/test/java/org/apache/fop/StandardTestSuite.java +++ b/test/java/org/apache/fop/StandardTestSuite.java @@ -23,6 +23,8 @@ import junit.framework.Test; import junit.framework.TestSuite; import org.apache.fop.fonts.TrueTypeAnsiTestCase; +import org.apache.fop.image.loader.batik.ImageLoaderTestCase; +import org.apache.fop.image.loader.batik.ImagePreloaderTestCase; import org.apache.fop.render.pdf.PDFAConformanceTestCase; import org.apache.fop.render.pdf.PDFCMapTestCase; import org.apache.fop.render.pdf.PDFEncodingTestCase; @@ -50,6 +52,8 @@ public class StandardTestSuite { suite.addTest(new TestSuite(PDFsRGBSettingsTestCase.class)); suite.addTest(new TestSuite(TrueTypeAnsiTestCase.class)); suite.addTest(RichTextFormatTestSuite.suite()); + suite.addTest(new TestSuite(ImageLoaderTestCase.class)); + suite.addTest(new TestSuite(ImagePreloaderTestCase.class)); //$JUnit-END$ return suite; } diff --git a/test/java/org/apache/fop/image/loader/batik/ImageLoaderTestCase.java b/test/java/org/apache/fop/image/loader/batik/ImageLoaderTestCase.java index 457aa91d4..97bfb4d5c 100644 --- a/test/java/org/apache/fop/image/loader/batik/ImageLoaderTestCase.java +++ b/test/java/org/apache/fop/image/loader/batik/ImageLoaderTestCase.java @@ -19,21 +19,23 @@ package org.apache.fop.image.loader.batik; +import java.awt.image.Raster; +import java.awt.image.RenderedImage; import java.io.File; import junit.framework.TestCase; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.FopFactory; import org.apache.xmlgraphics.image.loader.Image; import org.apache.xmlgraphics.image.loader.ImageFlavor; import org.apache.xmlgraphics.image.loader.ImageInfo; import org.apache.xmlgraphics.image.loader.ImageManager; +import org.apache.xmlgraphics.image.loader.XMLNamespaceEnabledImageFlavor; import org.apache.xmlgraphics.image.loader.impl.ImageRendered; import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM; import org.apache.xmlgraphics.image.writer.ImageWriterUtil; -import org.apache.fop.apps.FOUserAgent; -import org.apache.fop.apps.FopFactory; - /** * Tests for bundled ImageLoader implementations. */ @@ -59,10 +61,10 @@ public class ImageLoaderTestCase extends TestCase { ImageInfo info = manager.preloadImage(uri, userAgent.getImageSessionContext()); assertNotNull("ImageInfo must not be null", info); - Image img = manager.getImage(info, ImageFlavor.XML_DOM, + Image img = manager.getImage(info, XMLNamespaceEnabledImageFlavor.SVG_DOM, userAgent.getImageSessionContext()); assertNotNull("Image must not be null", img); - assertEquals(ImageFlavor.XML_DOM, img.getFlavor()); + assertEquals(XMLNamespaceEnabledImageFlavor.SVG_DOM, img.getFlavor()); ImageXMLDOM imgDom = (ImageXMLDOM)img; assertNotNull(imgDom.getDocument()); assertEquals("http://www.w3.org/2000/svg", imgDom.getRootNamespace()); @@ -101,10 +103,10 @@ public class ImageLoaderTestCase extends TestCase { ImageInfo info = manager.preloadImage(uri, userAgent.getImageSessionContext()); assertNotNull("ImageInfo must not be null", info); - Image img = manager.getImage(info, ImageFlavor.XML_DOM, + Image img = manager.getImage(info, XMLNamespaceEnabledImageFlavor.SVG_DOM, userAgent.getImageSessionContext()); assertNotNull("Image must not be null", img); - assertEquals(ImageFlavor.XML_DOM, img.getFlavor()); + assertEquals(XMLNamespaceEnabledImageFlavor.SVG_DOM, img.getFlavor()); ImageXMLDOM imgDom = (ImageXMLDOM)img; assertNotNull(imgDom.getDocument()); assertEquals("http://www.w3.org/2000/svg", imgDom.getRootNamespace()); @@ -160,4 +162,58 @@ public class ImageLoaderTestCase extends TestCase { assertEquals(612000, info.getSize().getHeightMpt()); } + public void testSVGWithReferences() throws Exception { + String uri = "test/resources/fop/svg/images.svg"; + FopFactory ff = FopFactory.newInstance(); + FOUserAgent userAgent = ff.newFOUserAgent(); + + ImageManager manager = ff.getImageManager(); + ImageInfo info = manager.preloadImage(uri, userAgent.getImageSessionContext()); + assertNotNull("ImageInfo must not be null", info); + + Image img = manager.getImage(info, XMLNamespaceEnabledImageFlavor.SVG_DOM, + userAgent.getImageSessionContext()); + assertNotNull("Image must not be null", img); + assertEquals(XMLNamespaceEnabledImageFlavor.SVG_DOM, img.getFlavor()); + ImageXMLDOM imgDom = (ImageXMLDOM)img; + assertNotNull(imgDom.getDocument()); + assertEquals("http://www.w3.org/2000/svg", imgDom.getRootNamespace()); + info = imgDom.getInfo(); //Switch to the ImageInfo returned by the image + assertEquals(400000, info.getSize().getWidthMpt()); + assertEquals(400000, info.getSize().getHeightMpt()); + assertEquals(400, info.getSize().getWidthPx()); + assertEquals(400, info.getSize().getHeightPx()); + + img = manager.getImage(info, ImageFlavor.RENDERED_IMAGE, + userAgent.getImageSessionContext()); + assertNotNull("Image must not be null", img); + assertEquals(ImageFlavor.RENDERED_IMAGE, img.getFlavor()); + ImageRendered imgRed = (ImageRendered)img; + RenderedImage renImg = imgRed.getRenderedImage(); + assertNotNull(renImg); + if (DEBUG_TARGET_DIR != null) { + ImageWriterUtil.saveAsPNG(renImg, + (int)userAgent.getTargetResolution(), + new File(DEBUG_TARGET_DIR, "images.svg.png")); + } + assertEquals(400, renImg.getWidth()); + assertEquals(400, renImg.getHeight()); + info = imgRed.getInfo(); //Switch to the ImageInfo returned by the image + assertEquals(400000, info.getSize().getWidthMpt()); + assertEquals(400000, info.getSize().getHeightMpt()); + Raster raster = renImg.getData(); + // This pixel is white + int[] pixel1 = raster.getPixel(1, 1, (int[] )null); + // This pixel is from the embedded JPG and is not white + int[] pixel80 = raster.getPixel(80, 80, (int[]) null); + assertEquals(pixel1.length, pixel80.length); + boolean same = true; + for (int i = 0; i < pixel1.length; i++) { + same &= (pixel1[i] == pixel80[i]); + } + assertFalse("Embedding JPG into SVG failed", same); + } + + + } -- 2.39.5