diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/shapes/BoxShapeTest.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/rendering/shapes/BoxShapeTest.cpp | 58 |
1 files changed, 44 insertions, 14 deletions
diff --git a/chromium/third_party/WebKit/Source/core/rendering/shapes/BoxShapeTest.cpp b/chromium/third_party/WebKit/Source/core/rendering/shapes/BoxShapeTest.cpp index 9b1f50193f1..74538f391fd 100644 --- a/chromium/third_party/WebKit/Source/core/rendering/shapes/BoxShapeTest.cpp +++ b/chromium/third_party/WebKit/Source/core/rendering/shapes/BoxShapeTest.cpp @@ -31,6 +31,8 @@ #include "core/rendering/shapes/BoxShape.h" +#include "platform/geometry/RoundedRect.h" + #include <gtest/gtest.h> namespace WebCore { @@ -39,9 +41,9 @@ class BoxShapeTest : public ::testing::Test { protected: BoxShapeTest() { } - PassOwnPtr<Shape> createBoxShape(const LayoutSize& size, float shapeMargin, float shapePadding) + PassOwnPtr<Shape> createBoxShape(const RoundedRect& bounds, float shapeMargin) { - return Shape::createLayoutBoxShape(size, TopToBottomWritingMode, Length(shapeMargin, Fixed), Length(shapePadding, Fixed)); + return Shape::createLayoutBoxShape(bounds, TopToBottomWritingMode, shapeMargin); } }; @@ -56,8 +58,10 @@ using namespace WebCore; SegmentList result; \ shapePtr->getExcludedIntervals(lineTop, lineHeight, result); \ EXPECT_EQ(1u, result.size()); \ - EXPECT_EQ(expectedLeft, result[0].logicalLeft); \ - EXPECT_EQ(expectedRight, result[0].logicalRight); \ + if (result.size() == 1u) { \ + EXPECT_FLOAT_EQ(expectedLeft, result[0].logicalLeft); \ + EXPECT_FLOAT_EQ(expectedRight, result[0].logicalRight); \ + } \ } #define TEST_NO_EXCLUDED_INTERVAL(shapePtr, lineTop, lineHeight) \ @@ -67,13 +71,21 @@ using namespace WebCore; EXPECT_EQ(0u, result.size()); \ } +/* The BoxShape is based on a 100x50 rectangle at 0,0. The shape-margin value is 10, + * so the shapeMarginBoundingBox rectangle is 120x70 at -10,-10: + * + * -10,-10 110,-10 + * +--------+ + * | | + * +--------+ + * -10,60 60,60 + */ TEST_F(BoxShapeTest, zeroRadii) { - OwnPtr<Shape> shape = createBoxShape(LayoutSize(100, 50), 10, 20); + OwnPtr<Shape> shape = createBoxShape(RoundedRect(0, 0, 100, 50), 10); EXPECT_FALSE(shape->isEmpty()); EXPECT_EQ(LayoutRect(-10, -10, 120, 70), shape->shapeMarginLogicalBoundingBox()); - EXPECT_EQ(LayoutRect(20, 20, 60, 10), shape->shapePaddingLogicalBoundingBox()); // A BoxShape's bounds include the top edge but not the bottom edge. // Similarly a "line", specified as top,height to the overlap methods, @@ -98,16 +110,34 @@ TEST_F(BoxShapeTest, zeroRadii) TEST_NO_EXCLUDED_INTERVAL(shape, -12, 2); TEST_NO_EXCLUDED_INTERVAL(shape, 60, 1); TEST_NO_EXCLUDED_INTERVAL(shape, 100, 200); +} + +/* BoxShape geometry for this test. Corner radii are in parens, x and y intercepts + * for the elliptical corners are noted. The rectangle itself is at 0,0 with width and height 100. + * + * (10, 15) x=10 x=90 (10, 20) + * (--+---------+--) + * y=15 +--| |-+ y=20 + * | | + * | | + * y=85 + -| |- + y=70 + * (--+---------+--) + * (25, 15) x=25 x=80 (20, 30) + */ +TEST_F(BoxShapeTest, getIntervals) +{ + const RoundedRect::Radii cornerRadii(IntSize(10, 15), IntSize(10, 20), IntSize(25, 15), IntSize(20, 30)); + OwnPtr<Shape> shape = createBoxShape(RoundedRect(IntRect(0, 0, 100, 100), cornerRadii), 0); + EXPECT_FALSE(shape->isEmpty()); - EXPECT_TRUE(shape->lineOverlapsShapePaddingBounds(21, 1)); - EXPECT_TRUE(shape->lineOverlapsShapePaddingBounds(20, 0)); - EXPECT_TRUE(shape->lineOverlapsShapePaddingBounds(-10, 200)); - EXPECT_TRUE(shape->lineOverlapsShapePaddingBounds(25, 35)); - EXPECT_TRUE(shape->lineOverlapsShapePaddingBounds(29, 1)); + EXPECT_EQ(LayoutRect(0, 0, 100, 100), shape->shapeMarginLogicalBoundingBox()); - EXPECT_FALSE(shape->lineOverlapsShapePaddingBounds(18, 2)); - EXPECT_FALSE(shape->lineOverlapsShapePaddingBounds(30, 1)); - EXPECT_FALSE(shape->lineOverlapsShapePaddingBounds(100, 200)); + TEST_EXCLUDED_INTERVAL(shape, 10, 95, 0, 100); + TEST_EXCLUDED_INTERVAL(shape, 5, 25, 0, 100); + TEST_EXCLUDED_INTERVAL(shape, 15, 6, 0, 100); + TEST_EXCLUDED_INTERVAL(shape, 20, 50, 0, 100); + TEST_EXCLUDED_INTERVAL(shape, 69, 5, 0, 100); + TEST_EXCLUDED_INTERVAL(shape, 85, 10, 0, 97.320511f); } } // namespace |