aboutsummaryrefslogtreecommitdiffstats
path: root/src/scratchpad/testcases/org/apache/poi
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2014-02-11 23:16:54 +0000
committerAndreas Beeker <kiwiwings@apache.org>2014-02-11 23:16:54 +0000
commitfc697f0e60baa5891f3553996f2ece3c817e74c4 (patch)
tree3763ade1a3f5fa46bb0443c0dde52b76341ecaa7 /src/scratchpad/testcases/org/apache/poi
parent4b9d47af5a000ad70e8befdac6a27164f122e1b6 (diff)
downloadpoi-fc697f0e60baa5891f3553996f2ece3c817e74c4.tar.gz
poi-fc697f0e60baa5891f3553996f2ece3c817e74c4.zip
Bug 55902 - Mixed fonts issue with Chinese characters (unable to form images from ppt)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1567455 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/scratchpad/testcases/org/apache/poi')
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hslf/AllHSLFTests.java35
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hslf/usermodel/AllHSLFUserModelTests.java39
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestFontRendering.java112
3 files changed, 145 insertions, 41 deletions
diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/AllHSLFTests.java b/src/scratchpad/testcases/org/apache/poi/hslf/AllHSLFTests.java
index 8d9ca15196..e24b093dea 100644
--- a/src/scratchpad/testcases/org/apache/poi/hslf/AllHSLFTests.java
+++ b/src/scratchpad/testcases/org/apache/poi/hslf/AllHSLFTests.java
@@ -17,35 +17,30 @@
package org.apache.poi.hslf;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
import org.apache.poi.hslf.extractor.TestCruddyExtractor;
import org.apache.poi.hslf.extractor.TestExtractor;
import org.apache.poi.hslf.model.AllHSLFModelTests;
import org.apache.poi.hslf.record.AllHSLFRecordTests;
import org.apache.poi.hslf.usermodel.AllHSLFUserModelTests;
import org.apache.poi.hslf.util.TestSystemTimeUtils;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
/**
* Collects all tests from the package <tt>org.apache.poi.hslf</tt> and all sub-packages.
- *
- * @author Josh Micich
*/
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestEncryptedFile.class,
+ TestRecordCounts.class,
+ TestReWrite.class,
+ TestReWriteSanity.class,
+ TestCruddyExtractor.class,
+ TestExtractor.class,
+ AllHSLFModelTests.class,
+ AllHSLFRecordTests.class,
+ AllHSLFUserModelTests.class,
+ TestSystemTimeUtils.class
+})
public class AllHSLFTests {
-
- public static Test suite() {
- TestSuite result = new TestSuite(AllHSLFTests.class.getName());
- result.addTestSuite(TestEncryptedFile.class);
- result.addTestSuite(TestRecordCounts.class);
- result.addTestSuite(TestReWrite.class);
- result.addTestSuite(TestReWriteSanity.class);
- result.addTestSuite(TestCruddyExtractor.class);
- result.addTestSuite(TestExtractor.class);
- result.addTest(AllHSLFModelTests.suite());
- result.addTest(AllHSLFRecordTests.suite());
- result.addTest(AllHSLFUserModelTests.suite());
- result.addTestSuite(TestSystemTimeUtils.class);
- return result;
- }
}
diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/AllHSLFUserModelTests.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/AllHSLFUserModelTests.java
index 0a6b40e96c..bc6b6cd972 100644
--- a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/AllHSLFUserModelTests.java
+++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/AllHSLFUserModelTests.java
@@ -17,30 +17,27 @@
package org.apache.poi.hslf.usermodel;
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
/**
* Collects all tests from the package <tt>org.apache.poi.hslf.usermodel</tt>.
- *
- * @author Josh Micich
*/
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestAddingSlides.class,
+ TestBugs.class,
+ TestCounts.class,
+ TestMostRecentRecords.class,
+ TestNotesText.class,
+ TestPictures.class,
+ TestReOrderingSlides.class,
+ TestRecordSetup.class,
+ TestRichTextRun.class,
+ TestSheetText.class,
+ TestSlideOrdering.class,
+ TestSoundData.class,
+ TestFontRendering.class
+})
public class AllHSLFUserModelTests {
-
- public static Test suite() {
- TestSuite result = new TestSuite(AllHSLFUserModelTests.class.getName());
- result.addTestSuite(TestAddingSlides.class);
- result.addTestSuite(TestBugs.class);
- result.addTestSuite(TestCounts.class);
- result.addTestSuite(TestMostRecentRecords.class);
- result.addTestSuite(TestNotesText.class);
- result.addTestSuite(TestPictures.class);
- result.addTestSuite(TestReOrderingSlides.class);
- result.addTestSuite(TestRecordSetup.class);
- result.addTestSuite(TestRichTextRun.class);
- result.addTestSuite(TestSheetText.class);
- result.addTestSuite(TestSlideOrdering.class);
- result.addTestSuite(TestSoundData.class);
- return result;
- }
}
diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestFontRendering.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestFontRendering.java
new file mode 100644
index 0000000000..e4fc7f9310
--- /dev/null
+++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestFontRendering.java
@@ -0,0 +1,112 @@
+/* ====================================================================
+ 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.poi.hslf.usermodel;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.io.File;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.hslf.model.Slide;
+import org.apache.poi.hslf.model.TextPainter;
+import org.junit.Test;
+
+/**
+ * Test font rendering of alternative and fallback fonts
+ */
+public class TestFontRendering {
+ private static POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
+
+ @Test
+ public void bug55902mixedFontWithChineseCharacters() throws Exception {
+ // font files need to be downloaded first via
+ // ant test-scratchpad-download-resources
+ String fontFiles[][] = {
+ // Calibri is not available on *nix systems, so we need to use another similar free font
+ { "build/scratchpad-test-resources/Cabin-Regular.ttf", "mapped", "Calibri" },
+
+ // use "MS PGothic" if available (Windows only) ...
+ // for the junit test not all chars are rendered
+ { "build/scratchpad-test-resources/mona.ttf", "fallback", "Cabin" }
+ };
+
+ // setup fonts (especially needed, when run under *nix systems)
+ GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+ Map<String,String> fontMap = new HashMap<String,String>();
+ Map<String,String> fallbackMap = new HashMap<String,String>();
+
+ for (String fontFile[] : fontFiles) {
+ File f = new File(fontFile[0]);
+ assumeTrue("necessary font file "+f.getName()+" not downloaded.", f.exists());
+
+ Font font = Font.createFont(Font.TRUETYPE_FONT, f);
+ ge.registerFont(font);
+
+ Map<String,String> map = ("mapped".equals(fontFile[1]) ? fontMap : fallbackMap);
+ map.put(fontFile[2], font.getFamily());
+ }
+
+ InputStream is = slTests.openResourceAsStream("bug55902-mixedFontChineseCharacters.ppt");
+ SlideShow ss = new SlideShow(is);
+ is.close();
+
+ Dimension pgsize = ss.getPageSize();
+
+ Slide slide = ss.getSlides()[0];
+
+ // render it
+ double zoom = 1;
+ AffineTransform at = new AffineTransform();
+ at.setToScale(zoom, zoom);
+
+ BufferedImage imgActual = new BufferedImage((int)Math.ceil(pgsize.width*zoom), (int)Math.ceil(pgsize.height*zoom), BufferedImage.TYPE_3BYTE_BGR);
+ Graphics2D graphics = imgActual.createGraphics();
+ graphics.setRenderingHint(TextPainter.KEY_FONTFALLBACK, fallbackMap);
+ graphics.setRenderingHint(TextPainter.KEY_FONTMAP, fontMap);
+ graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+ graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
+ graphics.setTransform(at);
+ graphics.setPaint(Color.white);
+ graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
+ slide.draw(graphics);
+
+ BufferedImage imgExpected = ImageIO.read(slTests.getFile("bug55902-mixedChars.png"));
+ DataBufferByte expectedDB = (DataBufferByte)imgExpected.getRaster().getDataBuffer();
+ DataBufferByte actualDB = (DataBufferByte)imgActual.getRaster().getDataBuffer();
+ assertTrue(Arrays.equals(expectedDB.getData(0), actualDB.getData(0)));
+ }
+}