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 vh...@apache.org on 2011/04/18 20:36:07 UTC

svn commit: r1094690 [2/2] - in /xmlgraphics/fop/trunk: ./ src/documentation/intermediate-format-ng/ src/java/org/apache/fop/render/intermediate/ test/intermediate/ test/java/org/apache/fop/check/ test/java/org/apache/fop/intermediate/ test/java/org/ap...

Propchange: xmlgraphics/fop/trunk/test/intermediate/list.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/intermediate/list.xml
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Added: xmlgraphics/fop/trunk/test/intermediate/table.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/intermediate/table.xml?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/intermediate/table.xml (added)
+++ xmlgraphics/fop/trunk/test/intermediate/table.xml Mon Apr 18 18:36:05 2011
@@ -0,0 +1,146 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+  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.
+-->
+<testcase>
+  <info>
+    <p>
+      This test checks that IDs coming from the various elements of a table properly appear in the IF output.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="page"
+          page-height="320pt" page-width="420pt" margin="10pt">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body" text-align="justify">
+          <fo:block>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum leo a diam 
+            bibendum auctor. Vivamus porttitor sollicitudin tortor eu vulputate.</fo:block>
+          <fo:table id="table"
+            table-layout="fixed"
+            border-collapse="separate"
+            space-before="10pt"
+            start-indent="10%"
+            width="80%"
+            border="4pt solid purple"
+            border-separation="2pt"
+            padding="1pt"
+            font-size="10pt">
+            <fo:table-header id="table-header" start-indent="0">
+              <fo:table-cell border="2pt solid black" padding="2pt" id="table-cell_header_1.1">
+                <fo:block>Header 1.1</fo:block>
+                <fo:block>id="table-cell_header_1.1"</fo:block>
+              </fo:table-cell>
+              <fo:table-cell border="2pt solid black" padding="2pt">
+                <fo:block>Header 1.2 id="table-header"</fo:block>
+              </fo:table-cell>
+            </fo:table-header>
+            <fo:table-body id="table-body_1" start-indent="0">
+              <fo:table-row id="table-row_1">
+                <fo:table-cell border="1pt solid black" padding="2pt" id="table-cell_1.1">
+                  <fo:block>Cell 1.1 id="table-cell_1.1"</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black" padding="2pt">
+                  <fo:block>Cell 1.2 id="table-row_1"</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black" padding="2pt">
+                  <fo:block>Cell 2.1 id="table-body_1"</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black" padding="2pt">
+                  <fo:block>Cell 2.2 id="table-body_1"</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+            <fo:table-body start-indent="0">
+              <fo:table-row id="table-row_3">
+                <fo:table-cell border="1pt solid black" padding="2pt" id="table-cell_3.1">
+                  <fo:block>Cell 3.1 id="table-cell_3.1"</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black" padding="2pt">
+                  <fo:block>Cell 3.2 id="table-row_3"</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell border="1pt solid black" padding="2pt">
+                  <fo:block id="block">Cell 4.1 id="block"</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="1pt solid black" padding="2pt">
+                  <fo:block>Cell 4.2 id="table"</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+          <fo:block space-before="10pt">Proin varius egestas erat. Proin ante eros, consequat eget 
+            semper a, molestie non arcu. Praesent hendrerit dolor vel leo luctus dapibus.</fo:block>
+          <fo:block space-before="10pt" color="purple" id="block_outer">Mauris ac erat est, sit amet 
+            dignissim elit. Ut pulvinar diam ut lorem pellentesque tempus.</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+
+    </fo:root>
+  </fo>
+  <if-checks xmlns:if="http://xmlgraphics.apache.org/fop/intermediate">
+
+    <eval expected="27"        xpath="count(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'])"/>
+
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][1])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][2])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][3])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][4])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][5])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][6])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][7])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][8])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][9])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][10])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][11])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][12])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][13])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][14])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][15])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][16])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][17])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][18])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][19])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][20])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][21])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][22])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][23])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][24])"/>
+    <eval expected="id"   xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][25])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][26])"/>
+    <eval expected="text" xpath="local-name(//if:page-sequence/descendant::*[local-name() = 'text' or local-name() = 'id'][27])"/>
+
+    <eval expected="table-cell_header_1.1" xpath="//if:page-sequence/descendant::*[local-name() = 'id'][1]/@name"/>
+    <eval expected="table"                 xpath="//if:page-sequence/descendant::*[local-name() = 'id'][2]/@name"/>
+    <eval expected="table-cell_1.1"        xpath="//if:page-sequence/descendant::*[local-name() = 'id'][3]/@name"/>
+    <eval expected="table"                 xpath="//if:page-sequence/descendant::*[local-name() = 'id'][4]/@name"/>
+    <eval expected="table-cell_3.1"        xpath="//if:page-sequence/descendant::*[local-name() = 'id'][5]/@name"/>
+    <eval expected="table"                 xpath="//if:page-sequence/descendant::*[local-name() = 'id'][6]/@name"/>
+    <eval expected="block"                 xpath="//if:page-sequence/descendant::*[local-name() = 'id'][7]/@name"/>
+    <eval expected="table"                 xpath="//if:page-sequence/descendant::*[local-name() = 'id'][8]/@name"/>
+    <eval expected=""                      xpath="//if:page-sequence/descendant::*[local-name() = 'id'][9]/@name"/>
+    <eval expected="block_outer"           xpath="//if:page-sequence/descendant::*[local-name() = 'id'][10]/@name"/>
+
+  </if-checks>
+</testcase>

Propchange: xmlgraphics/fop/trunk/test/intermediate/table.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/intermediate/table.xml
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/Check.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/check/Check.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/check/Check.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/check/Check.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,27 @@
+/*
+ * 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$ */
+
+package org.apache.fop.check;
+
+/**
+ * A marker interface to identify checks in XML test cases.
+ */
+public interface Check {
+
+}

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

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/Check.java
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/ChecksFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/check/ChecksFactory.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/check/ChecksFactory.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/check/ChecksFactory.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,97 @@
+/*
+ * 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$ */
+
+package org.apache.fop.check;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A factory class for creating checks that belong to a same family.
+ * @param <C> a family of checks
+ */
+public abstract class ChecksFactory<C extends Check> {
+
+    /**
+     * A factory to create a particular kind of check.
+     */
+    protected static interface CheckFactory<C> {
+
+        /**
+         * Creates a {@link Check} instance from the given XML element.
+         *
+         * @param element an element representing a check
+         * @return the corresponding check
+         */
+        C createCheck(Element element);
+    }
+
+    private final Map<String, CheckFactory<C>> checkFactories
+            = new HashMap<String, CheckFactory<C>>();
+
+    /** Default constructor. */
+    protected ChecksFactory() { }
+
+    /**
+     * Registers a factory for a new kind of check.
+     *
+     * @param elementName the name of the element under which the check is identified in
+     * the XML test case
+     * @param factory the corresponding factory
+     */
+    protected void registerCheckFactory(String elementName, CheckFactory<C> factory) {
+        checkFactories.put(elementName, factory);
+    }
+
+    /**
+     * Creates a new {@link Check} instance corresponding to the given element.
+     *
+     * @param element an element in the XML test case that identifies a particular check
+     * @return the corresponding check
+     * @throws IllegalArgumentException if not check corresponding to the given element
+     * has been found
+     */
+    public final C createCheck(Element element) {
+        String name = element.getTagName();
+        CheckFactory<C> factory = checkFactories.get(name);
+        if (factory == null) {
+            throw new IllegalArgumentException("No check class found for " + name);
+        } else {
+            return factory.createCheck(element);
+        }
+    }
+
+    public final List<C> createCheckList(Element container) {
+        List<C> checks = new ArrayList<C>();
+        NodeList nodes = container.getChildNodes();
+        for (int i = 0; i < nodes.getLength(); i++) {
+            Node node = nodes.item(i);
+            if (node instanceof Element) {
+                checks.add(createCheck((Element) node));
+            }
+        }
+        return checks;
+    }
+}

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

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/ChecksFactory.java
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/package-info.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/check/package-info.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/check/package-info.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/check/package-info.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,25 @@
+/*
+ * 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$ */
+
+/**
+ * A framework for creating checks from elements stored in an XML test case. The test case
+ * typically contains the XML document under test, along with a series of checks expressed
+ * as XML elements.
+ */
+package org.apache.fop.check;

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/check/package-info.java
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIFTestCase.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,137 @@
+/*
+ * 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$ */
+
+package org.apache.fop.intermediate;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.xml.XMLConstants;
+import javax.xml.transform.Result;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
+import org.w3c.dom.Document;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.Fop;
+import org.apache.fop.render.intermediate.IFContext;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFSerializer;
+
+/**
+ * A common super-class for intermediate format test cases.
+ */
+abstract class AbstractIFTestCase extends AbstractIntermediateTestCase {
+
+    private static final Schema IF_SCHEMA;
+
+    static {
+        Schema ifSchema = null;
+        try {
+            SchemaFactory sFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+            File ifSchemaFile = new File(
+            "src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd");
+            ifSchema = sFactory.newSchema(ifSchemaFile);
+        } catch (IllegalArgumentException iae) {
+            System.err.println("No suitable SchemaFactory for XML Schema validation found!");
+        } catch (SAXException e) {
+            throw new ExceptionInInitializerError(e);
+        }
+        IF_SCHEMA = ifSchema;
+    }
+
+    /**
+     * Creates a new test case.
+     *
+     * @param testFile the file containing the document and the tests
+     * @throws IOException if an I/O error occurs while loading the test case
+     */
+    public AbstractIFTestCase(File testFile) throws IOException {
+        super(testFile);
+    }
+
+    @Override
+    protected String getIntermediateFileExtension() {
+        return ".if.xml";
+    }
+
+    @Override
+    protected Document buildIntermediateDocument(Templates templates) throws Exception {
+        Transformer transformer = templates.newTransformer();
+        setErrorListener(transformer);
+
+        //Set up XMLRenderer to render to a DOM
+        DOMResult domResult = new DOMResult();
+
+        FOUserAgent userAgent = createUserAgent();
+
+        //Create an instance of the target renderer so the XMLRenderer can use its font setup
+        IFDocumentHandler targetHandler = userAgent.getRendererFactory().createDocumentHandler(
+                userAgent, getTargetMIME());
+
+        //Setup painter
+        IFSerializer serializer = new IFSerializer();
+        serializer.setContext(new IFContext(userAgent));
+        serializer.mimicDocumentHandler(targetHandler);
+        serializer.setResult(domResult);
+
+        userAgent.setDocumentHandlerOverride(serializer);
+
+        Fop fop = fopFactory.newFop(userAgent);
+        Result res = new SAXResult(fop.getDefaultHandler());
+        transformer.transform(new DOMSource(testDoc), res);
+
+        return (Document) domResult.getNode();
+    }
+
+    @Override
+    protected void validate(Document doc) throws SAXException, IOException {
+        if (IF_SCHEMA == null) {
+            return; //skip validation;
+        }
+        Validator validator = IF_SCHEMA.newValidator();
+        validator.setErrorHandler(new ErrorHandler() {
+
+            public void error(SAXParseException exception) throws SAXException {
+                throw exception;
+            }
+
+            public void fatalError(SAXParseException exception) throws SAXException {
+                throw exception;
+            }
+
+            public void warning(SAXParseException exception) throws SAXException {
+                //ignore
+            }
+
+        });
+        validator.validate(new DOMSource(doc));
+    }
+
+}

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

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

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIntermediateTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIntermediateTestCase.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIntermediateTestCase.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/AbstractIntermediateTestCase.java Mon Apr 18 18:36:05 2011
@@ -44,7 +44,6 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.events.model.EventSeverity;
-import org.apache.fop.layoutengine.TestEnvironment;
 import org.apache.fop.util.ConsoleEventListenerForTests;
 
 /**
@@ -53,15 +52,13 @@ import org.apache.fop.util.ConsoleEventL
 public abstract class AbstractIntermediateTestCase extends XMLTestCase {
 
     /** the test environment */
-    protected static TestEnvironment env = new TestEnvironment();
+    protected static TestAssistant testAssistant = new TestAssistant();
 
     /** the FOP factory */
     protected FopFactory fopFactory;
 
-    /** the main base directory for tests */
-    protected File mainDir = new File("test/layoutengine");
     /** the directory containing the tests */
-    protected File testDir = new File(mainDir, "standard-testcases");
+    protected File testDir = new File("test/layoutengine/standard-testcases");
     /** the output directory for any files generated by the tests */
     protected File outputDir;
 
@@ -87,11 +84,11 @@ public abstract class AbstractIntermedia
     protected void setUp() throws Exception {
         super.setUp();
         setupOutputDirectory();
-        this.testDoc = env.loadTestCase(testFile);
-        this.fopFactory = env.getFopFactory(testDoc);
-        intermediate = buildIntermediateDocument(env.getTestcase2FOStylesheet());
+        this.testDoc = testAssistant.loadTestCase(testFile);
+        this.fopFactory = testAssistant.getFopFactory(testDoc);
+        intermediate = buildIntermediateDocument(testAssistant.getTestcase2FOStylesheet());
         if (outputDir != null) {
-            env.saveDOM(intermediate, new File(outputDir,
+            testAssistant.saveDOM(intermediate, new File(outputDir,
                     getName() + ".1" + getIntermediateFileExtension()));
         }
     }
@@ -148,7 +145,8 @@ public abstract class AbstractIntermedia
             userAgent.getEventBroadcaster().addEventListener(
                     new ConsoleEventListenerForTests(testFile.getName(), EventSeverity.FATAL));
         } catch (MalformedURLException e) {
-            //ignore, won't happen
+            // Shouldn't happen
+            throw new AssertionError();
         }
         return userAgent;
     }
@@ -175,7 +173,7 @@ public abstract class AbstractIntermedia
         Document doc = parseAndRenderToIntermediateFormat(src);
         if (outputDir != null) {
             File tgtFile = new File(outputDir, getName() + ".2" + getIntermediateFileExtension());
-            env.saveDOM(doc, tgtFile);
+            testAssistant.saveDOM(doc, tgtFile);
         }
 
         assertXMLEqual(intermediate, doc);

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=1094690&r1=1094689&r2=1094690&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 Mon Apr 18 18:36:05 2011
@@ -72,7 +72,7 @@ public class AreaTreeParserTestCase exte
         setErrorListener(transformer);
 
         //Set up XMLRenderer to render to a DOM
-        TransformerHandler handler = env.getTransformerFactory().newTransformerHandler();
+        TransformerHandler handler = testAssistant.getTransformerFactory().newTransformerHandler();
         DOMResult domResult = new DOMResult();
         handler.setResult(domResult);
 
@@ -113,7 +113,7 @@ public class AreaTreeParserTestCase exte
         AreaTreeParser parser = new AreaTreeParser();
 
         //Set up XMLRenderer to render to a DOM
-        TransformerHandler handler = env.getTransformerFactory().newTransformerHandler();
+        TransformerHandler handler = testAssistant.getTransformerFactory().newTransformerHandler();
         DOMResult domResult = new DOMResult();
         handler.setResult(domResult);
         XMLRenderer renderer = new XMLRenderer();

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFCheck.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFCheck.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFCheck.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFCheck.java Mon Apr 18 18:36:05 2011
@@ -21,10 +21,12 @@ package org.apache.fop.intermediate;
 
 import org.w3c.dom.Document;
 
+import org.apache.fop.check.Check;
+
 /**
  * Check interface for intermediate format checks.
  */
-public interface IFCheck {
+public interface IFCheck extends Check {
 
     /**
      * Called to perform the check.

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFChecksFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFChecksFactory.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFChecksFactory.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFChecksFactory.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,49 @@
+/*
+ * 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$ */
+
+package org.apache.fop.intermediate;
+
+import org.w3c.dom.Element;
+
+import org.apache.fop.check.ChecksFactory;
+import org.apache.fop.layoutengine.EvalCheck;
+import org.apache.fop.layoutengine.TrueCheck;
+
+/**
+ * A factory class for creating {@link IFCheck} instances.
+ */
+final class IFChecksFactory extends ChecksFactory<IFCheck> {
+
+    IFChecksFactory() {
+        registerCheckFactory("true", new CheckFactory<IFCheck>() {
+
+            public IFCheck createCheck(Element element) {
+                return new TrueCheck(element);
+            }
+
+        });
+        registerCheckFactory("eval", new CheckFactory<IFCheck>() {
+
+            public IFCheck createCheck(Element element) {
+                return new EvalCheck(element);
+            }
+
+        });
+    }
+}

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

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

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFParserTestCase.java Mon Apr 18 18:36:05 2011
@@ -23,59 +23,23 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import javax.xml.XMLConstants;
-import javax.xml.transform.Result;
 import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.Transformer;
 import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.sax.SAXResult;
 import javax.xml.transform.stream.StreamResult;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
 
 import org.w3c.dom.Document;
 
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
 import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.apps.Fop;
-import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.layoutengine.TestEnvironment;
 import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.intermediate.IFDocumentHandler;
 import org.apache.fop.render.intermediate.IFParser;
-import org.apache.fop.render.intermediate.IFRenderer;
 import org.apache.fop.render.intermediate.IFSerializer;
 
 /**
  * Tests the intermediate format parser.
  */
-public class IFParserTestCase extends AbstractIntermediateTestCase {
-
-    private static TestEnvironment env = new TestEnvironment();
-    private static Schema ifSchema;
-
-    private static Schema getIFSchema() throws SAXException {
-        if (ifSchema == null) {
-            SchemaFactory sFactory;
-            try {
-                sFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-            } catch (IllegalArgumentException iae) {
-                System.out.println("No suitable SchemaFactory for XML Schema validation found!");
-                return null;
-            }
-            File ifSchemaFile = new File(
-                    "src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd");
-            ifSchema = sFactory.newSchema(ifSchemaFile);
-        }
-        return ifSchema;
-    }
+public class IFParserTestCase extends AbstractIFTestCase {
 
     /**
      * Constructor for the test suite that is used for each test file.
@@ -87,76 +51,7 @@ public class IFParserTestCase extends Ab
     }
 
     /** {@inheritDoc} */
-    protected String getTargetMIME() {
-        return MimeConstants.MIME_PDF;
-    }
-
-    /** {@inheritDoc} */
-    protected String getIntermediateFileExtension() {
-        return ".if.xml";
-    }
-
-    /** {@inheritDoc} */
-    protected Document buildIntermediateDocument(Templates templates)
-                throws Exception {
-        Transformer transformer = templates.newTransformer();
-        setErrorListener(transformer);
-
-        //Set up XMLRenderer to render to a DOM
-        DOMResult domResult = new DOMResult();
-
-        FOUserAgent userAgent = createUserAgent();
-
-        //Create an instance of the target renderer so the XMLRenderer can use its font setup
-        IFDocumentHandler targetHandler = userAgent.getRendererFactory().createDocumentHandler(
-                userAgent, getTargetMIME());
-
-        //Setup painter
-        IFSerializer serializer = new IFSerializer();
-        serializer.setContext(new IFContext(userAgent));
-        serializer.mimicDocumentHandler(targetHandler);
-        serializer.setResult(domResult);
-
-        //Setup renderer
-        IFRenderer renderer = new IFRenderer();
-        renderer.setUserAgent(userAgent);
-
-        renderer.setDocumentHandler(serializer);
-        userAgent.setRendererOverride(renderer);
-
-        Fop fop = fopFactory.newFop(userAgent);
-        Result res = new SAXResult(fop.getDefaultHandler());
-        transformer.transform(new DOMSource(testDoc), res);
-
-        return (Document)domResult.getNode();
-    }
-
-    /** {@inheritDoc} */
-    protected void validate(Document doc) throws SAXException, IOException {
-        Schema schema = getIFSchema();
-        if (schema == null) {
-            return; //skip validation;
-        }
-        Validator validator = schema.newValidator();
-        validator.setErrorHandler(new ErrorHandler() {
-
-            public void error(SAXParseException exception) throws SAXException {
-                throw exception;
-            }
-
-            public void fatalError(SAXParseException exception) throws SAXException {
-                throw exception;
-            }
-
-            public void warning(SAXParseException exception) throws SAXException {
-                //ignore
-            }
-
-        });
-        validator.validate(new DOMSource(doc));
-    }
-
-    /** {@inheritDoc} */
+    @Override
     protected void parseAndRender(Source src, OutputStream out) throws Exception {
         IFParser parser = new IFParser();
 
@@ -170,6 +65,7 @@ public class IFParserTestCase extends Ab
     }
 
     /** {@inheritDoc} */
+    @Override
     protected Document parseAndRenderToIntermediateFormat(Source src) throws Exception {
         IFParser parser = new IFParser();
 
@@ -185,4 +81,11 @@ public class IFParserTestCase extends Ab
         return (Document)domResult.getNode();
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public void runTest() throws Exception {
+        testParserToIntermediateFormat();
+        testParserToPDF();
+    }
+
 }

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTestCase.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTestCase.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTestCase.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,77 @@
+/*
+ * 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$ */
+
+package org.apache.fop.intermediate;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.xml.transform.Source;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+
+/**
+ * Test case for the IF output.
+ */
+public class IFTestCase extends AbstractIFTestCase {
+
+    private final IFTester ifTester;
+
+    /**
+     * Creates a new test case.
+     *
+     * @param test the file containing the test case
+     * @param ifTester the helper instance that will perform checks
+     * @throws IOException if an I/O error occurs while loading the test case
+     */
+    public IFTestCase(File test, IFTester ifTester) throws IOException {
+        super(test);
+        this.ifTester = ifTester;
+        this.testDir = test.getParentFile();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void runTest() throws Exception {
+        Element testRoot = testAssistant.getTestRoot(testFile);
+        NodeList nodes = testRoot.getElementsByTagName("if-checks");
+        if (nodes.getLength() == 0) {
+            throw new RuntimeException("No IF check found");
+        }
+        Element ifChecks = (Element) nodes.item(0);
+
+        Document doc = buildIntermediateDocument(testAssistant.getTestcase2FOStylesheet());
+        ifTester.doIFChecks(getName(), ifChecks, doc);
+    }
+
+    @Override
+    protected void parseAndRender(Source src, OutputStream out) throws Exception {
+        throw new IllegalStateException("Not applicable to this test");
+    }
+
+    @Override
+    protected Document parseAndRenderToIntermediateFormat(Source src) throws Exception {
+        throw new IllegalStateException("Not applicable to this test");
+    }
+
+}

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

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

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTester.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTester.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTester.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IFTester.java Mon Apr 18 18:36:05 2011
@@ -20,182 +20,63 @@
 package org.apache.fop.intermediate;
 
 import java.io.File;
-import java.lang.reflect.Constructor;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
-import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.stream.StreamResult;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.apps.FopFactory;
-import org.apache.fop.area.AreaTreeModel;
-import org.apache.fop.area.AreaTreeParser;
-import org.apache.fop.area.RenderPagesModel;
-import org.apache.fop.events.model.EventSeverity;
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.layoutengine.EvalCheck;
-import org.apache.fop.layoutengine.TrueCheck;
-import org.apache.fop.render.intermediate.IFContext;
-import org.apache.fop.render.intermediate.IFRenderer;
-import org.apache.fop.render.intermediate.IFSerializer;
-import org.apache.fop.util.ConsoleEventListenerForTests;
-import org.apache.fop.util.DelegatingContentHandler;
 
 /**
  * Does tests on the intermediate format.
  */
 public class IFTester {
 
-    private static final Map IF_CHECK_CLASSES = new java.util.HashMap();
-
-    static {
-        IF_CHECK_CLASSES.put("true", TrueCheck.class);
-        IF_CHECK_CLASSES.put("eval", EvalCheck.class);
-    }
-
-    private FopFactory fopFactory = FopFactory.newInstance();
+    private final IFChecksFactory ifChecksFactory = new IFChecksFactory();
 
-    private SAXTransformerFactory tfactory
-                = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+    private final TransformerFactory tfactory;
 
     private File backupDir;
 
     /**
-     * Main constructor
+     * Main constructor.
+     *
+     * @param transformerFactory the factory used to serialize the intermediate format files
      * @param backupDir an optional directory in which to write the serialized
-     *                  intermediate format file (may be null)
+     * IF files (may be null)
      */
-    public IFTester(File backupDir) {
+    public IFTester(TransformerFactory transformerFactory, File backupDir) {
+        this.tfactory = transformerFactory;
         this.backupDir = backupDir;
     }
 
     /**
-     * Factory method to create IF checks from DOM elements.
-     * @param el DOM element to create the check from
-     * @return The newly create check
-     */
-    protected IFCheck createIFCheck(Element el) {
-        String name = el.getTagName();
-        Class clazz = (Class)IF_CHECK_CLASSES.get(name);
-        if (clazz != null) {
-            try {
-                Constructor c = clazz.getDeclaredConstructor(new Class[] {Node.class});
-                IFCheck instance = (IFCheck)c.newInstance(new Object[] {el});
-                return instance;
-            } catch (Exception e) {
-                throw new RuntimeException("Error while instantiating check '"
-                        + name + "': " + e.getMessage());
-            }
-        } else {
-            throw new IllegalArgumentException("No check class found: " + name);
-        }
-    }
-
-    private Document createIF(File testFile, Document areaTreeXML) throws TransformerException {
-        try {
-            FOUserAgent ua = fopFactory.newFOUserAgent();
-            ua.setBaseURL(testFile.getParentFile().toURI().toURL().toExternalForm());
-            ua.getEventBroadcaster().addEventListener(
-                    new ConsoleEventListenerForTests(testFile.getName(), EventSeverity.WARN));
-
-            IFRenderer ifRenderer = new IFRenderer();
-            ifRenderer.setUserAgent(ua);
-
-            IFSerializer serializer = new IFSerializer();
-            serializer.setContext(new IFContext(ua));
-            DOMResult result = new DOMResult();
-            serializer.setResult(result);
-            ifRenderer.setDocumentHandler(serializer);
-
-            ua.setRendererOverride(ifRenderer);
-            FontInfo fontInfo = new FontInfo();
-            //Construct the AreaTreeModel that will received the individual pages
-            final AreaTreeModel treeModel = new RenderPagesModel(ua,
-                    null, fontInfo, null);
-
-            //Iterate over all intermediate files
-            AreaTreeParser parser = new AreaTreeParser();
-            ContentHandler handler = parser.getContentHandler(treeModel, ua);
-
-            DelegatingContentHandler proxy = new DelegatingContentHandler() {
-
-                public void endDocument() throws SAXException {
-                    super.endDocument();
-                    //Signal the end of the processing.
-                    //The renderer can finalize the target document.
-                    treeModel.endDocument();
-                }
-
-            };
-            proxy.setDelegateContentHandler(handler);
-
-            Transformer transformer = tfactory.newTransformer();
-            transformer.transform(new DOMSource(areaTreeXML), new SAXResult(proxy));
-
-            return (Document)result.getNode();
-        } catch (Exception e) {
-            throw new TransformerException(
-                    "Error while generating intermediate format file: " + e.getMessage(), e);
-        }
-    }
-
-    /**
      * Runs the intermediate format checks.
-     * @param testFile the original test file
+     * @param testName the name of the test case
      * @param checksRoot the root element containing the IF checks
-     * @param areaTreeXML the area tree XML
+     * @param ifDocument the IF XML
      * @throws TransformerException if an error occurs while transforming the content
      */
-    public void doIFChecks(File testFile, Element checksRoot, Document areaTreeXML)
-                throws TransformerException {
-        Document ifDocument = createIF(testFile, areaTreeXML);
+    public void doIFChecks(String testName, Element checksRoot, Document ifDocument)
+            throws TransformerException {
         if (this.backupDir != null) {
             Transformer transformer = tfactory.newTransformer();
             Source src = new DOMSource(ifDocument);
-            File targetFile = new File(this.backupDir, testFile.getName() + ".if.xml");
+            File targetFile = new File(this.backupDir, testName + ".if.xml");
             Result res = new StreamResult(targetFile);
             transformer.transform(src, res);
         }
-
-        //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(createIFCheck((Element)node));
-            }
-        }
-
+        List<IFCheck> checks = ifChecksFactory.createCheckList(checksRoot);
         if (checks.size() == 0) {
-            throw new RuntimeException("No checks are available!");
+            throw new RuntimeException("No available IF check");
         }
-
-        //Run the actual tests now that we know that the checks themselves are ok
-        doIFChecks(checks, ifDocument);
-    }
-
-    private void doIFChecks(List checks, Document ifDocument) {
-        Iterator i = checks.iterator();
-        while (i.hasNext()) {
-            IFCheck check = (IFCheck)i.next();
+        for (IFCheck check : checks) {
             check.check(ifDocument);
         }
     }

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=1094690&r1=1094689&r2=1094690&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 Mon Apr 18 18:36:05 2011
@@ -20,52 +20,48 @@
 package org.apache.fop.intermediate;
 
 import java.io.File;
+import java.io.FilenameFilter;
 import java.io.IOException;
-import java.util.Collection;
-import java.util.Iterator;
+
+import javax.xml.transform.TransformerFactory;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
-import org.apache.fop.layoutengine.LayoutEngineTestSuite;
-
 /**
- * JUnit test suite for the intermediate format
+ * A test suite for testing the Intermediate Format output.
  */
-public class IntermediateFormatTestSuite {
+public final class IntermediateFormatTestSuite {
+
+    private IntermediateFormatTestSuite() {
+        // This is a utility class
+    }
 
     /**
-     * @return the test suite with all the tests (one for each XML file)
-     * @throws IOException in case of an I/O problem
+     * Creates a suite of Intermediate Format tests.
+     *
+     * @return the test suite
+     * @throws IOException if an I/O error occurs while loading one of the tests
      */
     public static Test suite() throws IOException {
-        TestSuite suite = new TestSuite();
 
-        Collection files = LayoutEngineTestSuite.getTestFiles();
+        File backupDir = new File("build/test-results/intermediate");
+        backupDir.mkdirs();
 
-        Iterator i = files.iterator();
-        while (i.hasNext()) {
-            File f = (File)i.next();
-            addIFTestCase(suite, f);
-        }
+        IFTester ifTester = new IFTester(TransformerFactory.newInstance(), backupDir);
 
-        return suite;
-    }
+        TestSuite suite = new TestSuite();
+        File testDir = new File("test/intermediate");
+        String[] tests = testDir.list(new FilenameFilter() {
 
-    private static void addIFTestCase(TestSuite suite,
-            final File f) throws IOException {
-        suite.addTest(new IFParserTestCase(f) {
-            public void runTest() throws Exception {
-                try {
-                    testParserToIntermediateFormat();
-                    testParserToPDF();
-                } catch (Exception e) {
-                    org.apache.commons.logging.LogFactory.getLog(
-                            this.getClass()).error("Error on " + f.getName());
-                    throw e;
-                }
+            public boolean accept(File dir, String name) {
+                return name.endsWith(".xml");
             }
         });
+        for (String test : tests) {
+            File testFile = new File(testDir, test);
+            suite.addTest(new IFTestCase(testFile, ifTester));
+        }
+        return suite;
     }
-
 }

Copied: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/LayoutIFTestSuite.java (from r1090190, 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/LayoutIFTestSuite.java?p2=xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/LayoutIFTestSuite.java&p1=xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java&r1=1090190&r2=1094690&rev=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/LayoutIFTestSuite.java Mon Apr 18 18:36:05 2011
@@ -32,7 +32,11 @@ import org.apache.fop.layoutengine.Layou
 /**
  * JUnit test suite for the intermediate format
  */
-public class IntermediateFormatTestSuite {
+public final class LayoutIFTestSuite {
+
+    private LayoutIFTestSuite() {
+        // This is a utility class
+    }
 
     /**
      * @return the test suite with all the tests (one for each XML file)
@@ -54,18 +58,7 @@ public class IntermediateFormatTestSuite
 
     private static void addIFTestCase(TestSuite suite,
             final File f) throws IOException {
-        suite.addTest(new IFParserTestCase(f) {
-            public void runTest() throws Exception {
-                try {
-                    testParserToIntermediateFormat();
-                    testParserToPDF();
-                } catch (Exception e) {
-                    org.apache.commons.logging.LogFactory.getLog(
-                            this.getClass()).error("Error on " + f.getName());
-                    throw e;
-                }
-            }
-        });
+        suite.addTest(new IFParserTestCase(f));
     }
 
 }

Copied: xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/TestAssistant.java (from r1090190, xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TestEnvironment.java)
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/TestAssistant.java?p2=xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/TestAssistant.java&p1=xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TestEnvironment.java&r1=1090190&r2=1094690&rev=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/TestEnvironment.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/intermediate/TestAssistant.java Mon Apr 18 18:36:05 2011
@@ -17,7 +17,7 @@
 
 /* $Id$ */
 
-package org.apache.fop.layoutengine;
+package org.apache.fop.intermediate;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,12 +30,14 @@ 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.SAXTransformerFactory;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import org.apache.xpath.XPathAPI;
 import org.apache.xpath.objects.XObject;
@@ -43,9 +45,9 @@ import org.apache.xpath.objects.XObject;
 import org.apache.fop.apps.FopFactory;
 
 /**
- * Test environment and helper code for running FOP tests.
+ * Helper class for running FOP tests.
  */
-public class TestEnvironment {
+public class TestAssistant {
 
     // configure fopFactory as desired
     private FopFactory fopFactory = FopFactory.newInstance();
@@ -62,7 +64,7 @@ public class TestEnvironment {
     /**
      * Main constructor.
      */
-    public TestEnvironment() {
+    public TestAssistant() {
         fopFactory.getFontManager().setBase14KerningEnabled(false);
         fopFactoryWithBase14Kerning.getFontManager().setBase14KerningEnabled(true);
         domBuilderFactory = DocumentBuilderFactory.newInstance();
@@ -89,7 +91,7 @@ public class TestEnvironment {
      * @return the stylesheet
      * @throws TransformerConfigurationException if an error occurs loading the stylesheet
      */
-    public Templates getTestcase2ChecksStylesheet() throws TransformerConfigurationException {
+    private Templates getTestcase2ChecksStylesheet() throws TransformerConfigurationException {
         if (testcase2checks == null) {
             //Load and cache stylesheet
             Source src = new StreamSource(new File("test/layoutengine/testcase2checks.xsl"));
@@ -98,6 +100,21 @@ public class TestEnvironment {
         return testcase2checks;
     }
 
+    /**
+     * Returns the element from the given XML file that encloses the tests.
+     *
+     * @param testFile a test case
+     * @return the parent element of the group(s) of checks
+     * @throws TransformerException if an error occurs while extracting the test element
+     */
+    public Element getTestRoot(File testFile) throws TransformerException {
+        Transformer transformer = getTestcase2ChecksStylesheet().newTransformer();
+        DOMResult res = new DOMResult();
+        transformer.transform(new StreamSource(testFile), res);
+        Document doc = (Document) res.getNode();
+        return doc.getDocumentElement();
+    }
+
     public FopFactory getFopFactory(boolean base14KerningEnabled) {
         FopFactory effFactory = (base14KerningEnabled ? fopFactoryWithBase14Kerning : fopFactory);
         return effFactory;

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=1094690&r1=1094689&r2=1094690&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 Mon Apr 18 18:36:05 2011
@@ -42,16 +42,6 @@ public class EvalCheck implements Layout
     private PrefixResolver prefixResolver;
 
     /**
-     * Creates a new instance
-     * @param expected expected value
-     * @param xpath XPath statement that needs to be evaluated
-     */
-    public EvalCheck(String expected, String xpath) {
-        this.expected = expected;
-        this.xpath = xpath;
-    }
-
-    /**
      * Creates a new instance from a DOM node.
      * @param node DOM node that defines this check
      */

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineCheck.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineCheck.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineCheck.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineCheck.java Mon Apr 18 18:36:05 2011
@@ -19,10 +19,12 @@
 
 package org.apache.fop.layoutengine;
 
+import org.apache.fop.check.Check;
+
 /**
  * Defines the interface for check operations.
  */
-public interface LayoutEngineCheck {
+public interface LayoutEngineCheck extends Check {
 
     /**
      * Called to perform the check.

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineChecksFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineChecksFactory.java?rev=1094690&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineChecksFactory.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineChecksFactory.java Mon Apr 18 18:36:05 2011
@@ -0,0 +1,62 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutengine;
+
+import org.w3c.dom.Element;
+
+import org.apache.fop.check.ChecksFactory;
+
+/**
+ * A factory class for creating {@link LayoutEngineCheck} instances.
+ */
+final class LayoutEngineChecksFactory extends ChecksFactory<LayoutEngineCheck> {
+
+    LayoutEngineChecksFactory() {
+        registerCheckFactory("true", new CheckFactory<LayoutEngineCheck>() {
+
+            public LayoutEngineCheck createCheck(Element element) {
+                return new TrueCheck(element);
+            }
+
+        });
+        registerCheckFactory("eval", new CheckFactory<LayoutEngineCheck>() {
+
+            public LayoutEngineCheck createCheck(Element element) {
+                return new EvalCheck(element);
+            }
+
+        });
+        registerCheckFactory("element-list", new CheckFactory<LayoutEngineCheck>() {
+
+            public LayoutEngineCheck createCheck(Element element) {
+                return new ElementListCheck(element);
+            }
+
+        });
+        registerCheckFactory("result", new CheckFactory<LayoutEngineCheck>() {
+
+            public LayoutEngineCheck createCheck(Element element) {
+                return new ResultCheck(element);
+            }
+
+        });
+    }
+
+}

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

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineChecksFactory.java
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java Mon Apr 18 18:36:05 2011
@@ -56,12 +56,16 @@ import org.apache.fop.DebugHelper;
 /**
  * JUnit test suit for running layout engine test under JUnit control.
  */
-public class LayoutEngineTestSuite {
+public final class LayoutEngineTestSuite {
 
     static {
         DebugHelper.registerStandardElementListObservers();
     }
 
+    private LayoutEngineTestSuite() {
+        // This is a utility class
+    }
+
     public static String[] readDisabledTestcases(File f) throws IOException {
         List lines = new java.util.ArrayList();
         Source stylesheet = new StreamSource(
@@ -178,45 +182,33 @@ public class LayoutEngineTestSuite {
         Iterator i = files.iterator();
         while (i.hasNext()) {
             File f = (File)i.next();
-            addTestCase(suite, tester, f);
+            suite.addTest(new LayoutEngineTestCase(f, tester));
         }
 
         return suite;
     }
 
-    private static void addTestCase(TestSuite suite,
-                final LayoutEngineTester tester, final File f) {
-        suite.addTest(new LayoutEngineTestCase(f.getName()) {
-            public void runTest() throws Exception {
-                try {
-                    prepare(tester, f);
-                    testMain();
-                } catch (Exception e) {
-                    org.apache.commons.logging.LogFactory.getLog(
-                            this.getClass()).error("Error on " + f.getName());
-                    throw e;
-                }
-            }
-        });
-    }
-
     private static class LayoutEngineTestCase extends TestCase {
 
-        private LayoutEngineTester tester;
-        private File testFile;
+        private final File testFile;
 
-        public LayoutEngineTestCase(String name) {
-            super(name);
-        }
+        private final LayoutEngineTester tester;
 
-        public void prepare(LayoutEngineTester tester, File testFile) {
-            //super(testFile.getName());
-            this.tester = tester;
+        LayoutEngineTestCase(File testFile, LayoutEngineTester tester) {
+            super(testFile.getName());
             this.testFile = testFile;
+            this.tester = tester;
         }
 
-        public void testMain() throws Exception {
-            tester.runTest(testFile);
+        @Override
+        protected void runTest() throws Throwable {
+            try {
+                tester.runTest(testFile);
+            } catch (Exception e) {
+                org.apache.commons.logging.LogFactory.getLog(
+                        this.getClass()).error("Error on " + getName());
+                throw e;
+            }
         }
     }
 }

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=1094690&r1=1094689&r2=1094690&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 Mon Apr 18 18:36:05 2011
@@ -21,37 +21,42 @@ package org.apache.fop.layoutengine;
 
 import java.io.File;
 import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXResult;
 import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
-
+import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 
 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.area.AreaTreeModel;
+import org.apache.fop.area.AreaTreeParser;
+import org.apache.fop.area.RenderPagesModel;
 import org.apache.fop.events.model.EventSeverity;
+import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.intermediate.IFTester;
+import org.apache.fop.intermediate.TestAssistant;
 import org.apache.fop.layoutmgr.ElementListObserver;
+import org.apache.fop.render.intermediate.IFContext;
+import org.apache.fop.render.intermediate.IFRenderer;
+import org.apache.fop.render.intermediate.IFSerializer;
 import org.apache.fop.render.xml.XMLRenderer;
 import org.apache.fop.util.ConsoleEventListenerForTests;
+import org.apache.fop.util.DelegatingContentHandler;
 
 /**
  * Class for testing the FOP's layout engine using testcases specified in XML
@@ -59,19 +64,13 @@ import org.apache.fop.util.ConsoleEventL
  */
 public class LayoutEngineTester {
 
-    private static final Map AT_CHECK_CLASSES = new java.util.HashMap();
-
-    private TestEnvironment env = new TestEnvironment();
+    private TestAssistant testAssistant = new TestAssistant();
 
+    private LayoutEngineChecksFactory layoutEngineChecksFactory = new LayoutEngineChecksFactory();
     private File areaTreeBackupDir;
     private IFTester ifTester;
 
-    static {
-        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);
-    }
+    private TransformerFactory tfactory = TransformerFactory.newInstance();
 
     /**
      * Constructs a new instance.
@@ -80,7 +79,7 @@ public class LayoutEngineTester {
      */
     public LayoutEngineTester(File areaTreeBackupDir) {
         this.areaTreeBackupDir = areaTreeBackupDir;
-        this.ifTester = new IFTester(areaTreeBackupDir);
+        this.ifTester = new IFTester(tfactory, areaTreeBackupDir);
     }
 
     /**
@@ -100,18 +99,18 @@ public class LayoutEngineTester {
         ElementListObserver.addObserver(elCollector);
 
         Fop fop;
-
+        FopFactory effFactory;
         try {
-            Document testDoc = env.loadTestCase(testFile);
-            FopFactory effFactory = env.getFopFactory(testDoc);
+            Document testDoc = testAssistant.loadTestCase(testFile);
+            effFactory = testAssistant.getFopFactory(testDoc);
 
             //Setup Transformer to convert the testcase XML to XSL-FO
-            Transformer transformer = env.getTestcase2FOStylesheet().newTransformer();
+            Transformer transformer = testAssistant.getTestcase2FOStylesheet().newTransformer();
             Source src = new DOMSource(testDoc);
 
             //Setup Transformer to convert the area tree to a DOM
             TransformerHandler athandler;
-            athandler = env.getTransformerFactory().newTransformerHandler();
+            athandler = testAssistant.getTransformerFactory().newTransformerHandler();
             athandler.setResult(domres);
 
             //Setup FOP for area tree rendering
@@ -134,91 +133,96 @@ public class LayoutEngineTester {
 
         Document doc = (Document)domres.getNode();
         if (this.areaTreeBackupDir != null) {
-            env.saveDOM(doc,
+            testAssistant.saveDOM(doc,
                     new File(this.areaTreeBackupDir, testFile.getName() + ".at.xml"));
         }
         FormattingResults results = fop.getResults();
         LayoutResult result = new LayoutResult(doc, elCollector, results);
-        checkAll(testFile, result);
+        checkAll(effFactory, testFile, result);
     }
 
     /**
-     * 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 createATCheck(Element el) {
-        String name = el.getTagName();
-        Class clazz = (Class)AT_CHECK_CLASSES.get(name);
-        if (clazz != null) {
-            try {
-                Constructor c = clazz.getDeclaredConstructor(new Class[] {Node.class});
-                LayoutEngineCheck instance = (LayoutEngineCheck)c.newInstance(new Object[] {el});
-                return instance;
-            } catch (Exception e) {
-                throw new RuntimeException("Error while instantiating check '"
-                        + name + "': " + e.getMessage());
-            }
-        } else {
-            throw new IllegalArgumentException("No check class found: " + name);
-        }
-    }
-
-
-    /**
      * 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 = env.getTestcase2ChecksStylesheet().newTransformer();
-        Source src = new StreamSource(testFile);
-        DOMResult res = new DOMResult();
-        transformer.transform(src, res);
-
-        Document doc = (Document)res.getNode();
-        Element root = doc.getDocumentElement();
+    protected void checkAll(FopFactory fopFactory, File testFile, LayoutResult result)
+            throws TransformerException {
+        Element testRoot = testAssistant.getTestRoot(testFile);
 
         NodeList nodes;
         //AT tests only when checks are available
-        nodes = root.getElementsByTagName("at-checks");
+        nodes = testRoot.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");
+        nodes = testRoot.getElementsByTagName("if-checks");
         if (nodes.getLength() > 0) {
             Element ifChecks = (Element)nodes.item(0);
-            ifTester.doIFChecks(testFile, ifChecks, result.getAreaTree());
+            Document ifDocument = createIF(fopFactory, testFile, result.getAreaTree());
+            ifTester.doIFChecks(testFile.getName(), ifChecks, ifDocument);
         }
     }
 
-    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(createATCheck((Element)node));
-            }
-        }
+    private Document createIF(FopFactory fopFactory, File testFile, Document areaTreeXML)
+            throws TransformerException {
+        try {
+            FOUserAgent ua = fopFactory.newFOUserAgent();
+            ua.setBaseURL(testFile.getParentFile().toURI().toURL().toExternalForm());
+            ua.getEventBroadcaster().addEventListener(
+                    new ConsoleEventListenerForTests(testFile.getName(), EventSeverity.WARN));
 
-        if (checks.size() == 0) {
-            throw new RuntimeException("No checks are available!");
-        }
+            IFRenderer ifRenderer = new IFRenderer();
+            ifRenderer.setUserAgent(ua);
 
-        //Run the actual tests now that we know that the checks themselves are ok
-        doATChecks(checks, result);
+            IFSerializer serializer = new IFSerializer();
+            serializer.setContext(new IFContext(ua));
+            DOMResult result = new DOMResult();
+            serializer.setResult(result);
+            ifRenderer.setDocumentHandler(serializer);
+
+            ua.setRendererOverride(ifRenderer);
+            FontInfo fontInfo = new FontInfo();
+            //Construct the AreaTreeModel that will received the individual pages
+            final AreaTreeModel treeModel = new RenderPagesModel(ua,
+                    null, fontInfo, null);
+
+            //Iterate over all intermediate files
+            AreaTreeParser parser = new AreaTreeParser();
+            ContentHandler handler = parser.getContentHandler(treeModel, ua);
+
+            DelegatingContentHandler proxy = new DelegatingContentHandler() {
+
+                public void endDocument() throws SAXException {
+                    super.endDocument();
+                    //Signal the end of the processing.
+                    //The renderer can finalize the target document.
+                    treeModel.endDocument();
+                }
+
+            };
+            proxy.setDelegateContentHandler(handler);
+
+            Transformer transformer = tfactory.newTransformer();
+            transformer.transform(new DOMSource(areaTreeXML), new SAXResult(proxy));
+
+            return (Document)result.getNode();
+        } catch (Exception e) {
+            throw new TransformerException(
+                    "Error while generating intermediate format file: " + e.getMessage(), e);
+        }
     }
 
-    private void doATChecks(List checks, LayoutResult result) {
-        Iterator i = checks.iterator();
-        while (i.hasNext()) {
-            LayoutEngineCheck check = (LayoutEngineCheck)i.next();
+    private void doATChecks(Element checksRoot, LayoutResult result) {
+        List<LayoutEngineCheck> checks = layoutEngineChecksFactory.createCheckList(checksRoot);
+        if (checks.size() == 0) {
+            throw new RuntimeException("No available area tree check");
+        }
+        for (LayoutEngineCheck check : checks) {
             check.check(result);
         }
     }

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/ResultCheck.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/ResultCheck.java?rev=1094690&r1=1094689&r2=1094690&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/ResultCheck.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/layoutengine/ResultCheck.java Mon Apr 18 18:36:05 2011
@@ -19,9 +19,10 @@
 
 package org.apache.fop.layoutengine;
 
-import org.apache.fop.apps.FormattingResults;
 import org.w3c.dom.Node;
 
+import org.apache.fop.apps.FormattingResults;
+
 /**
  * Simple check that requires a result property to evaluate to the expected value
  */
@@ -31,16 +32,6 @@ public class ResultCheck implements Layo
     private String property;
 
     /**
-     * Creates a new instance
-     * @param expected expected value
-     * @param property property of which the value needs to be evaluated
-     */
-    public ResultCheck(String expected, String property) {
-        this.expected = expected;
-        this.property = property;
-    }
-
-    /**
      * Creates a new instance from a DOM node.
      * @param node DOM node that defines this check
      */

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=1094690&r1=1094689&r2=1094690&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 Mon Apr 18 18:36:05 2011
@@ -42,14 +42,6 @@ public class TrueCheck implements Layout
     private PrefixResolver prefixResolver;
 
     /**
-     * Creates a new instance
-     * @param xpath XPath statement that needs to be evaluated
-     */
-    public TrueCheck(String xpath) {
-        this.xpath = xpath;
-    }
-
-    /**
      * Creates a new instance from a DOM node.
      * @param node DOM node that defines this check
      */



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