This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push: new 9ab218a Small tweaks in XML/XMLList. Many new tests added (requires recent compiler updates to pass) 9ab218a is described below commit 9ab218afeb1f0c55e63c8da71286031b27d0c532 Author: greg-dove <greg.d...@gmail.com> AuthorDate: Mon Jan 24 14:33:51 2022 +1300 Small tweaks in XML/XMLList. Many new tests added (requires recent compiler updates to pass) --- frameworks/projects/XML/src/main/royale/XML.as | 2 +- frameworks/projects/XML/src/main/royale/XMLList.as | 20 ++- .../flexUnitTests/xml/XMLListTesterGeneralTest.as | 77 +++++++++++- .../test/royale/flexUnitTests/xml/XMLQNameTest.as | 3 + .../flexUnitTests/xml/XMLTesterGeneralTest.as | 137 +++++++++++++++++++++ 5 files changed, 233 insertions(+), 6 deletions(-) diff --git a/frameworks/projects/XML/src/main/royale/XML.as b/frameworks/projects/XML/src/main/royale/XML.as index dc636bf..a2ed9bf 100644 --- a/frameworks/projects/XML/src/main/royale/XML.as +++ b/frameworks/projects/XML/src/main/royale/XML.as @@ -1455,7 +1455,7 @@ package var i:int; if (xml == this) return true; - if(!(xml is XML)) + if(!(xml instanceof XML)) return false; var typedXML:XML = xml as XML; if(typedXML.getNodeRef() != getNodeRef()) diff --git a/frameworks/projects/XML/src/main/royale/XMLList.as b/frameworks/projects/XML/src/main/royale/XMLList.as index 305492c..937c4d8 100644 --- a/frameworks/projects/XML/src/main/royale/XMLList.as +++ b/frameworks/projects/XML/src/main/royale/XMLList.as @@ -583,10 +583,28 @@ package return retVal; } + /** + * + * @param list + * @return + * + * @royaleignorecoercion XMLList + * @royaleignorecoercion XML + */ public function equals(list:*):Boolean { + if (list === undefined && _xmlArray.length == 0) return true; + if (list instanceof XMLList) { + var l:uint = _xmlArray.length; + if ((list as XMLList)._xmlArray.length != l) return false; + + for (var i:uint=0;i<l;i++) { + if (!((_xmlArray[i] as XML).equals((list as XMLList)._xmlArray[i] as XML))) return false; + } + return true; + } if(isSingle()) - return _xmlArray[0].equals(list); + return (_xmlArray[0] as XML).equals(list); /* Overview The XMLList type adds the internal [[Equals]] method to the internal properties defined by the Object type. diff --git a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLListTesterGeneralTest.as b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLListTesterGeneralTest.as index bdeebfd..87966da 100644 --- a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLListTesterGeneralTest.as +++ b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLListTesterGeneralTest.as @@ -306,8 +306,8 @@ package flexUnitTests.xml var combined:XMLList = childList+itemIds; - assertEquals(combined.toString(), - '<child name="1">\n' + + //IE11 can have attribute order inverted + var firstPartA:String ='<child name="1">\n' + ' <item id="item1" category="unknown"/>\n' + '</child>\n' + '<child name="2">\n' + @@ -318,11 +318,80 @@ package flexUnitTests.xml '</child>\n' + '<child name="4">\n' + ' <item id="item4" category="unknown"/>\n' + + '</child>\n' + var firstPartB:String ='<child name="1">\n' + + ' <item category="unknown" id="item1"/>\n' + '</child>\n' + - 'item1\n' + + '<child name="2">\n' + + ' <item category="unknown" id="item2"/>\n' + + '</child>\n' + + '<child name="3">\n' + + ' <item category="unknown" id="item3"/>\n' + + '</child>\n' + + '<child name="4">\n' + + ' <item category="unknown" id="item4"/>\n' + + '</child>\n'; + + var lastPart:String = 'item1\n' + 'item2\n' + 'item3\n' + - 'item4', 'unexpected list concatenation result'); + 'item4'; + + var combinedString:String = combined.toString(); + var mustBeExpected:Boolean = combinedString == (firstPartA + lastPart) || combinedString == (firstPartB + lastPart); + + assertTrue(mustBeExpected, 'unexpected list concatenation result'); + + var test:Object = <xml>test</xml>; + var xmlInst:XML = <xml><child selected="false"/><child selected="true"/></xml>; + + var check:XMLList = XMLList(test) + xmlInst.descendants().(@selected == 'true'); + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="true"/>', 'unexpected XMLList addition result'); + + check = XMLList(test) + xmlInst.descendants().@selected; + assertEquals(check.toString(), '<xml>test</xml>\n' + + 'false\n' +'true', 'unexpected XMLList addition result'); + + check = XMLList(test) + xmlInst.child; + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>\n' +'<child selected="true"/>', 'unexpected XMLList addition result'); + + + check = XMLList(test) + xmlInst.child[0]; + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>' , 'unexpected XMLList addition result'); + + check = XMLList(test) + xmlInst.child.@['selected']; + assertEquals(check.toString(), '<xml>test</xml>\n' + + 'false\n' +'true' , 'unexpected XMLList addition result'); + + check = XMLList(test) + xmlInst['child']; + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>\n' +'<child selected="true"/>', 'unexpected XMLList addition result'); + + check = getList() + xmlInst['child']; + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>\n' +'<child selected="true"/>', 'unexpected XMLList addition result'); + + + check = getList() + xmlInst['child'] + getList(); + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>\n' +'<child selected="true"/>\n' + '<xml>test</xml>', 'unexpected XMLList addition result'); + + check = (getList() + xmlInst['child']) + getList(); + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>\n' +'<child selected="true"/>\n' + '<xml>test</xml>', 'unexpected XMLList addition result'); + + check = getList() + (xmlInst['child'] + getList()); + assertEquals(check.toString(), '<xml>test</xml>\n' + + '<child selected="false"/>\n' +'<child selected="true"/>\n' + '<xml>test</xml>', 'unexpected XMLList addition result'); + + } + + private function getList():XMLList{ + var test:Object = <xml>test</xml>; + return XMLList(test); } } } diff --git a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as index 5965a4f..f5f0691 100644 --- a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as +++ b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as @@ -131,6 +131,9 @@ package flexUnitTests.xml [Test] public function testEquality():void{ assertTrue(new QName('test') == new QName('test'), 'unexpected equality result'); + assertFalse(new QName('test') == new QName('test2'), 'unexpected inequality result'); + assertFalse(new QName('test') != new QName('test'), 'unexpected inequality result'); + assertTrue(new QName('test') != new QName('test2'), 'unexpected inequality result'); assertFalse(new QName('test') === new QName('test'), 'unexpected strict equality result'); } diff --git a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as index 39b0b7d..7f4ce1e 100644 --- a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as +++ b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as @@ -1444,5 +1444,142 @@ package flexUnitTests.xml var obj:Object = xml + num; assertStrictlyEquals(obj,"19",'unexpected untyped addition result'); } + + [Test] + public function testEquality():void{ + var xmlInst:XML = <xml><child selected="false"/><child selected="true"/></xml>; + + var list:XMLList = xmlInst.child; + + var check:Boolean; + + var trueVal:Boolean = true; + var falseVal:Boolean = false; + + check = list[0].@selected == false; + + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + check = list[0].@selected != false; + + assertFalse(check, 'unexpected boolean equality (non-strict)'); + + check = list[0].@selected == falseVal; + + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + check = list[0].@selected != falseVal; + + assertFalse(check, 'unexpected boolean equality (non-strict)'); + + + check = list[0].@selected === false + + assertFalse(check, 'unexpected boolean inequality (strict)'); + + check = list[0].@selected !== false + + assertTrue(check, 'unexpected boolean inequality (strict)'); + + + check = list[0].@selected === falseVal + + assertFalse(check, 'unexpected boolean inequality (strict)'); + + check = list[0].@selected !== falseVal + + assertTrue(check, 'unexpected boolean inequality (strict)'); + + check = list[1].@selected == true; + + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + check = list[1].@selected != true; + + assertFalse(check, 'unexpected boolean equality (non-strict)'); + + check = list[1].@selected == trueVal; + + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + check = list[1].@selected != trueVal; + + assertFalse(check, 'unexpected boolean equality (non-strict)'); + + check = list[1].@selected === true; + assertFalse(check, 'unexpected boolean inequality (strict)'); + + check = list[1].@selected !== true; + assertTrue(check, 'unexpected boolean inequality (strict)'); + + check = list[1].@selected === trueVal; + assertFalse(check, 'unexpected boolean inequality (strict)'); + + check = list[1].@selected !== trueVal; + assertTrue(check, 'unexpected boolean inequality (strict)'); + + //do one check opposite, and assume all the rest will pass the same: + check = false == list[0].@selected ; + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + //check XML as oppossed to XMLList + var boolTest:XML = list[1].@selected[0]; + + check = boolTest == true; + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + boolTest = list[0].@selected[0]; + check = boolTest == false; + assertTrue(check, 'unexpected boolean inequality (non-strict)'); + + boolTest = new XML('true'); + check = boolTest == true; + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + boolTest = new XML('false'); + check = boolTest == false; + assertTrue(check, 'unexpected boolean equality (non-strict)'); + + + + var valZero:uint = 0; + var valNum:Number = 5.25; + + xmlInst = <xml><child idx="0" val="5.25"/><child idx="1" val="15.25"/></xml>; + list = xmlInst.child; + check = list[0].@idx == 0; + + assertTrue(check, 'unexpected numeric equality (non-strict)'); + + check = list[0].@idx !== 0; + + assertTrue(check, 'unexpected numeric inequality (strict)'); + + check = list[0].@val == 5.25; + assertTrue(check, 'unexpected numeric equality (non-strict)'); + + check = list[0].@val !== 5.25; + + assertTrue(check, 'unexpected numeric inequality (strict)'); + + check = list[0].@idx == valZero; + + assertTrue(check, 'unexpected numeric equality (non-strict)'); + + check = list[0].@idx !== valZero; + + assertTrue(check, 'unexpected numeric inequality (strict)'); + + check = list[0].@val == valNum; + assertTrue(check, 'unexpected numeric equality (non-strict)'); + + check = list[0].@val !== valNum; + + assertTrue(check, 'unexpected numeric inequality (strict)'); + + + + + } } }