From 17a2f0190e0670be1c1a2d9a8272080c5c7e5061 Mon Sep 17 00:00:00 2001 From: Onno van der Zee Date: Fri, 28 Aug 2015 11:57:53 +0200 Subject: [PATCH] A padding value can't be negative. See: http://www.w3.org/TR/CSS21/box.html#padding-properties http://www.w3.org/wiki/CSS/Properties/padding Closes: #159 --- src/css/ValidationTypes.js | 2 +- tests/css/CSSParserTests.htm | 44 ++++++++++++++++++++++++++++++++++++ tests/css/Validation.js | 16 +++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/css/ValidationTypes.js b/src/css/ValidationTypes.js index 538cd710..a27ab7b6 100644 --- a/src/css/ValidationTypes.js +++ b/src/css/ValidationTypes.js @@ -177,7 +177,7 @@ var ValidationTypes = { }, "": function(part){ - return this[""](part) || this[""](part); + return part.value >= 0 && (this[""](part) || this[""](part)); }, "": function(part){ diff --git a/tests/css/CSSParserTests.htm b/tests/css/CSSParserTests.htm index 0e6f72f5..4c464c43 100644 --- a/tests/css/CSSParserTests.htm +++ b/tests/css/CSSParserTests.htm @@ -1797,6 +1797,50 @@

CSS Parser Tests

}, + testPaddingLeft1: function(){ + var parser = new Parser({ strict: true}); + parser.addListener("property", function(event){ + assert.isNull(event.invalid); + }); + var result = parser.parse(".foo { padding-left: 6px; }"); + + }, + + testPaddingLeft2: function(){ + var parser = new Parser({ strict: true}); + parser.addListener("property", function(event){ + assert.isNull(event.invalid); + }); + var result = parser.parse(".foo { padding-left: 3%; }"); + }, + + testPaddingLeft3: function(){ + var parser = new Parser({ strict: true}); + parser.addListener("property", function(event){ + assert.isNull(event.invalid); + }); + var result = parser.parse(".foo { padding-left: inherit; }"); + + }, + + testInvalidPaddingLeft1: function(){ + var parser = new Parser({ strict: true}); + parser.addListener("property", function(event){ + assert.isNotNull(event.invalid); + assert.areEqual("Expected length greater than 0, percentage greater than 0 or inherit but found '-10px'.", event.invalid.message); + }); + var result = parser.parse(".foo { padding-left: -10px; }"); + }, + + testInvalidPaddingLeft2: function(){ + var parser = new Parser({ strict: true}); + parser.addListener("property", function(event){ + assert.isNotNull(event.invalid); + assert.areEqual("Expected length, percentage or inherit but found 'auto'.", event.invalid.message); + }); + var result = parser.parse(".foo { padding-left: auto; }"); + }, + testBorderWidth1: function(){ var parser = new Parser({ strict: true}); parser.addListener("property", function(event){ diff --git a/tests/css/Validation.js b/tests/css/Validation.js index 53691856..3bfaa8ba 100644 --- a/tests/css/Validation.js +++ b/tests/css/Validation.js @@ -1054,6 +1054,22 @@ } })); + suite.add(new ValidationTestCase({ + property: "padding-left", + + valid: [ + "6px", + "3%", + "inherit" + ], + + invalid: { + "-10px" : "Expected ( | inherit) but found '-10px'.", + "-3%" : "Expected ( | inherit) but found '-3%'.", + "auto" : "Expected ( | inherit) but found 'auto'." + } + })); + suite.add(new ValidationTestCase({ property: "will-change",