1e6d4491e48613634a83c1957c72759da80987961Ben Murdoch/*
2e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * Copyright (C) 2013 Google Inc. All rights reserved.
3e6d4491e48613634a83c1957c72759da80987961Ben Murdoch *
4e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * Redistribution and use in source and binary forms, with or without
5e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * modification, are permitted provided that the following conditions are
6e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * met:
7e6d4491e48613634a83c1957c72759da80987961Ben Murdoch *
8e6d4491e48613634a83c1957c72759da80987961Ben Murdoch *     * Redistributions of source code must retain the above copyright
9e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * notice, this list of conditions and the following disclaimer.
10e6d4491e48613634a83c1957c72759da80987961Ben Murdoch *     * Redistributions in binary form must reproduce the above
11e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * copyright notice, this list of conditions and the following disclaimer
12e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * in the documentation and/or other materials provided with the
13e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * distribution.
14e6d4491e48613634a83c1957c72759da80987961Ben Murdoch *     * Neither the name of Google Inc. nor the names of its
15e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * contributors may be used to endorse or promote products derived from
16e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * this software without specific prior written permission.
17e6d4491e48613634a83c1957c72759da80987961Ben Murdoch *
18e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28e6d4491e48613634a83c1957c72759da80987961Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29e6d4491e48613634a83c1957c72759da80987961Ben Murdoch */
30e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
31e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "config.h"
32e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "core/rendering/RenderOverflow.h"
33e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
34e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "core/platform/graphics/LayoutRect.h"
35e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
36e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include <gtest/gtest.h>
37e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
38e6d4491e48613634a83c1957c72759da80987961Ben Murdochusing namespace WebCore;
39e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
40e6d4491e48613634a83c1957c72759da80987961Ben Murdochnamespace WebCore {
41e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
42e6d4491e48613634a83c1957c72759da80987961Ben Murdoch// FIXME: Move this somewhere more generic.
43e6d4491e48613634a83c1957c72759da80987961Ben Murdochvoid PrintTo(const LayoutRect& rect, std::ostream* os)
44e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
45e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    *os << "LayoutRect("
46e6d4491e48613634a83c1957c72759da80987961Ben Murdoch        << rect.x().toFloat() << ", "
47e6d4491e48613634a83c1957c72759da80987961Ben Murdoch        << rect.y().toFloat() << ", "
48e6d4491e48613634a83c1957c72759da80987961Ben Murdoch        << rect.width().toFloat() << ", "
49e6d4491e48613634a83c1957c72759da80987961Ben Murdoch        << rect.height().toFloat() << ")";
50e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
51e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
52e6d4491e48613634a83c1957c72759da80987961Ben Murdoch} // namespace WebCore
53e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
54e6d4491e48613634a83c1957c72759da80987961Ben Murdochnamespace {
55e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
56e6d4491e48613634a83c1957c72759da80987961Ben MurdochLayoutRect initialLayoutOverflow()
57e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
58e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    return LayoutRect(10, 10, 80, 80);
59e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
60e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
61e6d4491e48613634a83c1957c72759da80987961Ben MurdochLayoutRect initialVisualOverflow()
62e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
63e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    return LayoutRect(0, 0, 100, 100);
64e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
65e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
66e6d4491e48613634a83c1957c72759da80987961Ben Murdochclass RenderOverflowTest : public testing::Test {
67e6d4491e48613634a83c1957c72759da80987961Ben Murdochprotected:
68e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    RenderOverflowTest() : m_overflow(initialLayoutOverflow(), initialVisualOverflow()) { }
69e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    RenderOverflow m_overflow;
70e6d4491e48613634a83c1957c72759da80987961Ben Murdoch};
71e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
72e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, InitialOverflowRects)
73e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
74e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(initialLayoutOverflow(), m_overflow.layoutOverflowRect());
75e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(initialVisualOverflow(), m_overflow.visualOverflowRect());
76e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_TRUE(m_overflow.contentsVisualOverflowRect().isEmpty());
77e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
78e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
79e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddLayoutOverflowOutsideExpandsRect)
80e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
81e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addLayoutOverflow(LayoutRect(0, 10, 30, 10));
82e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, 10, 90, 80), m_overflow.layoutOverflowRect());
83e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
84e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
85e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddLayoutOverflowInsideDoesNotAffectRect)
86e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
87e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addLayoutOverflow(LayoutRect(50, 50, 10, 20));
88e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(initialLayoutOverflow(), m_overflow.layoutOverflowRect());
89e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
90e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
91e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddLayoutOverflowEmpty)
92e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
93e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // This test documents the existing behavior so that we are aware when/if
94e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // it changes. It would also be reasonable for addLayoutOverflow to be
95e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // a no-op in this situation.
96e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addLayoutOverflow(LayoutRect(200, 200, 0, 0));
97e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(10, 10, 190, 190), m_overflow.layoutOverflowRect());
98e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
99e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
100e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddLayoutOverflowDoesNotAffectVisualOverflow)
101e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
102e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addLayoutOverflow(LayoutRect(300, 300, 300, 300));
103e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(initialVisualOverflow(), m_overflow.visualOverflowRect());
104e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
105e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
106e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddLayoutOverflowDoesNotAffectContentsVisualOverflow)
107e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
108e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addLayoutOverflow(LayoutRect(300, 300, 300, 300));
109e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_TRUE(m_overflow.contentsVisualOverflowRect().isEmpty());
110e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
111e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
112e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddVisualOverflowOutsideExpandsRect)
113e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
114e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addVisualOverflow(LayoutRect(150, -50, 10, 10));
115e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, -50, 160, 150), m_overflow.visualOverflowRect());
116e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
117e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
118e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddVisualOverflowInsideDoesNotAffectRect)
119e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
120e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addVisualOverflow(LayoutRect(0, 10, 90, 90));
121e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(initialVisualOverflow(), m_overflow.visualOverflowRect());
122e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
123e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
124e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddVisualOverflowEmpty)
125e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
126e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // This test documents the existing behavior so that we are aware when/if
127e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // it changes. It would also be reasonable for addVisualOverflow to be
128e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // a no-op in this situation.
129e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addVisualOverflow(LayoutRect(200, 200, 0, 0));
130e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, 0, 200, 200), m_overflow.visualOverflowRect());
131e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
132e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
133e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddVisualOverflowDoesNotAffectLayoutOverflow)
134e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
135e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addVisualOverflow(LayoutRect(300, 300, 300, 300));
136e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(initialLayoutOverflow(), m_overflow.layoutOverflowRect());
137e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
138e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
139e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddVisualOverflowDoesNotAffectContentsVisualOverflow)
140e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
141e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addVisualOverflow(LayoutRect(300, 300, 300, 300));
142e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_TRUE(m_overflow.contentsVisualOverflowRect().isEmpty());
143e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
144e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
145e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddContentsVisualOverflowFirstCall)
146e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
147e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(0, 0, 10, 10));
148e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, 0, 10, 10), m_overflow.contentsVisualOverflowRect());
149e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
150e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
151e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddContentsVisualOverflowUnitesRects)
152e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
153e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(0, 0, 10, 10));
154e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(80, 80, 10, 10));
155e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, 0, 90, 90), m_overflow.contentsVisualOverflowRect());
156e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
157e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
158e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddContentsVisualOverflowRectWithinRect)
159e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
160e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(0, 0, 10, 10));
161e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(2, 2, 5, 5));
162e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, 0, 10, 10), m_overflow.contentsVisualOverflowRect());
163e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
164e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
165e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, AddContentsVisualOverflowEmpty)
166e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
167e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // This test documents the existing behavior so that we are aware when/if
168e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // it changes. It would also be reasonable for addContentsVisualOverflow to
169e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    // expand in this situation.
170e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(0, 0, 10, 10));
171e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(20, 20, 0, 0));
172e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(0, 0, 10, 10), m_overflow.contentsVisualOverflowRect());
173e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
174e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
175e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, MoveAffectsLayoutOverflow)
176e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
177e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.move(500, 100);
178e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(510, 110, 80, 80), m_overflow.layoutOverflowRect());
179e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
180e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
181e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, MoveAffectsVisualOverflow)
182e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
183e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.move(500, 100);
184e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(500, 100, 100, 100), m_overflow.visualOverflowRect());
185e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
186e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
187e6d4491e48613634a83c1957c72759da80987961Ben MurdochTEST_F(RenderOverflowTest, MoveAffectsContentsVisualOverflow)
188e6d4491e48613634a83c1957c72759da80987961Ben Murdoch{
189e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.addContentsVisualOverflow(LayoutRect(0, 0, 10, 10));
190e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    m_overflow.move(500, 100);
191e6d4491e48613634a83c1957c72759da80987961Ben Murdoch    EXPECT_EQ(LayoutRect(500, 100, 10, 10), m_overflow.contentsVisualOverflowRect());
192e6d4491e48613634a83c1957c72759da80987961Ben Murdoch}
193e6d4491e48613634a83c1957c72759da80987961Ben Murdoch
194e6d4491e48613634a83c1957c72759da80987961Ben Murdoch} // namespace
195