mirror of
https://github.com/Polymer/polymer.git
synced 2025-02-25 18:55:30 -06:00
5761 lines
264 KiB
HTML
5761 lines
264 KiB
HTML
<!doctype html>
|
|
<!--
|
|
@license
|
|
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
Code distributed by Google as part of the polymer project is also
|
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
-->
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
|
|
<script src="../../../web-component-tester/browser.js"></script>
|
|
<link rel="import" href="../../polymer.html">
|
|
<link rel="import" href="dom-repeat-elements.html">
|
|
<style>
|
|
/* makes painting faster when testing on IOS simulator */
|
|
x-repeat-chunked {
|
|
display: none;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<h4>x-simple-repeat</h4>
|
|
<x-simple-repeat id="simple"></x-simple-repeat>
|
|
|
|
<h4>x-primitive-repeat</h4>
|
|
<x-primitive-repeat id="primitive"></x-primitive-repeat>
|
|
|
|
<h4>x-nested-repeat-configured</h4>
|
|
<x-nested-repeat-configured id="configured"></x-nested-repeat-configured>
|
|
|
|
<dom-bind id="unconfigured">
|
|
<template>
|
|
<h4>x-nested-repeat unconfigured1</h4>
|
|
<x-nested-repeat id="unconfigured1" items="{{items}}"></x-nested-repeat>
|
|
<h4>x-nested-repeat unconfigured2</h4>
|
|
<x-nested-repeat id="unconfigured2" items="{{items}}"></x-nested-repeat>
|
|
</template>
|
|
</dom-bind>
|
|
|
|
<h4>inDocumentRepeater</h4>
|
|
<div id="inDocumentContainerOrig">
|
|
<dom-repeat id="inDocumentRepeater" as="itema" index-as="indexa">
|
|
<template>
|
|
<x-foo
|
|
innera-prop="{{innera.prop}}"
|
|
itema-prop="{{itema.prop}}"
|
|
indexa="{{indexa}}">
|
|
</x-foo>
|
|
<template is="dom-repeat" items="{{itema.items}}" as="itemb" index-as="indexb">
|
|
<x-foo
|
|
innerb-prop="{{innerb.prop}}"
|
|
itemb-prop="{{itemb.prop}}"
|
|
innera-prop="{{innera.prop}}"
|
|
itema-prop="{{itema.prop}}"
|
|
indexa="{{indexa}}"
|
|
indexb="{{indexb}}">
|
|
</x-foo>
|
|
<template is="dom-repeat" items="{{itemb.items}}" as="itemc" index-as="indexc">
|
|
<x-foo
|
|
innerc-prop="{{innerc.prop}}"
|
|
itemc-prop="{{itemc.prop}}"
|
|
innerb-prop="{{innerb.prop}}"
|
|
itemb-prop="{{itemb.prop}}"
|
|
innera-prop="{{innera.prop}}"
|
|
itema-prop="{{itema.prop}}"
|
|
indexa="{{indexa}}"
|
|
indexb="{{indexb}}"
|
|
indexc="{{indexc}}">
|
|
</x-foo>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</dom-repeat>
|
|
</div>
|
|
|
|
<h4>x-primitive-large</h4>
|
|
<x-primitive-large id="primitiveLarge"></x-primitive-large>
|
|
|
|
<h4>x-repeat-limit</h4>
|
|
<x-repeat-limit id="limited"></x-repeat-limit>
|
|
|
|
<h4>x-repeat-chunked</h4>
|
|
<x-repeat-chunked id="chunked"></x-repeat-chunked>
|
|
|
|
<div id="inDocumentContainer">
|
|
</div>
|
|
|
|
<script> /* force non-upgrade, to test MO-based template finding below */ </script>
|
|
|
|
<div id="nonUpgrade">
|
|
<dom-repeat items='[{"prop": "stamped"}]'>
|
|
<template>{{item.prop}}</template>
|
|
</dom-if>
|
|
</div>
|
|
|
|
<script>
|
|
(function() {
|
|
/* global unconfigured1 unconfigured primitive limited inDocumentRepeater configured inDocumentContainer inDocumentContainerOrig unconfigured2 primitiveLarge simple:true model:true stamped:true chunked nonUpgrade*/
|
|
|
|
/*
|
|
Expected:
|
|
|
|
stamped[0] ... 1
|
|
stamped[1] ... 1-1
|
|
stamped[2] ... 1-1-1
|
|
stamped[3] ... 1-1-2
|
|
stamped[4] ... 1-1-3
|
|
stamped[5] ... 1-2
|
|
...
|
|
stamped[13] .. 2
|
|
...
|
|
stamped[36] .. 3-3-1
|
|
stamped[37] .. 3-3-2
|
|
stamped[38] .. 3-3-3
|
|
*/
|
|
|
|
function arrayDelete(el, path, item) {
|
|
var array = el.get(path);
|
|
var idx = array.indexOf(item);
|
|
el.splice(path, idx, 1);
|
|
}
|
|
|
|
function arrayDeleteDirect(array, item) {
|
|
var idx = array.indexOf(item);
|
|
array.splice(idx, 1);
|
|
}
|
|
|
|
suite('errors', function() {
|
|
|
|
test('items must be array', function() {
|
|
sinon.spy(console, 'warn');
|
|
inDocumentRepeater.items = {};
|
|
assert.isTrue(console.warn.calledOnce, 'should warn when items is not array');
|
|
assert.match(console.warn.firstCall.args[0], /expected array/);
|
|
console.warn.restore();
|
|
});
|
|
|
|
});
|
|
|
|
suite('nested pre-configured dom-repeat', function() {
|
|
|
|
test('basic rendering, downward item binding', function() {
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(configured.$.repeater.renderedItemCount, 3, 'rendered item count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].computeda, 'prop-1+itemForComputedA');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[0].$.bar.itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[1].computedb, 'prop-1-1+itemForComputedB');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].indexb, 0);
|
|
assert.equal(stamped[1].$.bar.itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[2].computedc, 'prop-1-1-1+itemForComputedC');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].indexc, 0);
|
|
assert.equal(stamped[2].$.bar.itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[3].itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[3].indexa, 0);
|
|
assert.equal(stamped[3].indexb, 0);
|
|
assert.equal(stamped[3].indexc, 1);
|
|
assert.equal(stamped[3].$.bar.itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[4].itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[4].indexa, 0);
|
|
assert.equal(stamped[4].indexb, 0);
|
|
assert.equal(stamped[4].indexc, 2);
|
|
assert.equal(stamped[4].$.bar.itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[13].$.bar.itemaProp, 'prop-2');
|
|
assert.equal(stamped[36].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[36].indexa, 2);
|
|
assert.equal(stamped[36].indexb, 2);
|
|
assert.equal(stamped[36].indexc, 0);
|
|
assert.equal(stamped[36].$.bar.itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[37].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[37].indexa, 2);
|
|
assert.equal(stamped[37].indexb, 2);
|
|
assert.equal(stamped[37].indexc, 1);
|
|
assert.equal(stamped[37].$.bar.itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].indexc, 2);
|
|
assert.equal(stamped[38].$.bar.itemcProp, 'prop-3-3-3');
|
|
});
|
|
|
|
test('parent scope binding', function() {
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped[0].outerProp, 'outer');
|
|
assert.equal(stamped[0].outerItemProp, 'outerItem');
|
|
assert.equal(stamped[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].outerProp, 'outer');
|
|
assert.equal(stamped[1].outerItemProp, 'outerItem');
|
|
assert.equal(stamped[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].outerProp, 'outer');
|
|
assert.equal(stamped[2].outerItemProp, 'outerItem');
|
|
assert.equal(stamped[38].itembProp, 'prop-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].itemaProp, 'prop-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].outerProp, 'outer');
|
|
assert.equal(stamped[38].outerItemProp, 'outerItem');
|
|
});
|
|
|
|
test('parent scope downward notification', function() {
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
configured.prop = 'yes';
|
|
assert.equal(stamped[0].outerProp, 'yes');
|
|
assert.equal(stamped[1].outerProp, 'yes');
|
|
assert.equal(stamped[2].outerProp, 'yes');
|
|
assert.equal(stamped[38].outerProp, 'yes');
|
|
configured.set('item.prop', 'yay');
|
|
assert.equal(stamped[0].outerItemProp, 'yay');
|
|
assert.equal(stamped[1].outerItemProp, 'yay');
|
|
assert.equal(stamped[2].outerItemProp, 'yay');
|
|
assert.equal(stamped[38].outerItemProp, 'yay');
|
|
});
|
|
|
|
test('parent scope upward notification', function() {
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
stamped[38].outerProp = 'nice';
|
|
assert.equal(configured.prop, 'nice');
|
|
assert.equal(stamped[0].outerProp, 'nice');
|
|
assert.equal(stamped[1].outerProp, 'nice');
|
|
assert.equal(stamped[2].outerProp, 'nice');
|
|
assert.equal(stamped[37].outerProp, 'nice');
|
|
stamped[38].outerItemProp = 'cool';
|
|
assert.equal(configured.item.prop, 'cool');
|
|
assert.equal(stamped[0].outerItemProp, 'cool');
|
|
assert.equal(stamped[1].outerItemProp, 'cool');
|
|
assert.equal(stamped[2].outerItemProp, 'cool');
|
|
assert.equal(stamped[37].outerItemProp, 'cool');
|
|
});
|
|
|
|
// Anonymous inner scope feature removed for time being
|
|
// test('anonymous scope binding', function() {
|
|
// var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
// stamped[1].$.bar.inneraProp = 'changed';
|
|
// assert.equal(stamped[1].inneraProp, 'changed');
|
|
// assert.equal(stamped[2].inneraProp, 'changed');
|
|
// assert.equal(stamped[3].inneraProp, 'changed');
|
|
// assert.equal(stamped[4].inneraProp, 'changed');
|
|
// });
|
|
|
|
test('sort function by name on host', function() {
|
|
// set sort fn
|
|
configured.$.repeater.sort = 'sortDesc';
|
|
configured.$.repeater.render();
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-1');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
// reset sort fn
|
|
configured.$.repeater.sort = null;
|
|
configured.$.repeater.render();
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-3');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
});
|
|
|
|
test('sort function imperative', function() {
|
|
// set sort fn
|
|
configured.$.repeater.sort = function(a, b) {
|
|
return b.prop.localeCompare(a.prop);
|
|
};
|
|
configured.$.repeater.render();
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-1');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
// reset sort fn
|
|
configured.$.repeater.sort = null;
|
|
configured.$.repeater.render();
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-3');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
});
|
|
|
|
test('filter function by name on host', function() {
|
|
// set filter fn
|
|
configured.$.repeater.filter = 'filter2nd';
|
|
configured.$.repeater.render();
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(configured.$.repeater.renderedItemCount, 2, 'rendered item count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-3');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
// reset filter fn
|
|
configured.$.repeater.filter = null;
|
|
configured.$.repeater.render();
|
|
stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-3');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
});
|
|
|
|
test('filter function imperative', function() {
|
|
// set filter fn
|
|
configured.$.repeater.filter = function(o) {
|
|
return o.prop.indexOf('2') < 0;
|
|
};
|
|
configured.$.repeater.render();
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-3');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
// reset filter fn
|
|
configured.$.repeater.filter = null;
|
|
configured.$.repeater.render();
|
|
stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-3');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
});
|
|
|
|
test('sort and filter function by name on host', function() {
|
|
// set filter fn
|
|
configured.$.repeater.sort = 'sortDesc';
|
|
configured.$.repeater.filter = 'filter2nd';
|
|
configured.$.repeater.render();
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
// reset filter fn
|
|
configured.$.repeater.sort = null;
|
|
configured.$.repeater.filter = null;
|
|
configured.$.repeater.render();
|
|
stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-3');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
});
|
|
|
|
test('observe refreshes sort and filter', function(done) {
|
|
// set filter fn
|
|
configured.$.repeater.sort = 'sortDesc';
|
|
configured.$.repeater.filter = 'filter2nd';
|
|
configured.$.repeater.render();
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
|
|
// Update observed prop to be in filter
|
|
configured.set(['items', 1, 'prop'], 'prop-0');
|
|
// avoid imperative/synchronous refresh() since that forces a full refresh
|
|
setTimeout(function() {
|
|
stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-0');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
|
|
// Update observed prop back to be out of the filter
|
|
configured.set(['items', 1, 'prop'], 'prop-2');
|
|
setTimeout(function() {
|
|
var stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
|
|
// reset filter fn
|
|
configured.$.repeater.sort = null;
|
|
configured.$.repeater.filter = null;
|
|
configured.$.repeater.render();
|
|
stamped = configured.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[26].itemaProp, 'prop-3');
|
|
assert.equal(stamped[26].indexa, 2);
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('nested un-configured dom-repeat in document', function() {
|
|
|
|
test('basic rendering, downward item binding', function() {
|
|
inDocumentRepeater.items = window.data;
|
|
inDocumentRepeater.render();
|
|
var stamped = inDocumentContainerOrig.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[0].$.bar.itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].indexb, 0);
|
|
assert.equal(stamped[1].$.bar.itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].indexc, 0);
|
|
assert.equal(stamped[2].$.bar.itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[3].itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[3].indexa, 0);
|
|
assert.equal(stamped[3].indexb, 0);
|
|
assert.equal(stamped[3].indexc, 1);
|
|
assert.equal(stamped[3].$.bar.itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[4].itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[4].indexa, 0);
|
|
assert.equal(stamped[4].indexb, 0);
|
|
assert.equal(stamped[4].indexc, 2);
|
|
assert.equal(stamped[4].$.bar.itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[13].$.bar.itemaProp, 'prop-2');
|
|
assert.equal(stamped[36].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[36].indexa, 2);
|
|
assert.equal(stamped[36].indexb, 2);
|
|
assert.equal(stamped[36].indexc, 0);
|
|
assert.equal(stamped[36].$.bar.itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[37].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[37].indexa, 2);
|
|
assert.equal(stamped[37].indexb, 2);
|
|
assert.equal(stamped[37].indexc, 1);
|
|
assert.equal(stamped[37].$.bar.itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].indexc, 2);
|
|
assert.equal(stamped[38].$.bar.itemcProp, 'prop-3-3-3');
|
|
});
|
|
|
|
test('move to different container', function() {
|
|
var repeater = inDocumentRepeater;
|
|
inDocumentContainer.appendChild(repeater);
|
|
var stamped = inDocumentContainer.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[0].$.bar.itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].indexb, 0);
|
|
assert.equal(stamped[1].$.bar.itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].indexc, 0);
|
|
assert.equal(stamped[2].$.bar.itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[3].itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[3].indexa, 0);
|
|
assert.equal(stamped[3].indexb, 0);
|
|
assert.equal(stamped[3].indexc, 1);
|
|
assert.equal(stamped[3].$.bar.itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[4].itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[4].indexa, 0);
|
|
assert.equal(stamped[4].indexb, 0);
|
|
assert.equal(stamped[4].indexc, 2);
|
|
assert.equal(stamped[4].$.bar.itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[13].$.bar.itemaProp, 'prop-2');
|
|
assert.equal(stamped[36].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[36].indexa, 2);
|
|
assert.equal(stamped[36].indexb, 2);
|
|
assert.equal(stamped[36].indexc, 0);
|
|
assert.equal(stamped[36].$.bar.itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[37].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[37].indexa, 2);
|
|
assert.equal(stamped[37].indexb, 2);
|
|
assert.equal(stamped[37].indexc, 1);
|
|
assert.equal(stamped[37].$.bar.itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].indexc, 2);
|
|
assert.equal(stamped[38].$.bar.itemcProp, 'prop-3-3-3');
|
|
});
|
|
|
|
test('basic rendering, downward item binding', function() {
|
|
var r = inDocumentRepeater;
|
|
r.parentElement.removeChild(r);
|
|
inDocumentContainer.appendChild(r);
|
|
|
|
var stamped = inDocumentContainer.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[0].$.bar.itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].indexb, 0);
|
|
assert.equal(stamped[1].$.bar.itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].indexc, 0);
|
|
assert.equal(stamped[2].$.bar.itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[3].itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[3].indexa, 0);
|
|
assert.equal(stamped[3].indexb, 0);
|
|
assert.equal(stamped[3].indexc, 1);
|
|
assert.equal(stamped[3].$.bar.itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[4].itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[4].indexa, 0);
|
|
assert.equal(stamped[4].indexb, 0);
|
|
assert.equal(stamped[4].indexc, 2);
|
|
assert.equal(stamped[4].$.bar.itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[13].$.bar.itemaProp, 'prop-2');
|
|
assert.equal(stamped[36].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[36].indexa, 2);
|
|
assert.equal(stamped[36].indexb, 2);
|
|
assert.equal(stamped[36].indexc, 0);
|
|
assert.equal(stamped[36].$.bar.itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[37].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[37].indexa, 2);
|
|
assert.equal(stamped[37].indexb, 2);
|
|
assert.equal(stamped[37].indexc, 1);
|
|
assert.equal(stamped[37].$.bar.itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].indexc, 2);
|
|
assert.equal(stamped[38].$.bar.itemcProp, 'prop-3-3-3');
|
|
});
|
|
|
|
test('parent scope binding', function() {
|
|
var stamped = inDocumentContainer.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[38].itembProp, 'prop-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].itemaProp, 'prop-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
});
|
|
|
|
// Anonymous inner scope feature removed for time being
|
|
// test('anonymous scope binding', function() {
|
|
// var stamped = inDocumentContainer.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
// stamped[1].$.bar.inneraProp = 'changed';
|
|
// assert.equal(stamped[1].inneraProp, 'changed');
|
|
// assert.equal(stamped[2].inneraProp, 'changed');
|
|
// assert.equal(stamped[3].inneraProp, 'changed');
|
|
// assert.equal(stamped[4].inneraProp, 'changed');
|
|
// });
|
|
|
|
});
|
|
|
|
suite('nested un-configured dom-repeat', function() {
|
|
|
|
test('basic rendering, downward item binding', function() {
|
|
unconfigured.items = window.data;
|
|
unconfigured1.$.repeater.render();
|
|
var stamped = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped[0].indexa, 0);
|
|
assert.equal(stamped[0].$.bar.itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].indexb, 0);
|
|
assert.equal(stamped[1].$.bar.itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].indexc, 0);
|
|
assert.equal(stamped[2].$.bar.itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped[3].itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[3].indexa, 0);
|
|
assert.equal(stamped[3].indexb, 0);
|
|
assert.equal(stamped[3].indexc, 1);
|
|
assert.equal(stamped[3].$.bar.itemcProp, 'prop-1-1-2');
|
|
assert.equal(stamped[4].itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[4].indexa, 0);
|
|
assert.equal(stamped[4].indexb, 0);
|
|
assert.equal(stamped[4].indexc, 2);
|
|
assert.equal(stamped[4].$.bar.itemcProp, 'prop-1-1-3');
|
|
assert.equal(stamped[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped[13].indexa, 1);
|
|
assert.equal(stamped[13].$.bar.itemaProp, 'prop-2');
|
|
assert.equal(stamped[36].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[36].indexa, 2);
|
|
assert.equal(stamped[36].indexb, 2);
|
|
assert.equal(stamped[36].indexc, 0);
|
|
assert.equal(stamped[36].$.bar.itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped[37].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[37].indexa, 2);
|
|
assert.equal(stamped[37].indexb, 2);
|
|
assert.equal(stamped[37].indexc, 1);
|
|
assert.equal(stamped[37].$.bar.itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].indexc, 2);
|
|
assert.equal(stamped[38].$.bar.itemcProp, 'prop-3-3-3');
|
|
});
|
|
|
|
test('parent scope binding', function() {
|
|
var stamped = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
unconfigured1.prop = 'outer';
|
|
unconfigured1.item = {prop: 'outerItem'};
|
|
assert.equal(stamped[0].outerProp, 'outer');
|
|
assert.equal(stamped[0].outerItemProp, 'outerItem');
|
|
assert.equal(stamped[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped[1].indexa, 0);
|
|
assert.equal(stamped[1].outerProp, 'outer');
|
|
assert.equal(stamped[1].outerItemProp, 'outerItem');
|
|
assert.equal(stamped[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].indexb, 0);
|
|
assert.equal(stamped[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped[2].indexa, 0);
|
|
assert.equal(stamped[2].outerProp, 'outer');
|
|
assert.equal(stamped[2].outerItemProp, 'outerItem');
|
|
assert.equal(stamped[38].itembProp, 'prop-3-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].indexb, 2);
|
|
assert.equal(stamped[38].itemaProp, 'prop-3');
|
|
assert.equal(stamped[38].indexa, 2);
|
|
assert.equal(stamped[38].outerProp, 'outer');
|
|
assert.equal(stamped[38].outerItemProp, 'outerItem');
|
|
});
|
|
|
|
test('parent scope downward notification', function() {
|
|
var stamped = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
unconfigured1.prop = 'yes';
|
|
assert.equal(stamped[0].outerProp, 'yes');
|
|
assert.equal(stamped[1].outerProp, 'yes');
|
|
assert.equal(stamped[2].outerProp, 'yes');
|
|
assert.equal(stamped[38].outerProp, 'yes');
|
|
unconfigured1.set('item.prop', 'yay');
|
|
assert.equal(stamped[0].outerItemProp, 'yay');
|
|
assert.equal(stamped[1].outerItemProp, 'yay');
|
|
assert.equal(stamped[2].outerItemProp, 'yay');
|
|
assert.equal(stamped[38].outerItemProp, 'yay');
|
|
});
|
|
|
|
test('parent scope upward notification', function() {
|
|
var stamped = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
stamped[38].outerProp = 'nice';
|
|
assert.equal(unconfigured1.prop, 'nice');
|
|
assert.equal(stamped[0].outerProp, 'nice');
|
|
assert.equal(stamped[1].outerProp, 'nice');
|
|
assert.equal(stamped[2].outerProp, 'nice');
|
|
assert.equal(stamped[37].outerProp, 'nice');
|
|
stamped[38].outerItemProp = 'cool';
|
|
assert.equal(unconfigured1.item.prop, 'cool');
|
|
assert.equal(stamped[0].outerItemProp, 'cool');
|
|
assert.equal(stamped[1].outerItemProp, 'cool');
|
|
assert.equal(stamped[2].outerItemProp, 'cool');
|
|
assert.equal(stamped[37].outerItemProp, 'cool');
|
|
});
|
|
|
|
// Anonymous inner scope feature removed for time being
|
|
// test('anonymous scope binding', function() {
|
|
// var stamped = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
// stamped[1].$.bar.inneraProp = 'changed';
|
|
// assert.equal(stamped[1].inneraProp, 'changed');
|
|
// assert.equal(stamped[2].inneraProp, 'changed');
|
|
// assert.equal(stamped[3].inneraProp, 'changed');
|
|
// assert.equal(stamped[4].inneraProp, 'changed');
|
|
// });
|
|
|
|
test('event handlers', function() {
|
|
var stamped = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
stamped[0].fire('test1');
|
|
assert.equal(unconfigured1.testHandler1Count, 1);
|
|
stamped[1].fire('test2');
|
|
assert.equal(unconfigured1.testHandler2Count, 1);
|
|
stamped[2].fire('test3');
|
|
assert.equal(unconfigured1.testHandler3Count, 1);
|
|
});
|
|
|
|
});
|
|
|
|
suite('array notification between two dom-repeats', function() {
|
|
|
|
test('change to item from one dom-repeat to other', function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured2.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
stamped1[0].$.bar.itemaProp = 'changed';
|
|
assert.equal(stamped2[0].itemaProp, 'changed');
|
|
stamped2[0].$.bar.itemaProp = 'prop-1';
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
stamped1[1].$.bar.itembProp = 'changed';
|
|
assert.equal(stamped2[1].itembProp, 'changed');
|
|
stamped2[1].$.bar.itembProp = 'prop-1-1';
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
stamped1[2].$.bar.itemcProp = 'changed';
|
|
assert.equal(stamped2[2].itemcProp, 'changed');
|
|
stamped2[2].$.bar.itemcProp = 'prop-1-1-1';
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
stamped1[38].$.bar.itemcProp = 'changed';
|
|
assert.equal(stamped2[38].itemcProp, 'changed');
|
|
stamped2[38].$.bar.itemcProp = 'prop-3-3-3';
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
});
|
|
|
|
test('change to non-item scope doesn\'t affect other dom-repeat', function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured2.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
|
|
unconfigured1.prop = 'foo';
|
|
unconfigured2.prop = 'bar';
|
|
assert.equal(stamped1[0].outerProp, 'foo');
|
|
assert.equal(stamped1[1].outerProp, 'foo');
|
|
assert.equal(stamped1[2].outerProp, 'foo');
|
|
assert.equal(stamped2[0].outerProp, 'bar');
|
|
assert.equal(stamped2[1].outerProp, 'bar');
|
|
assert.equal(stamped2[2].outerProp, 'bar');
|
|
|
|
stamped1[1].$.bar.inneraProp = 'bar';
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, array sort', function() {
|
|
|
|
var removed;
|
|
|
|
test('push', function(done) {
|
|
unconfigured1.domUpdateHandlerCount = 0;
|
|
unconfigured.push('items', {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39].itemaProp, 'new-1');
|
|
assert.equal(stamped1[40].itemaProp, 'new-2');
|
|
assert.equal(stamped1[41], undefined);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
assert.equal(stamped2[39].itemaProp, 'new-1');
|
|
assert.equal(stamped2[40].itemaProp, 'new-2');
|
|
assert.equal(stamped2[41], undefined);
|
|
assert.equal(unconfigured1.domUpdateHandlerCount, 1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using splice)', function(done) {
|
|
unconfigured1.domUpdateHandlerCount = 0;
|
|
unconfigured.splice('items', 3, 2);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
assert.equal(stamped2[39], undefined);
|
|
assert.equal(unconfigured1.domUpdateHandlerCount, 1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.pop('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[25].itemcProp, 'prop-2-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
assert.equal(stamped2[25].itemcProp, 'prop-2-3-3');
|
|
assert.equal(stamped2[25].indexa, 1);
|
|
assert.equal(stamped2[25].indexb, 2);
|
|
assert.equal(stamped2[25].indexc, 2);
|
|
assert.equal(stamped2[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.splice('items', 2, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
assert.equal(stamped2[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.unshift('items', {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'new-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'new-2');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[2].indexa, 2);
|
|
assert.equal(stamped2[0].itemaProp, 'new-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped2[1].itemaProp, 'new-2');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped2[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[2].indexa, 2);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 2);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.shift('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 1)[0];
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-3');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-3-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.splice('items', 1, 0, {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itemaProp, 'new-2');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[15].indexa, 3);
|
|
assert.equal(stamped1[16].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[16].indexa, 3);
|
|
assert.equal(stamped1[16].indexb, 0);
|
|
assert.equal(stamped1[17].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[17].indexa, 3);
|
|
assert.equal(stamped1[17].indexb, 0);
|
|
assert.equal(stamped1[17].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'new-1');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itemaProp, 'new-2');
|
|
assert.equal(stamped2[14].indexa, 2);
|
|
assert.equal(stamped2[15].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[15].indexa, 3);
|
|
assert.equal(stamped2[16].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[16].indexa, 3);
|
|
assert.equal(stamped2[16].indexb, 0);
|
|
assert.equal(stamped2[17].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[17].indexa, 3);
|
|
assert.equal(stamped2[17].indexb, 0);
|
|
assert.equal(stamped2[17].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 2);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 2, {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itemaProp, 'new-2');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15], undefined);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'new-1');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itemaProp, 'new-2');
|
|
assert.equal(stamped2[14].indexa, 2);
|
|
assert.equal(stamped2[15], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 2, removed[0], removed[1]);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, array sort with filter', function() {
|
|
|
|
var removed;
|
|
|
|
test('push', function(done) {
|
|
unconfigured1.$.repeater.filter = function(o) {
|
|
return o.prop.indexOf('2') < 0;
|
|
};
|
|
unconfigured.push('items', {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26].itemaProp, 'new-1');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[27], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using splice)', function(done) {
|
|
unconfigured.splice('items', 3, 2);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.pop('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[10].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[10].indexa, 0);
|
|
assert.equal(stamped1[10].indexb, 2);
|
|
assert.equal(stamped1[10].indexc, 0);
|
|
assert.equal(stamped1[11].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[11].indexa, 0);
|
|
assert.equal(stamped1[11].indexb, 2);
|
|
assert.equal(stamped1[11].indexc, 1);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.splice('items', 2, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.unshift('items', {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'new-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 2);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.shift('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[10].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[10].indexa, 0);
|
|
assert.equal(stamped1[10].indexb, 2);
|
|
assert.equal(stamped1[10].indexc, 0);
|
|
assert.equal(stamped1[11].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[11].indexa, 0);
|
|
assert.equal(stamped1[11].indexb, 2);
|
|
assert.equal(stamped1[11].indexc, 1);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 1)[0];
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.splice('items', 1, 0, {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[15].indexa, 2);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[16].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[16].indexa, 2);
|
|
assert.equal(stamped1[16].indexb, 0);
|
|
assert.equal(stamped1[16].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 2);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 2, {prop: 'new-1'}, {prop: 'new-2'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[14], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 2, removed[0], removed[1]);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, view sort', function() {
|
|
|
|
var removed, a, m, z;
|
|
|
|
test('push', function(done) {
|
|
unconfigured1.$.repeater.filter = null;
|
|
unconfigured1.$.repeater.sort = function(a, b) {
|
|
return b.prop == a.prop ? 0 : b.prop < a.prop ? -1 : 1;
|
|
};
|
|
unconfigured.push('items', a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[27].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[40].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[40].indexa, 4);
|
|
assert.equal(stamped1[40].indexb, 2);
|
|
assert.equal(stamped1[40].indexc, 2);
|
|
assert.equal(stamped1[41].itemaProp, 'a');
|
|
assert.equal(stamped1[41].indexa, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using splice)', function(done) {
|
|
arrayDelete(unconfigured, 'items', a);
|
|
arrayDelete(unconfigured, 'items', m);
|
|
arrayDelete(unconfigured, 'items', z);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.pop('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.splice('items', 2, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.unshift('items', a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[27].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[40].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[40].indexa, 4);
|
|
assert.equal(stamped1[40].indexb, 2);
|
|
assert.equal(stamped1[40].indexc, 2);
|
|
assert.equal(stamped1[41].itemaProp, 'a');
|
|
assert.equal(stamped1[41].indexa, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using arrayDelete)', function(done) {
|
|
arrayDelete(unconfigured, 'items', a);
|
|
arrayDelete(unconfigured, 'items', m);
|
|
arrayDelete(unconfigured, 'items', z);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.shift('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-2-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-2-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-2-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 1)[0];
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.splice('items', 1, 0, a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[27].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[40].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[40].indexa, 4);
|
|
assert.equal(stamped1[40].indexb, 2);
|
|
assert.equal(stamped1[40].indexc, 2);
|
|
assert.equal(stamped1[41].itemaProp, 'a');
|
|
assert.equal(stamped1[41].indexa, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using arrayDelete)', function(done) {
|
|
arrayDelete(unconfigured, 'items', a);
|
|
arrayDelete(unconfigured, 'items', m);
|
|
arrayDelete(unconfigured, 'items', z);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 2, a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[2].indexa, 2);
|
|
assert.equal(stamped1[3].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[3].indexa, 2);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[4].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[4].indexa, 2);
|
|
assert.equal(stamped1[4].indexb, 0);
|
|
assert.equal(stamped1[4].indexc, 0);
|
|
assert.equal(stamped1[15].itemaProp, 'a');
|
|
assert.equal(stamped1[15].indexa, 3);
|
|
assert.equal(stamped1[16], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
arrayDelete(unconfigured, 'items', a);
|
|
arrayDelete(unconfigured, 'items', m);
|
|
arrayDelete(unconfigured, 'items', z);
|
|
unconfigured.splice('items', 1, 2, removed[0], removed[1]);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, view sort with filter', function() {
|
|
|
|
var removed, a, m, z;
|
|
|
|
suiteSetup(function() {
|
|
unconfigured1.$.repeater.sort = function(a, b) {
|
|
return b.prop == a.prop ? 0 : b.prop < a.prop ? -1 : 1;
|
|
};
|
|
unconfigured1.$.repeater.filter = function(o) {
|
|
return o.prop.indexOf('2') < 0;
|
|
};
|
|
unconfigured1.$.repeater.render();
|
|
});
|
|
|
|
suiteTeardown(function() {
|
|
unconfigured1.$.repeater.sort = null;
|
|
unconfigured1.$.repeater.filter = null;
|
|
unconfigured1.$.repeater.render();
|
|
});
|
|
|
|
test('push', function(done) {
|
|
unconfigured.push('items', a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[26].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[26].indexb, 2);
|
|
assert.equal(stamped1[26].indexc, 2);
|
|
assert.equal(stamped1[27].itemaProp, 'a');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[28], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using arrayDelete)', function(done) {
|
|
arrayDelete(unconfigured, 'items', a);
|
|
arrayDelete(unconfigured, 'items', m);
|
|
arrayDelete(unconfigured, 'items', z);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.pop('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.splice('items', 2, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.unshift('items', a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[26].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[26].indexb, 2);
|
|
assert.equal(stamped1[26].indexc, 2);
|
|
assert.equal(stamped1[27].itemaProp, 'a');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[28], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 3);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.shift('items');
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.splice('items', 0, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 1)[0];
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 0, removed);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.splice('items', 1, 0, a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[26].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[26].indexb, 2);
|
|
assert.equal(stamped1[26].indexc, 2);
|
|
assert.equal(stamped1[27].itemaProp, 'a');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[28], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 3);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.splice('items', 1, 2, a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[13].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[13].indexb, 2);
|
|
assert.equal(stamped1[13].indexc, 2);
|
|
assert.equal(stamped1[14].itemaProp, 'a');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
unconfigured.splice('items', 1, 3, removed[0], removed[1]);
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, array sort (direct mutation)', function() {
|
|
|
|
var removed;
|
|
|
|
test('push', function(done) {
|
|
unconfigured1.domUpdateHandlerCount = 0;
|
|
unconfigured.items.push({prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39].itemaProp, 'new-1');
|
|
assert.equal(stamped1[40].itemaProp, 'new-2');
|
|
assert.equal(stamped1[41], undefined);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
assert.equal(stamped2[39].itemaProp, 'new-1');
|
|
assert.equal(stamped2[40].itemaProp, 'new-2');
|
|
assert.equal(stamped2[41], undefined);
|
|
assert.equal(unconfigured1.domUpdateHandlerCount, 1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using splice)', function(done) {
|
|
unconfigured1.domUpdateHandlerCount = 0;
|
|
unconfigured.items.splice(3, 2);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
assert.equal(stamped2[39], undefined);
|
|
assert.equal(unconfigured1.domUpdateHandlerCount, 1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.items.pop();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[25].itemcProp, 'prop-2-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
assert.equal(stamped2[25].itemcProp, 'prop-2-3-3');
|
|
assert.equal(stamped2[25].indexa, 1);
|
|
assert.equal(stamped2[25].indexb, 2);
|
|
assert.equal(stamped2[25].indexc, 2);
|
|
assert.equal(stamped2[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.items.splice(2, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
assert.equal(stamped2[38].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped2[38].indexa, 2);
|
|
assert.equal(stamped2[38].indexb, 2);
|
|
assert.equal(stamped2[38].indexc, 2);
|
|
assert.equal(stamped2[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.items.unshift({prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'new-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'new-2');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[2].indexa, 2);
|
|
assert.equal(stamped2[0].itemaProp, 'new-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped2[1].itemaProp, 'new-2');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped2[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[2].indexa, 2);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 2);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.items.shift();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 1)[0];
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-3');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-3-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.items.splice(1, 0, {prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itemaProp, 'new-2');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[15].indexa, 3);
|
|
assert.equal(stamped1[16].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[16].indexa, 3);
|
|
assert.equal(stamped1[16].indexb, 0);
|
|
assert.equal(stamped1[17].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[17].indexa, 3);
|
|
assert.equal(stamped1[17].indexb, 0);
|
|
assert.equal(stamped1[17].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'new-1');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itemaProp, 'new-2');
|
|
assert.equal(stamped2[14].indexa, 2);
|
|
assert.equal(stamped2[15].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[15].indexa, 3);
|
|
assert.equal(stamped2[16].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[16].indexa, 3);
|
|
assert.equal(stamped2[16].indexb, 0);
|
|
assert.equal(stamped2[17].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[17].indexa, 3);
|
|
assert.equal(stamped2[17].indexb, 0);
|
|
assert.equal(stamped2[17].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 2);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 2, {prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 2 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itemaProp, 'new-2');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15], undefined);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'new-1');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itemaProp, 'new-2');
|
|
assert.equal(stamped2[14].indexa, 2);
|
|
assert.equal(stamped2[15], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 2, removed[0], removed[1]);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped2.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].indexa, 0);
|
|
assert.equal(stamped2[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped2[1].indexa, 0);
|
|
assert.equal(stamped2[1].indexb, 0);
|
|
assert.equal(stamped2[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped2[2].indexa, 0);
|
|
assert.equal(stamped2[2].indexb, 0);
|
|
assert.equal(stamped2[2].indexc, 0);
|
|
assert.equal(stamped2[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped2[13].indexa, 1);
|
|
assert.equal(stamped2[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped2[14].indexa, 1);
|
|
assert.equal(stamped2[14].indexb, 0);
|
|
assert.equal(stamped2[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped2[15].indexa, 1);
|
|
assert.equal(stamped2[15].indexb, 0);
|
|
assert.equal(stamped2[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, array sort with filter (direct mutation)', function() {
|
|
|
|
var removed;
|
|
|
|
test('push', function(done) {
|
|
unconfigured1.$.repeater.filter = function(o) {
|
|
return o.prop.indexOf('2') < 0;
|
|
};
|
|
unconfigured.items.push({prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26].itemaProp, 'new-1');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[27], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using splice)', function(done) {
|
|
unconfigured.items.splice(3, 2);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.items.pop();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[10].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[10].indexa, 0);
|
|
assert.equal(stamped1[10].indexb, 2);
|
|
assert.equal(stamped1[10].indexc, 0);
|
|
assert.equal(stamped1[11].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[11].indexa, 0);
|
|
assert.equal(stamped1[11].indexb, 2);
|
|
assert.equal(stamped1[11].indexc, 1);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.items.splice(2, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.items.unshift({prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'new-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 2);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.items.shift();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[10].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[10].indexa, 0);
|
|
assert.equal(stamped1[10].indexb, 2);
|
|
assert.equal(stamped1[10].indexc, 0);
|
|
assert.equal(stamped1[11].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[11].indexa, 0);
|
|
assert.equal(stamped1[11].indexb, 2);
|
|
assert.equal(stamped1[11].indexc, 1);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 1)[0];
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.items.splice(1, 0, {prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[15].indexa, 2);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[16].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[16].indexa, 2);
|
|
assert.equal(stamped1[16].indexb, 0);
|
|
assert.equal(stamped1[16].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 2);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 2, {prop: 'new-1'}, {prop: 'new-2'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'new-1');
|
|
assert.equal(stamped1[14], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 2, removed[0], removed[1]);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-3-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-3-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, view sort (direct mutation)', function() {
|
|
|
|
var removed, a, m, z;
|
|
|
|
test('push', function(done) {
|
|
unconfigured1.$.repeater.filter = null;
|
|
unconfigured1.$.repeater.sort = function(a, b) {
|
|
return b.prop == a.prop ? 0 : b.prop < a.prop ? -1 : 1;
|
|
};
|
|
unconfigured.items.push(a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[27].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[40].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[40].indexa, 4);
|
|
assert.equal(stamped1[40].indexb, 2);
|
|
assert.equal(stamped1[40].indexc, 2);
|
|
assert.equal(stamped1[41].itemaProp, 'a');
|
|
assert.equal(stamped1[41].indexa, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using splice)', function(done) {
|
|
arrayDeleteDirect(unconfigured.items, a);
|
|
arrayDeleteDirect(unconfigured.items, m);
|
|
arrayDeleteDirect(unconfigured.items, z);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.items.pop();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.items.splice(2, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.items.unshift(a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[27].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[40].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[40].indexa, 4);
|
|
assert.equal(stamped1[40].indexb, 2);
|
|
assert.equal(stamped1[40].indexc, 2);
|
|
assert.equal(stamped1[41].itemaProp, 'a');
|
|
assert.equal(stamped1[41].indexa, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using arrayDelete)', function(done) {
|
|
arrayDeleteDirect(unconfigured.items, a);
|
|
arrayDeleteDirect(unconfigured.items, m);
|
|
arrayDeleteDirect(unconfigured.items, z);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.items.shift();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-2-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-2-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-2-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 1)[0];
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-2');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-2-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-2-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.items.splice(1, 0, a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[27].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[40].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[40].indexa, 4);
|
|
assert.equal(stamped1[40].indexb, 2);
|
|
assert.equal(stamped1[40].indexc, 2);
|
|
assert.equal(stamped1[41].itemaProp, 'a');
|
|
assert.equal(stamped1[41].indexa, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using arrayDelete)', function(done) {
|
|
arrayDeleteDirect(unconfigured.items, a);
|
|
arrayDeleteDirect(unconfigured.items, m);
|
|
arrayDeleteDirect(unconfigured.items, z);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 2, a={prop: 'a'}, m={prop: 'prop-1*'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-1*');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[2].indexa, 2);
|
|
assert.equal(stamped1[3].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[3].indexa, 2);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[4].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[4].indexa, 2);
|
|
assert.equal(stamped1[4].indexb, 0);
|
|
assert.equal(stamped1[4].indexc, 0);
|
|
assert.equal(stamped1[15].itemaProp, 'a');
|
|
assert.equal(stamped1[15].indexa, 3);
|
|
assert.equal(stamped1[16], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
arrayDeleteDirect(unconfigured.items, a);
|
|
arrayDeleteDirect(unconfigured.items, m);
|
|
arrayDeleteDirect(unconfigured.items, z);
|
|
unconfigured.items.splice(1, 2, removed[0], removed[1]);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 3 + 3*3 + 3*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[36].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[36].indexa, 2);
|
|
assert.equal(stamped1[36].indexb, 2);
|
|
assert.equal(stamped1[36].indexc, 0);
|
|
assert.equal(stamped1[37].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[37].indexa, 2);
|
|
assert.equal(stamped1[37].indexb, 2);
|
|
assert.equal(stamped1[37].indexc, 1);
|
|
assert.equal(stamped1[38].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[38].indexa, 2);
|
|
assert.equal(stamped1[38].indexb, 2);
|
|
assert.equal(stamped1[38].indexc, 2);
|
|
assert.equal(stamped1[39], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('reacting to changes, view sort with filter (direct mutation)', function() {
|
|
|
|
var removed, a, m, z;
|
|
|
|
suiteSetup(function() {
|
|
unconfigured1.$.repeater.sort = function(a, b) {
|
|
return b.prop == a.prop ? 0 : b.prop < a.prop ? -1 : 1;
|
|
};
|
|
unconfigured1.$.repeater.filter = function(o) {
|
|
return o.prop.indexOf('2') < 0;
|
|
};
|
|
unconfigured1.$.repeater.render();
|
|
});
|
|
|
|
suiteTeardown(function() {
|
|
unconfigured1.$.repeater.sort = null;
|
|
unconfigured1.$.repeater.filter = null;
|
|
unconfigured1.$.repeater.render();
|
|
});
|
|
|
|
test('push', function(done) {
|
|
unconfigured.items.push(a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[26].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[26].indexb, 2);
|
|
assert.equal(stamped1[26].indexc, 2);
|
|
assert.equal(stamped1[27].itemaProp, 'a');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[28], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: push (using arrayDelete)', function(done) {
|
|
arrayDeleteDirect(unconfigured.items, a);
|
|
arrayDeleteDirect(unconfigured.items, m);
|
|
arrayDeleteDirect(unconfigured.items, z);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('pop', function(done) {
|
|
removed = unconfigured.items.pop();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: pop (using splice)', function(done) {
|
|
unconfigured.items.splice(2, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('unshift', function(done) {
|
|
unconfigured.items.unshift(a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[26].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[26].indexb, 2);
|
|
assert.equal(stamped1[26].indexc, 2);
|
|
assert.equal(stamped1[27].itemaProp, 'a');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[28], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: unshift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 3);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('shift', function(done) {
|
|
removed = unconfigured.items.shift();
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[12].itemcProp, 'prop-3-3-3');
|
|
assert.equal(stamped1[12].indexa, 0);
|
|
assert.equal(stamped1[12].indexb, 2);
|
|
assert.equal(stamped1[12].indexc, 2);
|
|
assert.equal(stamped1[13], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: shift (using splice)', function(done) {
|
|
unconfigured.items.splice(0, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - remove from middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 1)[0];
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[13].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[14].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[14].indexa, 1);
|
|
assert.equal(stamped1[14].indexb, 0);
|
|
assert.equal(stamped1[15].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[15].indexa, 1);
|
|
assert.equal(stamped1[15].indexb, 0);
|
|
assert.equal(stamped1[15].indexc, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - remove from middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 0, removed);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - add to middle', function(done) {
|
|
unconfigured.items.splice(1, 0, a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[26].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[26].indexa, 2);
|
|
assert.equal(stamped1[26].indexb, 2);
|
|
assert.equal(stamped1[26].indexc, 2);
|
|
assert.equal(stamped1[27].itemaProp, 'a');
|
|
assert.equal(stamped1[27].indexa, 3);
|
|
assert.equal(stamped1[28], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - add to middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 3);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('splice - replace in middle', function(done) {
|
|
removed = unconfigured.items.splice(1, 2, a={prop: 'a'}, m={prop: 'item*2'}, z={prop: 'z'});
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 1 + 1*3 + 1*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'z');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itemaProp, 'prop-1');
|
|
assert.equal(stamped1[1].indexa, 1);
|
|
assert.equal(stamped1[2].itembProp, 'prop-1-1');
|
|
assert.equal(stamped1[2].indexa, 1);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[3].itemcProp, 'prop-1-1-1');
|
|
assert.equal(stamped1[3].indexa, 1);
|
|
assert.equal(stamped1[3].indexb, 0);
|
|
assert.equal(stamped1[3].indexc, 0);
|
|
assert.equal(stamped1[13].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[13].indexa, 1);
|
|
assert.equal(stamped1[13].indexb, 2);
|
|
assert.equal(stamped1[13].indexc, 2);
|
|
assert.equal(stamped1[14].itemaProp, 'a');
|
|
assert.equal(stamped1[14].indexa, 2);
|
|
assert.equal(stamped1[15], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('undo: splice - replace in middle (using splice)', function(done) {
|
|
unconfigured.items.splice(1, 3, removed[0], removed[1]);
|
|
unconfigured.items = unconfigured.items;
|
|
setTimeout(function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1.length, 2 + 2*3 + 2*3*3, 'total stamped count incorrect');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped1[0].indexa, 0);
|
|
assert.equal(stamped1[1].itembProp, 'prop-3-1');
|
|
assert.equal(stamped1[1].indexa, 0);
|
|
assert.equal(stamped1[1].indexb, 0);
|
|
assert.equal(stamped1[2].itemcProp, 'prop-3-1-1');
|
|
assert.equal(stamped1[2].indexa, 0);
|
|
assert.equal(stamped1[2].indexb, 0);
|
|
assert.equal(stamped1[2].indexc, 0);
|
|
assert.equal(stamped1[23].itemcProp, 'prop-1-3-1');
|
|
assert.equal(stamped1[23].indexa, 1);
|
|
assert.equal(stamped1[23].indexb, 2);
|
|
assert.equal(stamped1[23].indexc, 0);
|
|
assert.equal(stamped1[24].itemcProp, 'prop-1-3-2');
|
|
assert.equal(stamped1[24].indexa, 1);
|
|
assert.equal(stamped1[24].indexb, 2);
|
|
assert.equal(stamped1[24].indexc, 1);
|
|
assert.equal(stamped1[25].itemcProp, 'prop-1-3-3');
|
|
assert.equal(stamped1[25].indexa, 1);
|
|
assert.equal(stamped1[25].indexb, 2);
|
|
assert.equal(stamped1[25].indexc, 2);
|
|
assert.equal(stamped1[26], undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('multiple mutations in same turn', function() {
|
|
|
|
test('array sort, no filter: unshift+pop', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
primitive.unshift('items', 'new1');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'a');
|
|
assert.equal(stamped1[2].itemaProp, 'b');
|
|
assert.equal(stamped1[3].itemaProp, 'c');
|
|
assert.equal(stamped1[4].itemaProp, 'd');
|
|
primitive.unshift('items', 'new2');
|
|
primitive.pop('items');
|
|
primitive.unshift('items', 'new3');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new3');
|
|
assert.equal(stamped1[1].itemaProp, 'new2');
|
|
assert.equal(stamped1[2].itemaProp, 'new1');
|
|
assert.equal(stamped1[3].itemaProp, 'a');
|
|
assert.equal(stamped1[4].itemaProp, 'b');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'c');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new2');
|
|
assert.equal(stamped1[1].itemaProp, 'new1');
|
|
assert.equal(stamped1[2].itemaProp, 'a');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'c');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'd');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'e');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
test('array sort, no filter: insertions', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
primitive.splice('items', 1, 0, 'new2', 'new3');
|
|
primitive.splice('items', 0, 0, 'new1');
|
|
primitive.splice('items', 8, 0, 'new5');
|
|
primitive.splice('items', 5, 0, 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'a');
|
|
assert.equal(stamped1[2].itemaProp, 'new2');
|
|
assert.equal(stamped1[3].itemaProp, 'new3');
|
|
assert.equal(stamped1[4].itemaProp, 'b');
|
|
assert.equal(stamped1[5].itemaProp, 'new4');
|
|
assert.equal(stamped1[6].itemaProp, 'c');
|
|
assert.equal(stamped1[7].itemaProp, 'd');
|
|
assert.equal(stamped1[8].itemaProp, 'e');
|
|
assert.equal(stamped1[9].itemaProp, 'new5');
|
|
arrayDelete(primitive, 'items', 'new5');
|
|
arrayDelete(primitive, 'items', 'new3');
|
|
arrayDelete(primitive, 'items', 'new1');
|
|
arrayDelete(primitive, 'items', 'new2');
|
|
arrayDelete(primitive, 'items', 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
test('array sort, no filter: insert & remove', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
primitive.splice('items', 1, 0, 'new1', 'new2', 'new3');
|
|
primitive.splice('items', 3, 1);
|
|
primitive.splice('items', 4, 0, 'new4', 'new5', 'new6');
|
|
primitive.splice('items', 4, 2);
|
|
primitive.splice('items', 4, 1);
|
|
primitive.splice('items', 1, 2);
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('array sort, filtered: unshift+pop', function(done) {
|
|
primitive.$.repeater1.filter = function(s) {
|
|
return s.indexOf('new2') < 0;
|
|
};
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
primitive.unshift('items', 'new1');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'a');
|
|
assert.equal(stamped1[2].itemaProp, 'b');
|
|
assert.equal(stamped1[3].itemaProp, 'c');
|
|
assert.equal(stamped1[4].itemaProp, 'd');
|
|
primitive.unshift('items', 'new2');
|
|
primitive.pop('items');
|
|
primitive.unshift('items', 'new3');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new3');
|
|
assert.equal(stamped1[1].itemaProp, 'new1');
|
|
assert.equal(stamped1[2].itemaProp, 'a');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'c');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'a');
|
|
assert.equal(stamped1[2].itemaProp, 'b');
|
|
assert.equal(stamped1[3].itemaProp, 'c');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'd');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'e');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
test('array sort, filtered: insertions', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
primitive.splice('items', 1, 0, 'new2', 'new3');
|
|
primitive.splice('items', 0, 0, 'new1');
|
|
primitive.splice('items', 8, 0, 'new5');
|
|
primitive.splice('items', 5, 0, 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'a');
|
|
assert.equal(stamped1[2].itemaProp, 'new3');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'new4');
|
|
assert.equal(stamped1[5].itemaProp, 'c');
|
|
assert.equal(stamped1[6].itemaProp, 'd');
|
|
assert.equal(stamped1[7].itemaProp, 'e');
|
|
assert.equal(stamped1[8].itemaProp, 'new5');
|
|
arrayDelete(primitive, 'items', 'new5');
|
|
arrayDelete(primitive, 'items', 'new3');
|
|
arrayDelete(primitive, 'items', 'new1');
|
|
arrayDelete(primitive, 'items', 'new2');
|
|
arrayDelete(primitive, 'items', 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
test('array sort, filtered: insert & remove', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
primitive.splice('items', 1, 0, 'new1', 'new2', 'new3');
|
|
primitive.splice('items', 3, 1);
|
|
primitive.splice('items', 4, 0, 'new4', 'new5', 'new6');
|
|
primitive.splice('items', 4, 2);
|
|
primitive.splice('items', 4, 1);
|
|
primitive.splice('items', 1, 2);
|
|
primitive.$.repeater1.filter = null;
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('view sort, no filter: unshift+pop', function(done) {
|
|
primitive.$.repeater1.sort = function(a, b) {
|
|
return b.localeCompare(a);
|
|
};
|
|
setTimeout(function() {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.unshift('items', 'new1');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.unshift('items', 'new2');
|
|
primitive.pop('items');
|
|
primitive.unshift('items', 'new3');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new3');
|
|
assert.equal(stamped1[1].itemaProp, 'new2');
|
|
assert.equal(stamped1[2].itemaProp, 'new1');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'c');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new2');
|
|
assert.equal(stamped1[1].itemaProp, 'new1');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'd');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'e');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
test('view sort, no filter: insertions', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.splice('items', 1, 0, 'new2', 'new3');
|
|
primitive.splice('items', 0, 0, 'new1');
|
|
primitive.splice('items', 8, 0, 'new5');
|
|
primitive.splice('items', 5, 0, 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new5');
|
|
assert.equal(stamped1[1].itemaProp, 'new4');
|
|
assert.equal(stamped1[2].itemaProp, 'new3');
|
|
assert.equal(stamped1[3].itemaProp, 'new2');
|
|
assert.equal(stamped1[4].itemaProp, 'new1');
|
|
assert.equal(stamped1[5].itemaProp, 'e');
|
|
assert.equal(stamped1[6].itemaProp, 'd');
|
|
assert.equal(stamped1[7].itemaProp, 'c');
|
|
assert.equal(stamped1[8].itemaProp, 'b');
|
|
assert.equal(stamped1[9].itemaProp, 'a');
|
|
arrayDelete(primitive, 'items', 'new5');
|
|
arrayDelete(primitive, 'items', 'new3');
|
|
arrayDelete(primitive, 'items', 'new1');
|
|
arrayDelete(primitive, 'items', 'new2');
|
|
arrayDelete(primitive, 'items', 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
test('view sort, no filter: insert & remove', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.splice('items', 1, 0, 'new1', 'new2', 'new3');
|
|
primitive.splice('items', 3, 1);
|
|
primitive.splice('items', 4, 0, 'new4', 'new5', 'new6');
|
|
primitive.splice('items', 4, 2);
|
|
primitive.splice('items', 4, 1);
|
|
primitive.splice('items', 1, 2);
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('view sort, filtered: unshift+pop', function(done) {
|
|
primitive.$.repeater1.filter = function(s) {
|
|
return s.indexOf('new2') < 0;
|
|
};
|
|
setTimeout(function() {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.unshift('items', 'new1');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.unshift('items', 'new2');
|
|
primitive.pop('items');
|
|
primitive.unshift('items', 'new3');
|
|
primitive.pop('items');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new3');
|
|
assert.equal(stamped1[1].itemaProp, 'new1');
|
|
assert.equal(stamped1[2].itemaProp, 'b');
|
|
assert.equal(stamped1[3].itemaProp, 'a');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'c');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new1');
|
|
assert.equal(stamped1[1].itemaProp, 'c');
|
|
assert.equal(stamped1[2].itemaProp, 'b');
|
|
assert.equal(stamped1[3].itemaProp, 'a');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'd');
|
|
primitive.shift('items');
|
|
primitive.push('items', 'e');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
test('view sort, no filter: insertions', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.splice('items', 1, 0, 'new2', 'new3');
|
|
primitive.splice('items', 0, 0, 'new1');
|
|
primitive.splice('items', 8, 0, 'new5');
|
|
primitive.splice('items', 5, 0, 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'new5');
|
|
assert.equal(stamped1[1].itemaProp, 'new4');
|
|
assert.equal(stamped1[2].itemaProp, 'new3');
|
|
assert.equal(stamped1[3].itemaProp, 'new1');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
assert.equal(stamped1[5].itemaProp, 'd');
|
|
assert.equal(stamped1[6].itemaProp, 'c');
|
|
assert.equal(stamped1[7].itemaProp, 'b');
|
|
assert.equal(stamped1[8].itemaProp, 'a');
|
|
arrayDelete(primitive, 'items', 'new5');
|
|
arrayDelete(primitive, 'items', 'new3');
|
|
arrayDelete(primitive, 'items', 'new1');
|
|
arrayDelete(primitive, 'items', 'new2');
|
|
arrayDelete(primitive, 'items', 'new4');
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
test('view sort, no filter: insert & remove', function(done) {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.splice('items', 1, 0, 'new1', 'new2', 'new3');
|
|
primitive.splice('items', 3, 1);
|
|
primitive.splice('items', 4, 0, 'new4', 'new5', 'new6');
|
|
primitive.splice('items', 4, 2);
|
|
primitive.splice('items', 4, 1);
|
|
primitive.splice('items', 1, 2);
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
assert.equal(stamped1[1].itemaProp, 'd');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'b');
|
|
assert.equal(stamped1[4].itemaProp, 'a');
|
|
primitive.$.repeater1.filter = null;
|
|
primitive.$.repeater1.sort = null;
|
|
setTimeout(function() {
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
suite('item changing on instance', function() {
|
|
|
|
test('primitive values - initial stamping', function() {
|
|
// repeater 1
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'a');
|
|
assert.equal(stamped1[1].itemaProp, 'b');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
assert.equal(stamped1[3].itemaProp, 'd');
|
|
assert.equal(stamped1[4].itemaProp, 'e');
|
|
// repeater 2
|
|
var stamped2 = primitive.$.container2.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped2[0].itemaProp, 'a');
|
|
assert.equal(stamped2[1].itemaProp, 'b');
|
|
assert.equal(stamped2[2].itemaProp, 'c');
|
|
assert.equal(stamped2[3].itemaProp, 'd');
|
|
assert.equal(stamped2[4].itemaProp, 'e');
|
|
});
|
|
|
|
test('primitive values - change from inside', function() {
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = primitive.$.container2.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var old = stamped1[2].itemaProp;
|
|
// Change middle item
|
|
stamped1[2].itemaProp = 'change!';
|
|
assert.equal(primitive.items[2], 'change!');
|
|
assert.equal(stamped2[2].itemaProp, 'change!');
|
|
// Revert
|
|
stamped2[2].itemaProp = old;
|
|
assert.equal(primitive.items[2], 'c');
|
|
assert.equal(stamped1[2].itemaProp, 'c');
|
|
});
|
|
|
|
test('primitive values - sorted', function() {
|
|
// Apply sort
|
|
primitive.$.repeater1.sort = function(a, b) {
|
|
return b.localeCompare(a);
|
|
};
|
|
primitive.$.repeater1.render();
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = primitive.$.container2.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var old = stamped1[0].itemaProp;
|
|
// Change last item (first rendered in #1, last rendered in #2)
|
|
stamped1[0].itemaProp = 'change!';
|
|
assert.equal(primitive.items[4], 'change!');
|
|
assert.equal(stamped2[4].itemaProp, 'change!');
|
|
// Revert
|
|
stamped2[4].itemaProp = old;
|
|
assert.equal(primitive.items[4], 'e');
|
|
assert.equal(stamped1[0].itemaProp, 'e');
|
|
primitive.$.repeater1.sort = null;
|
|
primitive.$.repeater1.render();
|
|
});
|
|
|
|
test('structured values - initial stamping', function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured2.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
});
|
|
|
|
test('structured values - change from inside', function() {
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured2.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var old = unconfigured.items[0];
|
|
// Change first item
|
|
unconfigured1.$.repeater.__instances[0].itema = {prop: 'change!'};
|
|
assert.equal(stamped1[0].itemaProp, 'change!');
|
|
assert.equal(stamped2[0].itemaProp, 'change!');
|
|
// Revert
|
|
unconfigured2.$.repeater.__instances[0].itema = old;
|
|
assert.equal(stamped1[0].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[0].itemaProp, 'prop-1');
|
|
});
|
|
|
|
test('structured values - sorted', function() {
|
|
unconfigured1.$.repeater.sort = function(a, b) {
|
|
return b.prop == a.prop ? 0 : b.prop < a.prop ? -1 : 1;
|
|
};
|
|
unconfigured1.$.repeater.render();
|
|
var stamped1 = unconfigured1.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var stamped2 = unconfigured2.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped1[26].itemaProp, 'prop-1');
|
|
assert.equal(stamped2[26].itemaProp, 'prop-3');
|
|
var old = unconfigured.items[2];
|
|
// Change last item (first rendered in #1, last rendered in #2)
|
|
// (but only because `observe` doesn't catch this and cause the list to
|
|
// re-sort; if it was, stamped1[26] should change)
|
|
unconfigured1.$.repeater.__instances[0].itema = {prop: 'change!'};
|
|
assert.equal(stamped1[0].itemaProp, 'change!');
|
|
assert.equal(stamped2[26].itemaProp, 'change!');
|
|
// Revert
|
|
unconfigured2.$.repeater.__instances[2].itema = old;
|
|
assert.equal(stamped1[0].itemaProp, 'prop-3');
|
|
assert.equal(stamped2[26].itemaProp, 'prop-3');
|
|
unconfigured1.$.repeater.sort = null;
|
|
unconfigured1.$.repeater.render();
|
|
});
|
|
|
|
});
|
|
|
|
suite('external change & notification', function() {
|
|
|
|
test('in-place sort', function(done) {
|
|
var items = [
|
|
173, 166, 145, 755, 907,
|
|
836, 564, 721, 540, 372,
|
|
244, 145, 525, 958, 595,
|
|
207, 103, 602, 769, 190];
|
|
primitive.items = items;
|
|
setTimeout(function() {
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
for (var i=0; i<items.length; i++) {
|
|
assert.equal(stamped1[i].itemaProp, items[i]);
|
|
}
|
|
var prev = items.slice();
|
|
items.sort();
|
|
var splices = Polymer.ArraySplice.calculateSplices(items, prev);
|
|
var change = {
|
|
indexSplices: splices
|
|
};
|
|
primitive.set('items.splices', change);
|
|
setTimeout(function() {
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
for (var i=0; i<items.length; i++) {
|
|
assert.equal(stamped1[i].itemaProp, items[i]);
|
|
}
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
suite('repeater API', function() {
|
|
|
|
test('modelForElement', function() {
|
|
var dom = unconfigured1.root;
|
|
var stamped1 = dom.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var repeater1 = dom.querySelector('dom-repeat[as=itema]');
|
|
var repeater2 = dom.querySelector('dom-repeat[as=itemb]');
|
|
var repeater3 = dom.querySelector('dom-repeat[as=itemc]');
|
|
|
|
model = repeater1.modelForElement(stamped1[4]);
|
|
assert.equal(model.itema.prop, 'prop-1');
|
|
|
|
model = repeater2.modelForElement(stamped1[4]);
|
|
assert.equal(model.itema.prop, 'prop-1');
|
|
assert.equal(model.itemb.prop, 'prop-1-1');
|
|
|
|
model = repeater3.modelForElement(stamped1[4]);
|
|
assert.equal(model.itema.prop, 'prop-1');
|
|
assert.equal(model.itemb.prop, 'prop-1-1');
|
|
assert.equal(model.itemc.prop, 'prop-1-1-3');
|
|
});
|
|
|
|
test('event.model && parentModel', function() {
|
|
let el = document.createElement('x-repeat-with-if');
|
|
document.body.appendChild(el);
|
|
Polymer.flush();
|
|
let buttons = el.shadowRoot.querySelectorAll('button');
|
|
let outer = el.shadowRoot.querySelector('#outer');
|
|
let event;
|
|
|
|
// First
|
|
assert.equal(buttons[0].textContent, 'a');
|
|
buttons[0].dispatchEvent(new CustomEvent('click', {bubbles: true}));
|
|
assert.equal(el.handleClick.callCount, 1);
|
|
event = el.handleClick.getCalls()[0].args[0];
|
|
assert.equal(event._target, buttons[0]);
|
|
assert.equal(event.model.item, el.items[0].items[0]);
|
|
assert.equal(event.model.item.prop, 'a');
|
|
assert.equal(event.model.parentModel.item, el.items[0]);
|
|
assert.equal(outer.modelForElement(event._target).item, el.items[0]);
|
|
|
|
// Second
|
|
assert.equal(buttons[1].textContent, 'b');
|
|
buttons[1].dispatchEvent(new CustomEvent('click', {bubbles: true}));
|
|
assert.equal(el.handleClick.callCount, 2);
|
|
event = el.handleClick.getCalls()[1].args[0];
|
|
assert.equal(event._target, buttons[1]);
|
|
assert.equal(event.model.item, el.items[0].items[1]);
|
|
assert.equal(event.model.item.prop, 'b');
|
|
assert.equal(event.model.parentModel.item, el.items[0]);
|
|
assert.equal(outer.modelForElement(event._target).item, el.items[0]);
|
|
|
|
// Third
|
|
assert.equal(buttons[2].textContent, 'c');
|
|
buttons[2].dispatchEvent(new CustomEvent('click', {bubbles: true}));
|
|
assert.equal(el.handleClick.callCount, 3);
|
|
event = el.handleClick.getCalls()[2].args[0];
|
|
assert.equal(event._target, buttons[2]);
|
|
assert.equal(event.model.item, el.items[1].items[0]);
|
|
assert.equal(event.model.item.prop, 'c');
|
|
assert.equal(event.model.parentModel.item, el.items[1]);
|
|
assert.equal(outer.modelForElement(event._target).item, el.items[1]);
|
|
|
|
// Fourth
|
|
assert.equal(buttons[3].textContent, 'd');
|
|
buttons[3].dispatchEvent(new CustomEvent('click', {bubbles: true}));
|
|
assert.equal(el.handleClick.callCount, 4);
|
|
event = el.handleClick.getCalls()[3].args[0];
|
|
assert.equal(event._target, buttons[3]);
|
|
assert.equal(event.model.item, el.items[1].items[1]);
|
|
assert.equal(event.model.item.prop, 'd');
|
|
assert.equal(event.model.parentModel.item, el.items[1]);
|
|
assert.equal(outer.modelForElement(event._target).item, el.items[1]);
|
|
|
|
document.body.removeChild(el);
|
|
});
|
|
|
|
test('indexForElement', function() {
|
|
var dom = unconfigured1.root;
|
|
var stamped1 = dom.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var repeater1 = dom.querySelector('dom-repeat[as=itema]');
|
|
var repeater2 = dom.querySelector('dom-repeat[as=itemb]');
|
|
var repeater3 = dom.querySelector('dom-repeat[as=itemc]');
|
|
|
|
assert.equal(repeater1.indexForElement(stamped1[4]), 0);
|
|
assert.equal(repeater2.indexForElement(stamped1[4]), 0);
|
|
assert.equal(repeater3.indexForElement(stamped1[4]), 2);
|
|
});
|
|
|
|
test('indexForElement', function() {
|
|
var dom = unconfigured1.root;
|
|
var stamped1 = dom.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
var repeater1 = dom.querySelector('dom-repeat[as=itema]');
|
|
var repeater2 = dom.querySelector('dom-repeat[as=itemb]');
|
|
var repeater3 = dom.querySelector('dom-repeat[as=itemc]');
|
|
|
|
assert.equal(repeater1.itemForElement(stamped1[4]).prop, 'prop-1');
|
|
assert.equal(repeater2.itemForElement(stamped1[4]).prop, 'prop-1-1');
|
|
assert.equal(repeater3.itemForElement(stamped1[4]).prop, 'prop-1-1-3');
|
|
});
|
|
|
|
test('renderedItemCount', function() {
|
|
var repeater1 = primitive.$.repeater1;
|
|
primitive.items = [ 'a', 'b', 'c', 'd', 'e' ];
|
|
repeater1.render();
|
|
assert.equal(repeater1.renderedItemCount, 5, 'renderedItemCount is incorrect');
|
|
repeater1.renderedItemCount = 0;
|
|
assert.equal(repeater1.renderedItemCount, 5, 'renderedItemCount is writable');
|
|
repeater1.filter = function(item) {
|
|
return (item != 'a' && item != 'e');
|
|
};
|
|
repeater1.render();
|
|
assert.equal(repeater1.renderedItemCount, 3, 'renderedItemCount incorrect after filter');
|
|
// reset repeater
|
|
repeater1.filter = undefined;
|
|
repeater1.render();
|
|
});
|
|
|
|
test('_showHideChildren', function() {
|
|
// Initially all showing
|
|
var stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(getComputedStyle(stamped1[0]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[1]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[2]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[3]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[4]).display, 'block');
|
|
|
|
// Hide all
|
|
primitive.$.repeater1.__hideTemplateChildren__ = true;
|
|
primitive.$.repeater1._showHideChildren(true);
|
|
assert.equal(getComputedStyle(stamped1[0]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[1]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[2]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[3]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[4]).display, 'none');
|
|
|
|
// Add one while hidden
|
|
primitive.push('items', 'new 1');
|
|
primitive.$.repeater1.render();
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(getComputedStyle(stamped1[0]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[1]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[2]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[3]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[4]).display, 'none');
|
|
assert.equal(getComputedStyle(stamped1[5]).display, 'none');
|
|
|
|
// Add one then unhide
|
|
primitive.push('items', 'new 2');
|
|
primitive.$.repeater1.__hideTemplateChildren__ = false;
|
|
primitive.$.repeater1._showHideChildren(false);
|
|
primitive.$.repeater1.render();
|
|
stamped1 = primitive.$.container1.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(getComputedStyle(stamped1[0]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[1]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[2]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[3]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[4]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[5]).display, 'block');
|
|
assert.equal(getComputedStyle(stamped1[6]).display, 'block');
|
|
|
|
// Revert
|
|
primitive.splice('items', 5, 2);
|
|
primitive.$.repeater1.render();
|
|
});
|
|
|
|
});
|
|
|
|
|
|
suite('limit', function() {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
for (var i=0; i<stamped.length; i++) {
|
|
assert.equal(parseInt(stamped[i].textContent), i);
|
|
}
|
|
};
|
|
|
|
test('initial limit', function() {
|
|
limited.items = limited.preppedItems;
|
|
limited.$.repeater.__limit = 2;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('change item paths in & out of limit', function() {
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
limited.outerProp = {prop: 'changed'};
|
|
assert.equal(stamped[0].prop, 'changed');
|
|
limited.set('items.0.prop', '0-changed');
|
|
limited.set('items.3.prop', '3-changed');
|
|
assert.equal(stamped[0].textContent, '0-changed');
|
|
limited.set('outerProp.prop', 'changed again');
|
|
assert.equal(stamped[0].prop, 'changed again');
|
|
});
|
|
|
|
test('increase limit', function() {
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 10;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 10);
|
|
checkItemOrder(stamped);
|
|
assert.equal(stamped[3].prop, 'changed again');
|
|
assert.equal(stamped[3].textContent, '3-changed');
|
|
limited.set('items.0.prop', 0);
|
|
limited.set('items.3.prop', 3);
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 20;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 20);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit above items.length', function() {
|
|
limited.$.repeater.__limit = 30;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 20);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('decrease limit', function() {
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 15;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 15);
|
|
checkItemOrder(stamped);
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 0;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
test('negative limit', function() {
|
|
limited.$.repeater.__limit = -10;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
});
|
|
|
|
suite('limit with sort', function() {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
for (var i=0; i<stamped.length; i++) {
|
|
assert.equal(stamped[i].textContent, 19 - i);
|
|
}
|
|
};
|
|
|
|
test('initial limit', function() {
|
|
limited.$.repeater.__limit = 2;
|
|
limited.$.repeater.sort = function(a, b) {
|
|
return b.prop - a.prop;
|
|
};
|
|
limited.items = null;
|
|
limited.$.repeater.render();
|
|
limited.items = limited.preppedItems;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit', function() {
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 10;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 10);
|
|
checkItemOrder(stamped);
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 20;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 20);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit above items.length', function() {
|
|
limited.$.repeater.__limit = 30;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 20);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('decrease limit', function() {
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 15;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 15);
|
|
checkItemOrder(stamped);
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 0;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
test('negative limit', function() {
|
|
limited.$.repeater.__limit = -10;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
});
|
|
|
|
suite('limit with filter', function() {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
for (var i=0; i<stamped.length; i++) {
|
|
assert.equal(stamped[i].textContent, i * 2);
|
|
}
|
|
};
|
|
|
|
test('initial limit', function() {
|
|
var items = limited.items;
|
|
limited.$.repeater.__limit = 2;
|
|
limited.$.repeater.sort = null;
|
|
limited.$.repeater.filter = function(a) {
|
|
return (a.prop % 2) === 0;
|
|
};
|
|
limited.items = null;
|
|
limited.$.repeater.render();
|
|
limited.items = items;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit', function() {
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 5;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 5);
|
|
checkItemOrder(stamped);
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 10;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 10);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit above items.length', function() {
|
|
limited.$.repeater.__limit = 30;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 10);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('decrease limit', function() {
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 5;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 5);
|
|
checkItemOrder(stamped);
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 0;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
test('negative limit', function() {
|
|
limited.$.repeater.__limit = -10;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
});
|
|
|
|
suite('limit with sort & filter', function() {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
for (var i=0; i<stamped.length; i++) {
|
|
assert.equal(stamped[i].textContent, (9 - i) * 2);
|
|
}
|
|
};
|
|
|
|
test('initial limit', function() {
|
|
var items = limited.items;
|
|
limited.$.repeater.__limit = 2;
|
|
limited.$.repeater.sort = function(a, b) {
|
|
return b.prop - a.prop;
|
|
};
|
|
limited.$.repeater.filter = function(a) {
|
|
return (a.prop % 2) === 0;
|
|
};
|
|
limited.items = null;
|
|
limited.$.repeater.render();
|
|
limited.items = items;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 2);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit', function() {
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 5;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 5);
|
|
checkItemOrder(stamped);
|
|
// Increase limit
|
|
limited.$.repeater.__limit = 10;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 10);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('increase limit above items.length', function() {
|
|
limited.$.repeater.__limit = 30;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 10);
|
|
checkItemOrder(stamped);
|
|
});
|
|
|
|
test('decrease limit', function() {
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 5;
|
|
limited.$.repeater.render();
|
|
var stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 5);
|
|
checkItemOrder(stamped);
|
|
// Decrease limit
|
|
limited.$.repeater.__limit = 0;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
test('negative limit', function() {
|
|
limited.$.repeater.__limit = -10;
|
|
limited.$.repeater.render();
|
|
stamped = limited.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 0);
|
|
});
|
|
|
|
});
|
|
|
|
// TODO(kschaaf): This test suite has proven to be flaky only on IE, only
|
|
// on CI (Sauce) presumably because of rAF handling in the CI environment
|
|
// disabling for IE for now to avoid Polymer tests being flaky
|
|
if (!/Trident/.test(navigator.userAgent)) {
|
|
|
|
// TODO(kschaaf): We're experiencing more flakiness on Safari on CI,
|
|
// for now, skip these tests and revisit
|
|
suite.skip('chunked rendering', function() {
|
|
|
|
test('basic chunked rendering', function(done) {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
for (var i=0; i<stamped.length; i++) {
|
|
assert.equal(stamped[i].textContent, i);
|
|
}
|
|
};
|
|
|
|
var lastLength = 0;
|
|
var checkCount = function() {
|
|
var stamped = chunked.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
checkItemOrder(stamped);
|
|
if (stamped.length && lastLength === 0) {
|
|
// Initial rendering of initial count
|
|
assert.equal(stamped.length, 10);
|
|
} else {
|
|
// Remaining rendering incremenets
|
|
assert.isTrue(stamped.length > lastLength);
|
|
}
|
|
if (stamped.length < 100) {
|
|
lastLength = stamped.length;
|
|
checkUntilComplete();
|
|
} else {
|
|
// Final rendering at exact item count
|
|
assert.equal(stamped.length, 100);
|
|
done();
|
|
}
|
|
};
|
|
var checkUntilComplete = function() {
|
|
// On polyfilled MO, need to wait one setTimeout before rAF
|
|
if (MutationObserver._isPolyfilled) {
|
|
setTimeout(function() {
|
|
requestAnimationFrame(checkCount);
|
|
});
|
|
} else {
|
|
requestAnimationFrame(checkCount);
|
|
}
|
|
};
|
|
|
|
chunked.items = chunked.preppedItems.slice();
|
|
checkUntilComplete();
|
|
|
|
});
|
|
|
|
test('mutations during chunked rendering', function(done) {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
var last = -1;
|
|
for (var i=0; i<stamped.length; i++) {
|
|
var curr = parseFloat(stamped[i].textContent);
|
|
assert.isTrue(curr > last);
|
|
last = curr;
|
|
}
|
|
};
|
|
|
|
var mutateArray = function(repeater, renderedCount) {
|
|
// The goal here is to remove & add some, and do it over
|
|
// the threshold of where we have currently rendered items, and
|
|
// ensure that the prop values of the newly inserted items are in
|
|
// ascending order so we can do a simple check in checkItemOrder
|
|
var overlap = 2;
|
|
var remove = 4;
|
|
var add = 6;
|
|
var start = renderedCount.length - overlap;
|
|
if (start + add < repeater.items.length) {
|
|
var end = start + remove;
|
|
var args = ['items', start, remove];
|
|
var startVal = repeater.items[start].prop;
|
|
var endVal = repeater.items[end].prop;
|
|
var delta = (endVal - startVal) / add;
|
|
for (var i=0; i<add; i++) {
|
|
args.push({prop: startVal + i*delta});
|
|
}
|
|
repeater.splice.apply(repeater, args);
|
|
}
|
|
};
|
|
|
|
var lastLength = 0;
|
|
var mutateCount = 5;
|
|
var checkCount = function() {
|
|
var stamped = chunked.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
checkItemOrder(stamped);
|
|
if (stamped.length && lastLength === 0) {
|
|
// Initial rendering of initial count
|
|
assert.equal(stamped.length, 10);
|
|
} else {
|
|
// Remaining rendering incremenets
|
|
assert.isTrue(stamped.length > lastLength);
|
|
}
|
|
if (stamped.length < chunked.items.length) {
|
|
if (mutateCount-- > 0) {
|
|
mutateArray(chunked, stamped);
|
|
}
|
|
lastLength = stamped.length;
|
|
checkUntilComplete();
|
|
} else {
|
|
// Final rendering at exact item count
|
|
assert.equal(stamped.length, chunked.items.length);
|
|
done();
|
|
}
|
|
};
|
|
var checkUntilComplete = function() {
|
|
// On polyfilled MO, need to wait one setTimeout before rAF
|
|
if (MutationObserver._isPolyfilled) {
|
|
setTimeout(function() {
|
|
requestAnimationFrame(checkCount);
|
|
});
|
|
} else {
|
|
requestAnimationFrame(checkCount);
|
|
}
|
|
};
|
|
|
|
chunked.items = chunked.preppedItems.slice();
|
|
checkUntilComplete();
|
|
|
|
});
|
|
|
|
|
|
test('mutations during chunked rendering, sort & filtered', function(done) {
|
|
|
|
var checkItemOrder = function(stamped) {
|
|
var last = Infinity;
|
|
for (var i=0; i<stamped.length; i++) {
|
|
var curr = parseFloat(stamped[i].textContent);
|
|
assert.isTrue(curr <= last);
|
|
assert.strictEqual(curr % 2, 0);
|
|
last = curr;
|
|
}
|
|
};
|
|
|
|
var mutateArray = function(repeater, stamped) {
|
|
var start = parseInt(stamped[0].textContent);
|
|
var end = parseInt(stamped[stamped.length-1].textContent);
|
|
var mid = (end-start)/2;
|
|
for (var i=0; i<5; i++) {
|
|
chunked.push('items', {prop: mid + 1});
|
|
}
|
|
chunked.splice('items', Math.round(stamped.length/2), 3);
|
|
};
|
|
|
|
var lastLength = 0;
|
|
var mutateCount = 5;
|
|
var checkCount = function() {
|
|
var stamped = chunked.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
checkItemOrder(stamped);
|
|
var filteredLength = chunked.items.filter(chunked.$.repeater.filter).length;
|
|
if (stamped.length && lastLength === 0) {
|
|
// Initial rendering of initial count
|
|
assert.equal(stamped.length, 10);
|
|
} else {
|
|
// Remaining rendering incremenets
|
|
if (stamped.length < filteredLength) {
|
|
assert.isTrue(stamped.length > lastLength);
|
|
}
|
|
}
|
|
if (stamped.length < filteredLength) {
|
|
if (mutateCount-- > 0) {
|
|
mutateArray(chunked, stamped);
|
|
}
|
|
lastLength = stamped.length;
|
|
checkUntilComplete();
|
|
} else {
|
|
assert.equal(stamped.length, filteredLength);
|
|
done();
|
|
}
|
|
};
|
|
var checkUntilComplete = function() {
|
|
// On polyfilled MO, need to wait one setTimeout before rAF
|
|
if (MutationObserver._isPolyfilled) {
|
|
setTimeout(function() {
|
|
requestAnimationFrame(checkCount);
|
|
});
|
|
} else {
|
|
requestAnimationFrame(checkCount);
|
|
}
|
|
};
|
|
|
|
chunked.$.repeater.sort = function(a, b) {
|
|
return b.prop - a.prop;
|
|
};
|
|
chunked.$.repeater.filter = function(a) {
|
|
return (a.prop % 2) === 0;
|
|
};
|
|
chunked.items = chunked.preppedItems.slice();
|
|
checkUntilComplete();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
suite('misc', function() {
|
|
|
|
test('large splice', function(done) {
|
|
primitiveLarge.splice('items', 0, 10);
|
|
setTimeout(function() {
|
|
var stamped =
|
|
primitiveLarge.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 1, 'total stamped count incorrect');
|
|
assert.equal(stamped[0].textContent, '10');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('css scoping retained when re-ordering', function(done) {
|
|
var removed;
|
|
if (!Polymer.Settings.useShadow) {
|
|
// Confirm initial scoping
|
|
var stamped = simple.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert(stamped[0].classList.contains('x-simple-repeat'), 'expected scoping');
|
|
assert.equal(stamped.length, 3, 'total stamped count incorrect');
|
|
var row = stamped[0];
|
|
// Move
|
|
removed = simple.splice('items', 0, 1);
|
|
simple.splice('items', 1, 0, removed[0]);
|
|
setTimeout(function() {
|
|
stamped = simple.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3, 'total stamped count incorrect');
|
|
assert.equal(row, stamped[1]);
|
|
assert.equal(stamped[1].itemaProp, 'prop-1');
|
|
assert(stamped[1].classList.contains('x-simple-repeat'), 'expected scoping');
|
|
// Revert
|
|
removed = simple.splice('items', 1, 1);
|
|
simple.splice('items', 0, 0, removed[0]);
|
|
setTimeout(function() {
|
|
stamped = simple.root.querySelectorAll('*:not(template):not(dom-repeat)');
|
|
assert.equal(stamped.length, 3, 'total stamped count incorrect');
|
|
assert.equal(row, stamped[0]);
|
|
assert.equal(stamped[0].itemaProp, 'prop-1');
|
|
assert(stamped[0].classList.contains('x-simple-repeat'), 'expected scoping');
|
|
done();
|
|
});
|
|
});
|
|
} else {
|
|
done();
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
suite('timing', function() {
|
|
|
|
test('non-upgrade case finds template', function() {
|
|
assert.equal(nonUpgrade.textContent.trim(), 'stamped');
|
|
});
|
|
|
|
});
|
|
|
|
})();
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|