[FIX] get_any with inheritance
authorXavier Morel <xmo@openerp.com>
Wed, 8 Feb 2012 13:06:51 +0000 (14:06 +0100)
committerXavier Morel <xmo@openerp.com>
Wed, 8 Feb 2012 13:06:51 +0000 (14:06 +0100)
bzr revid: xmo@openerp.com-20120208130651-7mdv7p1qcfgxczon

addons/web/static/src/js/core.js
addons/web/static/test/registry.js

index 45e682d..887d57b 100644 (file)
@@ -291,6 +291,21 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry
         return object_match;
     },
     /**
+     * Checks if the registry contains an object mapping for this key.
+     *
+     * @param {String} key key to look for
+     */
+    contains: function (key) {
+        if (key === undefined) { return false; }
+        if (key in this.map) {
+            return true
+        }
+        if (this.parent) {
+            return this.parent.contains(key);
+        }
+        return false;
+    },
+    /**
      * Tries a number of keys, and returns the first object matching one of
      * the keys.
      *
@@ -303,7 +318,7 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry
     get_any: function (keys) {
         for (var i=0; i<keys.length; ++i) {
             var key = keys[i];
-            if (key === undefined || !(key in this.map)) {
+            if (!this.contains(key)) {
                 continue;
             }
 
index 226b3c0..d0a1d10 100644 (file)
@@ -52,4 +52,22 @@ $(document).ready(function () {
         strictEqual(reg.get_object('foo2'), openerp.web.Foo2);
         strictEqual(reg2.get_object('foo2'), openerp.web.Foo2);
     });
+    test('multiget', function () {
+        var reg = new openerp.web.Registry({
+            foo: 'openerp.web.Foo',
+            bar: 'openerp.web.Bar'
+        });
+
+        strictEqual(reg.get_any(['qux', 'grault', 'bar', 'foo']),
+                    openerp.web.Bar);
+    });
+    test('extended-multiget', function () {
+        var reg = new openerp.web.Registry({
+            foo: 'openerp.web.Foo',
+            bar: 'openerp.web.Bar'
+        });
+        var reg2 = reg.extend();
+        strictEqual(reg2.get_any(['qux', 'grault', 'bar', 'foo']),
+                    openerp.web.Bar);
+    });
 });