Skip to content

Commit 86bf85b

Browse files
committed
Ensure wildcard arguments get undefined treatment. Fixes #5428.
1 parent f1d5d0e commit 86bf85b

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

lib/legacy/legacy-data-mixin.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@
9999
// undefined or not. Multi-property observers must have all arguments defined
100100
if (this._legacyUndefinedCheck && vals.length > 1) {
101101
for (let i=0; i<vals.length; i++) {
102-
if (vals[i] === undefined) {
102+
if (vals[i] === undefined ||
103+
(args[i].wildcard && vals[i].base === undefined)) {
103104
// Break out of effect's control flow; will be caught in
104105
// wrapped property effect function below
105106
const name = args[i].name;

test/unit/legacy-data.html

+46-2
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,24 @@
5050
},
5151
computedMulti: {
5252
computed: 'computeMulti(computedMultiDep1, computedMultiDep2)'
53-
}
53+
},
54+
wildcardProp: String,
55+
wildcardObj: Object
5456
},
5557
observers: [
5658
'staticObserver("staticObserver")',
5759
'singlePropObserver(singleProp)',
5860
'multiPropObserver(multiProp1, multiProp2)',
59-
'throws(throwProp)'
61+
'throws(throwProp)',
62+
'wildcardObserver(wildcardProp, wildcardObj.*)'
6063
],
6164
created() {
6265
this.singlePropObserver = sinon.spy();
6366
this.multiPropObserver = sinon.spy();
6467
this.staticObserver = sinon.spy();
6568
this.computeSingle = sinon.spy((inlineSingleDep) => `[${inlineSingleDep}]`);
6669
this.computeMulti = sinon.spy((inlineMultiDep1, inlineMultiDep2) => `[${inlineMultiDep1},${inlineMultiDep2}]`);
70+
this.wildcardObserver = sinon.spy();
6771
},
6872
throws() {
6973
throw new Error('real error');
@@ -145,6 +149,18 @@
145149
</template>
146150
</test-fixture>
147151

152+
<test-fixture id="declarative-wildcard-one">
153+
<template>
154+
<x-data wildcard-prop='prop'></x-data>
155+
</template>
156+
</test-fixture>
157+
158+
<test-fixture id="declarative-wildcard-all">
159+
<template>
160+
<x-data wildcard-prop="prop" wildcard-obj='{"prop": "wildcardObj"}'></x-data>
161+
</template>
162+
</test-fixture>
163+
148164
<script>
149165
(function() {
150166

@@ -192,6 +208,8 @@
192208
const inlineMultiDep2 = 'inlineMultiDep2';
193209
const inlineMultiIfDep1 = 'inlineMultiIfDep1';
194210
const inlineMultiIfDep2 = 'inlineMultiIfDep2';
211+
const wildcardProp = 'wildcardProp';
212+
const wildcardObj = {prop: 'wildcardObj'};
195213

196214
suite('check disabled', () => {
197215
test('no arguments defined', () => {
@@ -270,6 +288,14 @@
270288
assertEffects({computeMulti: 1});
271289
assert.equal(el.$$('#ifChild').computedMulti, '[inlineMultiIfDep1,inlineMultiIfDep2]');
272290
});
291+
test('one wildcard argument defined', () => {
292+
setupElement(false, {wildcardProp});
293+
assertEffects({wildcardObserver: 1});
294+
});
295+
test('all wildcard arguments defined', () => {
296+
setupElement(false, {wildcardProp, wildcardObj});
297+
assertEffects({wildcardObserver: 1});
298+
});
273299
});
274300

275301
suite('warn', () => {
@@ -349,6 +375,14 @@
349375
assertEffects({computeMulti: 1});
350376
assert.equal(el.$$('#ifChild').computedMulti, '[inlineMultiIfDep1,inlineMultiIfDep2]');
351377
});
378+
test('one wildcard argument defined', () => {
379+
setupElement(true, {wildcardProp});
380+
assertEffects({warn: 1});
381+
});
382+
test('all wildcard arguments defined', () => {
383+
setupElement(true, {wildcardProp, wildcardObj});
384+
assertEffects({wildcardObserver: 1});
385+
});
352386
});
353387
});
354388

@@ -416,6 +450,16 @@
416450
assertEffects({computeMulti: 1});
417451
assert.equal(el.$$('#ifChild').computedMulti, '[b,c]');
418452
});
453+
test('one wildcard argument defined', () => {
454+
el = fixture('declarative-wildcard-one');
455+
Polymer.flush();
456+
assertEffects({warn: 1});
457+
});
458+
test('all wildcard arguments defined', () => {
459+
el = fixture('declarative-wildcard-all');
460+
Polymer.flush();
461+
assertEffects({wildcardObserver: 1});
462+
});
419463
});
420464
});
421465

0 commit comments

Comments
 (0)