Behavior property copying fixes

* ensure element has `is` on prototype early as this is sometimes checked in user code.
* ensure properties copied onto elements from info/behaviors are forced to configurable so they can be re-configured by later behaviors.
* add `_noAccessors` optimization for faster property copying
This commit is contained in:
Steven Orvell
2018-11-09 18:18:06 -08:00
parent 65a3149b8c
commit 310c7ead07
2 changed files with 43 additions and 7 deletions

View File

@@ -379,6 +379,20 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
behaviors: [window.BehaviorA]
});
Polymer({
is: 'no-accessors-behavior',
behaviors: [{
_noAccessors: true,
properties: {
nug: String
},
foo: function() {},
bar: true
}],
_noAccessors: true,
zot: 'zot'
});
</script>
<test-fixture id="single">
@@ -447,6 +461,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
</template>
</test-fixture>
<test-fixture id="no-accessors-behavior">
<template>
<no-accessors-behavior></no-accessors-behavior>
</template>
</test-fixture>
<script type="module">
import { Polymer } from '../../polymer-legacy.js';
@@ -501,6 +521,15 @@ suite('single behavior element', function() {
assert.notOk(el.listeners);
});
test('properties on objects marked with `_noAccessors` are copied to class', function() {
const el = fixture('no-accessors-behavior');
assert.ok(el.foo);
assert.isTrue(el.bar);
assert.equal(el.zot, 'zot');
el.setAttribute('nug', 'nug');
assert.equal(el.nug, 'nug');
});
});
suite('behavior.registered', function() {