From 12f24b3f730d2b90845f7264248508e28cb1b31c Mon Sep 17 00:00:00 2001 From: Edgar Chen Date: Sat, 14 Dec 2019 04:40:14 +0000 Subject: [PATCH] Bug 1603615 - [Clamp] and [EnforceRange] should only appear on integer types; r=bzbarsky Differential Revision: https://phabricator.services.mozilla.com/D57018 --HG-- extra : moz-landing-system : lando --- dom/bindings/parser/WebIDL.py | 4 +- .../parser/tests/test_attributes_on_types.py | 42 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/dom/bindings/parser/WebIDL.py b/dom/bindings/parser/WebIDL.py index 13f9fd70bfc5..d38e46688e21 100644 --- a/dom/bindings/parser/WebIDL.py +++ b/dom/bindings/parser/WebIDL.py @@ -3162,7 +3162,7 @@ class IDLBuiltinType(IDLType): self._clamped = None self._rangeEnforced = None self._withTreatNullAs = None - if self.isNumeric(): + if self.isInteger(): if clamp: self.clamp = True self.name = "Clamped" + self.name @@ -3172,7 +3172,7 @@ class IDLBuiltinType(IDLType): self.name = "RangeEnforced" + self.name self._extendedAttrDict["EnforceRange"] = True elif clamp or enforceRange: - raise WebIDLError("Non-numeric types cannot be [Clamp] or [EnforceRange]", attrLocation) + raise WebIDLError("Non-integer types cannot be [Clamp] or [EnforceRange]", attrLocation) if self.isDOMString(): if treatNullAsEmpty: self.treatNullAsEmpty = True diff --git a/dom/bindings/parser/tests/test_attributes_on_types.py b/dom/bindings/parser/tests/test_attributes_on_types.py index 43daca3c453c..b1175c57ad80 100644 --- a/dom/bindings/parser/tests/test_attributes_on_types.py +++ b/dom/bindings/parser/tests/test_attributes_on_types.py @@ -167,30 +167,32 @@ def WebIDLTest(parser, harness): harness.ok(threw, "Should not allow mixing [Clamp] and [EnforceRange] via typedefs") - parser = parser.reset() - threw = False - try: - parser.parse(""" - typedef [Clamp] DOMString Foo; - """) - parser.finish() - except: - threw = True + TYPES = ["DOMString", "unrestricted float", "float", "unrestricted double", "double"] - harness.ok(threw, "Should not allow [Clamp] on DOMString") + for type in TYPES: + parser = parser.reset() + threw = False + try: + parser.parse(""" + typedef [Clamp] %s Foo; + """ % type) + parser.finish() + except: + threw = True + harness.ok(threw, "Should not allow [Clamp] on %s" % type) - parser = parser.reset() - threw = False - try: - parser.parse(""" - typedef [EnforceRange] DOMString Foo; - """) - parser.finish() - except: - threw = True + parser = parser.reset() + threw = False + try: + parser.parse(""" + typedef [EnforceRange] %s Foo; + """ % type) + parser.finish() + except: + threw = True - harness.ok(threw, "Should not allow [EnforceRange] on DOMString") + harness.ok(threw, "Should not allow [EnforceRange] on %s" % type) parser = parser.reset()