| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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 flash.events.UncaughtErrorEvent; |
| |
| import flashx.textLayout.debug.assert; |
| |
| import mx.collections.ArrayCollection; |
| import mx.collections.CursorBookmark; |
| import mx.collections.HierarchicalCollectionView; |
| import mx.collections.HierarchicalCollectionViewCursor; |
| import mx.core.FlexGlobals; |
| |
| import spark.components.WindowedApplication; |
| |
| import org.flexunit.asserts.assertEquals; |
| |
| public class HierarchicalCollectionViewCursor_Basics_Test |
| { |
| private static var _utils:HierarchicalCollectionViewTestUtils = new HierarchicalCollectionViewTestUtils(); |
| private static var _currentHierarchy:HierarchicalCollectionView; |
| private static var _noErrorsThrown:Boolean = true; |
| private var _level0:ArrayCollection; |
| |
| private var _sut:HierarchicalCollectionViewCursor; |
| |
| [BeforeClass] |
| public static function setUpBeforeClass():void |
| { |
| (FlexGlobals.topLevelApplication as WindowedApplication).loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, handleUncaughtClientError); |
| } |
| |
| [AfterClass] |
| public static function tearDownAfterClass():void |
| { |
| (FlexGlobals.topLevelApplication as WindowedApplication).loaderInfo.uncaughtErrorEvents.removeEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, handleUncaughtClientError); |
| } |
| |
| [Before] |
| public function setUp():void |
| { |
| _currentHierarchy = generateHierarchyViewWithOpenNodes(); |
| _level0 = _utils.getRoot(_currentHierarchy) as ArrayCollection; |
| _sut = _currentHierarchy.createCursor() as HierarchicalCollectionViewCursor; |
| |
| _noErrorsThrown = true; |
| } |
| |
| [After] |
| public function tearDown():void |
| { |
| _sut = null; |
| _currentHierarchy = null; |
| _level0 = null; |
| } |
| |
| |
| |
| [Test] |
| public function testMovingAround():void |
| { |
| //given |
| var lastCompany:DataNode = _level0.getItemAt(_level0.length - 1) as DataNode; |
| var firstCompany:DataNode = _level0.getItemAt(0) as DataNode; |
| var firstLocation:DataNode = firstCompany.children.getItemAt(0) as DataNode; |
| var secondLocation:DataNode = firstCompany.children.getItemAt(1) as DataNode; |
| var firstDepartment:DataNode = firstLocation.children.getItemAt(0) as DataNode; |
| var secondDepartment:DataNode = firstLocation.children.getItemAt(1) as DataNode; |
| |
| //when |
| _sut.moveNext(); |
| |
| //then |
| assertEquals(firstLocation, _sut.current); |
| |
| //when |
| _sut.moveNext(); |
| |
| //then |
| assertEquals(firstDepartment, _sut.current); |
| |
| //when |
| _sut.moveNext(); |
| |
| //then |
| assertEquals(secondDepartment, _sut.current); |
| |
| //when |
| _sut.movePrevious(); |
| |
| //then |
| assertEquals(firstDepartment, _sut.current); |
| |
| //when |
| _sut.moveToLast(); |
| |
| //then |
| assertEquals(lastCompany, _sut.current); |
| |
| //when |
| _sut.seek(new CursorBookmark(4)); |
| |
| //then |
| assertEquals(secondLocation, _sut.current); |
| } |
| |
| [Test] |
| public function testCollectionChangeInRootDoesNotChangeCurrent():void |
| { |
| //given |
| var lastCompany:DataNode = _level0.getItemAt(_level0.length - 1) as DataNode; |
| |
| //when |
| _sut.moveToLast(); |
| |
| var newFirstCompany:DataNode = _utils.createSimpleNode("[INS] Company"); |
| _level0.addItemAt(newFirstCompany, 0); |
| |
| var newLastCompany:DataNode = _utils.createSimpleNode("[INS] Company"); |
| _level0.addItemAt(newLastCompany, _level0.length); |
| |
| //then |
| assertEquals(lastCompany, _sut.current); |
| |
| //when |
| _sut.moveToLast(); |
| |
| //then |
| assertEquals(newLastCompany, _sut.current); |
| } |
| |
| [Test] |
| public function testRemovingCurrentMiddleItemChangesCurrentToNextItem():void |
| { |
| //given |
| var firstCompany:DataNode = _level0.getItemAt(0) as DataNode; |
| var secondLocation:DataNode = firstCompany.children.getItemAt(1) as DataNode; |
| var thirdDepartmentOfSecondLocation:DataNode = secondLocation.children.getItemAt(2) as DataNode; |
| |
| _sut.seek(new CursorBookmark(6)); //Company(1)->Location(2)->Department(2) |
| |
| //when |
| secondLocation.children.removeItemAt(1); |
| |
| //then |
| assertEquals(thirdDepartmentOfSecondLocation, _sut.current); |
| } |
| |
| [Test] |
| public function testRemovingPreviousSiblingOfCurrentMiddleItemDoesNotChangeCurrent():void |
| { |
| //given |
| var firstCompany:DataNode = _level0.getItemAt(0) as DataNode; |
| var secondLocation:DataNode = firstCompany.children.getItemAt(1) as DataNode; |
| var secondDepartmentOfSecondLocation:DataNode = secondLocation.children.getItemAt(1) as DataNode; |
| |
| //when |
| _sut.seek(new CursorBookmark(6)); //Company(1)->Location(2)->Department(2) |
| |
| //then |
| assertEquals(secondDepartmentOfSecondLocation, _sut.current); |
| |
| //when |
| secondLocation.children.removeItemAt(0); |
| |
| //then |
| assertEquals(secondDepartmentOfSecondLocation, _sut.current); |
| } |
| |
| [Test] |
| public function testRemovingCurrentFirstItemChangesCurrentToNextItem():void |
| { |
| //given |
| var firstCompany:DataNode = _level0.getItemAt(0) as DataNode; |
| var secondCompany:DataNode = _level0.getItemAt(1) as DataNode; |
| |
| //initial assumption |
| assertEquals(firstCompany, _sut.current); |
| |
| //when |
| _level0.removeItemAt(0); |
| |
| //then |
| assertEquals(secondCompany, _sut.current); |
| } |
| |
| [Test] |
| public function testRemovingSiblingOfCurrentFirstItemDoesNotChangeCurrent():void |
| { |
| //given |
| var firstCompany:DataNode = _level0.getItemAt(0) as DataNode; |
| var firstLocation:DataNode = firstCompany.children.getItemAt(0) as DataNode; |
| |
| //when |
| _sut.seek(new CursorBookmark(1)); //Company(1)->Location(1) |
| |
| //then |
| assertEquals(firstLocation, _sut.current); |
| |
| //when |
| firstCompany.children.removeItemAt(1); |
| |
| //then |
| assertEquals(firstLocation, _sut.current); |
| } |
| |
| |
| private static function handleUncaughtClientError(event:UncaughtErrorEvent):void |
| { |
| event.preventDefault(); |
| event.stopImmediatePropagation(); |
| _noErrorsThrown = false; |
| |
| trace("\n" + event.error); |
| _utils.printHCollectionView(_currentHierarchy); |
| } |
| |
| |
| private static function generateHierarchyViewWithOpenNodes():HierarchicalCollectionView |
| { |
| return _utils.generateOpenHierarchyFromRootList(_utils.generateHierarchySourceFromString(HIERARCHY_STRING)); |
| } |
| |
| private static const HIERARCHY_STRING:String = (<![CDATA[ |
| Company(1) |
| Company(1)->Location(1) |
| Company(1)->Location(1)->Department(1) |
| Company(1)->Location(1)->Department(2) |
| Company(1)->Location(2) |
| Company(1)->Location(2)->Department(1) |
| Company(1)->Location(2)->Department(2) |
| Company(1)->Location(2)->Department(3) |
| Company(1)->Location(3) |
| Company(2) |
| Company(2)->Location(1) |
| Company(2)->Location(2) |
| Company(2)->Location(2)->Department(1) |
| Company(2)->Location(3) |
| Company(3) |
| ]]>).toString(); |
| } |
| } |