FLEX-35267 Updated unit test - made it easier to read, and now we're also testing GridColumnHeaderGroup.containsGlobalCoordinates(). For the test to pass I've improved the logic in GridHeaderViewLayout.getHeaderIndexAt() which, in turn, made a few functions redundant in GridColumnHeaderGroup. All tests currently pass.
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/a1c61c5c Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/a1c61c5c Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/a1c61c5c Branch: refs/heads/master Commit: a1c61c5cfd452cb0a150788e498865763890d112 Parents: 56abc7d Author: Mihai Chira <mih...@apache.org> Authored: Wed Mar 29 14:26:51 2017 +0200 Committer: Mihai Chira <mih...@apache.org> Committed: Wed Mar 29 14:26:51 2017 +0200 ---------------------------------------------------------------------- .../GridHeaderViewLayout_FLEX_35260_Tests.as | 84 ++++++++++++++------ 1 file changed, 61 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/a1c61c5c/frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as b/frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as index 1ac5a17..5bc24b4 100644 --- a/frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as +++ b/frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as @@ -88,6 +88,7 @@ package spark.components.gridClasses { private static const directions:Array = [ITSELF, N, NE, E, SE, S, SW, W, NW]; private static const COLUMN_HEADER_RECTANGLES:String = "columnHeaderRectangles"; + private static const COLUMN_RECTANGLES:String = "columnRectangles"; private static const ENTIRE_HEADER_RECTANGLE:String = "headerRectangle"; //includes padding private static const MAIN_HEADER_VIEW_RECTANGLE:String = "mainHeaderViewRectangle"; private static const FIXED_HEADER_VIEW_RECTANGLE:String = "fixedHeaderViewRectangle"; @@ -98,11 +99,11 @@ package spark.components.gridClasses { private var _keyPoints:Array; //@TODO add cases with horizontal scroll, and also with fixed columns - //@TODO we probably have to account for paddingTop and paddingBottom as well public static var dimensions:Array = [ /*x, y, width, header padding left, header padding top, header padding bottom, [column widths] */ - [[10, 0, 300, 5, 0, 5, [25, 150]]], - [[0, 0, 300, 5, 0, 0, [25, 150]]] + [[/*x=*/ 0, /*y=*/ 0, /*width=*/ 300, /*paddingLeft=*/ 5, /*paddingTop=*/ 0, /*paddingBottom=*/ 0, /*columnWidths=*/[25, 150]]], + [[/*x=*/ 10, /*y=*/ 0, /*width=*/ 300, /*paddingLeft=*/ 5, /*paddingTop=*/ 0, /*paddingBottom=*/ 5, /*columnWidths=*/[25, 150]]], + [[/*x=*/ -5, /*y=*/-100, /*width=*/ 200, /*paddingLeft=*/ 25, /*paddingTop=*/ 12, /*paddingBottom=*/ 5, /*columnWidths=*/[100, 150]]] //horizontal scroll ]; @@ -135,22 +136,6 @@ package spark.components.gridClasses { _keyPoints = null; } - /* - [Ignore] - [Test] - public function test_column_index(globalPoint:Array, expectedColumnIndex:int):void - { - //given - var localPoint:Point = _dataGrid.grid.globalToLocal(new Point(globalPoint[0], globalPoint[1])); - - //when - var columnIndex:int = _dataGrid.grid.getColumnIndexAt(localPoint.x, 0); - - //then - assertEquals(expectedColumnIndex, columnIndex); - } -*/ - [Test(dataProvider="dimensions")] public function test_with_no_scroll(dimensions:Array):void @@ -189,6 +174,7 @@ package spark.components.gridClasses { { assertThatHeaderContainsPointOrNot(point, pointName, currentTransformation); assertThatHeaderIndexIsCorrect(point, pointName, currentTransformation); + assertThatColumnIndexIsCorrect(point, pointName, currentTransformation); assertThatCoordinatesOverHeaderViewOrNot(point, pointName, currentTransformation); } @@ -227,6 +213,17 @@ package spark.components.gridClasses { assertEquals(errorMessageHeaderIndex, expectedHeaderIndex, actualHeaderIndex); } + private function assertThatColumnIndexIsCorrect(point:Point, pointName:String, currentTransformation:Matrix):void + { + //when + var expectedColumnIndex:int = getColumnIndexAssumption(point); + var actualColumnIndex:int = getColumnIndexAtGlobalPoint(point); + const errorMessageColumnIndex:String = getColumnIndexErrorMessage(pointName, currentTransformation, point, expectedColumnIndex, actualColumnIndex); + + //then + assertEquals(errorMessageColumnIndex, expectedColumnIndex, actualColumnIndex); + } + private function getHeaderIndexErrorMessage(pointName:String, direction:Matrix, transformedPoint:Point, expectedColumnHeaderIndex:int, actualColumnHeaderIndex:int):String { return "The point " + pointName + " transformed with Matrix " + direction + " (resulting in " + transformedPoint + ") should be " @@ -236,6 +233,15 @@ package spark.components.gridClasses { + "\n DEBUG INFO: headerRectangles=" + columnHeaderRectangles); } + private function getColumnIndexErrorMessage(pointName:String, direction:Matrix, transformedPoint:Point, expectedColumnHeaderIndex:int, actualColumnHeaderIndex:int):String + { + return "The point " + pointName + " transformed with Matrix " + direction + " (resulting in " + transformedPoint + ") should have its x value " + + (expectedColumnHeaderIndex == -1 ? "outside any column bounds" : "within the column with index " + expectedColumnHeaderIndex) + + " but was mistakenly found to be " + + (actualColumnHeaderIndex == -1 ? "outside any column bounds" : "inside the column with index " + actualColumnHeaderIndex + + "\n DEBUG INFO: columnRectangles=" + columnRectangles); + } + private function getHeaderContainsPointErrorMessage(pointName:String, direction:Matrix, transformedPoint:Point, shouldBeContainedInHeader:Boolean, isActuallyContainedInHeader:Boolean):String { return "The point " + pointName + " transformed with Matrix " + direction + " (resulting in " + transformedPoint + ") should be " @@ -260,6 +266,12 @@ package spark.components.gridClasses { return _sut.getHeaderIndexAt(localPoint.x, localPoint.y); } + private function getColumnIndexAtGlobalPoint(globalPoint:Point):int + { + var localPoint:Point = _dataGrid.grid.globalToLocal(globalPoint); + return _dataGrid.grid.getColumnIndexAt(localPoint.x, localPoint.y); + } + private function getHeaderShouldContainPointAssumption(point:Point):Boolean { return rectangleContainsPoint(entireHeaderRectangle, point); @@ -277,15 +289,15 @@ package spark.components.gridClasses { private function getHeaderIndexAssumption(point:Point):int { - return getIndexOfHeaderRectangleWhichContainsPoint(point, columnHeaderRectangles); + return getIndexOfRectangleWhichContainsPoint(point, columnHeaderRectangles); } - private function getAdjacentPoint(point:Point, direction:Matrix):Point + private function getColumnIndexAssumption(point:Point):int { - return direction.transformPoint(point); + return getIndexOfRectangleWhichContainsPoint(point, columnRectangles); } - private function getIndexOfHeaderRectangleWhichContainsPoint(point:Point, rectangles:Array):int + private function getIndexOfRectangleWhichContainsPoint(point:Point, rectangles:Array):int { for (var i:int = 0; i < rectangles.length; i++) { @@ -301,6 +313,11 @@ package spark.components.gridClasses { return rectangle.containsPoint(point); } + private function getAdjacentPoint(point:Point, direction:Matrix):Point + { + return direction.transformPoint(point); + } + private function generateKeyPoints(dimensions:Array, grid:DataGrid):Array { var keyPoints:Array = []; @@ -338,6 +355,7 @@ package spark.components.gridClasses { var keyRectangles:Array = []; keyRectangles[COLUMN_HEADER_RECTANGLES] = generateHeaderColumnRectangles(keyPoints, dimensions); + keyRectangles[COLUMN_RECTANGLES] = generateColumnRectangles(keyPoints, dimensions); keyRectangles[ENTIRE_HEADER_RECTANGLE] = generateVisibleHeaderRectangle(keyPoints, dimensions); keyRectangles[MAIN_HEADER_VIEW_RECTANGLE] = generateMainHeaderViewRectangle(keyPoints, dimensions); keyRectangles[FIXED_HEADER_VIEW_RECTANGLE] = generateFixedHeaderViewRectangle(keyPoints, dimensions); @@ -390,6 +408,21 @@ package spark.components.gridClasses { return headerRectangles; } + //Note that the height and y of the rectangles doesn't matter until FLEX-35280 is fixed + private function generateColumnRectangles(keyPoints:Array, dimensions:Array):Array + { + var columnRectangles:Array = []; + + for (var i:int = 0; i < getColumnWidths(dimensions).length; i++) + { + var topLeft:Point = keyPoints["g" + i]; + var topRight:Point = keyPoints["g" + (i+1)]; + columnRectangles.push(new Rectangle(topLeft.x, -10000, topRight.x - topLeft.x, Number.MAX_VALUE)); + } + + return columnRectangles; + } + private function forEachPoint(assertThat_:Function):void { for (var pointName:String in _keyPoints) @@ -415,6 +448,11 @@ package spark.components.gridClasses { return _keyRectangles[COLUMN_HEADER_RECTANGLES]; } + private function get columnRectangles():Array + { + return _keyRectangles[COLUMN_RECTANGLES]; + } + private function get entireHeaderRectangle():Rectangle //includes padding { return _keyRectangles[ENTIRE_HEADER_RECTANGLE] as Rectangle;