You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2013/06/06 23:35:01 UTC
git commit: [flex-sdk] [refs/heads/develop] - Try to use XML diffs to
be tolerant of small floating point differences
Updated Branches:
refs/heads/develop 97247b116 -> 75b252bf2
Try to use XML diffs to be tolerant of small floating point differences
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/75b252bf
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/75b252bf
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/75b252bf
Branch: refs/heads/develop
Commit: 75b252bf29404ef83b0ad93e2a702027bc933a26
Parents: 97247b1
Author: Alex Harui <ah...@apache.org>
Authored: Thu Jun 6 14:32:20 2013 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Jun 6 14:34:37 2013 -0700
----------------------------------------------------------------------
mustella/as3/src/mustella/CompareBitmap.as | 145 ++++++++++++++++++++++-
1 files changed, 144 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/75b252bf/mustella/as3/src/mustella/CompareBitmap.as
----------------------------------------------------------------------
diff --git a/mustella/as3/src/mustella/CompareBitmap.as b/mustella/as3/src/mustella/CompareBitmap.as
index b4a6f62..27849b5 100644
--- a/mustella/as3/src/mustella/CompareBitmap.as
+++ b/mustella/as3/src/mustella/CompareBitmap.as
@@ -508,7 +508,7 @@ public class CompareBitmap extends Assert
var t:String = xmlreader.data;
s = s.replace(/\r/g, "");
t = t.replace(/\r/g, "");
- if (s !== t && differ(s, t))
+ if (s !== t && xmldiffer(s, t))
{
testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");
@@ -1376,6 +1376,149 @@ public class CompareBitmap extends Assert
return true;
return false;
}
+
+ private function xmldiffer(s:String, t:String):Boolean
+ {
+ var retval:Boolean = false;
+
+ var xmls:XML = XML(s);
+ var xmlt:XML = XML(t);
+ retval = compareNodes(xmls, xmlt);
+ if (retval)
+ differ(s, t);
+ return retval;
+ }
+
+ private static var xywidthheight:Object = { x: 1, y: 1, width: 1, height: 1};
+
+ private function compareNodes(s:XML, t:XML):Boolean
+ {
+ var retval:Boolean = false;
+ var q:String;
+ var i:int;
+ var n:int;
+ var m:int;
+ var st:String;
+ var tt:String;
+ var sv:String;
+ var tv:String;
+
+ // compare tag names
+ var sn:String = s.name().toString();
+ var tn:String = t.name().toString();
+ var sparts:Array = sn.split(".");
+ var tparts:Array = tn.split(".");
+ n = sparts.length;
+ for (i = 0; i < n; i++)
+ sparts[i] = trimTag(sparts[i]);
+ n = tparts.length;
+ for (i = 0; i < n; i++)
+ tparts[i] = trimTag(tparts[i]);
+ sn = sparts.join(".");
+ tn = tparts.join(".");
+ if (tn != sn)
+ {
+ if (sn == "NullChild" || sn == "flash.display.StaticText" ||
+ tn == "NullChild" || tn == "flash.display.StaticText")
+ {
+ // inconsistent behavior around StaticText
+ }
+ else
+ {
+ trace("tag name mismatch: cur=", sn, "xml=", tn);
+ retval = true;
+ }
+ }
+
+ var sa:XMLList = s.attributes();
+ var ta:XMLList = t.attributes();
+ n = sa.length();
+ m = ta.length();
+ if (n != m)
+ {
+ trace(sn, "different number of attributes: cur=", n, "xml=", m);
+ retval = true;
+ }
+ else
+ {
+ for (i = 0; i < n; i++)
+ {
+ st = sa[i].name().toString();
+ tt = ta[i].name().toString();
+ if (st != tt)
+ {
+ trace(sn, "attribute name mismatch: cur=", st, "xml=", tt);
+ retval = true;
+ }
+ else
+ {
+ sv = s['@' + st].toString();
+ tv = s['@' + tt].toString();
+ if (sv != tv)
+ {
+ if (xywidthheight[st] == 1)
+ {
+ var sf:Number = Number(sv);
+ var tf:Number = Number(tv);
+ if (Math.abs(tf - sf) > 0.1)
+ {
+ trace(sn + '@' + st, "attribute value mismatch: cur=", sv, "xml=", tv);
+ retval = true;
+ }
+ }
+ else if (st == "matrix")
+ {
+ // strip parens
+ sv = sv.substring(1, sv.length - 2);
+ tv = tv.substring(1, tv.length - 2);
+ sparts = sv.split(",");
+ tparts = tv.split(",");
+ n = sparts.length;
+ for (i = 0; i < n; i++)
+ {
+ sv = sparts[i];
+ tv = tparts[i];
+ sv = sv.split("=")[1];
+ tv = tv.split("=")[1];
+ sf = Number(sv);
+ tf = Number(tv);
+ if (Math.abs(tf - sf) > 0.1)
+ {
+ trace(sn + '@' + st, "matrix value mismatch: cur=", sv, "xml=", tv);
+ retval = true;
+ }
+ }
+ }
+ else
+ {
+ trace(sn + '@' + st, "attribute value mismatch: cur=", sv, "xml=", tv);
+ retval = true;
+ }
+ }
+ }
+ }
+ }
+
+ var sl:XMLList = s.children();
+ var tl:XMLList = t.children();
+ n = sl.length();
+ m = tl.length();
+ if (n != m)
+ {
+ trace(sn, "different number of children: cur=", n, "xml=", m);
+ retval = true;
+ }
+ else
+ {
+ for (i = 0; i < n; i++)
+ {
+ if (compareNodes(sl[i], tl[i]))
+ retval = true;
+ }
+ }
+ return retval;
+ }
+
}
}