aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/org/apache/fop/fo/expr/PropertyParser.java15
-rw-r--r--src/java/org/apache/fop/fo/properties/LengthProperty.java5
-rw-r--r--test/fotree/testcases/pixel_length_96dpi.fo34
-rw-r--r--test/java/org/apache/fop/fotreetest/FOTreeTester.java21
-rw-r--r--test/java/org/apache/fop/fotreetest/ResultCollector.java25
-rw-r--r--test/java/org/apache/fop/fotreetest/ext/AssertElement.java19
6 files changed, 92 insertions, 27 deletions
diff --git a/src/java/org/apache/fop/fo/expr/PropertyParser.java b/src/java/org/apache/fop/fo/expr/PropertyParser.java
index 4f1cdbdc6..87f640651 100644
--- a/src/java/org/apache/fop/fo/expr/PropertyParser.java
+++ b/src/java/org/apache/fop/fo/expr/PropertyParser.java
@@ -19,6 +19,12 @@
package org.apache.fop.fo.expr;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.xmlgraphics.util.UnitConv;
+
import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.LengthBase;
import org.apache.fop.datatypes.Numeric;
@@ -31,10 +37,6 @@ import org.apache.fop.fo.properties.PercentLength;
import org.apache.fop.fo.properties.Property;
import org.apache.fop.fo.properties.StringProperty;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
/**
* Class to parse XSL-FO property expressions.
* This class is heavily based on the epxression parser in James Clark's
@@ -312,10 +314,11 @@ public final class PropertyParser extends PropertyTokenizer {
if ("px".equals(unitPart)) {
//pass the ratio between target-resolution and
//the default resolution of 72dpi
+ float resolution = propInfo.getPropertyList().getFObj()
+ .getUserAgent().getSourceResolution();
prop = FixedLength.getInstance(
numPart, unitPart,
- propInfo.getPropertyList().getFObj()
- .getUserAgent().getTargetResolution() / 72.0f);
+ UnitConv.IN2PT / resolution);
} else {
//use default resolution of 72dpi
prop = FixedLength.getInstance(numPart, unitPart);
diff --git a/src/java/org/apache/fop/fo/properties/LengthProperty.java b/src/java/org/apache/fop/fo/properties/LengthProperty.java
index 16bbe430c..3f569054e 100644
--- a/src/java/org/apache/fop/fo/properties/LengthProperty.java
+++ b/src/java/org/apache/fop/fo/properties/LengthProperty.java
@@ -19,6 +19,8 @@
package org.apache.fop.fo.properties;
+import org.apache.xmlgraphics.util.UnitConv;
+
import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.Numeric;
import org.apache.fop.fo.FObj;
@@ -57,9 +59,10 @@ public abstract class LengthProperty extends Property
}
if (p instanceof NumberProperty) {
//Assume pixels (like in HTML) when there's no unit
+ float resolution = propertyList.getFObj().getUserAgent().getSourceResolution();
return FixedLength.getInstance(
p.getNumeric().getNumericValue(), "px",
- propertyList.getFObj().getUserAgent().getTargetResolution() / 72.0f);
+ UnitConv.IN2PT / resolution);
}
Length val = p.getLength();
if (val != null) {
diff --git a/test/fotree/testcases/pixel_length_96dpi.fo b/test/fotree/testcases/pixel_length_96dpi.fo
new file mode 100644
index 000000000..00c35eddb
--- /dev/null
+++ b/test/fotree/testcases/pixel_length_96dpi.fo
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<?fop-source-resolution 144?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block-container inline-progression-dimension="144px">
+ <test:assert property="inline-progression-dimension.optimum" expected="72000mpt" />
+ <fo:block>Block 1</fo:block>
+ </fo:block-container>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
diff --git a/test/java/org/apache/fop/fotreetest/FOTreeTester.java b/test/java/org/apache/fop/fotreetest/FOTreeTester.java
index fe44e3e23..ba9fde4f9 100644
--- a/test/java/org/apache/fop/fotreetest/FOTreeTester.java
+++ b/test/java/org/apache/fop/fotreetest/FOTreeTester.java
@@ -32,6 +32,7 @@ import org.xml.sax.helpers.XMLFilterImpl;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
+import org.apache.fop.apps.FopFactoryConfigurator;
import org.apache.fop.fotreetest.ext.TestElementMapping;
import org.apache.fop.util.ConsoleEventListenerForTests;
@@ -64,8 +65,13 @@ public class FOTreeTester {
SAXParser parser = spf.newSAXParser();
XMLReader reader = parser.getXMLReader();
+ //Resetting values modified by processing instructions
+ fopFactory.setBreakIndentInheritanceOnReferenceAreaBoundary(
+ FopFactoryConfigurator.DEFAULT_BREAK_INDENT_INHERITANCE);
+ fopFactory.setSourceResolution(FopFactoryConfigurator.DEFAULT_SOURCE_RESOLUTION);
+
FOUserAgent ua = fopFactory.newFOUserAgent();
- ua.setBaseURL(testFile.getParentFile().toURL().toString());
+ ua.setBaseURL(testFile.getParentFile().toURI().toURL().toString());
ua.setFOEventHandlerOverride(new DummyFOEventHandler(ua));
ua.getEventBroadcaster().addEventListener(
new ConsoleEventListenerForTests(testFile.getName()));
@@ -79,14 +85,19 @@ public class FOTreeTester {
reader.setDTDHandler(fop.getDefaultHandler());
reader.setErrorHandler(fop.getDefaultHandler());
reader.setEntityResolver(fop.getDefaultHandler());
- reader.parse(testFile.toURL().toExternalForm());
+ try {
+ reader.parse(testFile.toURI().toURL().toExternalForm());
+ } catch (Exception e) {
+ collector.notifyError(e.getLocalizedMessage());
+ throw e;
+ }
List results = collector.getResults();
if (results.size() > 0) {
for (int i = 0; i < results.size(); i++) {
- System.out.println(((Exception)results.get(i)).getMessage());
+ System.out.println((String)results.get(i));
}
- throw (Exception)results.get(0);
+ throw new IllegalStateException((String)results.get(0));
}
}
@@ -104,6 +115,8 @@ public class FOTreeTester {
if ("fop-useragent-break-indent-inheritance".equals(target)) {
userAgent.getFactory().setBreakIndentInheritanceOnReferenceAreaBoundary(
Boolean.valueOf(data).booleanValue());
+ } else if ("fop-source-resolution".equals(target)) {
+ userAgent.getFactory().setSourceResolution(Float.parseFloat(data));
}
super.processingInstruction(target, data);
}
diff --git a/test/java/org/apache/fop/fotreetest/ResultCollector.java b/test/java/org/apache/fop/fotreetest/ResultCollector.java
index 36d111c7f..3f6502803 100644
--- a/test/java/org/apache/fop/fotreetest/ResultCollector.java
+++ b/test/java/org/apache/fop/fotreetest/ResultCollector.java
@@ -23,7 +23,7 @@ import java.util.Collections;
import java.util.List;
/**
- * This class collects the results from assertions injected into the FO stream.
+ * This class collects failures for assertions injected into the FO stream.
*/
public class ResultCollector {
@@ -31,7 +31,7 @@ public class ResultCollector {
private List results = new java.util.ArrayList();
- /** @return the ResultColletor singleton */
+ /** @return the ResultCollector singleton */
public static ResultCollector getInstance() {
if (instance == null) {
instance = new ResultCollector();
@@ -45,12 +45,23 @@ public class ResultCollector {
}
/**
- * This notifies the ResultCollector about an Exception.
- * @param e the exception
+ * This notifies the ResultCollector about an assertion failure.
+ *
+ * @param message the message containing the details
*/
- public void notifyException(Exception e) {
- System.out.println(e.getMessage());
- results.add(e);
+ public void notifyAssertionFailure(String message) {
+ System.out.println(message);
+ results.add(message);
+ }
+
+ /**
+ * This notifies the ResultCollector about a testcase that ended
+ * with a fatal error
+ *
+ * @param message the message containing the details
+ */
+ public void notifyError(String message) {
+ results.add(message);
}
/** Resets the result list. */
diff --git a/test/java/org/apache/fop/fotreetest/ext/AssertElement.java b/test/java/org/apache/fop/fotreetest/ext/AssertElement.java
index 97b73947c..f4a76d7ed 100644
--- a/test/java/org/apache/fop/fotreetest/ext/AssertElement.java
+++ b/test/java/org/apache/fop/fotreetest/ext/AssertElement.java
@@ -41,7 +41,10 @@ import org.xml.sax.Locator;
public class AssertElement extends TestObj {
/**
- * @see org.apache.fop.fo.FONode#FONode(FONode)
+ * Creates a new AssertElement instance that is a child
+ * of the given {@link FONode}
+ *
+ * @param parent the parent {@link FONode}
*/
public AssertElement(FONode parent) {
super(parent);
@@ -58,6 +61,7 @@ public class AssertElement extends TestObj {
ResultCollector collector = ResultCollector.getInstance();
String propName = attlist.getValue("property");
+ String expected = attlist.getValue("expected");
String component = null;
int dotIndex = propName.indexOf('.');
if (dotIndex >= 0) {
@@ -66,8 +70,7 @@ public class AssertElement extends TestObj {
}
int propID = FOPropertyMapping.getPropertyId(propName);
if (propID < 0) {
- collector.notifyException(new IllegalArgumentException(
- "Property not found: " + propName));
+ collector.notifyAssertionFailure("Property not found: " + propName);
} else {
Property prop;
prop = propertyList.getParentPropertyList().get(propID);
@@ -94,21 +97,20 @@ public class AssertElement extends TestObj {
}
String s;
if (prop instanceof PercentLength) {
- s = ((PercentLength)prop).getString();
+ s = prop.getString();
} else {
s = String.valueOf(prop);
}
- String expected = attlist.getValue("expected");
if (!expected.equals(s)) {
- collector.notifyException(
- new IllegalStateException(locator.getSystemId()
+ collector.notifyAssertionFailure(
+ locator.getSystemId()
+ "\nProperty '" + propName
+ "' expected to evaluate to '" + expected
+ "' but got '" + s
+ "'\n(test:assert in "
+ propertyList.getParentFObj().getName()
+ " at line #" + locator.getLineNumber()
- + ", column #" + locator.getColumnNumber() + ")\n"));
+ + ", column #" + locator.getColumnNumber() + ")\n");
}
}
@@ -120,4 +122,3 @@ public class AssertElement extends TestObj {
}
}
-