|
211 | 211 | });
|
212 | 212 |
|
213 | 213 | suite('enqueueDebouncer & flush', function() {
|
214 |
| - function testEnqueue(shouldFlush, done) { |
215 |
| - // Longer-running debouncer |
216 |
| - const timeoutCallback = sinon.spy(() => actualCallbacks.push(timeoutCallback)); |
217 |
| - Polymer.enqueueDebouncer(Polymer.Debouncer.debounce(null, Polymer.Async.timeOut, timeoutCallback)); |
218 |
| - // Set of short-running debouncers enqueued in the middle of first set |
219 |
| - const nestedCallbacks = []; |
220 |
| - for (let i=0; i<150; i++) { |
221 |
| - nestedCallbacks.push(sinon.spy(() => |
222 |
| - actualCallbacks.push(nestedCallbacks[i]))); |
223 |
| - } |
224 |
| - // First set of short-running debouncers |
225 |
| - const microtaskCallbacks = []; |
226 |
| - for (let i=0; i<150; i++) { |
227 |
| - microtaskCallbacks.push(sinon.spy(() => { |
228 |
| - actualCallbacks.push(microtaskCallbacks[i]); |
229 |
| - if (i === 125) { |
230 |
| - nestedCallbacks.forEach(cb => |
231 |
| - Polymer.enqueueDebouncer(Polymer.Debouncer.debounce(null, Polymer.Async.microTask, cb))); |
232 |
| - } |
233 |
| - })); |
234 |
| - } |
235 |
| - microtaskCallbacks.forEach(cb => |
236 |
| - Polymer.enqueueDebouncer(Polymer.Debouncer.debounce(null, Polymer.Async.microTask, cb))); |
237 |
| - // Expect short before long |
238 |
| - let expectedCallbacks; |
239 |
| - const actualCallbacks = []; |
240 |
| - const verify = () => { |
241 |
| - actualCallbacks.forEach(cb => assert.isTrue(cb.calledOnce)); |
242 |
| - assert.deepEqual(expectedCallbacks, actualCallbacks); |
243 |
| - done(); |
| 214 | + |
| 215 | + const testEnqueue = (shouldFlush, done) => { |
| 216 | + const actualOrder = []; |
| 217 | + let i=1; |
| 218 | + const enqueue = (type, {db, cb} = {}) => { |
| 219 | + cb = cb || (() => actualOrder.push(cb)); |
| 220 | + db = Polymer.Debouncer.debounce(db, type, cb); |
| 221 | + Polymer.enqueueDebouncer(db); |
| 222 | + return {db, cb}; |
244 | 223 | };
|
| 224 | + const db1 = enqueue(Polymer.Async.microTask); |
| 225 | + const db2 = enqueue(Polymer.Async.microTask); |
| 226 | + const db3 = enqueue(Polymer.Async.timeOut); |
| 227 | + const db4 = enqueue(Polymer.Async.microTask); |
| 228 | + enqueue(Polymer.Async.microTask, db2); |
| 229 | + enqueue(Polymer.Async.microTask, db1); |
245 | 230 | if (shouldFlush) {
|
246 |
| - expectedCallbacks = [timeoutCallback, ...microtaskCallbacks, ...nestedCallbacks]; |
247 | 231 | Polymer.flush();
|
248 |
| - // When flushing, order is order of enqueing |
249 |
| - verify(); |
| 232 | + assert.deepEqual(actualOrder, [db1.cb, db2.cb, db3.cb, db4.cb]); |
| 233 | + done(); |
250 | 234 | } else {
|
251 |
| - expectedCallbacks = [...microtaskCallbacks, ...nestedCallbacks, timeoutCallback]; |
252 |
| - Polymer.Async.timeOut.run(verify); |
| 235 | + Polymer.Async.timeOut.run(() => { |
| 236 | + assert.deepEqual(actualOrder, [db4.cb, db2.cb, db1.cb, db3.cb]); |
| 237 | + done(); |
| 238 | + }); |
253 | 239 | }
|
254 |
| - } |
| 240 | + }; |
255 | 241 |
|
256 | 242 | test('non-flushed', function(done) {
|
257 | 243 | testEnqueue(false, done);
|
|
0 commit comments