aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis Bernardo <lbernardo@apache.org>2013-02-21 01:10:36 +0000
committerLuis Bernardo <lbernardo@apache.org>2013-02-21 01:10:36 +0000
commit9dadbc4897447e7f41d8dea17fc579f293b675b1 (patch)
treea5b7c282ef51f0276b08a4fb71a5191fb9e49d9f
parentd0d7e25d98cd1509e8433782af336e93bb02f1b8 (diff)
downloadxmlgraphics-fop-9dadbc4897447e7f41d8dea17fc579f293b675b1.tar.gz
xmlgraphics-fop-9dadbc4897447e7f41d8dea17fc579f293b675b1.zip
FOP-2181: Add a test case for the recent fix made in FOP-2174 and XGC-76 regarding source resolution scaling with SVG and images; patch submitted by Robert Meyer
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1448484 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java4
-rw-r--r--test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java81
2 files changed, 83 insertions, 2 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java b/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
index 530ad024c..627fd29df 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
@@ -160,8 +160,8 @@ public class ImageLayout implements Constants {
}
boolean foundNonAuto = (lenWidth.getEnum() != EN_AUTO || lenHeight.getEnum() != EN_AUTO);
if (!foundNonAuto) {
- cwidth = intrinsicSize.width / (sourceResolution / UnitConv.IN2PT);
- cheight = intrinsicSize.height / (sourceResolution / UnitConv.IN2PT);
+ cwidth = (int)(intrinsicSize.width / ((float)sourceResolution / (float)UnitConv.IN2PT));
+ cheight = (int)(intrinsicSize.height / ((float)sourceResolution / (float)UnitConv.IN2PT));
}
Dimension constrainedIntrinsicSize;
diff --git a/test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java b/test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java
new file mode 100644
index 000000000..b652aaf61
--- /dev/null
+++ b/test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java
@@ -0,0 +1,81 @@
+package org.apache.fop.layoutmgr.inline;
+
+import java.awt.Dimension;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.datatypes.Length;
+import org.apache.fop.fo.flow.AbstractGraphics;
+import org.apache.fop.fo.properties.EnumLength;
+import org.apache.fop.fo.properties.EnumProperty;
+import org.apache.fop.fo.properties.LengthRangeProperty;
+import org.apache.fop.fo.properties.Property;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ImageLayoutTestCase {
+
+ private AbstractGraphics gfxProps;
+
+ /**
+ * Initializes the resources needed to run the scaling unit test
+ */
+ @Before
+ public void setUp() {
+ gfxProps = mock(AbstractGraphics.class);
+
+ Property enumProp = EnumProperty.getInstance(9, "AUTO");
+ Length len = new EnumLength(enumProp);
+ len.getEnum();
+
+ LengthRangeProperty lenRangeProp = mock(LengthRangeProperty.class);
+ when(lenRangeProp.getMinimum(null)).thenReturn(enumProp);
+ when(lenRangeProp.getMaximum(null)).thenReturn(enumProp);
+ when(lenRangeProp.getOptimum(null)).thenReturn(enumProp);
+
+ when(gfxProps.getBlockProgressionDimension()).thenReturn(lenRangeProp);
+ when(gfxProps.getInlineProgressionDimension()).thenReturn(lenRangeProp);
+
+ //All values should be set to AUTO to test when no content-width or height has been specified
+ when(gfxProps.getBlockProgressionDimension().getOptimum(null)).thenReturn(enumProp);
+ when(gfxProps.getBlockProgressionDimension().getOptimum(null).getLength()).thenReturn(len);
+ when(gfxProps.getBlockProgressionDimension().getMinimum(null)).thenReturn(enumProp);
+ when(gfxProps.getBlockProgressionDimension().getMinimum(null).getLength()).thenReturn(len);
+ when(gfxProps.getBlockProgressionDimension().getMaximum(null)).thenReturn(enumProp);
+ when(gfxProps.getBlockProgressionDimension().getMaximum(null).getLength()).thenReturn(len);
+ when(gfxProps.getInlineProgressionDimension().getOptimum(null)).thenReturn(enumProp);
+ when(gfxProps.getInlineProgressionDimension().getOptimum(null).getLength()).thenReturn(len);
+ when(gfxProps.getInlineProgressionDimension().getMinimum(null)).thenReturn(enumProp);
+ when(gfxProps.getInlineProgressionDimension().getMinimum(null).getLength()).thenReturn(len);
+ when(gfxProps.getInlineProgressionDimension().getMaximum(null)).thenReturn(enumProp);
+ when(gfxProps.getInlineProgressionDimension().getMaximum(null).getLength()).thenReturn(len);
+
+ when(gfxProps.getContentWidth()).thenReturn(len);
+ when(gfxProps.getContentHeight()).thenReturn(len);
+ }
+
+ /**
+ * Tests different levels of scaling to see if they match an expected result
+ */
+ @Test
+ public void testImageScaling() {
+ testScaling(114.0f, new Dimension(990000, 765000), 625263.0f, 483157.0f);
+ testScaling(96.0f, new Dimension(990000, 765000), 742500.0f, 573750.0f);
+ testScaling(72.0f, new Dimension(990000, 765000), 990000.0f, 765000.0f);
+ }
+
+ private void testScaling(float sourceResolution, Dimension intrinsicSize,
+ float targetWidth, float targetHeight) {
+ FOUserAgent userAgent = mock(FOUserAgent.class);
+ when(userAgent.getSourceResolution()).thenReturn(sourceResolution);
+ when(gfxProps.getUserAgent()).thenReturn(userAgent);
+
+ ImageLayout imgLayout = new ImageLayout(gfxProps, null, intrinsicSize);
+ assertEquals(imgLayout.getViewportSize().getWidth(), targetWidth, 0.0f);
+ assertEquals(imgLayout.getViewportSize().getHeight(), targetHeight, 0.0f);
+ }
+}