You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2009/02/22 13:40:55 UTC

svn commit: r746664 [8/8] - in /xmlgraphics/fop/trunk: ./ examples/embedding/java/embedding/atxml/ examples/embedding/java/embedding/intermediate/ examples/embedding/xml/xslt/ examples/plan/src/org/apache/fop/plan/ lib/ src/documentation/content/xdocs/...

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java Sun Feb 22 12:40:44 2009
@@ -19,27 +19,21 @@
 
 package org.apache.fop.intermediate;
 
-import java.io.BufferedOutputStream;
 import java.io.File;
-import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.OutputStream;
-import java.net.MalformedURLException;
 
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.w3c.dom.Document;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
@@ -50,145 +44,35 @@
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.render.Renderer;
 import org.apache.fop.render.xml.XMLRenderer;
-import org.apache.fop.util.ConsoleEventListenerForTests;
-
-//XML Unit 1.0: See http://xmlunit.sourceforge.net (BSD-style License)
-import org.custommonkey.xmlunit.XMLTestCase;
-import org.w3c.dom.Document;
 
 /**
  * Tests the area tree parser.
  */
-public class AreaTreeParserTestCase extends XMLTestCase {
-
-    // configure fopFactory as desired
-    private static FopFactory fopFactory = FopFactory.newInstance();
-
-    private static SAXTransformerFactory tFactory
-            = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
-    private static Templates stylesheet = null;
-
-    private File mainDir = new File("test/layoutengine");
-    private File testDir = new File(mainDir, "standard-testcases");
-
-    private String name;
-    private File testFile;
-
-    private File outputDir;
-    private Document intermediate;
-
-    /** @see junit.framework.TestCase#TestCase(String) */
-    public AreaTreeParserTestCase(String name) {
-        super(name);
-    }
+public class AreaTreeParserTestCase extends AbstractIntermediateTestCase {
 
     /**
      * Constructor for the test suite that is used for each test file.
      * @param testFile the test file to run
+     * @throws IOException
+     * @throws IOException if an I/O error occurs while loading the test case
      */
-    public AreaTreeParserTestCase(File testFile) {
-        super(testFile.getName());
-        this.testFile = testFile;
-    }
-
-    private Templates getStylesheet() throws TransformerConfigurationException {
-        if (stylesheet == null) {
-            File xsltFile = new File(mainDir, "testcase2fo.xsl");
-            stylesheet = tFactory.newTemplates(new StreamSource(xsltFile));
-        }
-        return stylesheet;
-    }
-
-    /** @see junit.framework.TestCase#setUp() */
-    protected void setUp() throws Exception {
-        super.setUp();
-        String s = System.getProperty("fop.intermediate.outdir");
-        if (s != null && s.length() > 0) {
-            outputDir = new File(s);
-            outputDir.mkdirs();
-        }
-        File srcFile;
-        if (testFile != null) {
-            srcFile = testFile;
-        } else {
-            srcFile = new File(testDir, "block_font-style.xml");
-        }
-        this.name = srcFile.getName();
-        intermediate = buildAreaTreeXML(new StreamSource(srcFile), getStylesheet());
-        if (outputDir != null) {
-            saveDOM(intermediate, new File(outputDir, name + ".at1.xml"));
-        }
-    }
-
-
-    /**
-     * Tests the area tree parser by running the parsed area tree again through the area tree
-     * renderer. The source and result documents are compared to each other.
-     * @throws Exception if the test fails
-     */
-    public void testParserToAT() throws Exception {
-
-        Source src = new DOMSource(intermediate);
-        Document doc = parseAndRenderToAreaTree(src);
-        if (outputDir != null) {
-            File tgtFile = new File(outputDir, name + ".at2.xml");
-            saveDOM(doc, tgtFile);
-        }
-
-        assertXMLEqual(intermediate, doc);
-    }
-
-    private void saveDOM(Document doc, File tgtFile) throws Exception {
-        Transformer transformer = tFactory.newTransformer();
-        Source src = new DOMSource(doc);
-        Result res = new StreamResult(tgtFile);
-        transformer.transform(src, res);
-    }
-
-    /**
-     * Tests the area tree parser by sending the parsed area tree to the PDF Renderer. Some
-     * errors might be caught by the PDFRenderer.
-     * @throws Exception if the test fails
-     */
-    public void testParserToPDF() throws Exception {
-        OutputStream out;
-        if (outputDir != null) {
-            File tgtFile = new File(outputDir, name + ".pdf");
-            out = new FileOutputStream(tgtFile);
-            out = new BufferedOutputStream(out);
-        } else {
-            out = new ByteArrayOutputStream();
-        }
-        try {
-            Source src = new DOMSource(intermediate);
-            parseAndRender(src, out, MimeConstants.MIME_PDF);
-        } finally {
-            IOUtils.closeQuietly(out);
-        }
+    public AreaTreeParserTestCase(File testFile) throws IOException {
+        super(testFile);
     }
 
-    private FOUserAgent createUserAgent() {
-        FOUserAgent userAgent = fopFactory.newFOUserAgent();
-        try {
-            userAgent.setBaseURL(testDir.toURL().toExternalForm());
-            userAgent.getEventBroadcaster().addEventListener(
-                    new ConsoleEventListenerForTests(testFile.getName()));
-        } catch (MalformedURLException e) {
-            //ignore, won't happen
-        }
-        return userAgent;
+    /** {@inheritDoc} */
+    protected String getIntermediateFileExtension() {
+        return ".at.xml";
     }
 
-    private Document buildAreaTreeXML(Source src, Templates stylesheet) throws Exception {
-        Transformer transformer;
-        if (stylesheet != null) {
-            transformer = stylesheet.newTransformer();
-        } else {
-            transformer = tFactory.newTransformer();
-        }
+    /** {@inheritDoc} */
+    protected Document buildIntermediateDocument(Templates templates)
+                throws Exception {
+        Transformer transformer = templates.newTransformer();
+        setErrorListener(transformer);
 
         //Set up XMLRenderer to render to a DOM
-        TransformerHandler handler = tFactory.newTransformerHandler();
+        TransformerHandler handler = env.getTransformerFactory().newTransformerHandler();
         DOMResult domResult = new DOMResult();
         handler.setResult(domResult);
 
@@ -196,7 +80,7 @@
 
         //Create an instance of the target renderer so the XMLRenderer can use its font setup
         Renderer targetRenderer = userAgent.getRendererFactory().createRenderer(
-                userAgent, MimeConstants.MIME_PDF);
+                userAgent, getTargetMIME());
 
         XMLRenderer renderer = new XMLRenderer();
         renderer.mimicRenderer(targetRenderer);
@@ -207,27 +91,29 @@
 
         Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_AREA_TREE, userAgent);
         Result res = new SAXResult(fop.getDefaultHandler());
-        transformer.transform(src, res);
+        transformer.transform(new DOMSource(testDoc), res);
 
         return (Document)domResult.getNode();
     }
 
-    private void parseAndRender(Source src, OutputStream out, String mime) throws Exception {
+    /** {@inheritDoc} */
+    protected void parseAndRender(Source src, OutputStream out) throws Exception {
         AreaTreeParser parser = new AreaTreeParser();
 
         FOUserAgent userAgent = createUserAgent();
         FontInfo fontInfo = new FontInfo();
         AreaTreeModel treeModel = new RenderPagesModel(userAgent,
-                mime, fontInfo, out);
+                getTargetMIME(), fontInfo, out);
         parser.parse(src, treeModel, userAgent);
         treeModel.endDocument();
     }
 
-    private Document parseAndRenderToAreaTree(Source src) throws Exception {
+    /** {@inheritDoc} */
+    protected Document parseAndRenderToIntermediateFormat(Source src) throws Exception {
         AreaTreeParser parser = new AreaTreeParser();
 
         //Set up XMLRenderer to render to a DOM
-        TransformerHandler handler = tFactory.newTransformerHandler();
+        TransformerHandler handler = env.getTransformerFactory().newTransformerHandler();
         DOMResult domResult = new DOMResult();
         handler.setResult(domResult);
         XMLRenderer renderer = new XMLRenderer();

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeXMLFormatTestSuite.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeXMLFormatTestSuite.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeXMLFormatTestSuite.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sun Feb 22 12:40:44 2009
@@ -0,0 +1,2 @@
+/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/test/java/org/apache/fop/intermediate/AreaTreeXMLFormatTestSuite.java:603620-746655
+/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java:603620-677588

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sun Feb 22 12:40:44 2009
@@ -0,0 +1,2 @@
+/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/test/java/org/apache/fop/intermediate/IFParserTestCase.java:603620-746655
+/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java:603620-677588

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java Sun Feb 22 12:40:44 2009
@@ -46,18 +46,18 @@
         Iterator i = files.iterator();
         while (i.hasNext()) {
             File f = (File)i.next();
-            addTestCase(suite, f);
+            addIFTestCase(suite, f);
         }
 
         return suite;
     }
 
-    private static void addTestCase(TestSuite suite,
-            final File f) {
-        suite.addTest(new AreaTreeParserTestCase(f) {
+    private static void addIFTestCase(TestSuite suite,
+            final File f) throws IOException {
+        suite.addTest(new IFParserTestCase(f) {
             public void runTest() throws Exception {
                 try {
-                    testParserToAT();
+                    testParserToIntermediateFormat();
                     testParserToPDF();
                 } catch (Exception e) {
                     org.apache.commons.logging.LogFactory.getLog(

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/EvalCheck.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/EvalCheck.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/EvalCheck.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/EvalCheck.java Sun Feb 22 12:40:44 2009
@@ -21,16 +21,20 @@
 
 import javax.xml.transform.TransformerException;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
 import org.apache.xml.utils.PrefixResolver;
 import org.apache.xml.utils.PrefixResolverDefault;
 import org.apache.xpath.XPathAPI;
 import org.apache.xpath.objects.XObject;
-import org.w3c.dom.Node;
+
+import org.apache.fop.intermediate.IFCheck;
 
 /**
  * Simple check that requires an XPath expression to evaluate to true.
  */
-public class EvalCheck implements LayoutEngineCheck {
+public class EvalCheck implements LayoutEngineCheck, IFCheck {
 
     private String expected;
     private String xpath;
@@ -61,11 +65,20 @@
         this.prefixResolver = new PrefixResolverDefault(node);
     }
 
-    /** @see org.apache.fop.layoutengine.LayoutEngineCheck */
+    /** {@inheritDoc} */
     public void check(LayoutResult result) {
+        doCheck(result.getAreaTree());
+    }
+
+    /** {@inheritDoc} */
+    public void check(Document intermediate) {
+        doCheck(intermediate);
+    }
+
+    private void doCheck(Document doc) {
         XObject res;
         try {
-            res = XPathAPI.eval(result.getAreaTree(), xpath, prefixResolver);
+            res = XPathAPI.eval(doc, xpath, prefixResolver);
         } catch (TransformerException e) {
             throw new RuntimeException("XPath evaluation failed: " + e.getMessage());
         }
@@ -87,7 +100,7 @@
         }
     }
 
-    /** @see java.lang.Object#toString() */
+    /** {@inheritDoc} */
     public String toString() {
         return "XPath: " + xpath;
     }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java Sun Feb 22 12:40:44 2009
@@ -26,21 +26,14 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.Result;
 import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
 import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Document;
@@ -50,13 +43,12 @@
 
 import org.xml.sax.SAXException;
 
-import org.apache.xpath.XPathAPI;
-import org.apache.xpath.objects.XObject;
-
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.FormattingResults;
+import org.apache.fop.events.model.EventSeverity;
+import org.apache.fop.intermediate.IFTester;
 import org.apache.fop.layoutmgr.ElementListObserver;
 import org.apache.fop.render.xml.XMLRenderer;
 import org.apache.fop.util.ConsoleEventListenerForTests;
@@ -67,25 +59,18 @@
  */
 public class LayoutEngineTester {
 
-    private static final Map CHECK_CLASSES = new java.util.HashMap();
-
-    // configure fopFactory as desired
-    private FopFactory fopFactory = FopFactory.newInstance();
-    private FopFactory fopFactoryWithBase14Kerning = FopFactory.newInstance();
+    private static final Map AT_CHECK_CLASSES = new java.util.HashMap();
 
-    private SAXTransformerFactory tfactory
-            = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
-
-    private Templates testcase2fo;
-    private Templates testcase2checks;
+    private TestEnvironment env = new TestEnvironment();
 
     private File areaTreeBackupDir;
+    private IFTester ifTester;
 
     static {
-        CHECK_CLASSES.put("true", TrueCheck.class);
-        CHECK_CLASSES.put("eval", EvalCheck.class);
-        CHECK_CLASSES.put("element-list", ElementListCheck.class);
-        CHECK_CLASSES.put("result", ResultCheck.class);
+        AT_CHECK_CLASSES.put("true", TrueCheck.class);
+        AT_CHECK_CLASSES.put("eval", EvalCheck.class);
+        AT_CHECK_CLASSES.put("element-list", ElementListCheck.class);
+        AT_CHECK_CLASSES.put("result", ResultCheck.class);
     }
 
     /**
@@ -95,26 +80,7 @@
      */
     public LayoutEngineTester(File areaTreeBackupDir) {
         this.areaTreeBackupDir = areaTreeBackupDir;
-        fopFactory.getFontManager().setBase14KerningEnabled(false);
-        fopFactoryWithBase14Kerning.getFontManager().setBase14KerningEnabled(true);
-    }
-
-    private Templates getTestcase2FOStylesheet() throws TransformerConfigurationException {
-        if (testcase2fo == null) {
-            //Load and cache stylesheet
-            Source src = new StreamSource(new File("test/layoutengine/testcase2fo.xsl"));
-            testcase2fo = tfactory.newTemplates(src);
-        }
-        return testcase2fo;
-    }
-
-    private Templates getTestcase2ChecksStylesheet() throws TransformerConfigurationException {
-        if (testcase2checks == null) {
-            //Load and cache stylesheet
-            Source src = new StreamSource(new File("test/layoutengine/testcase2checks.xsl"));
-            testcase2checks = tfactory.newTemplates(src);
-        }
-        return testcase2checks;
+        this.ifTester = new IFTester(areaTreeBackupDir);
     }
 
     /**
@@ -136,30 +102,23 @@
         Fop fop;
 
         try {
-            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-            dbf.setNamespaceAware(true);
-            dbf.setValidating(false);
-            DocumentBuilder builder = dbf.newDocumentBuilder();
-            Document testDoc = builder.parse(testFile);
-
-            XObject xo = XPathAPI.eval(testDoc, "/testcase/cfg/base14kerning");
-            String s = xo.str();
-            boolean base14kerning = ("true".equalsIgnoreCase(s));
-            FopFactory effFactory = (base14kerning ? fopFactoryWithBase14Kerning : fopFactory);
+            Document testDoc = env.loadTestCase(testFile);
+            FopFactory effFactory = env.getFopFactory(testDoc);
 
             //Setup Transformer to convert the testcase XML to XSL-FO
-            Transformer transformer = getTestcase2FOStylesheet().newTransformer();
+            Transformer transformer = env.getTestcase2FOStylesheet().newTransformer();
             Source src = new DOMSource(testDoc);
 
             //Setup Transformer to convert the area tree to a DOM
-            TransformerHandler athandler = tfactory.newTransformerHandler();
+            TransformerHandler athandler;
+            athandler = env.getTransformerFactory().newTransformerHandler();
             athandler.setResult(domres);
 
             //Setup FOP for area tree rendering
             FOUserAgent ua = effFactory.newFOUserAgent();
             ua.setBaseURL(testFile.getParentFile().toURL().toString());
             ua.getEventBroadcaster().addEventListener(
-                    new ConsoleEventListenerForTests(testFile.getName()));
+                    new ConsoleEventListenerForTests(testFile.getName(), EventSeverity.WARN));
 
             XMLRenderer atrenderer = new XMLRenderer();
             atrenderer.setUserAgent(ua);
@@ -175,7 +134,8 @@
 
         Document doc = (Document)domres.getNode();
         if (this.areaTreeBackupDir != null) {
-            saveAreaTreeXML(doc, new File(this.areaTreeBackupDir, testFile.getName() + ".at.xml"));
+            env.saveDOM(doc,
+                    new File(this.areaTreeBackupDir, testFile.getName() + ".at.xml"));
         }
         FormattingResults results = fop.getResults();
         LayoutResult result = new LayoutResult(doc, elCollector, results);
@@ -183,13 +143,13 @@
     }
 
     /**
-     * Factory method to create checks from DOM elements.
+     * Factory method to create AT checks from DOM elements.
      * @param el DOM element to create the check from
      * @return The newly create check
      */
-    protected LayoutEngineCheck createCheck(Element el) {
+    protected LayoutEngineCheck createATCheck(Element el) {
         String name = el.getTagName();
-        Class clazz = (Class)CHECK_CLASSES.get(name);
+        Class clazz = (Class)AT_CHECK_CLASSES.get(name);
         if (clazz != null) {
             try {
                 Constructor c = clazz.getDeclaredConstructor(new Class[] {Node.class});
@@ -204,31 +164,58 @@
         }
     }
 
+
     /**
-     * Perform all checks on the area tree.
+     * Perform all checks on the area tree and, optionally, on the intermediate format.
      * @param testFile Test case XML file
      * @param result The layout results
      * @throws TransformerException if a problem occurs in XSLT/JAXP
      */
     protected void checkAll(File testFile, LayoutResult result) throws TransformerException {
-        Transformer transformer = getTestcase2ChecksStylesheet().newTransformer();
+        Transformer transformer = env.getTestcase2ChecksStylesheet().newTransformer();
         Source src = new StreamSource(testFile);
         DOMResult res = new DOMResult();
         transformer.transform(src, res);
 
-        List checks = new java.util.ArrayList();
         Document doc = (Document)res.getNode();
-        NodeList nodes = doc.getDocumentElement().getChildNodes();
+        Element root = doc.getDocumentElement();
+
+        NodeList nodes;
+        //AT tests only when checks are available
+        nodes = root.getElementsByTagName("at-checks");
+        if (nodes.getLength() > 0) {
+            Element atChecks = (Element)nodes.item(0);
+            doATChecks(atChecks, result);
+        }
+
+        //IF tests only when checks are available
+        nodes = root.getElementsByTagName("if-checks");
+        if (nodes.getLength() > 0) {
+            Element ifChecks = (Element)nodes.item(0);
+            ifTester.doIFChecks(testFile, ifChecks, result.getAreaTree());
+        }
+    }
+
+    private void doATChecks(Element checksRoot, LayoutResult result) {
+        //First create check before actually running them
+        List checks = new java.util.ArrayList();
+        NodeList nodes = checksRoot.getChildNodes();
         for (int i = 0; i < nodes.getLength(); i++) {
             Node node = nodes.item(i);
             if (node instanceof Element) {
-                checks.add(createCheck((Element)node));
+                checks.add(createATCheck((Element)node));
             }
         }
 
         if (checks.size() == 0) {
             throw new RuntimeException("No checks are available!");
         }
+
+        //Run the actual tests now that we know that the checks themselves are ok
+        doATChecks(checks, result);
+    }
+
+    private void doATChecks(List checks, LayoutResult result) {
         Iterator i = checks.iterator();
         while (i.hasNext()) {
             LayoutEngineCheck check = (LayoutEngineCheck)i.next();
@@ -236,16 +223,4 @@
         }
     }
 
-    /**
-     * Save the area tree XML for later inspection.
-     * @param doc area tree as a DOM document
-     * @param target target file
-     * @throws TransformerException if a problem occurs during serialization
-     */
-    protected void saveAreaTreeXML(Document doc, File target) throws TransformerException {
-        Transformer transformer = tfactory.newTransformer();
-        Source src = new DOMSource(doc);
-        Result res = new StreamResult(target);
-        transformer.transform(src, res);
-    }
 }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TrueCheck.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TrueCheck.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TrueCheck.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TrueCheck.java Sun Feb 22 12:40:44 2009
@@ -21,17 +21,21 @@
 
 import javax.xml.transform.TransformerException;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
 import org.apache.xml.utils.PrefixResolver;
 import org.apache.xml.utils.PrefixResolverDefault;
 import org.apache.xpath.XPathAPI;
 import org.apache.xpath.objects.XBoolean;
 import org.apache.xpath.objects.XObject;
-import org.w3c.dom.Node;
+
+import org.apache.fop.intermediate.IFCheck;
 
 /**
  * Simple check that requires an XPath expression to evaluate to true.
  */
-public class TrueCheck implements LayoutEngineCheck {
+public class TrueCheck implements LayoutEngineCheck, IFCheck {
 
     private String xpath;
     private String failureMessage;
@@ -58,11 +62,20 @@
         this.prefixResolver = new PrefixResolverDefault(node);
     }
 
-    /** @see org.apache.fop.layoutengine.LayoutEngineCheck */
+    /** {@inheritDoc} */
     public void check(LayoutResult result) {
+        doCheck(result.getAreaTree());
+    }
+
+    /** {@inheritDoc} */
+    public void check(Document intermediate) {
+        doCheck(intermediate);
+    }
+
+    private void doCheck(Document doc) {
         XObject res;
         try {
-            res = XPathAPI.eval(result.getAreaTree(), xpath, prefixResolver);
+            res = XPathAPI.eval(doc, xpath, prefixResolver);
         } catch (TransformerException e) {
             throw new RuntimeException("XPath evaluation failed: " + e.getMessage());
         }
@@ -78,7 +91,7 @@
 
     }
 
-    /** @see java.lang.Object#toString() */
+    /** {@inheritDoc} */
     public String toString() {
         return "XPath: " + xpath;
     }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/PDFObjectTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/PDFObjectTestCase.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/PDFObjectTestCase.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/pdf/PDFObjectTestCase.java Sun Feb 22 12:40:44 2009
@@ -56,4 +56,22 @@
 
     }
 
+    /**
+     * Tests PDF object references.
+     * @throws Exception if an error occurs
+     */
+    public void testReference() throws Exception {
+        PDFDictionary dict = new PDFDictionary();
+        dict.setObjectNumber(7);
+        PDFReference ref = dict.makeReference();
+        assertEquals(ref.getObjectNumber(), 7);
+        assertEquals(ref.getGeneration(), 0);
+        assertEquals(ref.toString(), "7 0 R");
+
+        ref = new PDFReference("8 0 R");
+        assertEquals(ref.getObjectNumber(), 8);
+        assertEquals(ref.getGeneration(), 0);
+        assertEquals(ref.toString(), "8 0 R");
+    }
+
 }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/util/ConsoleEventListenerForTests.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/util/ConsoleEventListenerForTests.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/util/ConsoleEventListenerForTests.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/util/ConsoleEventListenerForTests.java Sun Feb 22 12:40:44 2009
@@ -28,29 +28,62 @@
 public class ConsoleEventListenerForTests implements EventListener {
 
     private String name;
+    private EventSeverity logLevel;
 
+    /**
+     * Creates a new event listener with console output on severity INFO. This object will
+     * write out the name of the test before the first log message.
+     * @param name the name of the test
+     */
     public ConsoleEventListenerForTests(String name) {
+        this(name, EventSeverity.INFO);
+    }
+
+    /**
+     * Creates a new event listener with console output. This object will
+     * write out the name of the test before the first log message.
+     * @param name the name of the test
+     * @param logLevel the logging level
+     */
+    public ConsoleEventListenerForTests(String name, EventSeverity logLevel) {
         this.name = name;
+        this.logLevel = logLevel;
     }
 
     /** {@inheritDoc} */
     public void processEvent(Event event) {
+        EventSeverity severity = event.getSeverity();
+        if (severity == EventSeverity.FATAL) {
+            log("FATAL", event);
+            return;
+        }
+        if (logLevel == EventSeverity.FATAL) {
+            return;
+        }
+        if (severity == EventSeverity.ERROR) {
+            log("ERROR", event);
+            return;
+        }
+        if (logLevel == EventSeverity.ERROR) {
+            return;
+        }
+        if (severity == EventSeverity.WARN) {
+            log("WARN ", event);
+        }
+        if (logLevel == EventSeverity.WARN) {
+            return;
+        }
+        if (severity == EventSeverity.INFO) {
+            log("INFO ", event);
+        }
+    }
+
+    private void log(String levelString, Event event) {
         if (this.name != null) {
             System.out.println("Test: " + this.name);
             this.name = null;
         }
         String msg = EventFormatter.format(event);
-        EventSeverity severity = event.getSeverity();
-        if (severity == EventSeverity.INFO) {
-            System.out.println("  [INFO ] " + msg);
-        } else if (severity == EventSeverity.WARN) {
-            System.out.println("  [WARN ] " + msg);
-        } else if (severity == EventSeverity.ERROR) {
-            System.out.println("  [ERROR] " + msg);
-        } else if (severity == EventSeverity.FATAL) {
-            System.out.println("  [FATAL] " + msg);
-        } else {
-            assert false;
-        }
+        System.out.println("  [" + levelString + "] " + msg);
     }
 }
\ No newline at end of file

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/AbstractPSPDFBitmapProducer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/AbstractPSPDFBitmapProducer.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/AbstractPSPDFBitmapProducer.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/AbstractPSPDFBitmapProducer.java Sun Feb 22 12:40:44 2009
@@ -35,9 +35,11 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.commons.io.IOUtils;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
+import org.apache.fop.util.DefaultErrorListener;
 
 /**
  * BitmapProducer implementation that uses the PS or PDF renderer and an external converter
@@ -70,11 +72,16 @@
 
     private String converter;
     private boolean deleteTempFiles;
+    /** the bitmap producer's target format */
+    protected String targetFormat;
 
-    /** @see org.apache.avalon.framework.configuration.Configurable */
+    /** {@inheritDoc} */
     public void configure(Configuration cfg) throws ConfigurationException {
         this.converter = cfg.getChild("converter").getValue();
         this.deleteTempFiles = cfg.getChild("delete-temp-files").getValueAsBoolean(true);
+        if (cfg.getChild("target-format", false) != null) {
+            this.targetFormat = cfg.getChild("target-format").getValue();
+        }
     }
 
     /**
@@ -106,19 +113,21 @@
     /**
      * @return the output format for the FOP renderer, i.e. a MIME type.
      */
-    protected abstract String getTargetFormat();
+    protected String getTargetFormat() {
+        return this.targetFormat;
+    }
 
-    /** @see org.apache.fop.visual.BitmapProducer */
-    public BufferedImage produce(File src, ProducerContext context) {
+    /** {@inheritDoc} */
+    public BufferedImage produce(File src, int index, ProducerContext context) {
         try {
             FOUserAgent userAgent = fopFactory.newFOUserAgent();
             userAgent.setTargetResolution(context.getTargetResolution());
             userAgent.setBaseURL(src.getParentFile().toURL().toString());
 
             File tempOut = new File(context.getTargetDir(),
-                    src.getName() + "." + getTargetExtension());
+                    src.getName() + "." + index + "." + getTargetExtension());
             File tempPNG = new File(context.getTargetDir(),
-                    src.getName() + "." + getTargetExtension() + ".png");
+                    src.getName() + "." + index + "." + getTargetExtension() + ".png");
             try {
                 OutputStream out = new FileOutputStream(tempOut);
                 out = new BufferedOutputStream(out);
@@ -127,6 +136,7 @@
                     SAXResult res = new SAXResult(fop.getDefaultHandler());
 
                     Transformer transformer = getTransformer(context);
+                    transformer.setErrorListener(new DefaultErrorListener(log));
                     transformer.transform(new StreamSource(src), res);
                 } finally {
                     IOUtils.closeQuietly(out);

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BatchDiffer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BatchDiffer.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BatchDiffer.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BatchDiffer.java Sun Feb 22 12:40:44 2009
@@ -35,8 +35,10 @@
 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.AndFileFilter;
 import org.apache.commons.io.filefilter.IOFileFilter;
 import org.apache.commons.io.filefilter.SuffixFileFilter;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -164,6 +166,14 @@
             if (cfg.getChild("filter-disabled").getValueAsBoolean(true)) {
                 filter = LayoutEngineTestSuite.decorateWithDisabledList(filter);
             }
+            String manualFilter = cfg.getChild("manual-filter").getValue(null);
+            if (manualFilter != null) {
+                if (manualFilter.indexOf('*') < 0) {
+                    manualFilter = manualFilter + '*';
+                }
+                filter = new AndFileFilter(
+                        new WildcardFileFilter(manualFilter), filter);
+            }
 
             int maxfiles = cfg.getChild("max-files").getValueAsInteger(-1);
             Collection files = FileUtils.listFiles(srcDir, filter, null);
@@ -176,7 +186,7 @@
                     final BufferedImage[] bitmaps = new BufferedImage[producers.length];
                     for (int j = 0; j < producers.length; j++) {
                         times[j] = System.currentTimeMillis();
-                        bitmaps[j] = producers[j].produce(f, context);
+                        bitmaps[j] = producers[j].produce(f, j, context);
                         times[j] = System.currentTimeMillis() - times[j];
                     }
                     if (log.isDebugEnabled()) {

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducer.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducer.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducer.java Sun Feb 22 12:40:44 2009
@@ -31,9 +31,10 @@
      * Produces a BufferedImage from the source file by invoking the FO processor and
      * converting the generated output file to a bitmap image if necessary.
      * @param src the source FO or XML file
+     * @param index the index of the producer inside the test set
      * @param context context information for the conversion
      * @return the generated BufferedImage
      */
-    BufferedImage produce(File src, ProducerContext context);
+    BufferedImage produce(File src, int index, ProducerContext context);
 
 }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerJava2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerJava2D.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerJava2D.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerJava2D.java Sun Feb 22 12:40:44 2009
@@ -33,10 +33,12 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.commons.io.IOUtils;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.MimeConstants;
+import org.apache.fop.util.DefaultErrorListener;
 
 /**
  * BitmapProducer implementation that uses the Java2DRenderer to create bitmaps.
@@ -64,13 +66,14 @@
     }
 
     /** @see org.apache.fop.visual.BitmapProducer */
-    public BufferedImage produce(File src, ProducerContext context) {
+    public BufferedImage produce(File src, int index, ProducerContext context) {
         try {
             FOUserAgent userAgent = fopFactory.newFOUserAgent();
             userAgent.setTargetResolution(context.getTargetResolution());
             userAgent.setBaseURL(src.getParentFile().toURL().toString());
 
-            File outputFile = new File(context.getTargetDir(), src.getName() + ".java2d.png");
+            File outputFile = new File(context.getTargetDir(),
+                    src.getName() + "." + index + ".java2d.png");
             OutputStream out = new FileOutputStream(outputFile);
             out = new BufferedOutputStream(out);
             try {
@@ -78,6 +81,7 @@
                 SAXResult res = new SAXResult(fop.getDefaultHandler());
 
                 Transformer transformer = getTransformer(context);
+                transformer.setErrorListener(new DefaultErrorListener(log));
                 transformer.transform(new StreamSource(src), res);
             } finally {
                 IOUtils.closeQuietly(out);

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPDF.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPDF.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPDF.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPDF.java Sun Feb 22 12:40:44 2009
@@ -29,14 +29,16 @@
  */
 public class BitmapProducerPDF extends AbstractPSPDFBitmapProducer {
 
-    /** @see org.apache.fop.visual.AbstractPSPDFBitmapProducer#getTargetExtension() */
-    protected String getTargetExtension() {
-        return "pdf";
+    /**
+     * Default constructor.
+     */
+    public BitmapProducerPDF() {
+        this.targetFormat = MimeConstants.MIME_PDF;
     }
 
-    /** @see org.apache.fop.visual.AbstractPSPDFBitmapProducer#getTargetFormat() */
-    protected String getTargetFormat() {
-        return MimeConstants.MIME_PDF;
+    /** {@inheritDoc} */
+    protected String getTargetExtension() {
+        return "pdf";
     }
 
 }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPS.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPS.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPS.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/BitmapProducerPS.java Sun Feb 22 12:40:44 2009
@@ -29,15 +29,16 @@
  */
 public class BitmapProducerPS extends AbstractPSPDFBitmapProducer {
 
-    /** @see org.apache.fop.visual.AbstractPSPDFBitmapProducer#getTargetExtension() */
-    protected String getTargetExtension() {
-        return "ps";
+    /**
+     * Default constructor.
+     */
+    public BitmapProducerPS() {
+        this.targetFormat = MimeConstants.MIME_POSTSCRIPT;
     }
 
-    /** @see org.apache.fop.visual.AbstractPSPDFBitmapProducer#getTargetFormat() */
-    protected String getTargetFormat() {
-        return MimeConstants.MIME_POSTSCRIPT;
+    /** {@inheritDoc} */
+    protected String getTargetExtension() {
+        return "ps";
     }
 
-
 }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/ReferenceBitmapLoader.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/ReferenceBitmapLoader.java?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/ReferenceBitmapLoader.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/visual/ReferenceBitmapLoader.java Sun Feb 22 12:40:44 2009
@@ -51,7 +51,7 @@
     }
 
     /** @see org.apache.fop.visual.BitmapProducer */
-    public BufferedImage produce(File src, ProducerContext context) {
+    public BufferedImage produce(File src, int index, ProducerContext context) {
         try {
             File bitmap = new File(bitmapDirectory, src.getName() + ".png");
             if (bitmap.exists()) {

Modified: xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.xml Sun Feb 22 12:40:44 2009
@@ -216,11 +216,4 @@
     <description>A soft hyphen should be a preferred as break compared to a
     normal hyphenation point but is not.</description>
   </testcase>
-  <testcase>
-    <name>Borders and padding on page regions</name>
-    <file>simple-page-master_borders_padding.xml</file>
-    <description>Borders and padding on regions are now implemented but 
-    relaxed validation must be switched on, otherwise there is a validation
-    exception.</description>
-  </testcase>
 </disabled-testcases>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/basic-link_background-image.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/basic-link_background-image.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/basic-link_background-image.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/basic-link_background-image.xml Sun Feb 22 12:40:44 2009
@@ -46,4 +46,9 @@
     <eval expected="88800" xpath="//flow/block/lineArea/inlineparent/@bpd"/>
     <eval expected="color=#ffff00,url=../../resources/images/bgimg300dpi.jpg,repeat=no-repeat,horiz=75648,vertical=21360" xpath="//flow/block/lineArea/inlineparent/@background"/>
   </checks>
+  <if-checks xmlns:n="http://xmlgraphics.apache.org/fop/intermediate/document-navigation">
+    <eval expected="page-trailer" xpath="local-name(//n:link/..)"/>
+    <eval expected="39336 1650 197376 88800" xpath="//n:link/@rect"/>
+    <eval expected="http://xmlgraphics.apache.org/fop" xpath="//n:link/n:goto-uri/@uri"/>
+  </if-checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block_letter-spacing.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block_letter-spacing.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block_letter-spacing.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block_letter-spacing.xml Sun Feb 22 12:40:44 2009
@@ -62,4 +62,32 @@
     <eval expected="2000" xpath="//flow/block[8]/lineArea[3]/text/@tlsadjust"/>
     <eval expected="2000" xpath="//flow/block[8]/lineArea[4]/text/@tlsadjust"/>
   </checks>
+  <if-checks xmlns:if="http://xmlgraphics.apache.org/fop/intermediate">
+    <eval expected="Default space between characters is defined to be 0pt, i.e.," xpath="//if:text[2]"/>
+    <eval expected="0" xpath="//if:text[2]/@x"/>
+    <eval expected="24666" xpath="//if:text[2]/@y"/>
+    <true xpath="not(//if:text[2]/@dx)"/>
+
+    <eval expected="Default space between characters is defined to" xpath="//if:text[14]"/>
+    <eval expected="0" xpath="//if:text[14]/@x"/>
+    <eval expected="197466" xpath="//if:text[14]/@y"/>
+    <eval expected="2000" xpath="//if:text[14]/@letter-spacing"/>
+    <true xpath="not(//if:text[14]/@word-spacing)"/>
+    <true xpath="not(//if:text[14]/@dx)"/>
+
+    <eval expected="Default space between characters is defined to be" xpath="//if:text[20]"/>
+    <eval expected="0" xpath="//if:text[20]/@x"/>
+    <eval expected="283866" xpath="//if:text[20]/@y"/>
+    <eval expected="1938" xpath="//if:text[20]/@letter-spacing"/>
+    <eval expected="-40" xpath="//if:text[20]/@word-spacing"/>
+    <true xpath="not(//if:text[20]/@dx)"/>
+
+    <eval expected="2000" xpath="//if:text[21]/@letter-spacing"/>
+    <true xpath="not(//if:text[21]/@word-spacing)"/>
+    <true xpath="not(//if:text[21]/@dx)"/>
+
+    <eval expected="1364" xpath="//if:text[22]/@letter-spacing"/>
+    <eval expected="-362" xpath="//if:text[22]/@word-spacing"/>
+    <true xpath="not(//if:text[22]/@dx)"/>
+  </if-checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/bookmarks_1.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/bookmarks_1.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/bookmarks_1.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/bookmarks_1.xml Sun Feb 22 12:40:44 2009
@@ -43,6 +43,9 @@
             <fo:bookmark-title>Section 2</fo:bookmark-title>
           </fo:bookmark>
         </fo:bookmark>
+        <fo:bookmark internal-destination="bc">
+          <fo:bookmark-title>Fixed Block Container</fo:bookmark-title>
+        </fo:bookmark>
       </fo:bookmark-tree>
       <fo:page-sequence id="page-sequence" master-reference="normal" white-space-collapse="true">
         <fo:flow flow-name="xsl-region-body">
@@ -54,6 +57,11 @@
           <fo:block>Blah blah bla.</fo:block>
           <fo:block id="chapter2-sec2" font-weight="bold">Section 2</fo:block>
           <fo:block>Blah blah bla.</fo:block>
+          <fo:block-container absolute-position="fixed" left="3in" top="3in" width="1.5in" height="1in">
+            <fo:block id="bc">
+              Text in a block-container.
+            </fo:block>
+          </fo:block-container>"
         </fo:flow>
       </fo:page-sequence>
     </fo:root>
@@ -73,6 +81,30 @@
     <eval expected="(P2,chapter2)" xpath="//bookmarkTree/bookmark[2]/@internal-link"/>
     <eval expected="(P2,chapter2-sec1)" xpath="//bookmarkTree/bookmark[2]/bookmark[1]/@internal-link"/>
     <eval expected="(P2,chapter2-sec2)" xpath="//bookmarkTree/bookmark[2]/bookmark[2]/@internal-link"/>
-    
   </checks>
+  <if-checks xmlns:n="http://xmlgraphics.apache.org/fop/intermediate/document-navigation">
+    <eval expected="show" xpath="//n:bookmark-tree/n:bookmark[1]/@starting-state"/>
+    <eval expected="Chapter 1" xpath="//n:bookmark-tree/n:bookmark[1]/@title"/>
+    <eval expected="0" xpath="//n:bookmark-tree/n:bookmark[1]/n:goto-xy/@page-index"/>
+    <eval expected="20000" xpath="//n:bookmark-tree/n:bookmark[1]/n:goto-xy/@x"/>
+    <eval expected="20000" xpath="//n:bookmark-tree/n:bookmark[1]/n:goto-xy/@y"/>
+
+    <eval expected="hide" xpath="//n:bookmark-tree/n:bookmark[2]/@starting-state"/>
+    <eval expected="Chapter 2" xpath="//n:bookmark-tree/n:bookmark[2]/@title"/>
+    <eval expected="1" xpath="//n:bookmark-tree/n:bookmark[2]/n:goto-xy/@page-index"/>
+    <eval expected="20000" xpath="//n:bookmark-tree/n:bookmark[2]/n:goto-xy/@x"/>
+    <eval expected="20000" xpath="//n:bookmark-tree/n:bookmark[2]/n:goto-xy/@y"/>
+
+    <eval expected="show" xpath="//n:bookmark-tree/n:bookmark[2]/n:bookmark[1]/@starting-state"/>
+    <eval expected="Section 1" xpath="//n:bookmark-tree/n:bookmark[2]/n:bookmark[1]/@title"/>
+    <eval expected="1" xpath="//n:bookmark-tree/n:bookmark[2]/n:bookmark[1]/n:goto-xy/@page-index"/>
+    <eval expected="20000" xpath="//n:bookmark-tree/n:bookmark[2]/n:bookmark[1]/n:goto-xy/@x"/>
+    <eval expected="51680" xpath="//n:bookmark-tree/n:bookmark[2]/n:bookmark[1]/n:goto-xy/@y"/>
+    
+    <eval expected="show" xpath="//n:bookmark-tree/n:bookmark[3]/@starting-state"/>
+    <eval expected="Fixed Block Container" xpath="//n:bookmark-tree/n:bookmark[3]/@title"/>
+    <eval expected="1" xpath="//n:bookmark-tree/n:bookmark[3]/n:goto-xy/@page-index"/>
+    <eval expected="216000" xpath="//n:bookmark-tree/n:bookmark[3]/n:goto-xy/@x"/>
+    <eval expected="216000" xpath="//n:bookmark-tree/n:bookmark[3]/n:goto-xy/@y"/>
+  </if-checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/fox_destination_1.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/fox_destination_1.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/fox_destination_1.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/fox_destination_1.xml Sun Feb 22 12:40:44 2009
@@ -58,4 +58,21 @@
     <eval expected="(P2,chapter2-sec1)" xpath="//destination[3]/@internal-link"/>
     <eval expected="(P2,chapter2-sec2)" xpath="//destination[4]/@internal-link"/>
   </checks>
+  <if-checks xmlns:n="http://xmlgraphics.apache.org/fop/intermediate/document-navigation">
+    <eval expected="0" xpath="//n:named-destination[@name='chapter1']/n:goto-xy/@page-index"/>
+    <eval expected="0" xpath="//n:named-destination[@name='chapter1']/n:goto-xy/@x"/>
+    <eval expected="0" xpath="//n:named-destination[@name='chapter1']/n:goto-xy/@y"/>
+    
+    <eval expected="1" xpath="//n:named-destination[@name='chapter2']/n:goto-xy/@page-index"/>
+    <eval expected="0" xpath="//n:named-destination[@name='chapter2']/n:goto-xy/@x"/>
+    <eval expected="0" xpath="//n:named-destination[@name='chapter2']/n:goto-xy/@y"/>
+    
+    <eval expected="1" xpath="//n:named-destination[@name='chapter2-sec1']/n:goto-xy/@page-index"/>
+    <eval expected="0" xpath="//n:named-destination[@name='chapter2-sec1']/n:goto-xy/@x"/>
+    <eval expected="31680" xpath="//n:named-destination[@name='chapter2-sec1']/n:goto-xy/@y"/>
+
+    <eval expected="1" xpath="//n:named-destination[@name='chapter2-sec2']/n:goto-xy/@page-index"/>
+    <eval expected="0" xpath="//n:named-destination[@name='chapter2-sec2']/n:goto-xy/@x"/>
+    <eval expected="60480" xpath="//n:named-destination[@name='chapter2-sec2']/n:goto-xy/@y"/>
+  </if-checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/kerning_1_on.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/kerning_1_on.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/kerning_1_on.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/kerning_1_on.xml Sun Feb 22 12:40:44 2009
@@ -40,6 +40,12 @@
           <fo:block letter-spacing="1pt">
             <fo:block><fo:inline>VAVAV</fo:inline> text-text Hello World.</fo:block>
           </fo:block>
+          <fo:block word-spacing="5pt">
+            <fo:block><fo:inline>VAVAV</fo:inline> text-text Hello World.</fo:block>
+          </fo:block>
+          <fo:block letter-spacing="1pt" word-spacing="5pt">
+            <fo:block><fo:inline>VAVAV</fo:inline> text-text Hello World.</fo:block>
+          </fo:block>
         </fo:flow>
       </fo:page-sequence>
     </fo:root>
@@ -54,4 +60,60 @@
     <eval expected="0" xpath="//flow/block[2]/block[1]/lineArea/inlineparent/text/word/@offset"/>
     <eval expected="0 -960 -840 -960 -840" xpath="//flow/block[2]/block[1]/lineArea/inlineparent/text/word/@letter-adjust"/>
   </checks>
+  <if-checks xmlns:if="http://xmlgraphics.apache.org/fop/intermediate">
+    <eval expected="VAVAV" xpath="//if:text[1]"/>
+    <eval expected="0" xpath="//if:text[1]/@x"/>
+    <eval expected="10266" xpath="//if:text[1]/@y"/>
+    <eval expected="0 -960 -840 -960 -840" xpath="//if:text[1]/@dx"/>
+    
+    <eval expected=" text-text Hello World." xpath="//if:text[2]"/>
+    <eval expected="36420" xpath="//if:text[2]/@x"/>
+    <eval expected="10266" xpath="//if:text[2]/@y"/>
+    <true xpath="not(//if:text[2]/@letter-spacing)"/>
+    <true xpath="not(//if:text[2]/@word-spacing)"/>
+    <eval expected="0 0 0 -360 0 0 0 0 -360 0 0 0 0 0 0 0 0 0 -360 0 180" xpath="//if:text[2]/@dx"/>
+
+    <eval expected="VAVAV" xpath="//if:text[3]"/>
+    <eval expected="0" xpath="//if:text[3]/@x"/>
+    <eval expected="24666" xpath="//if:text[3]/@y"/>
+    <eval expected="1000" xpath="//if:text[3]/@letter-spacing"/>
+    <true xpath="not(//if:text[3]/@word-spacing)"/>
+    <eval expected="0 -960 -840 -960 -840" xpath="//if:text[3]/@dx"/>
+    
+    <eval expected=" text-text Hello World." xpath="//if:text[4]"/>
+    <eval expected="40420" xpath="//if:text[4]/@x"/>
+    <eval expected="24666" xpath="//if:text[4]/@y"/>
+    <eval expected="1000" xpath="//if:text[4]/@letter-spacing"/>
+    <true xpath="not(//if:text[3]/@word-spacing)"/>
+    <eval expected="0 0 0 -360 0 0 0 0 -360 0 0 0 0 0 0 0 0 0 -360 0 180" xpath="//if:text[4]/@dx"/>
+    
+    <eval expected="VAVAV" xpath="//if:text[5]"/>
+    <eval expected="0" xpath="//if:text[5]/@x"/>
+    <eval expected="39066" xpath="//if:text[5]/@y"/>
+    <true xpath="not(//if:text[5]/@letter-spacing)"/>
+    <eval expected="5000" xpath="//if:text[5]/@word-spacing"/>
+    <eval expected="0 -960 -840 -960 -840" xpath="//if:text[5]/@dx"/>
+    
+    <eval expected=" text-text Hello World." xpath="//if:text[6]"/>
+    <eval expected="36420" xpath="//if:text[6]/@x"/>
+    <eval expected="39066" xpath="//if:text[6]/@y"/>
+    <true xpath="not(//if:text[5]/@letter-spacing)"/>
+    <eval expected="5000" xpath="//if:text[6]/@word-spacing"/>
+    <eval expected="0 0 0 -360 0 0 0 0 -360 0 0 0 0 0 0 0 0 0 -360 0 180" xpath="//if:text[4]/@dx"/>
+    
+    <eval expected="VAVAV" xpath="//if:text[7]"/>
+    <eval expected="0" xpath="//if:text[7]/@x"/>
+    <eval expected="53466" xpath="//if:text[7]/@y"/>
+    <eval expected="1000" xpath="//if:text[7]/@letter-spacing"/>
+    <eval expected="3000" xpath="//if:text[7]/@word-spacing"/>  <!-- TODO Not sure that's correct! -->
+    <eval expected="0 -960 -840 -960 -840" xpath="//if:text[7]/@dx"/>
+    
+    <eval expected=" text-text Hello World." xpath="//if:text[8]"/>
+    <eval expected="40420" xpath="//if:text[8]/@x"/>
+    <eval expected="53466" xpath="//if:text[8]/@y"/>
+    <eval expected="1000" xpath="//if:text[8]/@letter-spacing"/>
+    <eval expected="3000" xpath="//if:text[8]/@word-spacing"/> <!-- TODO Not sure that's correct! -->
+    <eval expected="0 0 0 -360 0 0 0 0 -360 0 0 0 0 0 0 0 0 0 -360 0 180" xpath="//if:text[8]/@dx"/>
+    
+  </if-checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_1.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_1.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_1.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_1.xml Sun Feb 22 12:40:44 2009
@@ -65,4 +65,22 @@
     <eval expected="bla" xpath="/areaTree/pageSequence/pageViewport[@nr=2]/page/extension-attachments/child::*[2]/@name"/>
     <eval expected="%FOPTestPSPageSetupCode: Blah blah!" xpath="/areaTree/pageSequence/pageViewport[@nr=2]/page/extension-attachments/child::*[2]"/>
   </checks>
+  <if-checks  xmlns:if="http://xmlgraphics.apache.org/fop/intermediate">
+    <eval expected="3" xpath="count(/if:document/if:header/child::*)"/>
+    <eval expected="%FOPTestPSSetupCode: General setup code here!" xpath="/if:document/if:header/child::*[1]"/>
+    <true xpath="contains(/if:document/if:header/child::*[2], '%FOPTestPSSetupCode: Line 1')"/>
+    <eval expected="multi-line" xpath="/if:document/if:header/child::*[2]/@name"/>
+    
+    <eval expected="2" xpath="count(//if:page[@index=0]/if:page-header/child::*)"/>
+    <eval expected="media-dict" xpath="//if:page[@index=0]/if:page-header/child::*[1]/@name"/>
+    <eval expected="%FOPTestPSPageSetupCode: MediaDict!" xpath="//if:page[@index=0]/if:page-header/child::*[1]"/>
+    <eval expected="bla" xpath="//if:page[@index=0]/if:page-header/child::*[2]/@name"/>
+    <eval expected="%FOPTestPSPageSetupCode: Blah blah!" xpath="//if:page[@index=0]/if:page-header/child::*[2]"/>
+    
+    <eval expected="2" xpath="count(//if:page[@index=1]/if:page-header/child::*)"/>
+    <eval expected="media-dict" xpath="//if:page[@index=1]/if:page-header/child::*[1]/@name"/>
+    <eval expected="%FOPTestPSPageSetupCode: MediaDict!" xpath="//if:page[@index=1]/if:page-header/child::*[1]"/>
+    <eval expected="bla" xpath="//if:page[@index=1]/if:page-header/child::*[2]/@name"/>
+    <eval expected="%FOPTestPSPageSetupCode: Blah blah!" xpath="//if:page[@index=1]/if:page-header/child::*[2]"/>
+  </if-checks>
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_2.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_2.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_2.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/ps-extension_2.xml Sun Feb 22 12:40:44 2009
@@ -92,4 +92,33 @@
     <eval expected="A4 before page" xpath="/areaTree/pageSequence/pageViewport[@simple-page-master-name='A4' and @nr=3]/page/extension-attachments/child::*[2]"/>
     <eval expected="A4 after page" xpath="/areaTree/pageSequence/pageViewport[@simple-page-master-name='A4' and @nr=3]/page/extension-attachments/child::*[3]"/>
   </checks>
+  <if-checks  xmlns:if="http://xmlgraphics.apache.org/fop/intermediate">
+    <eval expected="1" xpath="count(/if:document/if:page-sequence)"/>
+    <eval expected="6" xpath="count(/if:document/if:header/child::*)"/>
+    <eval expected="autofeed"       xpath="/if:document/if:header/child::*[1]/@name"/>
+    <eval expected="header comment 1" xpath="/if:document/if:header/child::*[2]/text()"/>
+    <eval expected="footer comment 1" xpath="/if:document/if:header/child::*[3]/text()"/>
+    <eval expected="header comment 2" xpath="/if:document/if:header/child::*[4]/text()"/>
+    <eval expected="footer comment 2" xpath="/if:document/if:header/child::*[5]/text()"/>
+    
+    <eval expected="3" xpath="count(//if:page[@index=0]/if:page-header/child::*)"/>
+    <eval expected="A4" xpath="//if:page[@index=0]/@page-master-name"/>
+    <eval expected="lower tray" xpath="//if:page[@index=0]/if:page-header/child::*[1]/@name"/>
+    <eval expected="A4 before page" xpath="//if:page[@index=0]/if:page-header/child::*[2]"/>
+    <eval expected="A4 after page" xpath="//if:page[@index=0]/if:page-header/child::*[3]"/>
+    
+    <eval expected="5" xpath="count(//if:page[@index=1]/if:page-header/child::*)"/>
+    <eval expected="A4a" xpath="//if:page[@index=1]/@page-master-name"/>
+    <eval expected="upper tray" xpath="//if:page[@index=1]/if:page-header/child::*[1]/@name"/>
+    <eval expected="A4a before page 1" xpath="//if:page[@index=1]/if:page-header/child::*[2]"/>
+    <eval expected="A4a after page 1" xpath="//if:page[@index=1]/if:page-header/child::*[3]"/>
+    <eval expected="A4a before page 2" xpath="//if:page[@index=1]/if:page-header/child::*[4]"/>
+    <eval expected="A4a after page 2" xpath="//if:page[@index=1]/if:page-header/child::*[5]"/>
+    
+    <eval expected="3" xpath="count(//if:page[@index=2]/if:page-header/child::*)"/>
+    <eval expected="A4" xpath="//if:page[@index=2]/@page-master-name"/>
+    <eval expected="lower tray" xpath="//if:page[@index=2]/if:page-header/child::*[1]/@name"/>
+    <eval expected="A4 before page" xpath="//if:page[@index=2]/if:page-header/child::*[2]"/>
+    <eval expected="A4 after page" xpath="//if:page[@index=2]/if:page-header/child::*[3]"/>
+  </if-checks>  
 </testcase>

Modified: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/simple-page-master_borders_padding.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/simple-page-master_borders_padding.xml?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/simple-page-master_borders_padding.xml (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/simple-page-master_borders_padding.xml Sun Feb 22 12:40:44 2009
@@ -23,6 +23,9 @@
       length evaluation using percentages is possible.
     </p>
   </info>
+  <cfg>
+    <strict-validation>false</strict-validation>
+  </cfg>
   <fo>
     <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
       <fo:layout-master-set>
@@ -119,8 +122,8 @@
     
     <eval expected="240000" xpath="//regionBody/@bpda"/>
     <eval expected="240000" xpath="//regionBody/@ipda"/>
-    <eval expected="220000" xpath="//regionBody/@bpda"/>
-    <eval expected="220000" xpath="//regionBody/@ipda"/>
+    <eval expected="220000" xpath="//regionBody/@bpd"/>
+    <eval expected="220000" xpath="//regionBody/@ipd"/>
     <eval expected="(solid,#808066,1000)" xpath="//regionBody/@border-before"/>
     <eval expected="(solid,#808066,3000)" xpath="//regionBody/@border-after"/>
     <eval expected="(solid,#808066,4000)" xpath="//regionBody/@border-start"/>

Modified: xmlgraphics/fop/trunk/test/layoutengine/testcase2checks.xsl
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/testcase2checks.xsl?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/testcase2checks.xsl (original)
+++ xmlgraphics/fop/trunk/test/layoutengine/testcase2checks.xsl Sun Feb 22 12:40:44 2009
@@ -22,16 +22,25 @@
 <xsl:variable name="basic-checks" select="document('basic-checks.xml')/checks/*" />
 
 <xsl:template match="testcase">
-  <xsl:apply-templates select="checks" />
+  <checks>
+    <xsl:apply-templates select="checks"/>
+    <xsl:apply-templates select="if-checks"/>
+  </checks>
 </xsl:template>
 
 <xsl:template match="checks">
-  <checks>
+  <at-checks>
     <xsl:copy-of select="$basic-checks" />
     <xsl:copy-of select="*" />
-  </checks>
+  </at-checks>
 </xsl:template>
 
+<xsl:template match="if-checks">
+  <if-checks>
+    <xsl:copy-of select="*"/>
+  </if-checks>
+</xsl:template>
+  
 <xsl:template match="text()" />
 
 </xsl:stylesheet>

Modified: xmlgraphics/fop/trunk/test/test.xconf
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/test.xconf?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/test.xconf (original)
+++ xmlgraphics/fop/trunk/test/test.xconf Sun Feb 22 12:40:44 2009
@@ -6,6 +6,18 @@
   
   <renderers>
     <renderer mime="application/pdf">
+      <filterList type="tiff">
+        <value>ascii-85</value>
+      </filterList>
+      <filterList type="default">
+        <value>null</value>
+      </filterList>
+      <filterList type="image">
+        <value>null</value>
+      </filterList>
+      <filterList type="content">
+        <value>null</value>
+      </filterList>
       <fonts>
         <font metrics-url="test/resources/fonts/glb12.ttf.xml" embed-url="test/resources/fonts/glb12.ttf">
           <font-triplet name="Gladiator" style="normal" weight="normal"/>

Modified: xmlgraphics/fop/trunk/test/xsl/fo-replicator.xsl
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/xsl/fo-replicator.xsl?rev=746664&r1=746663&r2=746664&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/xsl/fo-replicator.xsl (original)
+++ xmlgraphics/fop/trunk/test/xsl/fo-replicator.xsl Sun Feb 22 12:40:44 2009
@@ -50,15 +50,15 @@
       </xsl:call-template>
     </xsl:if>
   </xsl:template>
-  <xsl:template match="@id">
+  <xsl:template match="fo:*/@id">
     <xsl:param name="run"/>
     <xsl:attribute name="id"><xsl:value-of select="."/>-<xsl:value-of select="$run"/></xsl:attribute>
   </xsl:template>
-  <xsl:template match="@ref-id">
+  <xsl:template match="fo:*/@ref-id">
     <xsl:param name="run"/>
     <xsl:attribute name="ref-id"><xsl:value-of select="."/>-<xsl:value-of select="$run"/></xsl:attribute>
   </xsl:template>
-  <xsl:template match="@internal-destination">
+  <xsl:template match="fo:*/@internal-destination">
     <xsl:param name="run"/>
     <xsl:attribute name="internal-destination"><xsl:value-of select="."/>-<xsl:value-of select="$run"/></xsl:attribute>
   </xsl:template>



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org