Title: [178599] trunk/Source/_javascript_Core
Revision
178599
Author
[email protected]
Date
2015-01-16 13:40:23 -0800 (Fri, 16 Jan 2015)

Log Message

Web Inspector: code generator should fail on duplicate parameter and member names
https://bugs.webkit.org/show_bug.cgi?id=140555

Reviewed by Timothy Hatcher.

* inspector/scripts/codegen/models.py:
(find_duplicates): Add a helper function to find duplicates in a list.
(Protocol.parse_type_declaration):
(Protocol.parse_command):
(Protocol.parse_event):
* inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error: Added.
* inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error: Added.
* inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error: Added.
* inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error: Added.
* inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json: Added.
* inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json: Added.
* inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json: Added.
* inspector/scripts/tests/fail-on-duplicate-type-member-names.json: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (178598 => 178599)


--- trunk/Source/_javascript_Core/ChangeLog	2015-01-16 21:37:42 UTC (rev 178598)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-01-16 21:40:23 UTC (rev 178599)
@@ -1,3 +1,24 @@
+2015-01-16  Brian J. Burg  <[email protected]>
+
+        Web Inspector: code generator should fail on duplicate parameter and member names
+        https://bugs.webkit.org/show_bug.cgi?id=140555
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/scripts/codegen/models.py:
+        (find_duplicates): Add a helper function to find duplicates in a list.
+        (Protocol.parse_type_declaration):
+        (Protocol.parse_command):
+        (Protocol.parse_event):
+        * inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error: Added.
+        * inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error: Added.
+        * inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error: Added.
+        * inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error: Added.
+        * inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json: Added.
+        * inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json: Added.
+        * inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json: Added.
+        * inspector/scripts/tests/fail-on-duplicate-type-member-names.json: Added.
+
 2015-01-16  Michael Saboff  <[email protected]>
 
         REGRESSION (r174226): Header on huffingtonpost.com is too large

Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py (178598 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py	2015-01-16 21:37:42 UTC (rev 178598)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py	2015-01-16 21:40:23 UTC (rev 178599)
@@ -25,6 +25,7 @@
 # THE POSSIBILITY OF SUCH DAMAGE.
 
 import logging
+import collections
 
 log = logging.getLogger('global')
 
@@ -33,6 +34,10 @@
     return str[:1].upper() + str[1:]
 
 
+def find_duplicates(l):
+    return [key for key, count in collections.Counter(l).items() if count > 1]
+
+
 _FRAMEWORK_CONFIG_MAP = {
     "Global": {
     },
@@ -326,6 +331,10 @@
                 raise ParseException("Malformed type specification: properties is not an array")
             type_members.extend([self.parse_type_member(member) for member in json['properties']])
 
+        duplicate_names = find_duplicates([member.member_name for member in type_members])
+        if len(duplicate_names) > 0:
+            raise ParseException("Malformed domain specification: type declaration for %s has duplicate member names" % json['id'])
+
         type_ref = TypeReference(json['type'], json.get('$ref'), json.get('enum'), json.get('items'))
         return TypeDeclaration(json['id'], type_ref, json.get("description", ""), type_members)
 
@@ -348,11 +357,19 @@
                 raise ParseException("Malformed command specification: parameters is not an array")
             call_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['parameters']])
 
+            duplicate_names = find_duplicates([param.parameter_name for param in call_parameters])
+            if len(duplicate_names) > 0:
+                raise ParseException("Malformed domain specification: call parameter list for command %s has duplicate parameter names" % json['name'])
+
         if 'returns' in json:
             if not isinstance(json['returns'], list):
                 raise ParseException("Malformed command specification: returns is not an array")
             return_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['returns']])
 
+            duplicate_names = find_duplicates([param.parameter_name for param in return_parameters])
+            if len(duplicate_names) > 0:
+                raise ParseException("Malformed domain specification: return parameter list for command %s has duplicate parameter names" % json['name'])
+
         return Command(json['name'], call_parameters, return_parameters, json.get('description', ""), json.get('async', False))
 
     def parse_event(self, json):
@@ -366,6 +383,10 @@
                 raise ParseException("Malformed event specification: parameters is not an array")
             event_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['parameters']])
 
+            duplicate_names = find_duplicates([param.parameter_name for param in event_parameters])
+            if len(duplicate_names) > 0:
+                raise ParseException("Malformed domain specification: parameter list for event %s has duplicate parameter names" % json['name'])
+
         return Event(json['name'], event_parameters, json.get('description', ""))
 
     def parse_call_or_return_parameter(self, json):

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: call parameter list for command processPoints has duplicate parameter names

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: return parameter list for command processPoints has duplicate parameter names

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: parameter list for event processedPoints has duplicate parameter names

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1 @@
+ERROR: Malformed domain specification: type declaration for Point has duplicate member names

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,16 @@
+{
+    "domain": "Overlay",
+    "commands": [
+        {
+            "name": "processPoints",
+            "parameters": [
+                { "name": "point", "type": "number" },
+                { "name": "point", "type": "number" }
+            ],
+            "returns": [
+                { "name": "result1", "type": "string" },
+                { "name": "result2", "type": "string" }
+            ]
+        }
+    ]
+}

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,16 @@
+{
+    "domain": "Overlay",
+    "commands": [
+        {
+            "name": "processPoints",
+            "parameters": [
+                { "name": "point1", "type": "number" },
+                { "name": "point2", "type": "number" }
+            ],
+            "returns": [
+                { "name": "result", "type": "string" },
+                { "name": "result", "type": "string" }
+            ]
+        }
+    ]
+}

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,12 @@
+{
+    "domain": "Overlay",
+    "events": [
+        {
+            "name": "processedPoints",
+            "parameters": [
+                { "name": "point", "type": "number" },
+                { "name": "point", "type": "number" }
+            ]
+        }
+    ]
+}

Added: trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-type-member-names.json (0 => 178599)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-type-member-names.json	                        (rev 0)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/fail-on-duplicate-type-member-names.json	2015-01-16 21:40:23 UTC (rev 178599)
@@ -0,0 +1,15 @@
+[
+{
+    "domain": "OverlayTypes",
+    "types": [
+        {
+            "id": "Point",
+            "type": "object",
+            "properties": [
+                { "name": "x", "type": "integer" },
+                { "name": "x", "type": "integer" }
+            ]
+        }
+    ]
+}
+]
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to