1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
// Copyright 2016 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/CSSParserFastPaths.h"
#include "core/css/CSSColorValue.h"
#include "core/css/CSSIdentifierValue.h"
#include "core/css/CSSValueList.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
TEST(CSSParserFastPathsTest, ParseKeyword) {
CSSValue* value = CSSParserFastPaths::maybeParseValue(
CSSPropertyFloat, "left", HTMLStandardMode);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(value->isIdentifierValue());
CSSIdentifierValue* identifierValue = toCSSIdentifierValue(value);
EXPECT_EQ(CSSValueLeft, identifierValue->getValueID());
value = CSSParserFastPaths::maybeParseValue(CSSPropertyFloat, "foo",
HTMLStandardMode);
ASSERT_EQ(nullptr, value);
}
TEST(CSSParserFastPathsTest, ParseInitialAndInheritKeyword) {
CSSValue* value = CSSParserFastPaths::maybeParseValue(
CSSPropertyMarginTop, "inherit", HTMLStandardMode);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(value->isInheritedValue());
value = CSSParserFastPaths::maybeParseValue(CSSPropertyMarginRight, "InHeriT",
HTMLStandardMode);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(value->isInheritedValue());
value = CSSParserFastPaths::maybeParseValue(CSSPropertyMarginBottom,
"initial", HTMLStandardMode);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(value->isInitialValue());
value = CSSParserFastPaths::maybeParseValue(CSSPropertyMarginLeft, "IniTiaL",
HTMLStandardMode);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(value->isInitialValue());
// Fast path doesn't handle short hands.
value = CSSParserFastPaths::maybeParseValue(CSSPropertyMargin, "initial",
HTMLStandardMode);
ASSERT_EQ(nullptr, value);
}
TEST(CSSParserFastPathsTest, ParseTransform) {
CSSValue* value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, "translate(5.5px, 5px)", HTMLStandardMode);
ASSERT_NE(nullptr, value);
ASSERT_TRUE(value->isValueList());
ASSERT_EQ("translate(5.5px, 5px)", value->cssText());
value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, "translate3d(5px, 5px, 10.1px)", HTMLStandardMode);
ASSERT_NE(nullptr, value);
ASSERT_TRUE(value->isValueList());
ASSERT_EQ("translate3d(5px, 5px, 10.1px)", value->cssText());
}
TEST(CSSParserFastPathsTest, ParseComplexTransform) {
// Random whitespace is on purpose.
static const char* kComplexTransform =
"translateX(5px) "
"translateZ(20.5px) "
"translateY(10px) "
"scale3d(0.5, 1, 0.7) "
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) ";
static const char* kComplexTransformNormalized =
"translateX(5px) "
"translateZ(20.5px) "
"translateY(10px) "
"scale3d(0.5, 1, 0.7) "
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)";
CSSValue* value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, kComplexTransform, HTMLStandardMode);
ASSERT_NE(nullptr, value);
ASSERT_TRUE(value->isValueList());
ASSERT_EQ(kComplexTransformNormalized, value->cssText());
}
TEST(CSSParserFastPathsTest, ParseTransformNotFastPath) {
CSSValue* value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, "rotateX(1deg)", HTMLStandardMode);
ASSERT_EQ(nullptr, value);
value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, "translateZ(1px) rotateX(1deg)", HTMLStandardMode);
ASSERT_EQ(nullptr, value);
}
TEST(CSSParserFastPathsTest, ParseInvalidTransform) {
CSSValue* value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, "rotateX(1deg", HTMLStandardMode);
ASSERT_EQ(nullptr, value);
value = CSSParserFastPaths::maybeParseValue(
CSSPropertyTransform, "translateZ(1px) (1px, 1px) rotateX(1deg",
HTMLStandardMode);
ASSERT_EQ(nullptr, value);
}
TEST(CSSParserFastPathsTest, ParseColorWithLargeAlpha) {
CSSValue* value = CSSParserFastPaths::parseColor("rgba(0,0,0,1893205797.13)",
HTMLStandardMode);
EXPECT_NE(nullptr, value);
EXPECT_TRUE(value->isColorValue());
EXPECT_EQ(Color::black, toCSSColorValue(*value).value());
}
} // namespace blink
|