Index: mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl b/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl |
index 4ae0a9b5cdb4d3b72e8aab6d64cfc9173211421d..019b1b638363e9f8bebec89a5f876536fcbc02bd 100644 |
--- a/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl |
@@ -1,13 +1,33 @@ |
{%- macro enum_def(enum_name, enum) -%} |
{{enum_name}} = {}; |
-{%- set prev_enum = 0 %} |
-{%- for field in enum.fields %} |
-{%- if field.value %} |
+{%- set prev_enum = 0 %} |
+{%- for field in enum.fields %} |
+{%- if field.value %} |
{{enum_name}}.{{field.name}} = {{field.value|expression_to_text}}; |
-{%- elif loop.first %} |
+{%- elif loop.first %} |
{{enum_name}}.{{field.name}} = 0; |
-{%- else %} |
+{%- else %} |
{{enum_name}}.{{field.name}} = {{enum_name}}.{{enum.fields[loop.index0 - 1].name}} + 1; |
+{%- endif %} |
+{%- endfor %} |
+ |
+ {{enum_name}}.isKnownEnumValue = function(value) { |
+{%- if enum.fields %} |
+ switch (value) { |
+{%- for enum_field in enum.fields|groupby('numeric_value') %} |
+ case {{enum_field[0]}}: |
+{%- endfor %} |
+ return true; |
+ } |
{%- endif %} |
-{%- endfor %} |
+ return false; |
+ }; |
+ |
+ {{enum_name}}.validate = function(enumValue) { |
+ var isExtensible = {% if enum.extensible %}true{% else %}false{% endif %}; |
+ if (isExtensible || this.isKnownEnumValue(enumValue)) |
+ return validator.validationError.NONE; |
+ |
+ return validator.validationError.UNKNOWN_ENUM_VALUE; |
+ }; |
{%- endmacro %} |