blob: 9e0287f890af5c2ed09f1fda4a038b50eeda4fd8 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "core/layout/LayoutInline.h"
#include "core/layout/LayoutBlockFlow.h"
#include "core/layout/LayoutTestHelper.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
class LayoutInlineTest : public RenderingTest {};
TEST_F(LayoutInlineTest, SimpleContinuation) {
setBodyInnerHTML(
"<span id='splitInline'><i id='before'></i><h1 id='blockChild'></h1><i "
"id='after'></i></span>");
LayoutInline* splitInlinePart1 =
toLayoutInline(getLayoutObjectByElementId("splitInline"));
ASSERT_TRUE(splitInlinePart1);
ASSERT_TRUE(splitInlinePart1->firstChild());
EXPECT_EQ(splitInlinePart1->firstChild(),
getLayoutObjectByElementId("before"));
EXPECT_FALSE(splitInlinePart1->firstChild()->nextSibling());
LayoutBlockFlow* block = toLayoutBlockFlow(splitInlinePart1->continuation());
ASSERT_TRUE(block);
ASSERT_TRUE(block->firstChild());
EXPECT_EQ(block->firstChild(), getLayoutObjectByElementId("blockChild"));
EXPECT_FALSE(block->firstChild()->nextSibling());
LayoutInline* splitInlinePart2 = toLayoutInline(block->continuation());
ASSERT_TRUE(splitInlinePart2);
ASSERT_TRUE(splitInlinePart2->firstChild());
EXPECT_EQ(splitInlinePart2->firstChild(),
getLayoutObjectByElementId("after"));
EXPECT_FALSE(splitInlinePart2->firstChild()->nextSibling());
EXPECT_FALSE(splitInlinePart2->continuation());
}
TEST_F(LayoutInlineTest, RegionHitTest) {
setBodyInnerHTML(
"<div><span id='lotsOfBoxes'>"
"This is a test line<br>This is a test line<br>This is a test line<br>"
"This is a test line<br>This is a test line<br>This is a test line<br>"
"This is a test line<br>This is a test line<br>This is a test line<br>"
"This is a test line<br>This is a test line<br>This is a test line<br>"
"This is a test line<br>This is a test line<br>This is a test line<br>"
"This is a test line<br>This is a test line<br>This is a test line<br>"
"</span></div>");
document().view()->updateAllLifecyclePhases();
LayoutInline* lotsOfBoxes =
toLayoutInline(getLayoutObjectByElementId("lotsOfBoxes"));
ASSERT_TRUE(lotsOfBoxes);
HitTestRequest hitRequest(HitTestRequest::TouchEvent |
HitTestRequest::ListBased);
LayoutPoint hitLocation(2, 5);
HitTestResult hitResult(hitRequest, hitLocation, 2, 1, 2, 1);
LayoutPoint hitOffset;
bool hitOutcome = lotsOfBoxes->hitTestCulledInline(
hitResult, hitResult.hitTestLocation(), hitOffset);
// Assert checks that we both hit something and that the area covered
// by "something" totally contains the hit region.
EXPECT_TRUE(hitOutcome);
}
} // namespace blink