Browse Source

Merge pull request #4840 from atom/undefined-menu-accelerator

Undefined menu accelerator
Cheng Zhao 9 years ago
parent
commit
e08b48ab48
2 changed files with 19 additions and 4 deletions
  1. 4 4
      lib/browser/api/menu.js
  2. 15 0
      spec/api-menu-spec.js

+ 4 - 4
lib/browser/api/menu.js

@@ -269,7 +269,7 @@ Menu.getApplicationMenu = function() {
 Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder;
 
 Menu.buildFromTemplate = function(template) {
-  var insertIndex, item, j, k, key, len, len1, menu, menuItem, positionedTemplate, value;
+  var insertIndex, item, j, k, key, len, len1, menu, menuItem, positionedTemplate;
   if (!Array.isArray(template)) {
     throw new TypeError('Invalid template for Menu');
   }
@@ -293,9 +293,9 @@ Menu.buildFromTemplate = function(template) {
     }
     menuItem = new MenuItem(item);
     for (key in item) {
-      value = item[key];
-      if (menuItem[key] == null) {
-        menuItem[key] = value;
+      // Preserve extra fields specified by user
+      if (!menuItem.hasOwnProperty(key)) {
+        menuItem[key] = item[key];
       }
     }
     menu.append(menuItem);

+ 15 - 0
spec/api-menu-spec.js

@@ -32,6 +32,21 @@ describe('menu module', function() {
       ]);
     });
 
+    it('does not throw exceptions for undefined/null values', function() {
+      assert.doesNotThrow(function() {
+        Menu.buildFromTemplate([
+          {
+            label: 'text',
+            accelerator: undefined
+          },
+          {
+            label: 'text again',
+            accelerator: null
+          }
+        ]);
+      });
+    });
+
     describe('Menu.buildFromTemplate should reorder based on item position specifiers', function() {
       it('should position before existing item', function() {
         var menu = Menu.buildFromTemplate([