]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Set a PrefixResolver for the "true" check, too, not only for "eval".
authorJeremias Maerki <jeremias@apache.org>
Thu, 8 Jun 2006 12:36:23 +0000 (12:36 +0000)
committerJeremias Maerki <jeremias@apache.org>
Thu, 8 Jun 2006 12:36:23 +0000 (12:36 +0000)
Added optional "tolerance" value for number comparisons using the "eval" check. Simplifies certain checks.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@412732 13f79535-47bb-0310-9956-ffa450edef68

test/java/org/apache/fop/layoutengine/EvalCheck.java
test/java/org/apache/fop/layoutengine/TrueCheck.java

index 0b3d98afbfd26987e809842bb37c1a5dc28dfd06..497b324a9d8d08edbea9df727abd0c8f651182b5 100644 (file)
@@ -33,6 +33,7 @@ public class EvalCheck implements LayoutEngineCheck {
 
     private String expected;
     private String xpath;
+    private double tolerance;
     private PrefixResolver prefixResolver;
     
     /**
@@ -52,6 +53,10 @@ public class EvalCheck implements LayoutEngineCheck {
     public EvalCheck(Node node) {
         this.expected = node.getAttributes().getNamedItem("expected").getNodeValue();
         this.xpath = node.getAttributes().getNamedItem("xpath").getNodeValue();
+        Node nd = node.getAttributes().getNamedItem("tolerance");
+        if (nd != null) {
+            this.tolerance = Double.parseDouble(nd.getNodeValue());
+        }
         this.prefixResolver = new PrefixResolverDefault(node);
     }
     
@@ -64,12 +69,21 @@ public class EvalCheck implements LayoutEngineCheck {
             throw new RuntimeException("XPath evaluation failed: " + e.getMessage());
         }
         String actual = res.str(); //Second str() seems to fail. D'oh!
-        if (!expected.equals(actual)) {
-            throw new RuntimeException(
-                    "Expected XPath expression to evaluate to '" + expected + "', but got '" 
-                    + actual + "' (" + this + ")");
+        if (tolerance != 0) {
+            double v1 = Double.parseDouble(expected);
+            double v2 = Double.parseDouble(actual);
+            if (Math.abs(v1 - v2) > tolerance) {
+                throw new RuntimeException(
+                        "Expected XPath expression to evaluate to '" + expected + "', but got '" 
+                        + actual + "' (" + this + ", outside tolerance)");
+            }
+        } else {
+            if (!expected.equals(actual)) {
+                throw new RuntimeException(
+                        "Expected XPath expression to evaluate to '" + expected + "', but got '" 
+                        + actual + "' (" + this + ")");
+            }
         }
-
     }
 
     /** @see java.lang.Object#toString() */
@@ -77,12 +91,4 @@ public class EvalCheck implements LayoutEngineCheck {
         return "XPath: " + xpath;
     }
 
-    private class MyPrefixResolver extends PrefixResolverDefault {
-        
-        public MyPrefixResolver(Node xpathExpressionContext) {
-            super(xpathExpressionContext);
-        }
-        
-    }
-    
 }
index eb2c3a40b849f9e64e8fedb9a36712e4c1e4d195..afb712c08f109d890a165fbeb7a1f224056d09ec 100644 (file)
@@ -20,6 +20,8 @@ package org.apache.fop.layoutengine;
 
 import javax.xml.transform.TransformerException;
 
+import org.apache.xml.utils.PrefixResolver;
+import org.apache.xml.utils.PrefixResolverDefault;
 import org.apache.xpath.XPathAPI;
 import org.apache.xpath.objects.XBoolean;
 import org.apache.xpath.objects.XObject;
@@ -32,6 +34,7 @@ public class TrueCheck implements LayoutEngineCheck {
 
     private String xpath;
     private String failureMessage;
+    private PrefixResolver prefixResolver;
     
     /**
      * Creates a new instance
@@ -51,13 +54,14 @@ public class TrueCheck implements LayoutEngineCheck {
         if (nd != null) {
             this.failureMessage = nd.getNodeValue();
         }
+        this.prefixResolver = new PrefixResolverDefault(node);
     }
     
     /** @see org.apache.fop.layoutengine.LayoutEngineCheck */
     public void check(LayoutResult result) {
         XObject res;
         try {
-            res = XPathAPI.eval(result.getAreaTree(), xpath);
+            res = XPathAPI.eval(result.getAreaTree(), xpath, prefixResolver);
         } catch (TransformerException e) {
             throw new RuntimeException("XPath evaluation failed: " + e.getMessage());
         }