From 4e1c81dc2944ce5943a1d91a035f260ab2583560 Mon Sep 17 00:00:00 2001 From: Kevin Schaaf Date: Fri, 28 Aug 2015 16:10:30 -0700 Subject: [PATCH] Add beforeRegister; ES6 class must set proto metadata here. Fixes #2382 --- src/lib/base.html | 3 +- src/lib/dom-module.html | 24 ++++++++------- test/unit/behaviors-elements.html | 49 +++++++++++++++++++++---------- test/unit/behaviors.html | 7 ++++- 4 files changed, 55 insertions(+), 28 deletions(-) diff --git a/src/lib/base.html b/src/lib/base.html index 0fe7c19ed9..675bacb0d3 100644 --- a/src/lib/base.html +++ b/src/lib/base.html @@ -26,8 +26,9 @@ registerCallback: function() { // TODO(sjmiles): perhaps this method should be called from polymer-bootstrap? this._desugarBehaviors(); // abstract - this._doBehavior('registered'); // abstract + this._doBehavior('beforeRegister'); // abstract this._registerFeatures(); // abstract + this._doBehavior('registered'); // abstract }, createdCallback: function() { diff --git a/src/lib/dom-module.html b/src/lib/dom-module.html index ce8db00f36..0d532565b6 100644 --- a/src/lib/dom-module.html +++ b/src/lib/dom-module.html @@ -67,18 +67,20 @@ * at the specified `id`. */ import: function(id, selector) { - var m = findModule(id); - if (!m) { - // If polyfilling, a script can run before a dom-module element - // is upgraded. We force the containing document to upgrade - // and try again to workaround this polyfill limitation. - forceDocumentUpgrade(); - m = findModule(id); - } - if (m && selector) { - m = m.querySelector(selector); + if (id) { + var m = findModule(id); + if (!m) { + // If polyfilling, a script can run before a dom-module element + // is upgraded. We force the containing document to upgrade + // and try again to workaround this polyfill limitation. + forceDocumentUpgrade(); + m = findModule(id); + } + if (m && selector) { + m = m.querySelector(selector); + } + return m; } - return m; } }); diff --git a/test/unit/behaviors-elements.html b/test/unit/behaviors-elements.html index fcfe49697e..3ceaba2ea1 100644 --- a/test/unit/behaviors-elements.html +++ b/test/unit/behaviors-elements.html @@ -219,26 +219,45 @@ - + - + as: 'behavior-as-is' + + }); - \ No newline at end of file + \ No newline at end of file diff --git a/test/unit/behaviors.html b/test/unit/behaviors.html index 8702551a6d..d45b372283 100644 --- a/test/unit/behaviors.html +++ b/test/unit/behaviors.html @@ -52,9 +52,14 @@ assert.equal(typeof el._setHasOptionsA, 'function'); }); - test('registered behavior', function() { + test('beforeRegister behavior', function() { var el = document.createElement('behavior-as-is'); assert.equal(el.is, 'behavior-as-is'); + assert.ok(el.$.content); + el.prop = 42; + assert.isTrue(el.propChanged1Called); + assert.isTrue(el.propChanged2Called); + assert.isTrue(el.hasAttribute('attr')); }); });