Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[SVG] Update SVG source to return string literals as ASCIILiteral and…
… add test cases for case sensitivity

https://bugs.webkit.org/show_bug.cgi?id=154373

Patch by Nikos Andronikos <nikos.andronikos-webkit@cisra.canon.com.au> on 2016-02-23
Reviewed by Youenn Fablet.

Source/WebCore:

Update SVGAnimatedEnumeration toString method to return ASCIILiteral for string literals and add test cases for
case-sensitivity for these elements.

Test: svg/dom/SVGAnimatedEnumeration-case-sensitive.html

* svg/SVGComponentTransferFunctionElement.h:
(WebCore::SVGPropertyTraits<ComponentTransferType>::toString):
* svg/SVGFEBlendElement.h:
(WebCore::SVGPropertyTraits<BlendMode>::toString):
* svg/SVGFEColorMatrixElement.h:
(WebCore::SVGPropertyTraits<ColorMatrixType>::toString):
* svg/SVGFECompositeElement.h:
(WebCore::SVGPropertyTraits<CompositeOperationType>::toString):
* svg/SVGFEConvolveMatrixElement.h:
(WebCore::SVGPropertyTraits<EdgeModeType>::toString):
* svg/SVGFEDisplacementMapElement.h:
(WebCore::SVGPropertyTraits<ChannelSelectorType>::toString):
* svg/SVGFEMorphologyElement.h:
(WebCore::SVGPropertyTraits<MorphologyOperatorType>::toString):
* svg/SVGFETurbulenceElement.h:
(WebCore::SVGPropertyTraits<SVGStitchOptions>::toString):
(WebCore::SVGPropertyTraits<TurbulenceType>::toString):
* svg/SVGGradientElement.h:
(WebCore::SVGPropertyTraits<SVGSpreadMethodType>::toString):
* svg/SVGMarkerElement.h:
(WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::toString):
* svg/SVGTextContentElement.h:
(WebCore::SVGPropertyTraits<SVGLengthAdjustType>::toString):
* svg/SVGTextPathElement.h:
(WebCore::SVGPropertyTraits<SVGTextPathMethodType>::toString):
(WebCore::SVGPropertyTraits<SVGTextPathSpacingType>::toString):
* svg/SVGUnitTypes.h:
(WebCore::SVGPropertyTraits<SVGUnitTypes::SVGUnitType>::toString):

LayoutTests:

Add test cases for case-sensitivity for SVGAnimatedEnumeration elements.

* svg/dom/SVGAnimatedEnumeration-case-sensitive-expected.txt: Added.
* svg/dom/SVGAnimatedEnumeration-case-sensitive.html: Added.
* svg/dom/script-tests/SVGAnimatedEnumeration-case-sensitive.js: Added.
(testCaseSensitivity):

Canonical link: https://commits.webkit.org/172683@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196977 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
nikosandronikos authored and webkit-commit-queue committed Feb 23, 2016
1 parent d06e228 commit a2f4ffd
Show file tree
Hide file tree
Showing 18 changed files with 808 additions and 47 deletions.
14 changes: 14 additions & 0 deletions LayoutTests/ChangeLog
@@ -1,3 +1,17 @@
2016-02-23 Nikos Andronikos <nikos.andronikos-webkit@cisra.canon.com.au>

[SVG] Update SVG source to return string literals as ASCIILiteral and add test cases for case sensitivity
https://bugs.webkit.org/show_bug.cgi?id=154373

Reviewed by Youenn Fablet.

Add test cases for case-sensitivity for SVGAnimatedEnumeration elements.

* svg/dom/SVGAnimatedEnumeration-case-sensitive-expected.txt: Added.
* svg/dom/SVGAnimatedEnumeration-case-sensitive.html: Added.
* svg/dom/script-tests/SVGAnimatedEnumeration-case-sensitive.js: Added.
(testCaseSensitivity):

2016-02-22 Myles C. Maxfield <mmaxfield@apple.com>

Font features specified in @font-face blocks don't apply to local() families
Expand Down
487 changes: 487 additions & 0 deletions LayoutTests/svg/dom/SVGAnimatedEnumeration-case-sensitive-expected.txt

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions LayoutTests/svg/dom/SVGAnimatedEnumeration-case-sensitive.html
@@ -0,0 +1,12 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script src="script-tests/SVGAnimatedEnumeration-case-sensitive.js"></script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
@@ -0,0 +1,207 @@
description("This test checks the case-sensitivity of SVGAnimatedEnumeration elements");

var svgAnimatedEnumeration = {

"SVGComponentTransferFunctionElement" : {
"type" : [
{"id" : "identity", "val" : "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY"},
{"id" : "table", "val" : "SVG_FECOMPONENTTRANSFER_TYPE_TABLE"},
{"id" : "discrete", "val" : "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE"},
{"id" : "linear", "val" : "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR"},
{"id" : "gamma", "val" : "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA"}
]
},
"SVGFEBlendElement" : {
"mode" : [
{"id" : "normal", "val" : "SVG_FEBLEND_MODE_NORMAL"},
{"id" : "multiply", "val" : "SVG_FEBLEND_MODE_MULTIPLY"},
{"id" : "screen", "val" : "SVG_FEBLEND_MODE_SCREEN"},
{"id" : "darken", "val" : "SVG_FEBLEND_MODE_DARKEN"},
{"id" : "lighten", "val" : "SVG_FEBLEND_MODE_LIGHTEN"}
]
},
"SVGFEColorMatrixElement" : {
"type" : [
{"id" : "matrix", "val" : "SVG_FECOLORMATRIX_TYPE_MATRIX"},
{"id" : "saturate", "val" : "SVG_FECOLORMATRIX_TYPE_SATURATE"},
{"id" : "hueRotate", "val" : "SVG_FECOLORMATRIX_TYPE_HUEROTATE"},
{"id" : "luminanceToAlpha", "val" : "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA"}
]
},
"SVGFECompositeElement" : {
"operator" : [
{"id" : "over", "val" : "SVG_FECOMPOSITE_OPERATOR_OVER"},
{"id" : "in", "val" : "SVG_FECOMPOSITE_OPERATOR_IN"},
{"id" : "out", "val" : "SVG_FECOMPOSITE_OPERATOR_OUT"},
{"id" : "atop", "val" : "SVG_FECOMPOSITE_OPERATOR_ATOP"},
{"id" : "xor", "val" : "SVG_FECOMPOSITE_OPERATOR_XOR"},
{"id" : "arithmetic", "val" : "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC"}
]
},
"SVGFEConvolveMatrixElement" : {
"edgeMode" : [
{"id" : "duplicate", "val" : "SVG_EDGEMODE_DUPLICATE"},
{"id" : "wrap", "val" : "SVG_EDGEMODE_WRAP"},
{"id" : "none", "val" : "SVG_EDGEMODE_NONE"}
]
},
"SVGFEDisplacementMapElement" : {
"xChannelSelector" : [
{"id" : "R", "val" : "SVG_CHANNEL_R"},
{"id" : "G", "val" : "SVG_CHANNEL_G"},
{"id" : "B", "val" : "SVG_CHANNEL_B"},
{"id" : "A", "val" : "SVG_CHANNEL_A"}
]
},
"SVGFEMorphologyElement" : {
"operator" : [
{"id" : "erode", "val" : "SVG_MORPHOLOGY_OPERATOR_ERODE"},
{"id" : "dilate", "val" : "SVG_MORPHOLOGY_OPERATOR_DILATE"}
]
},
"SVGFETurbulenceElement" : {
"type" : [
{"id" : "fractalNoise", "val" : "SVG_TURBULENCE_TYPE_FRACTALNOISE"},
{"id" : "turbulence", "val" : "SVG_TURBULENCE_TYPE_TURBULENCE"}
],
"stitchTiles" : [
{"id" : "stitch", "val" : "SVG_STITCHTYPE_STITCH"},
{"id" : "noStitch", "val" : "SVG_STITCHTYPE_NOSTITCH"}
]
},
"SVGGradientElement" : {
"spreadMethod" : [
{"id" : "pad", "val" : "SVG_SPREADMETHOD_PAD"},
{"id" : "reflect", "val" : "SVG_SPREADMETHOD_REFLECT"},
{"id" : "repeat", "val" : "SVG_SPREADMETHOD_REPEAT"}
]
},
"SVGMarkerElement" : {
"markerUnits" : [
{"id" : "userSpaceOnUse", "val" : "SVG_MARKERUNITS_USERSPACEONUSE"},
{"id" : "strokeWidth", "val" : "SVG_MARKERUNITS_STROKEWIDTH"}
]
},
"SVGTextContentElement" : {
"lengthAdjust" : [
{"id" : "spacing", "val" : "LENGTHADJUST_SPACING"},
{"id" : "spacingAndGlyphs", "val" : "LENGTHADJUST_SPACINGANDGLYPHS"}
]
},
"SVGTextPathElement" : {
"method" : [
{"id" : "align", "val" : "TEXTPATH_METHODTYPE_ALIGN"},
{"id" : "stretch", "val" : "TEXTPATH_METHODTYPE_STRETCH"}
],
"spacing" : [
{"id" : "auto", "val" : "TEXTPATH_SPACINGTYPE_AUTO"},
{"id" : "exact", "val" : "TEXTPATH_SPACINGTYPE_EXACT"}
]
},
// All *Units attributes in SVG use SVGUnitTypes so we only need to test this once.
"SVGUnitTypes" : {
"gradientUnits" : [
{"id" : "userSpaceOnUse", "val" : "SVG_UNIT_TYPE_USERSPACEONUSE"},
{"id" : "objectBoundingBox", "val" : "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX"}
]
},
};

function testCaseSensitivity(elementType, element, enumType)
{
debug("");
debug("Check valid " + element.tagName + " '" + enumType + "'");

var enumValues = svgAnimatedEnumeration[elementType][enumType];

for (var i = 0; i < enumValues.length; i++) {
debug("");
shouldBeUndefined(element.id + ".setAttribute('" + enumType + "', '" + enumValues[i].id + "')");
shouldBeEqualToString(element.id + ".getAttribute('" + enumType + "')", enumValues[i].id);
shouldBe(element.id + "." + enumType + ".baseVal", elementType + "." + enumValues[i].val);
}

debug("");
debug("Check invalid case " + element.tagName + " '" + enumType + "'");
for (var i = 0; i < enumValues.length; i++) {
var val = enumValues[i].id;
var alt_val = enumValues[((i + 1) % enumValues.length)];

debug("");

debug(element.id + ".setAttribute('" + enumType + "', '" + alt_val.id + "')");
element.setAttribute(enumType, alt_val.id);

var val_check = (val.toUpperCase() == val) ? val.toLowerCase() : val.toUpperCase();
shouldBeUndefined(element.id + ".setAttribute('" + enumType + "', '" + val_check + "')");
shouldBeEqualToString(element.id + ".getAttribute('" + enumType + "')", val_check);
shouldBe(element.id + "." + enumType + ".baseVal", elementType + "." + alt_val.val);
}
}

// SVGComponentTransferFunctionElement
var transferFunctionElement = document.createElementNS("http://www.w3.org/2000/svg", "feFuncR");
transferFunctionElement.id = "transferFunctionElement";
testCaseSensitivity("SVGComponentTransferFunctionElement", transferFunctionElement, "type");

// SVGFEBlendElement
var feBlendElement = document.createElementNS("http://www.w3.org/2000/svg", "feBlend");
feBlendElement.id = "feBlendElement";
testCaseSensitivity("SVGFEBlendElement", feBlendElement, "mode");

// SVGFEColorMatrixElement
var feColorMatrixElement = document.createElementNS("http://www.w3.org/2000/svg", "feColorMatrix");
feColorMatrixElement.id = "feColorMatrixElement";
testCaseSensitivity("SVGFEColorMatrixElement", feColorMatrixElement, "type");

// SVGFECompositeElement
var feCompositeElement = document.createElementNS("http://www.w3.org/2000/svg", "feComposite");
feCompositeElement.id = "feCompositeElement";
testCaseSensitivity("SVGFECompositeElement", feCompositeElement, "operator");

// SVGFEConvolveMatrixElement
var feConvolveMatrixElement = document.createElementNS("http://www.w3.org/2000/svg", "feConvolveMatrix");
feConvolveMatrixElement.id = "feConvolveMatrixElement";
testCaseSensitivity("SVGFEConvolveMatrixElement", feConvolveMatrixElement, "edgeMode");

// SVGFEDisplacementMapElement
var feDisplacementMapElement = document.createElementNS("http://www.w3.org/2000/svg", "feDisplacementMap");
feDisplacementMapElement.id = "feDisplacementMapElement";
testCaseSensitivity("SVGFEDisplacementMapElement", feDisplacementMapElement, "xChannelSelector");

// SVGFEMorphologyElement
var feMorphologyElement = document.createElementNS("http://www.w3.org/2000/svg", "feMorphology");
feMorphologyElement.id = "feMorphologyElement";
testCaseSensitivity("SVGFEMorphologyElement", feMorphologyElement, "operator");

// SVGFETurbulenceElement
var feTurbulenceElement = document.createElementNS("http://www.w3.org/2000/svg", "feTurbulence");
feTurbulenceElement.id = "feTurbulenceElement";
testCaseSensitivity("SVGFETurbulenceElement", feTurbulenceElement, "type");
testCaseSensitivity("SVGFETurbulenceElement", feTurbulenceElement, "stitchTiles");

// SVGGradientElement
var gradientElement = document.createElementNS("http://www.w3.org/2000/svg", "linearGradient");
gradientElement.id = "gradientElement";
testCaseSensitivity("SVGGradientElement", gradientElement, "spreadMethod");
testCaseSensitivity("SVGUnitTypes", gradientElement, "gradientUnits");

// SVGMarkerElement
var markerElement = document.createElementNS("http://www.w3.org/2000/svg", "marker");
markerElement.id = "markerElement";
testCaseSensitivity("SVGMarkerElement", markerElement, "markerUnits");

// SVGTextContentElement
var textContentElement = document.createElementNS("http://www.w3.org/2000/svg", "text");
textContentElement.id = "textContentElement";
testCaseSensitivity("SVGTextContentElement", textContentElement, "lengthAdjust");

// SVGTextPathElement
var textPathElement = document.createElementNS("http://www.w3.org/2000/svg", "textPath");
textPathElement.id = "textPathElement";
testCaseSensitivity("SVGTextPathElement", textPathElement, "method");
testCaseSensitivity("SVGTextPathElement", textPathElement, "spacing");

debug("");

successfullyParsed = true;
41 changes: 41 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,44 @@
2016-02-23 Nikos Andronikos <nikos.andronikos-webkit@cisra.canon.com.au>

[SVG] Update SVG source to return string literals as ASCIILiteral and add test cases for case sensitivity
https://bugs.webkit.org/show_bug.cgi?id=154373

Reviewed by Youenn Fablet.

Update SVGAnimatedEnumeration toString method to return ASCIILiteral for string literals and add test cases for
case-sensitivity for these elements.

Test: svg/dom/SVGAnimatedEnumeration-case-sensitive.html

* svg/SVGComponentTransferFunctionElement.h:
(WebCore::SVGPropertyTraits<ComponentTransferType>::toString):
* svg/SVGFEBlendElement.h:
(WebCore::SVGPropertyTraits<BlendMode>::toString):
* svg/SVGFEColorMatrixElement.h:
(WebCore::SVGPropertyTraits<ColorMatrixType>::toString):
* svg/SVGFECompositeElement.h:
(WebCore::SVGPropertyTraits<CompositeOperationType>::toString):
* svg/SVGFEConvolveMatrixElement.h:
(WebCore::SVGPropertyTraits<EdgeModeType>::toString):
* svg/SVGFEDisplacementMapElement.h:
(WebCore::SVGPropertyTraits<ChannelSelectorType>::toString):
* svg/SVGFEMorphologyElement.h:
(WebCore::SVGPropertyTraits<MorphologyOperatorType>::toString):
* svg/SVGFETurbulenceElement.h:
(WebCore::SVGPropertyTraits<SVGStitchOptions>::toString):
(WebCore::SVGPropertyTraits<TurbulenceType>::toString):
* svg/SVGGradientElement.h:
(WebCore::SVGPropertyTraits<SVGSpreadMethodType>::toString):
* svg/SVGMarkerElement.h:
(WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::toString):
* svg/SVGTextContentElement.h:
(WebCore::SVGPropertyTraits<SVGLengthAdjustType>::toString):
* svg/SVGTextPathElement.h:
(WebCore::SVGPropertyTraits<SVGTextPathMethodType>::toString):
(WebCore::SVGPropertyTraits<SVGTextPathSpacingType>::toString):
* svg/SVGUnitTypes.h:
(WebCore::SVGPropertyTraits<SVGUnitTypes::SVGUnitType>::toString):

2016-02-23 Csaba Osztrogonác <ossy@webkit.org>

[Mac][cmake] Unreviewed speculative buildfix after r196779. Just for fun.
Expand Down
10 changes: 5 additions & 5 deletions Source/WebCore/svg/SVGComponentTransferFunctionElement.h
Expand Up @@ -38,15 +38,15 @@ struct SVGPropertyTraits<ComponentTransferType> {
case FECOMPONENTTRANSFER_TYPE_UNKNOWN:
return emptyString();
case FECOMPONENTTRANSFER_TYPE_IDENTITY:
return "identity";
return ASCIILiteral("identity");
case FECOMPONENTTRANSFER_TYPE_TABLE:
return "table";
return ASCIILiteral("table");
case FECOMPONENTTRANSFER_TYPE_DISCRETE:
return "discrete";
return ASCIILiteral("discrete");
case FECOMPONENTTRANSFER_TYPE_LINEAR:
return "linear";
return ASCIILiteral("linear");
case FECOMPONENTTRANSFER_TYPE_GAMMA:
return "gamma";
return ASCIILiteral("gamma");
}

ASSERT_NOT_REACHED();
Expand Down
10 changes: 5 additions & 5 deletions Source/WebCore/svg/SVGFEBlendElement.h
Expand Up @@ -36,15 +36,15 @@ struct SVGPropertyTraits<BlendMode> {
{
switch (type) {
case BlendModeNormal:
return "normal";
return ASCIILiteral("normal");
case BlendModeMultiply:
return "multiply";
return ASCIILiteral("multiply");
case BlendModeScreen:
return "screen";
return ASCIILiteral("screen");
case BlendModeDarken:
return "darken";
return ASCIILiteral("darken");
case BlendModeLighten:
return "lighten";
return ASCIILiteral("lighten");
default:
return emptyString();
}
Expand Down
8 changes: 4 additions & 4 deletions Source/WebCore/svg/SVGFEColorMatrixElement.h
Expand Up @@ -38,13 +38,13 @@ struct SVGPropertyTraits<ColorMatrixType> {
case FECOLORMATRIX_TYPE_UNKNOWN:
return emptyString();
case FECOLORMATRIX_TYPE_MATRIX:
return "matrix";
return ASCIILiteral("matrix");
case FECOLORMATRIX_TYPE_SATURATE:
return "saturate";
return ASCIILiteral("saturate");
case FECOLORMATRIX_TYPE_HUEROTATE:
return "hueRotate";
return ASCIILiteral("hueRotate");
case FECOLORMATRIX_TYPE_LUMINANCETOALPHA:
return "luminanceToAlpha";
return ASCIILiteral("luminanceToAlpha");
}

ASSERT_NOT_REACHED();
Expand Down
14 changes: 7 additions & 7 deletions Source/WebCore/svg/SVGFECompositeElement.h
Expand Up @@ -41,19 +41,19 @@ struct SVGPropertyTraits<CompositeOperationType> {
case FECOMPOSITE_OPERATOR_UNKNOWN:
return emptyString();
case FECOMPOSITE_OPERATOR_OVER:
return "over";
return ASCIILiteral("over");
case FECOMPOSITE_OPERATOR_IN:
return "in";
return ASCIILiteral("in");
case FECOMPOSITE_OPERATOR_OUT:
return "out";
return ASCIILiteral("out");
case FECOMPOSITE_OPERATOR_ATOP:
return "atop";
return ASCIILiteral("atop");
case FECOMPOSITE_OPERATOR_XOR:
return "xor";
return ASCIILiteral("xor");
case FECOMPOSITE_OPERATOR_ARITHMETIC:
return "arithmetic";
return ASCIILiteral("arithmetic");
case FECOMPOSITE_OPERATOR_LIGHTER:
return "lighter";
return ASCIILiteral("lighter");
}

ASSERT_NOT_REACHED();
Expand Down
6 changes: 3 additions & 3 deletions Source/WebCore/svg/SVGFEConvolveMatrixElement.h
Expand Up @@ -40,11 +40,11 @@ struct SVGPropertyTraits<EdgeModeType> {
case EDGEMODE_UNKNOWN:
return emptyString();
case EDGEMODE_DUPLICATE:
return "duplicate";
return ASCIILiteral("duplicate");
case EDGEMODE_WRAP:
return "wrap";
return ASCIILiteral("wrap");
case EDGEMODE_NONE:
return "none";
return ASCIILiteral("none");
}

ASSERT_NOT_REACHED();
Expand Down

0 comments on commit a2f4ffd

Please sign in to comment.