Author: vhennebert
Date: Thu Oct 31 19:57:40 2013
New Revision: 1537605

URL: http://svn.apache.org/r1537605
Log:
Added possibility to check for events in layout tests

Modified:
    
xmlgraphics/fop/branches/Temp_InlineContainer/test/java/org/apache/fop/layoutengine/LayoutEngineTestCase.java
    
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_bpd.xml
    
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml
    
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/testcase2checks.xsl

Modified: 
xmlgraphics/fop/branches/Temp_InlineContainer/test/java/org/apache/fop/layoutengine/LayoutEngineTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_InlineContainer/test/java/org/apache/fop/layoutengine/LayoutEngineTestCase.java?rev=1537605&r1=1537604&r2=1537605&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_InlineContainer/test/java/org/apache/fop/layoutengine/LayoutEngineTestCase.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_InlineContainer/test/java/org/apache/fop/layoutengine/LayoutEngineTestCase.java
 Thu Oct 31 19:57:40 2013
@@ -21,8 +21,12 @@ package org.apache.fop.layoutengine;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Source;
@@ -41,10 +45,16 @@ import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.apache.fop.DebugHelper;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
@@ -53,6 +63,8 @@ import org.apache.fop.apps.FormattingRes
 import org.apache.fop.area.AreaTreeModel;
 import org.apache.fop.area.AreaTreeParser;
 import org.apache.fop.area.RenderPagesModel;
+import org.apache.fop.events.Event;
+import org.apache.fop.events.EventListener;
 import org.apache.fop.events.model.EventSeverity;
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.intermediate.IFTester;
@@ -131,6 +143,8 @@ public class LayoutEngineTestCase {
 
         Fop fop;
         FopFactory effFactory;
+        EventsChecker eventsChecker = new EventsChecker(
+                new ConsoleEventListenerForTests(testFile.getName(), 
EventSeverity.WARN));
         try {
             Document testDoc = testAssistant.loadTestCase(testFile);
             effFactory = testAssistant.getFopFactory(testDoc);
@@ -146,8 +160,7 @@ public class LayoutEngineTestCase {
 
             //Setup FOP for area tree rendering
             FOUserAgent ua = effFactory.newFOUserAgent();
-            ua.getEventBroadcaster().addEventListener(
-                    new ConsoleEventListenerForTests(testFile.getName(), 
EventSeverity.WARN));
+            ua.getEventBroadcaster().addEventListener(eventsChecker);
 
             XMLRenderer atrenderer = new XMLRenderer(ua);
             atrenderer.setContentHandler(athandler);
@@ -167,7 +180,60 @@ public class LayoutEngineTestCase {
         }
         FormattingResults results = fop.getResults();
         LayoutResult result = new LayoutResult(doc, elCollector, results);
-        checkAll(effFactory, testFile, result);
+        checkAll(effFactory, testFile, result, eventsChecker);
+    }
+
+    private static class EventsChecker implements EventListener {
+
+        private final List<Event> events = new ArrayList<Event>();
+
+        private final EventListener defaultListener;
+
+        /**
+         * @param fallbackListener the listener to which this class will pass 
through
+         * events that are not being checked
+         */
+        public EventsChecker(EventListener fallbackListener) {
+            this.defaultListener = fallbackListener;
+        }
+
+        public void processEvent(Event event) {
+            events.add(event);
+        }
+
+        public void checkEvent(String expectedKey, Map<String, String> 
expectedParams) {
+            boolean eventFound = false;
+            for (Iterator<Event> iter = events.iterator(); !eventFound && 
iter.hasNext();) {
+                Event event = iter.next();
+                if (event.getEventKey().equals(expectedKey)) {
+                    eventFound = true;
+                    iter.remove();
+                    checkParameters(event, expectedParams);
+                }
+            }
+            if (!eventFound) {
+                fail("Event did not occur but was expected to: " + expectedKey 
+ expectedParams);
+            }
+        }
+
+        private void checkParameters(Event event, Map<String, String> 
expectedParams) {
+            Map<String, Object> actualParams = event.getParams();
+            for (Map.Entry<String, String> expectedParam : 
expectedParams.entrySet()) {
+                assertTrue("Event \"" + event.getEventKey()
+                        + "\" is missing parameter \"" + 
expectedParam.getKey() + '"',
+                        actualParams.containsKey(expectedParam.getKey()));
+                assertEquals("Event \"" + event.getEventKey()
+                        + "\" has wrong value for parameter \"" + 
expectedParam.getKey() + "\";",
+                        actualParams.get(expectedParam.getKey()).toString(),
+                        expectedParam.getValue());
+            }
+        }
+
+        public void emitUncheckedEvents() {
+            for (Event event : events) {
+                defaultListener.processEvent(event);
+            }
+        }
     }
 
     /**
@@ -177,8 +243,8 @@ public class LayoutEngineTestCase {
      * @param result The layout results
      * @throws TransformerException if a problem occurs in XSLT/JAXP
      */
-    protected void checkAll(FopFactory fopFactory, File testFile, LayoutResult 
result)
-            throws TransformerException {
+    protected void checkAll(FopFactory fopFactory, File testFile, LayoutResult 
result,
+            EventsChecker eventsChecker) throws TransformerException {
         Element testRoot = testAssistant.getTestRoot(testFile);
 
         NodeList nodes;
@@ -196,6 +262,13 @@ public class LayoutEngineTestCase {
             Document ifDocument = createIF(fopFactory, testFile, 
result.getAreaTree());
             ifTester.doIFChecks(testFile.getName(), ifChecks, ifDocument);
         }
+
+        nodes = testRoot.getElementsByTagName("event-checks");
+        if (nodes.getLength() > 0) {
+            Element eventChecks = (Element) nodes.item(0);
+            doEventChecks(eventChecks, eventsChecker);
+        }
+        eventsChecker.emitUncheckedEvents();
     }
 
     private Document createIF(FopFactory fopFactory, File testFile, Document 
areaTreeXML)
@@ -254,4 +327,28 @@ public class LayoutEngineTestCase {
         }
     }
 
+    private void doEventChecks(Element eventChecks, EventsChecker 
eventsChecker) {
+        NodeList events = eventChecks.getElementsByTagName("event");
+        for (int i = 0; i < events.getLength(); i++) {
+            Element event = (Element) events.item(i);
+            NamedNodeMap attributes = event.getAttributes();
+            Map<String, String> params = new HashMap<String, String>();
+            String key = null;
+            for (int j = 0; j < attributes.getLength(); j++) {
+                Node attribute = attributes.item(j);
+                String name = attribute.getNodeName();
+                String value = attribute.getNodeValue();
+                if ("key".equals(name)) {
+                    key = value;
+                } else {
+                    params.put(name, value);
+                }
+            }
+            if (key == null) {
+                throw new RuntimeException("An event element must have a 
\"key\" attribute");
+            }
+            eventsChecker.checkEvent(key, params);
+        }
+    }
+
 }

Modified: 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_bpd.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_bpd.xml?rev=1537605&r1=1537604&r2=1537605&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_bpd.xml
 (original)
+++ 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_bpd.xml
 Thu Oct 31 19:57:40 2013
@@ -65,4 +65,8 @@
 
     <eval expected="50000" xpath="//pageSequence[3]//viewport/@bpd"/>
   </checks>
+
+  <event-checks>
+    <event key="viewportBPDOverflow" elementName="fo:inline-container" 
amount="15000" clip="true"/>
+  </event-checks>
 </testcase>

Modified: 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml?rev=1537605&r1=1537604&r2=1537605&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml
 (original)
+++ 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml
 Thu Oct 31 19:57:40 2013
@@ -58,4 +58,9 @@
     <eval expected="3" 
xpath="count(//pageSequence[2]//flow/block/block/block/lineArea)"/>
     <eval expected="100000"  
xpath="//pageSequence[2]//flow/block/block/block/lineArea[2]/viewport/@ipd"/>
   </checks>
+
+  <event-checks>
+    <event key="inlineContainerAutoIPDNotSupported" fallback="300.0"/>
+    <event key="inlineContainerAutoIPDNotSupported" fallback="100.0"/>
+  </event-checks>
 </testcase>

Modified: 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/testcase2checks.xsl
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/testcase2checks.xsl?rev=1537605&r1=1537604&r2=1537605&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/testcase2checks.xsl
 (original)
+++ 
xmlgraphics/fop/branches/Temp_InlineContainer/test/layoutengine/testcase2checks.xsl
 Thu Oct 31 19:57:40 2013
@@ -25,6 +25,7 @@
   <checks>
     <xsl:apply-templates select="checks"/>
     <xsl:apply-templates select="if-checks"/>
+    <xsl:apply-templates select="event-checks"/>
   </checks>
 </xsl:template>
 
@@ -40,7 +41,13 @@
     <xsl:copy-of select="*"/>
   </if-checks>
 </xsl:template>
-  
+
+<xsl:template match="event-checks">
+  <event-checks>
+    <xsl:copy-of select="*"/>
+  </event-checks>
+</xsl:template>
+
 <xsl:template match="text()" />
 
 </xsl:stylesheet>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to