blob: ddf5f2097cb30289616a6f49e9f8fe8e36ac929d [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/css/parser/CSSPropertyParser.h"
#include "core/css/CSSValueList.h"
#include "core/css/parser/CSSParser.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
static int computeNumberOfTracks(CSSValueList* valueList)
{
int numberOfTracks = 0;
for (auto& value : *valueList) {
if (value->isGridLineNamesValue())
continue;
++numberOfTracks;
}
return numberOfTracks;
}
TEST(CSSPropertyParserTest, GridTrackLimit1)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(999999, 20px)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit2)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(999999, 20px)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit3)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(1000000, 10%)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit4)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(1000000, 10%)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit5)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(1000000, [first] min-content [last])");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit6)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(1000000, [first] min-content [last])");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit7)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(1000001, auto)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit8)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(1000001, auto)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit9)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(400000, 2em minmax(10px, max-content) 0.5fr)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit10)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(400000, 2em minmax(10px, max-content) 0.5fr)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit11)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(600000, [first] 3vh 10% 2fr [nav] 10px auto 1fr 6em [last])");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit12)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(600000, [first] 3vh 10% 2fr [nav] 10px auto 1fr 6em [last])");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit13)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(100000000000000000000, 10% 1fr)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit14)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(100000000000000000000, 10% 1fr)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 1000000);
}
TEST(CSSPropertyParserTest, GridTrackLimit15)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateColumns, "repeat(100000000000000000000, 10% 5em 1fr auto auto 15px min-content)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
TEST(CSSPropertyParserTest, GridTrackLimit16)
{
RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSPropertyGridTemplateRows, "repeat(100000000000000000000, 10% 5em 1fr auto auto 15px min-content)");
ASSERT_TRUE(value);
ASSERT_TRUE(value->isValueList());
EXPECT_EQ(computeNumberOfTracks(toCSSValueList(value.get())), 999999);
}
} // namespace blink