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