aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2005-12-07 15:15:38 +0000
committerJeremias Maerki <jeremias@apache.org>2005-12-07 15:15:38 +0000
commit973d676bae6d1253f8675b216704752f5897e2fa (patch)
treee4a7d895f45fc91d51ad39344a59a78379a9554e /test
parent60cf5396d817f66e1da6ab8ad1b589457be8c41c (diff)
downloadxmlgraphics-fop-973d676bae6d1253f8675b216704752f5897e2fa.tar.gz
xmlgraphics-fop-973d676bae6d1253f8675b216704752f5897e2fa.zip
Alternative set of rules for text indent calculation (start-indent and end-indent) which tries to mimic many commercial FO implementation that have chosen to break the specification in this aspect. I think I have found the behaviour for most cases. But I'm operating in reverse-engineering mode here and not all FO implementations behave in the same way!
This is an optional feature that has to be explicitely enabled through the user agent. Otherwise, FOP will behave like before. In the FO tree tests a processing instruction is used to enable the feature/bug ;-) in the user agent so I can test both cases. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@354763 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test')
-rw-r--r--test/fotree/testcases/indent-inheritance1.fo53
-rw-r--r--test/fotree/testcases/indent-inheritance2.fo133
-rw-r--r--test/fotree/testcases/indent-inheritance2a.fo163
-rw-r--r--test/java/org/apache/fop/fotreetest/FOTreeTester.java45
4 files changed, 389 insertions, 5 deletions
diff --git a/test/fotree/testcases/indent-inheritance1.fo b/test/fotree/testcases/indent-inheritance1.fo
new file mode 100644
index 000000000..e797c9adf
--- /dev/null
+++ b/test/fotree/testcases/indent-inheritance1.fo
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation
+
+ Licensed 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$ -->
+<!-- This test verifies basic start-indent and end-indent inheritance. -->
+<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="A4" page-height="29.7cm" page-width="21cm" margin="2cm">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="A4">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>Hello World!
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block start-indent="10pt" end-indent="15pt">Hello World!
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="15000mpt"/>
+ <fo:block>nested
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="15000mpt"/>
+ </fo:block>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="15000mpt"/>
+ <fo:block>nested in b-c
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="15000mpt"/>
+ <fo:block>nested2 in b-c
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="15000mpt"/>
+ </fo:block>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
diff --git a/test/fotree/testcases/indent-inheritance2.fo b/test/fotree/testcases/indent-inheritance2.fo
new file mode 100644
index 000000000..1b07cd110
--- /dev/null
+++ b/test/fotree/testcases/indent-inheritance2.fo
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation
+
+ Licensed 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$ -->
+<!-- This test verifies basic start-indent and end-indent inheritance. -->
+<?fop-useragent-break-indent-inheritance false?>
+<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="A4" page-height="29.7cm" page-width="21cm" margin="2cm">
+ <fo:region-body background-color="lightgrey"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="A4">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block font-style="italic">start-indent specified on outer block</fo:block>
+ <fo:block background-color="#FFFFCC">unindented
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block background-color="yellow" start-indent="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">start-indent specified on outer block (reset to 0pt on inner block and the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" start-indent="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block start-indent="0pt" background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container start-indent="0pt">
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">start-indent specified on outer block (reset to 0pt on nested block in the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" start-indent="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block start-indent="0pt" background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block (set to 0pt on inner block and the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block margin-left="0pt" background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container margin-left="0pt">
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block (reset to 0pt on nested block in the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block margin-left="0pt" background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
diff --git a/test/fotree/testcases/indent-inheritance2a.fo b/test/fotree/testcases/indent-inheritance2a.fo
new file mode 100644
index 000000000..924354288
--- /dev/null
+++ b/test/fotree/testcases/indent-inheritance2a.fo
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation
+
+ Licensed 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$ -->
+<!-- This test verifies basic start-indent and end-indent inheritance with broken indent inheritance enabled. -->
+<?fop-useragent-break-indent-inheritance true?>
+<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="A4" page-height="29.7cm" page-width="21cm" margin="2cm">
+ <fo:region-body background-color="lightgrey"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="A4">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block font-style="italic">start-indent specified on outer block</fo:block>
+ <fo:block background-color="#FFFFCC">unindented
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block background-color="yellow" start-indent="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">start-indent specified on outer block (reset to 0pt on inner block and the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" start-indent="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block start-indent="0pt" background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container start-indent="0pt">
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">start-indent specified on outer block (reset to 0pt on nested block in the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" start-indent="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block start-indent="0pt" background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block margin-left="5pt" background-color="orange">fo:block|fo:block (further indented using margin-left)
+ <test:assert property="start-indent" expected="15000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block (set to 0pt on inner block and the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block margin-left="0pt" background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container margin-left="0pt">
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block (reset to 0pt on nested block in the block-container)</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block-container>
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block margin-left="0pt" background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ <fo:block space-before="10pt" font-style="italic">margin-left specified on outer block and start-indent on nested elements</fo:block>
+ <fo:block background-color="#FFFFCC">unindented</fo:block>
+ <fo:block background-color="yellow" margin-left="10pt">fo:block
+ <test:assert property="start-indent" expected="10000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block start-indent="30pt" background-color="orange">fo:block|fo:block
+ <test:assert property="start-indent" expected="30000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block-container start-indent="30pt" background-color="gray">
+ <test:assert property="start-indent" expected="30000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ <fo:block background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="30000mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block start-indent="0pt" background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ <fo:block margin-left="0pt" background-color="red">fo:block|fo:block-container|fo:block
+ <test:assert property="start-indent" expected="0mpt"/>
+ <test:assert property="end-indent" expected="0mpt"/>
+ </fo:block>
+ </fo:block-container>
+ </fo:block>
+ </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 0a79aea61..773593f09 100644
--- a/test/java/org/apache/fop/fotreetest/FOTreeTester.java
+++ b/test/java/org/apache/fop/fotreetest/FOTreeTester.java
@@ -21,6 +21,8 @@ package org.apache.fop.fotreetest;
import java.io.File;
import java.util.List;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXResult;
@@ -32,6 +34,10 @@ import org.apache.fop.apps.Fop;
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.fotreetest.ext.TestElementMapping;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLFilterImpl;
/**
* Test driver class for FO tree tests.
@@ -50,19 +56,28 @@ public class FOTreeTester {
ResultCollector collector = ResultCollector.getInstance();
collector.reset();
- //Setup identity Transformer
- Transformer transformer = tfactory.newTransformer();
- Source src = new StreamSource(testFile);
+ SAXParserFactory spf = SAXParserFactory.newInstance();
+ spf.setNamespaceAware(true);
+ spf.setValidating(false);
+ SAXParser parser = spf.newSAXParser();
+ XMLReader reader = parser.getXMLReader();
//Setup FOP for area tree rendering
FOUserAgent ua = new FOUserAgent();
ua.setBaseURL(testFile.getParentFile().toURL().toString());
ua.setFOEventHandlerOverride(new DummyFOEventHandler(ua));
ua.addElementMapping(new TestElementMapping());
+
+ //Used to set values in the user agent through processing instructions
+ reader = new PIListener(reader, ua);
+
Fop fop = new Fop(MimeConstants.MIME_FOP_AREA_TREE, ua);
- SAXResult fores = new SAXResult(fop.getDefaultHandler());
- transformer.transform(src, fores);
+ reader.setContentHandler(fop.getDefaultHandler());
+ reader.setDTDHandler(fop.getDefaultHandler());
+ reader.setErrorHandler(fop.getDefaultHandler());
+ reader.setEntityResolver(fop.getDefaultHandler());
+ reader.parse(testFile.toURL().toExternalForm());
List results = collector.getResults();
if (results.size() > 0) {
@@ -73,4 +88,24 @@ public class FOTreeTester {
}
}
+ private class PIListener extends XMLFilterImpl {
+
+ private FOUserAgent userAgent;
+
+ public PIListener(XMLReader parent, FOUserAgent userAgent) {
+ super(parent);
+ this.userAgent = userAgent;
+ }
+
+ /** @see org.xml.sax.helpers.XMLFilterImpl */
+ public void processingInstruction(String target, String data) throws SAXException {
+ if ("fop-useragent-break-indent-inheritance".equals(target)) {
+ userAgent.setBreakIndentInheritanceOnReferenceAreaBoundary(
+ Boolean.valueOf(data).booleanValue());
+ }
+ super.processingInstruction(target, data);
+ }
+
+ }
+
}