         private function getHeaderHeightFromKeyPoints(keyPoints:Array):Number
         {
             return Point(keyPoints["h"]).y - Point(keyPoints["e"]).y;
+        }
+
+        private function getHeaderWidthFromKeyPoints(keyPoints:Array):Number
+        {
+            return Point(keyPoints["e"]).x - Point(keyPoints["b"]).x;
         }
 
         private function getColumnWidths(dimensions:Array):Array

            return _keyRectangles["headerRectangles"];
        }

        private function getColumnWidthFromKeyPoints(keyPoints:Array, columnIndex:int):Number
        {
            //we're assuming columnIndex has a valid value

            {
                for (var i:int = 0; i < directions.length; i++)
                {
                    //given
                    var pointToTest:Point = getAdjacentPoint(_keyPoints[pointName], directions[i]);

                    //when
                    var expectedHeaderIndex:int = getHeaderIndexAssumption(pointToTest);
                    var actualHeaderIndex:int = getHeaderIndexAtGlobalPoint(pointToTest);
                    const errorMessageHeaderIndex:String = getHeaderIndexErrorMessage(pointName, directions[i], pointToTest, expectedHeaderIndex, actualHeaderIndex);

                    var shouldBeContainedInHeader:Boolean = getHeaderContainsPointAssumption(pointToTest);
                    var actuallyContainedInHeader:Boolean = _sut.areCoordinatesOverAHeaderView(pointToTest);
                    const errorMessageHeaderContainsPoint:String = getHeaderContainsPointErrorMessage(pointName, directions[i], pointToTest, shouldBeContainedInHeader, actuallyContainedInHeader);

                    //then
                    assertEquals(errorMessageHeaderIndex, expectedHeaderIndex, actualHeaderIndex);
                    assertEquals(errorMessageHeaderContainsPoint, shouldBeContainedInHeader, actuallyContainedInHeader);
                }
            }
        }
