diff options
author | Simon Steiner <ssteiner@apache.org> | 2024-11-19 10:52:59 +0000 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2024-11-19 10:52:59 +0000 |
commit | 2f1858567a8d68bd9c09eb33955d2cbae2aa03ac (patch) | |
tree | 8b9bd7b6971aae7f5aa6dcd20d9f006194ae8136 /fop-core/src/test | |
parent | b39685b833a0bb031c0da94cc0b0fafbceed3852 (diff) | |
download | xmlgraphics-fop-2f1858567a8d68bd9c09eb33955d2cbae2aa03ac.tar.gz xmlgraphics-fop-2f1858567a8d68bd9c09eb33955d2cbae2aa03ac.zip |
FOP-3220: Add option to lazy load fonts for PNG/TIFF/PCL output
Diffstat (limited to 'fop-core/src/test')
-rw-r--r-- | fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java | 2 | ||||
-rw-r--r-- | fop-core/src/test/java/org/apache/fop/render/java2d/ConfiguredFontCollectionTestCase.java | 71 |
2 files changed, 72 insertions, 1 deletions
diff --git a/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java b/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java index 2fb366536..61f2bad7b 100644 --- a/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java +++ b/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java @@ -54,7 +54,7 @@ public class EmbedFontInfoTestCase { triplets.add(triplet); FontUris fontUris = new FontUris(embedURI, metricsURI); sut = new EmbedFontInfo(fontUris, kerning, useAdvanced, triplets, subFontName, encMode, - embedMode, false, false, true); + embedMode, false, false, true, false); } @Test diff --git a/fop-core/src/test/java/org/apache/fop/render/java2d/ConfiguredFontCollectionTestCase.java b/fop-core/src/test/java/org/apache/fop/render/java2d/ConfiguredFontCollectionTestCase.java index 7e2f8d4f7..a724972ad 100644 --- a/fop-core/src/test/java/org/apache/fop/render/java2d/ConfiguredFontCollectionTestCase.java +++ b/fop-core/src/test/java/org/apache/fop/render/java2d/ConfiguredFontCollectionTestCase.java @@ -22,7 +22,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.net.URI; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -31,9 +34,14 @@ import org.junit.Test; import org.apache.commons.io.IOUtils; +import org.apache.xmlgraphics.io.Resource; +import org.apache.xmlgraphics.io.ResourceResolver; + import org.apache.fop.apps.io.InternalResourceResolver; import org.apache.fop.apps.io.ResourceResolverFactory; import org.apache.fop.fonts.EmbedFontInfo; +import org.apache.fop.fonts.EmbeddingMode; +import org.apache.fop.fonts.EncodingMode; import org.apache.fop.fonts.FontInfo; import org.apache.fop.fonts.FontTriplet; import org.apache.fop.fonts.FontUris; @@ -61,6 +69,69 @@ public class ConfiguredFontCollectionTestCase { } } + @Test + public void testLazyLoading() { + List<EmbedFontInfo> list = Arrays.asList( + addFont("test/resources/fonts/type1/c0419bt_.pfb", "test/resources/fonts/type1/c0419bt_.afm", true), + addFont("x1", "x2", true)); + List<String> fileReads = new ArrayList<>(); + ConfiguredFontCollection collection = new ConfiguredFontCollection(getResourceResolver(fileReads), list, true); + FontInfo fontInfo = new FontInfo(); + int numOfFonts = collection.setup(0, fontInfo); + Assert.assertEquals(numOfFonts, 2); + Assert.assertTrue(fileReads.isEmpty()); + Assert.assertEquals(fontInfo.getFonts().get("F0").getFontName(), "Courier10PitchBT-Roman"); + Assert.assertEquals(fileReads.size(), 3); + Assert.assertTrue(fileReads.get(0).contains("c0419bt_.afm")); + Assert.assertTrue(fileReads.get(2).contains("c0419bt_.pfb")); + String ex = ""; + try { + fontInfo.getFonts().get("F1").getFontName(); + } catch (RuntimeException e) { + ex = e.getMessage(); + } + Assert.assertTrue(ex.startsWith("Failed to read font file")); + Assert.assertEquals(fileReads.size(), 4); + } + + @Test + public void testNoLazyLoading() { + List<EmbedFontInfo> list = Arrays.asList( + addFont("test/resources/fonts/type1/c0419bt_.pfb", "test/resources/fonts/type1/c0419bt_.afm", false), + addFont("x1", "x2", false)); + List<String> fileReads = new ArrayList<>(); + ConfiguredFontCollection collection = new ConfiguredFontCollection(getResourceResolver(fileReads), list, true); + FontInfo fontInfo = new FontInfo(); + int numOfFonts = collection.setup(0, fontInfo); + Assert.assertEquals(numOfFonts, 2); + Assert.assertEquals(fileReads.size(), 4); + Assert.assertEquals(fontInfo.getFonts().get("F0").getFontName(), "Courier10PitchBT-Roman"); + Assert.assertTrue(fileReads.get(0).contains("c0419bt_.afm")); + Assert.assertTrue(fileReads.get(2).contains("c0419bt_.pfb")); + Assert.assertTrue(fileReads.get(3).contains("x2")); + } + + private InternalResourceResolver getResourceResolver(final List<String> fileReads) { + return ResourceResolverFactory.createInternalResourceResolver(new File(".").toURI(), + new ResourceResolver() { + public Resource getResource(URI uri) throws IOException { + fileReads.add(uri.toASCIIString()); + return new Resource(uri.toURL().openStream()); + } + public OutputStream getOutputStream(URI uri) { + return null; + } + }); + } + + private EmbedFontInfo addFont(String pfb, String afm, boolean lazyLoad) { + File pfbFile = new File(pfb); + File afmFile = new File(afm); + FontUris fontUris = new FontUris(pfbFile.toURI(), null, afmFile.toURI(), null); + return new EmbedFontInfo(fontUris, true, true, new ArrayList<FontTriplet>(), null, + EncodingMode.AUTO, EmbeddingMode.AUTO, false, false, true, lazyLoad); + } + private File getFontFileNoExension(String s) throws IOException { FileInputStream pfb = new FileInputStream(s); File tmp = File.createTempFile("fop", "font"); |