Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: Source/core/rendering/RenderObjectTest.cpp

Issue 351973004: Add some RenderObject unit tests (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Even better change. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/core.gypi ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "core/rendering/RenderObject.h"
7
8 #include "core/html/HTMLElement.h"
9 #include "core/rendering/RenderView.h"
10 #include "core/testing/DummyPageHolder.h"
11 #include <gtest/gtest.h>
12
13 using namespace WebCore;
14
15 namespace {
16
17 // Base class for RenderObject testing, it exposes some useful getter.
18 class RenderObjectTest : public testing::Test {
19 protected:
20 virtual void SetUp() OVERRIDE
21 {
22 m_pageHolder = DummyPageHolder::create(IntSize(800, 600));
23
24 // This ensures that the minimal DOM tree gets attached
25 // correctly for tests that don't call setBodyInnerHTML.
26 document().view()->updateLayoutAndStyleIfNeededRecursive();
27 }
28
29 Document& document() const { return m_pageHolder->document(); }
30 RenderView& renderView() const { return *document().renderView(); }
31
32 void setBodyInnerHTML(const char*);
33
34 private:
35 OwnPtr<DummyPageHolder> m_pageHolder;
36 };
37
38 void RenderObjectTest::setBodyInnerHTML(const char* htmlContent)
39 {
40 document().body()->setInnerHTML(String::fromUTF8(htmlContent), ASSERT_NO_EXC EPTION);
41 document().view()->updateLayoutAndStyleIfNeededRecursive();
42 }
43
44 TEST_F(RenderObjectTest, DisplayNoneCreateObject)
45 {
46 setBodyInnerHTML("<div style='display:none'></div>");
47 EXPECT_EQ(nullptr, document().body()->firstChild()->renderer());
48 }
49
50 TEST_F(RenderObjectTest, DisplayBlockCreateObject)
51 {
52 setBodyInnerHTML("<foo style='display:block'></foo>");
53 RenderObject* renderer = document().body()->firstChild()->renderer();
54 EXPECT_NE(nullptr, renderer);
55 EXPECT_TRUE(renderer->isRenderBlockFlow());
56 }
57
58 TEST_F(RenderObjectTest, DisplayInlineBlockCreateObject)
59 {
60 setBodyInnerHTML("<foo style='display:inline-block'></foo>");
61 RenderObject* renderer = document().body()->firstChild()->renderer();
62 EXPECT_NE(nullptr, renderer);
63 EXPECT_TRUE(renderer->isRenderBlockFlow());
64 }
65
66
67
68 // Containing block test.
69 TEST_F(RenderObjectTest, ContainingBlockRenderViewShouldBeNull)
70 {
71 EXPECT_EQ(nullptr, renderView().containingBlock());
72 }
73
74 TEST_F(RenderObjectTest, ContainingBlockBodyShouldBeDocumentElement)
75 {
76 EXPECT_EQ(document().body()->renderer()->containingBlock(), document().docum entElement()->renderer());
77 }
78
79 TEST_F(RenderObjectTest, ContainingBlockDocumentElementShouldBeRenderView)
80 {
81 EXPECT_EQ(document().documentElement()->renderer()->containingBlock(), rende rView());
82 }
83
84 TEST_F(RenderObjectTest, ContainingBlockStaticRendererShouldBeParent)
85 {
86 setBodyInnerHTML("<foo style='position:static'></foo>");
87 RenderObject* bodyRenderer = document().body()->renderer();
88 RenderObject* renderer = bodyRenderer->slowFirstChild();
89 EXPECT_EQ(renderer->containingBlock(), bodyRenderer);
90 }
91
92 TEST_F(RenderObjectTest, ContainingBlockAbsoluteRendererShouldBeRenderView)
93 {
94 setBodyInnerHTML("<foo style='position:absolute'></foo>");
95 RenderObject* renderer = document().body()->renderer()->slowFirstChild();
96 EXPECT_EQ(renderer->containingBlock(), renderView());
97 }
98
99 TEST_F(RenderObjectTest, ContainingBlockAbsoluteRendererShouldBeNonStaticlyPosit ionedBlockAncestor)
100 {
101 setBodyInnerHTML("<div style='position:relative'><bar style='position:absolu te'></bar></div>");
102 RenderObject* containingBlockRenderer = document().body()->renderer()->slowF irstChild();
103 RenderObject* renderer = containingBlockRenderer->slowFirstChild();
104 EXPECT_EQ(renderer->containingBlock(), containingBlockRenderer);
105 }
106
107 TEST_F(RenderObjectTest, ContainingBlockAbsoluteRendererShouldNotBeNonStaticlyPo sitionedInlineAncestor)
108 {
109 setBodyInnerHTML("<span style='position:relative'><bar style='position:absol ute'></bar></span>");
110 RenderObject* bodyRenderer = document().body()->renderer();
111 RenderObject* renderer = bodyRenderer->slowFirstChild()->slowFirstChild();
112 EXPECT_EQ(renderer->containingBlock(), bodyRenderer);
113 }
114
115 } // namespace
OLDNEW
« no previous file with comments | « Source/core/core.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698