diff --git a/test/unit/dom-repeat.html b/test/unit/dom-repeat.html index 0b9eca9329..2436492cfc 100644 --- a/test/unit/dom-repeat.html +++ b/test/unit/dom-repeat.html @@ -3646,207 +3646,204 @@

x-repeat-chunked

}); - suite('chunked rendering', function() { + // 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)) { - // Patch requestAnimationFrame to setTimeout to reduce IE test flakiness on CI - var rAF; - suiteSetup(function() { - rAF = window.requestAnimationFrame; - window.requestAnimationFrame = setTimeout; - }); - suiteTeardown(function() { - window.requestAnimationFrame = rAF; - }); + suite('chunked rendering', function() { - test('basic chunked rendering', function(done) { + test('basic chunked rendering', function(done) { - var checkItemOrder = function(stamped) { - for (var i=0; i 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() { + var lastLength = 0; + var checkCount = function() { + var stamped = Polymer.dom(chunked.root).querySelectorAll('*:not(template)'); + 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); - }); - } else { - requestAnimationFrame(checkCount); - } - }; + } + }; - chunked.items = chunked.preppedItems.slice(); - checkUntilComplete(); + chunked.items = chunked.preppedItems.slice(); + checkUntilComplete(); - }); + }); - test('mutations during chunked rendering', function(done) { + test('mutations during chunked rendering', function(done) { - var checkItemOrder = function(stamped) { - var last = -1; - for (var i=0; i last); - last = curr; - } - }; + var checkItemOrder = function(stamped) { + var last = -1; + for (var i=0; i 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 lastLength); - } - if (stamped.length < chunked.items.length) { - if (mutateCount-- > 0) { - mutateArray(chunked, stamped); + var lastLength = 0; + var mutateCount = 5; + var checkCount = function() { + var stamped = Polymer.dom(chunked.root).querySelectorAll('*:not(template)'); + 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); } - 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() { + 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); - }); - } else { - requestAnimationFrame(checkCount); - } - }; + } + }; - chunked.items = chunked.preppedItems.slice(); - checkUntilComplete(); + chunked.items = chunked.preppedItems.slice(); + checkUntilComplete(); - }); + }); - test('mutations during chunked rendering, sort & filtered', function(done) { + test('mutations during chunked rendering, sort & filtered', function(done) { - var checkItemOrder = function(stamped) { - var last = Infinity; - for (var i=0; i lastLength); + var lastLength = 0; + var mutateCount = 5; + var checkCount = function() { + var stamped = Polymer.dom(chunked.root).querySelectorAll('*:not(template)'); + 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); + if (stamped.length < filteredLength) { + if (mutateCount-- > 0) { + mutateArray(chunked, stamped); + } + lastLength = stamped.length; + checkUntilComplete(); + } else { + assert.equal(stamped.length, filteredLength); + done(); } - 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() { + }; + var checkUntilComplete = function() { + // On polyfilled MO, need to wait one setTimeout before rAF + if (MutationObserver._isPolyfilled) { + setTimeout(function() { + requestAnimationFrame(checkCount); + }); + } else { 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(); + 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(); + + }); }); - }); + }