Merge branch 'patch-2' of https://github.com/kevinGodell/flex-sdk into develop
diff --git a/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34775_Tests.as b/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34775_Tests.as
index e4eeccd..2b07605 100644
--- a/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34775_Tests.as
+++ b/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34775_Tests.as
@@ -19,32 +19,35 @@
package mx.collections
{
+ import mx.collections.*;
+ import mx.utils.StringUtil;
+
import org.flexunit.asserts.assertEquals;
- public class HierarchicalCollectionView_FLEX_34775_Tests
- {
- private static var _utils:HierarchicalCollectionViewTestUtils = new HierarchicalCollectionViewTestUtils();
- private static var _sut:HierarchicalCollectionView;
- private var _level0:ArrayCollection;
-
- [Before]
- public function setUp():void
- {
+ public class HierarchicalCollectionView_FLEX_34775_Test
+ {
+ private static var _utils:HierarchicalCollectionViewTestUtils = new HierarchicalCollectionViewTestUtils();
+ private static var _sut:HierarchicalCollectionView;
+ private var _level0:ArrayCollection;
+
+ [Before]
+ public function setUp():void
+ {
_sut = generateHierarchyViewWithClosedNodes();
_level0 = _utils.getRoot(_sut) as ArrayCollection;
- }
-
- [After]
- public function tearDown():void
- {
+ }
+
+ [After]
+ public function tearDown():void
+ {
_sut = null;
_level0 = null;
- }
+ }
[Test]
- public function test_navigation_after_opening_hidden_node():void
+ public function test_navigation_after_trying_to_open_inaccessible_node():void
{
//given
var company:DataNode = _level0.getItemAt(0) as DataNode;
@@ -53,27 +56,95 @@
//when
_sut.openNode(location);
- var cursor:IViewCursor = _sut.createCursor();
+ //then
+ var stepsRequiredToNavigateStructure:int = attemptNavigation(_sut);
+ assertEquals(1, stepsRequiredToNavigateStructure);
+ assertEquals(1, _sut.length);
+ }
+
+ [Test]
+ public function test_navigation_after_trying_to_open_accessible_node():void
+ {
+ //given
+ var company:DataNode = _level0.getItemAt(0) as DataNode;
+ var location:DataNode = company.children.getItemAt(0) as DataNode;
+
+ //when
+ _sut.openNode(company);
+ _sut.openNode(location);
+
+ //then
+ var stepsRequiredToNavigateStructure:int = attemptNavigation(_sut);
+ assertEquals(3, stepsRequiredToNavigateStructure);
+ assertEquals(3, _sut.length);
+ }
+
+ [Test]
+ public function test_navigation_after_trying_to_open_previously_closed_node():void
+ {
+ //given
+ var company:DataNode = _level0.getItemAt(0) as DataNode;
+ var location:DataNode = company.children.getItemAt(0) as DataNode;
+
+ //when
+ _sut.openNode(company);
+ _sut.openNode(location);
+ _sut.closeNode(location);
+
+ //then
+ var stepsRequiredToNavigateStructure:int = attemptNavigation(_sut);
+ assertEquals(2, stepsRequiredToNavigateStructure);
+ assertEquals(2, _sut.length);
+ }
+
+ [Test]
+ public function test_navigation_after_trying_to_open_filtered_out_node():void
+ {
+ function filterOutLocationNode(node:DataNode):Boolean {
+ return node && node.label != locationNodeName;
+ };
+
+ const locationNodeName:String = StringUtil.trim(HIERARCHY_STRING.split("\n")[2]);
+
+ //given
+ var company:DataNode = _level0.getItemAt(0) as DataNode;
+ var location:DataNode = company.children.getItemAt(0) as DataNode;
+ _sut.openNode(company);
+ _sut.openNode(location);
+
+ //when
+ _sut.filterFunction = filterOutLocationNode;
+ _sut.refresh();
+
+ _sut.openNode(location);
+
+ //then
+ var stepsRequiredToNavigateStructure:int = attemptNavigation(_sut);
+ assertEquals(1, stepsRequiredToNavigateStructure);
+ assertEquals(1, _sut.length);
+ }
+
+ private function attemptNavigation(into:HierarchicalCollectionView):int
+ {
+ var cursor:IViewCursor = into.createCursor();
var i:int = 0;
while(!cursor.afterLast && i++ < 100)
{
cursor.moveNext();
}
- //then
- assertEquals(1, i);
- assertEquals(1, _sut.length);
+ return i;
}
- private static function generateHierarchyViewWithClosedNodes():HierarchicalCollectionView
- {
- return _utils.generateHCV(_utils.generateHierarchySourceFromString(HIERARCHY_STRING));
- }
+ private static function generateHierarchyViewWithClosedNodes():HierarchicalCollectionView
+ {
+ return _utils.generateHCV(_utils.generateHierarchySourceFromString(HIERARCHY_STRING));
+ }
- private static const HIERARCHY_STRING:String = (<![CDATA[
- Adobe
- Adobe->London
- Adobe->London->FlexDept
- ]]>).toString();
- }
+ private static const HIERARCHY_STRING:String = (<![CDATA[
+ Adobe
+ Adobe->London
+ Adobe->London->FlexDept
+ ]]>).toString();
+ }
}
\ No newline at end of file
diff --git a/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34778_Tests.as b/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34778_Tests.as
new file mode 100644
index 0000000..9a85102
--- /dev/null
+++ b/frameworks/tests/unitTests/mx/collections/HierarchicalCollectionView_FLEX_34778_Tests.as
@@ -0,0 +1,74 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.collections
+{
+ import mx.collections.ArrayCollection;
+ import mx.collections.HierarchicalCollectionView;
+
+ import org.flexunit.asserts.assertEquals;
+
+ public class HierarchicalCollectionView_FLEX_34778_Tests
+ {
+ private static var _utils:HierarchicalCollectionViewTestUtils = new HierarchicalCollectionViewTestUtils();
+ private static var _sut:HierarchicalCollectionView;
+ private var _level0:ArrayCollection;
+
+ [Before]
+ public function setUp():void
+ {
+ _sut = generateHierarchyViewWithClosedNodes();
+ _level0 = _utils.getRoot(_sut) as ArrayCollection;
+ }
+
+ [After]
+ public function tearDown():void
+ {
+ _sut = null;
+ _level0 = null;
+ }
+
+
+ [Test]
+ public function test_replacing_inaccessible_node():void
+ {
+ //given
+ var company:DataNode = _level0.getItemAt(0) as DataNode;
+
+ //when
+ _sut.openNode(company); //so that it starts listening to collection change events on its children
+ _sut.closeNode(company);
+ company.children.setItemAt(new DataNode("Adobe->Brussels"), 0); //makes the app hang here
+
+ //then
+ assertEquals(1, _sut.length);
+ }
+
+ private static function generateHierarchyViewWithClosedNodes():HierarchicalCollectionView
+ {
+ return _utils.generateHCV(_utils.generateHierarchySourceFromString(HIERARCHY_STRING));
+ }
+
+ private static const HIERARCHY_STRING:String = (<![CDATA[
+ Adobe
+ Adobe->London
+ Adobe->London->FlexDept
+ ]]>).toString();
+ }
+}
\ No newline at end of file