From f9663815edef8877ba2747afa10d05d55f347da1 Mon Sep 17 00:00:00 2001 From: Steven Orvell Date: Tue, 14 Jul 2015 11:41:55 -0700 Subject: [PATCH] Fixes #2081: make Polymer.dom(element).getDistributedNodes and Polymer.dom(element).getDestinationInsertionPoints() always return at least an empty array (was generating exception under Shadow DOM); make element.getContentChildNodes and element.getContentChildren always return at least an empty array when a selector is passed that does not find a (was generating exception under Shadow DOM) --- src/lib/dom-api.html | 6 ++++-- test/runner.html | 2 ++ test/unit/polymer-dom.js | 10 ++++++++++ test/unit/utils-content.html | 10 ++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/lib/dom-api.html b/src/lib/dom-api.html index b2da9d362d..70fd87450c 100644 --- a/src/lib/dom-api.html +++ b/src/lib/dom-api.html @@ -688,12 +688,14 @@ } DomApi.prototype.getDestinationInsertionPoints = function() { - var n$ = this.node.getDestinationInsertionPoints(); + var n$ = this.node.getDestinationInsertionPoints && + this.node.getDestinationInsertionPoints(); return n$ ? Array.prototype.slice.call(n$) : []; }; DomApi.prototype.getDistributedNodes = function() { - var n$ = this.node.getDistributedNodes(); + var n$ = this.node.getDistributedNodes && + this.node.getDistributedNodes(); return n$ ? Array.prototype.slice.call(n$) : []; }; diff --git a/test/runner.html b/test/runner.html index 817933e772..b7ae351810 100644 --- a/test/runner.html +++ b/test/runner.html @@ -37,6 +37,8 @@ 'unit/gestures.html', 'unit/utils.html', 'unit/utils-content.html', + 'unit/utils.html?dom=shadow', + 'unit/utils-content.html?dom=shadow', 'unit/resolveurl.html', 'unit/css-parse.html', 'unit/styling-scoped.html', diff --git a/test/unit/polymer-dom.js b/test/unit/polymer-dom.js index df0c2daeaa..209bba1ac9 100644 --- a/test/unit/polymer-dom.js +++ b/test/unit/polymer-dom.js @@ -810,4 +810,14 @@ suite('Polymer.dom non-distributed elements', function() { Polymer.dom(c1).appendChild(test); assert.notOk(Polymer.dom(test).getOwnerRoot(), 'getOwnerRoot incorrect for child moved from a root to no root'); }); + + test('getDistributedNodes on non-content element', function() { + assert.equal(Polymer.dom(document.createElement('div')).getDistributedNodes().length, 0); + assert.equal(Polymer.dom().getDistributedNodes().length, 0); + }); + + test('getDestinationInsertionPoints on non-distributable element', function() { + assert.equal(Polymer.dom(document.createElement('div')).getDestinationInsertionPoints().length, 0); + assert.equal(Polymer.dom(document).getDestinationInsertionPoints().length, 0); + }); }); diff --git a/test/unit/utils-content.html b/test/unit/utils-content.html index 85f5818c7e..18ea1ab0db 100644 --- a/test/unit/utils-content.html +++ b/test/unit/utils-content.html @@ -78,6 +78,16 @@ nodes = elt3.getContentChildren('[select=span]'); assert.equal(nodes.length, 4, 'should have 4 spans'); }); + + test('getContentChildNodes with non-existent selector', function() { + var nodes = elt3.getContentChildNodes('[dne]'); + assert.equal(nodes.length, 0, 'should find 0 nodes'); + }); + + test('getContentChildren with non-existent selector', function() { + var nodes = elt3.getContentChildren('[dne]'); + assert.equal(nodes.length, 0, 'should find 0 nodes'); + }); });