1/* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#include "config.h" 32#include "core/html/HTMLDimension.h" 33 34#include "wtf/text/WTFString.h" 35#include <gtest/gtest.h> 36 37namespace blink { 38 39// This assertion-prettify function needs to be in the WebCore namespace. 40void PrintTo(const HTMLDimension& dimension, ::std::ostream* os) 41{ 42 *os << "HTMLDimension => type: " << dimension.type() << ", value=" << dimension.value(); 43} 44 45} 46 47using namespace blink; 48 49namespace { 50 51TEST(WebCoreHTMLDimension, parseListOfDimensionsEmptyString) 52{ 53 Vector<HTMLDimension> result = parseListOfDimensions(String("")); 54 ASSERT_EQ(Vector<HTMLDimension>(), result); 55} 56 57TEST(WebCoreHTMLDimension, parseListOfDimensionsNoNumberAbsolute) 58{ 59 Vector<HTMLDimension> result = parseListOfDimensions(String(" \t")); 60 ASSERT_EQ(1U, result.size()); 61 ASSERT_EQ(HTMLDimension(0, HTMLDimension::Relative), result[0]); 62} 63 64TEST(WebCoreHTMLDimension, parseListOfDimensionsNoNumberPercent) 65{ 66 Vector<HTMLDimension> result = parseListOfDimensions(String(" \t%")); 67 ASSERT_EQ(1U, result.size()); 68 ASSERT_EQ(HTMLDimension(0, HTMLDimension::Percentage), result[0]); 69} 70 71TEST(WebCoreHTMLDimension, parseListOfDimensionsNoNumberRelative) 72{ 73 Vector<HTMLDimension> result = parseListOfDimensions(String("\t *")); 74 ASSERT_EQ(1U, result.size()); 75 ASSERT_EQ(HTMLDimension(0, HTMLDimension::Relative), result[0]); 76} 77 78TEST(WebCoreHTMLDimension, parseListOfDimensionsSingleAbsolute) 79{ 80 Vector<HTMLDimension> result = parseListOfDimensions(String("10")); 81 82 ASSERT_EQ(1U, result.size()); 83 ASSERT_EQ(HTMLDimension(10, HTMLDimension::Absolute), result[0]); 84} 85 86TEST(WebCoreHTMLDimension, parseListOfDimensionsSinglePercentageWithSpaces) 87{ 88 Vector<HTMLDimension> result = parseListOfDimensions(String("50 %")); 89 90 ASSERT_EQ(1U, result.size()); 91 ASSERT_EQ(HTMLDimension(50, HTMLDimension::Percentage), result[0]); 92} 93 94TEST(WebCoreHTMLDimension, parseListOfDimensionsSingleRelative) 95{ 96 Vector<HTMLDimension> result = parseListOfDimensions(String("25*")); 97 98 ASSERT_EQ(1U, result.size()); 99 ASSERT_EQ(HTMLDimension(25, HTMLDimension::Relative), result[0]); 100} 101 102TEST(WebCoreHTMLDimension, parseListOfDimensionsDoubleAbsolute) 103{ 104 Vector<HTMLDimension> result = parseListOfDimensions(String("10.054")); 105 106 ASSERT_EQ(1U, result.size()); 107 ASSERT_EQ(HTMLDimension(10.054, HTMLDimension::Absolute), result[0]); 108} 109 110TEST(WebCoreHTMLDimension, parseListOfDimensionsLeadingSpaceAbsolute) 111{ 112 Vector<HTMLDimension> result = parseListOfDimensions(String("\t \t 10")); 113 114 ASSERT_EQ(1U, result.size()); 115 ASSERT_EQ(HTMLDimension(10, HTMLDimension::Absolute), result[0]); 116} 117 118TEST(WebCoreHTMLDimension, parseListOfDimensionsLeadingSpaceRelative) 119{ 120 Vector<HTMLDimension> result = parseListOfDimensions(String(" \r25*")); 121 122 ASSERT_EQ(1U, result.size()); 123 ASSERT_EQ(HTMLDimension(25, HTMLDimension::Relative), result[0]); 124} 125 126TEST(WebCoreHTMLDimension, parseListOfDimensionsLeadingSpacePercentage) 127{ 128 Vector<HTMLDimension> result = parseListOfDimensions(String("\n 25%")); 129 130 ASSERT_EQ(1U, result.size()); 131 ASSERT_EQ(HTMLDimension(25, HTMLDimension::Percentage), result[0]); 132} 133 134TEST(WebCoreHTMLDimension, parseListOfDimensionsDoublePercentage) 135{ 136 Vector<HTMLDimension> result = parseListOfDimensions(String("10.054%")); 137 138 ASSERT_EQ(1U, result.size()); 139 ASSERT_EQ(HTMLDimension(10.054, HTMLDimension::Percentage), result[0]); 140} 141 142TEST(WebCoreHTMLDimension, parseListOfDimensionsDoubleRelative) 143{ 144 Vector<HTMLDimension> result = parseListOfDimensions(String("10.054*")); 145 146 ASSERT_EQ(1U, result.size()); 147 ASSERT_EQ(HTMLDimension(10.054, HTMLDimension::Relative), result[0]); 148} 149 150TEST(WebCoreHTMLDimension, parseListOfDimensionsSpacesInIntegerDoubleAbsolute) 151{ 152 Vector<HTMLDimension> result = parseListOfDimensions(String("1\n0 .025%")); 153 154 ASSERT_EQ(1U, result.size()); 155 ASSERT_EQ(HTMLDimension(1, HTMLDimension::Absolute), result[0]); 156} 157 158TEST(WebCoreHTMLDimension, parseListOfDimensionsSpacesInIntegerDoublePercent) 159{ 160 Vector<HTMLDimension> result = parseListOfDimensions(String("1\n0 .025%")); 161 162 ASSERT_EQ(1U, result.size()); 163 ASSERT_EQ(HTMLDimension(1, HTMLDimension::Absolute), result[0]); 164} 165 166TEST(WebCoreHTMLDimension, parseListOfDimensionsSpacesInIntegerDoubleRelative) 167{ 168 Vector<HTMLDimension> result = parseListOfDimensions(String("1\n0 .025*")); 169 170 ASSERT_EQ(1U, result.size()); 171 ASSERT_EQ(HTMLDimension(1, HTMLDimension::Absolute), result[0]); 172} 173 174TEST(WebCoreHTMLDimension, parseListOfDimensionsSpacesInFractionAfterDotDoublePercent) 175{ 176 Vector<HTMLDimension> result = parseListOfDimensions(String("10. 0 25%")); 177 178 ASSERT_EQ(1U, result.size()); 179 ASSERT_EQ(HTMLDimension(10.025, HTMLDimension::Percentage), result[0]); 180} 181 182TEST(WebCoreHTMLDimension, parseListOfDimensionsSpacesInFractionAfterDigitDoublePercent) 183{ 184 Vector<HTMLDimension> result = parseListOfDimensions(String("10.05\r25%")); 185 186 ASSERT_EQ(1U, result.size()); 187 ASSERT_EQ(HTMLDimension(10.0525, HTMLDimension::Percentage), result[0]); 188} 189 190TEST(WebCoreHTMLDimension, parseListOfDimensionsTrailingComma) 191{ 192 Vector<HTMLDimension> result = parseListOfDimensions(String("10,")); 193 194 ASSERT_EQ(1U, result.size()); 195 ASSERT_EQ(HTMLDimension(10, HTMLDimension::Absolute), result[0]); 196} 197 198TEST(WebCoreHTMLDimension, parseListOfDimensionsTwoDimensions) 199{ 200 Vector<HTMLDimension> result = parseListOfDimensions(String("10*,25 %")); 201 202 ASSERT_EQ(2U, result.size()); 203 ASSERT_EQ(HTMLDimension(10, HTMLDimension::Relative), result[0]); 204 ASSERT_EQ(HTMLDimension(25, HTMLDimension::Percentage), result[1]); 205} 206 207TEST(WebCoreHTMLDimension, parseListOfDimensionsMultipleDimensionsWithSpaces) 208{ 209 Vector<HTMLDimension> result = parseListOfDimensions(String("10 * ,\t25 , 10.05\n5%")); 210 211 ASSERT_EQ(3U, result.size()); 212 ASSERT_EQ(HTMLDimension(10, HTMLDimension::Relative), result[0]); 213 ASSERT_EQ(HTMLDimension(25, HTMLDimension::Absolute), result[1]); 214 ASSERT_EQ(HTMLDimension(10.055, HTMLDimension::Percentage), result[2]); 215} 216 217TEST(WebCoreHTMLDimension, parseListOfDimensionsMultipleDimensionsWithOneEmpty) 218{ 219 Vector<HTMLDimension> result = parseListOfDimensions(String("2*,,8.%")); 220 221 ASSERT_EQ(3U, result.size()); 222 ASSERT_EQ(HTMLDimension(2, HTMLDimension::Relative), result[0]); 223 ASSERT_EQ(HTMLDimension(0, HTMLDimension::Relative), result[1]); 224 ASSERT_EQ(HTMLDimension(8., HTMLDimension::Percentage), result[2]); 225} 226 227} 228