FLEX-34852 Added more unit tests to check for edge cases, and for Sort.unique variations. Also replaced the last inline sort field value retrieval in SortField (in initializeDefaultCompareFunction()).
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/8dae0daa Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/8dae0daa Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/8dae0daa Branch: refs/heads/develop Commit: 8dae0daab1d779ee17a23477159bef33524d4cb3 Parents: c4f20ee Author: Mihai Chira <[email protected]> Authored: Sun Jun 7 14:57:22 2015 +0200 Committer: Mihai Chira <[email protected]> Committed: Sun Jun 7 14:57:22 2015 +0200 ---------------------------------------------------------------------- .../framework/src/mx/collections/Sort.as | 3 +- .../framework/src/mx/collections/SortField.as | 8 +-- .../framework/tests/FLEX_34852_Tests.as | 76 ++++++++++++++++++++ 3 files changed, 78 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/8dae0daa/frameworks/projects/framework/src/mx/collections/Sort.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/framework/src/mx/collections/Sort.as b/frameworks/projects/framework/src/mx/collections/Sort.as index db0f704..14f1d64 100644 --- a/frameworks/projects/framework/src/mx/collections/Sort.as +++ b/frameworks/projects/framework/src/mx/collections/Sort.as @@ -672,8 +672,7 @@ public class Sort extends EventDispatcher implements ISort } else { - uniqueRet2 = items.sort(internalCompare, - Array.UNIQUESORT); + uniqueRet2 = items.sort(internalCompare, Array.UNIQUESORT); } if (uniqueRet2 == 0) { http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/8dae0daa/frameworks/projects/framework/src/mx/collections/SortField.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/framework/src/mx/collections/SortField.as b/frameworks/projects/framework/src/mx/collections/SortField.as index 270bea5..d8780f1 100644 --- a/frameworks/projects/framework/src/mx/collections/SortField.as +++ b/frameworks/projects/framework/src/mx/collections/SortField.as @@ -520,13 +520,7 @@ public class SortField extends EventDispatcher implements ISortField var value:Object; if (_name) { - try - { - value = obj[_name]; - } - catch(error:Error) - { - } + value = getSortFieldValue(obj); } //this needs to be an == null check because !value will return true //where value == 0 or value == false http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/8dae0daa/frameworks/projects/framework/tests/FLEX_34852_Tests.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/framework/tests/FLEX_34852_Tests.as b/frameworks/projects/framework/tests/FLEX_34852_Tests.as index 50836b9..dcb1bc9 100644 --- a/frameworks/projects/framework/tests/FLEX_34852_Tests.as +++ b/frameworks/projects/framework/tests/FLEX_34852_Tests.as @@ -26,6 +26,7 @@ package { import mx.collections.SortFieldCompareTypes; import org.flexunit.asserts.assertEquals; + import org.flexunit.asserts.assertTrue; public class FLEX_34852_Tests { private var _sut:ListCollectionView; @@ -79,6 +80,42 @@ package { } [Test] + public function test_simple_ascending_sort_by_complex_string_fields_with_unique_field():void + { + //given + var from4To0:IList = generateVOs(5, true); + _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0 + + const sortByStreetAscending:Sort = new Sort(); + sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)]; + sortByStreetAscending.unique = true; + _sut.sort = sortByStreetAscending; + + //when + _sut.refresh(); //should be: Street0, Street1, Street2, Street3, Street4 + + //then + assertIndexesAre([0, 1, 2, 3, 4]); + } + + [Test(expects="Error")] + public function test_simple_ascending_sort_by_complex_string_fields_with_unique_flag_and_duplicating_field_throws_error():void + { + //given + var from4To0:IList = generateVOs(5, true); + _sut.addAll(from4To0); //values["address.street"]: Street4, Street3, Street2, Street1, Street0 + FLEX_34852_VO(_sut.getItemAt(0)).address.street = "Street0"; //making sure there's a duplicate + + const sortByStreetAscending:Sort = new Sort(); + sortByStreetAscending.fields = [new ComplexSortField("address.street", false, false, false)]; + sortByStreetAscending.unique = true; + _sut.sort = sortByStreetAscending; + + //when + _sut.refresh(); //should throw an error about there being a duplicate value + } + + [Test] public function test_simple_ascending_sort_by_complex_date_fields():void { //given @@ -154,6 +191,45 @@ package { assertIndexesAre([4, 3, 2, 1, 0]); } + [Test] + public function test_simple_ascending_sort_with_empty_field_name_should_not_throw_error():void + { + //given + var from4To0:IList = generateVOs(5, true); + _sut.addAll(from4To0); //values["index"]: 4, 3, 2, 1, 0 + + const sortByNothingAscending:Sort = new Sort(); + sortByNothingAscending.fields = [new ComplexSortField("", false, false)]; + _sut.sort = sortByNothingAscending; + + //when + _sut.refresh(); //just make sure it doesn't throw an error. + + //then - we cannot guarantee the order of the items because SortField.nullCompare returns 0 in this + // situation, so we just make sure there's no error + assertTrue(true); + } + + [Test] + public function test_simple_ascending_sort_with_erroneous_field_name_should_not_throw_error():void + { + //given + var from4To0:IList = generateVOs(5, true); + _sut.addAll(from4To0); //values["index"]: 4, 3, 2, 1, 0 + + const sortByNothingAscending:Sort = new Sort(); + sortByNothingAscending.fields = [new ComplexSortField("aFieldThatDoesntExist", false, false)]; + _sut.sort = sortByNothingAscending; + + //when + _sut.refresh(); //just make sure it doesn't throw an error. + + //then - we cannot guarantee the order of the items because SortField.nullCompare returns 0 in this + // situation, so we just make sure there's no error + assertTrue(true); + } + + private function assertIndexesAre(indexes:Array):void
