[flexcoders] Testing for XML equality
Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); }
Re: [flexcoders] Testing for XML equality
Davis Ford wrote: Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); } xml1 and xml2 are references to objects. Because they are different objects they are not equal - the references are different.
Re: [flexcoders] Testing for XML equality
Hi Paul, I don't believe this is correct for ActionScript3. Strict equality is the === operator which compares object instances. == should test for equality. If you change the test to this... [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a b/b c/c /a; xml1.normalize(); xml2.normalize(); Assert.assertTrue(xml1 == xml2); } it passes. XML/e4x is supposed to support this out of the box, and it does -- to a degree. Although, semantically and syntactically, xml1 and xml2 from the 1st test are equivalent, e4x is not thinking so, and I think that is broken. Searching for a workaround has popped up very little, which is why I was hoping someone on the list might have a good answer for why this is, and how I can test XML equivalence without caring about element ordering. Regards, Davis On Wed, Jan 6, 2010 at 7:03 PM, Paul Andrews p...@ipauland.com wrote: Davis Ford wrote: Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); } xml1 and xml2 are references to objects. Because they are different objects they are not equal - the references are different. -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977
Re: [flexcoders] Testing for XML equality
eh..that wasn't supposed to be in there -- copy/paste hackery... xml1.normalize(); xml2.normalize();
Re: [flexcoders] Testing for XML equality
Davis Ford wrote: Hi Paul, I don't believe this is correct for ActionScript3. Strict equality is the === operator which compares object instances. == should test for equality. I tried (in Flash).. var objA:Object = {a:1}; var objB:Object = {a:1}; trace(objA==objB); // false var xmlA:XML = /x; var xmlB:XML = /x; trace(xmlA==xmlB); // true trace(xmlA===xmlB); // false and indeed you are right. I didn't know that XML was treated differently from vanilla object in comparisons. Thanks. Paul If you change the test to this... [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a b/b c/c /a; xml1.normalize(); xml2.normalize(); Assert.assertTrue(xml1 == xml2); } it passes. XML/e4x is supposed to support this out of the box, and it does -- to a degree. Although, semantically and syntactically, xml1 and xml2 from the 1st test are equivalent, e4x is not thinking so, and I think that is broken. Searching for a workaround has popped up very little, which is why I was hoping someone on the list might have a good answer for why this is, and how I can test XML equivalence without caring about element ordering. Regards, Davis On Wed, Jan 6, 2010 at 7:03 PM, Paul Andrews p...@ipauland.com mailto:p...@ipauland.com wrote: Davis Ford wrote: Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); } xml1 and xml2 are references to objects. Because they are different objects they are not equal - the references are different. -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977 -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Alternative FAQ location: https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847 Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups Links * To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ * Your email settings: Individual Email | Traditional * To change settings online go to: http://groups.yahoo.com/group/flexcoders/join (Yahoo! ID required) * To change settings via email: flexcoders-dig...@yahoogroups.com flexcoders-fullfeatu...@yahoogroups.com * To unsubscribe from this group, send an email to: flexcoders-unsubscr...@yahoogroups.com * Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/
Re: [flexcoders] Testing for XML equality
I found a solution: import mx.utils.ObjectUtil; Assert.assertTrue(ObjectUtil.compare(xml1, xml2) == 0); That does the trick. Regards, Davis On Wed, Jan 6, 2010 at 8:20 PM, Paul Andrews p...@ipauland.com wrote: Davis Ford wrote: Hi Paul, I don't believe this is correct for ActionScript3. Strict equality is the === operator which compares object instances. == should test for equality. I tried (in Flash).. var objA:Object = {a:1}; var objB:Object = {a:1}; trace(objA==objB); // false var xmlA:XML = /x; var xmlB:XML = /x; trace(xmlA==xmlB); // true trace(xmlA===xmlB); // false and indeed you are right. I didn't know that XML was treated differently from vanilla object in comparisons. Thanks. Paul If you change the test to this... [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a b/b c/c /a; xml1.normalize(); xml2.normalize(); Assert.assertTrue(xml1 == xml2); } it passes. XML/e4x is supposed to support this out of the box, and it does -- to a degree. Although, semantically and syntactically, xml1 and xml2 from the 1st test are equivalent, e4x is not thinking so, and I think that is broken. Searching for a workaround has popped up very little, which is why I was hoping someone on the list might have a good answer for why this is, and how I can test XML equivalence without caring about element ordering. Regards, Davis On Wed, Jan 6, 2010 at 7:03 PM, Paul Andrews p...@ipauland.com mailto:p...@ipauland.com wrote: Davis Ford wrote: Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); } xml1 and xml2 are references to objects. Because they are different objects they are not equal - the references are different. -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977 -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Alternative FAQ location: https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847 Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups Links -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977
RE: [flexcoders] Testing for XML equality
This is likely to be rather slow, but if you really need to do a recursive comparison of XML objects, it's probably reasonable. I don't know of any built-in operator or method that does deep equality. Gordon Smith Adobe Flex SDK Team From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of Davis Ford Sent: Wednesday, January 06, 2010 5:22 PM To: flexcoders@yahoogroups.com Subject: Re: [flexcoders] Testing for XML equality I found a solution: import mx.utils.ObjectUtil; Assert.assertTrue(ObjectUtil.compare(xml1, xml2) == 0); That does the trick. Regards, Davis On Wed, Jan 6, 2010 at 8:20 PM, Paul Andrews p...@ipauland.commailto:p...@ipauland.com wrote: Davis Ford wrote: Hi Paul, I don't believe this is correct for ActionScript3. Strict equality is the === operator which compares object instances. == should test for equality. I tried (in Flash).. var objA:Object = {a:1}; var objB:Object = {a:1}; trace(objA==objB); // false var xmlA:XML = /x; var xmlB:XML = /x; trace(xmlA==xmlB); // true trace(xmlA===xmlB); // false and indeed you are right. I didn't know that XML was treated differently from vanilla object in comparisons. Thanks. Paul If you change the test to this... [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a b/b c/c /a; xml1.normalize(); xml2.normalize(); Assert.assertTrue(xml1 == xml2); } it passes. XML/e4x is supposed to support this out of the box, and it does -- to a degree. Although, semantically and syntactically, xml1 and xml2 from the 1st test are equivalent, e4x is not thinking so, and I think that is broken. Searching for a workaround has popped up very little, which is why I was hoping someone on the list might have a good answer for why this is, and how I can test XML equivalence without caring about element ordering. Regards, Davis On Wed, Jan 6, 2010 at 7:03 PM, Paul Andrews p...@ipauland.commailto:p...@ipauland.com mailto:p...@ipauland.commailto:p...@ipauland.com wrote: Davis Ford wrote: Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); } xml1 and xml2 are references to objects. Because they are different objects they are not equal - the references are different. -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977 -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Alternative FAQ location: https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847 Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups Links Individual Email | Traditional -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977
Re: [flexcoders] Testing for XML equality
Hi Gordon -- thx for the response -- my reason for wanting this is unit testing only...works fast enough for what I need. I don't do this in any production code. Best regards, Davis On Wed, Jan 6, 2010 at 10:33 PM, Gordon Smith gosm...@adobe.com wrote: This is likely to be rather slow, but if you really need to do a recursive comparison of XML objects, it's probably reasonable. I don't know of any built-in operator or method that does deep equality. Gordon Smith Adobe Flex SDK Team *From:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On Behalf Of *Davis Ford *Sent:* Wednesday, January 06, 2010 5:22 PM *To:* flexcoders@yahoogroups.com *Subject:* Re: [flexcoders] Testing for XML equality I found a solution: import mx.utils.ObjectUtil; Assert.assertTrue(ObjectUtil.compare(xml1, xml2) == 0); That does the trick. Regards, Davis On Wed, Jan 6, 2010 at 8:20 PM, Paul Andrews p...@ipauland.com wrote: Davis Ford wrote: Hi Paul, I don't believe this is correct for ActionScript3. Strict equality is the === operator which compares object instances. == should test for equality. I tried (in Flash).. var objA:Object = {a:1}; var objB:Object = {a:1}; trace(objA==objB); // false var xmlA:XML = /x; var xmlB:XML = /x; trace(xmlA==xmlB); // true trace(xmlA===xmlB); // false and indeed you are right. I didn't know that XML was treated differently from vanilla object in comparisons. Thanks. Paul If you change the test to this... [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a b/b c/c /a; xml1.normalize(); xml2.normalize(); Assert.assertTrue(xml1 == xml2); } it passes. XML/e4x is supposed to support this out of the box, and it does -- to a degree. Although, semantically and syntactically, xml1 and xml2 from the 1st test are equivalent, e4x is not thinking so, and I think that is broken. Searching for a workaround has popped up very little, which is why I was hoping someone on the list might have a good answer for why this is, and how I can test XML equivalence without caring about element ordering. Regards, Davis On Wed, Jan 6, 2010 at 7:03 PM, Paul Andrews p...@ipauland.com mailto:p...@ipauland.com wrote: Davis Ford wrote: Why does this test fail? Is there any way to test for equality that ignores the ordering of elements -- which shouldn't technically matter? [Test] public function testXmlEquality():void { var xml1:XML = a b/b c/c /a; var xml2:XML = a c/c b/b /a; Assert.assertTrue(xml1 == xml2); } xml1 and xml2 are references to objects. Because they are different objects they are not equal - the references are different. -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977 -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Alternative FAQ location: https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847 Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups Links http://groups.yahoo.com/group/flexcoders/ -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977 -- Zeno Consulting, Inc. home: http://www.zenoconsulting.biz blog: http://zenoconsulting.wikidot.com p: 248.894.4922 f: 313.884.2977