| 14 | } |
| 15 | |
| 16 | static testSuite(testContext) { |
| 17 | test('pulls without argument', async () => { |
| 18 | testContext.queue.push(0); |
| 19 | await testContext.queue.onIdle(); |
| 20 | expect(testContext.onPull).toHaveBeenCalledTimes(1); |
| 21 | }); |
| 22 | |
| 23 | test('pulls with a number', async () => { |
| 24 | testContext.queue.push(1, 0); |
| 25 | await testContext.queue.onIdle(); |
| 26 | expect(testContext.onPull).toHaveBeenCalledTimes(1); |
| 27 | expect(testContext.onPull).toHaveBeenCalledWith(1); |
| 28 | }); |
| 29 | |
| 30 | test('pulls with a string', async () => { |
| 31 | testContext.queue.push('http://example.com/', 0); |
| 32 | await testContext.queue.onIdle(); |
| 33 | expect(testContext.onPull).toHaveBeenCalledTimes(1); |
| 34 | expect(testContext.onPull).toHaveBeenCalledWith('http://example.com/'); |
| 35 | }); |
| 36 | |
| 37 | test('pulls with an object', async () => { |
| 38 | testContext.queue.push({ url: 'http://example.com' }, 0); |
| 39 | await testContext.queue.onIdle(); |
| 40 | expect(testContext.onPull).toHaveBeenCalledTimes(1); |
| 41 | expect(testContext.onPull).toHaveBeenCalledWith({ url: 'http://example.com' }); |
| 42 | }); |
| 43 | |
| 44 | test('pulls with multiple arguments', async () => { |
| 45 | testContext.queue.push({ url: 'http://example.com/' }, 1, 0); |
| 46 | await testContext.queue.onIdle(); |
| 47 | expect(testContext.onPull).toHaveBeenCalledTimes(1); |
| 48 | expect(testContext.onPull).toHaveBeenCalledWith({ url: 'http://example.com/' }, 1); |
| 49 | }); |
| 50 | |
| 51 | test('obeys priority order', async () => { |
| 52 | testContext.queue.push({ url: 'http://example.com/' }, 1); |
| 53 | testContext.queue.push({ url: 'http://example.net/' }, 2); |
| 54 | await testContext.queue.onIdle(); |
| 55 | expect(testContext.onPull).toHaveBeenCalledTimes(2); |
| 56 | expect(testContext.onPull.mock.calls[0][0]).toEqual({ url: 'http://example.net/' }); |
| 57 | expect(testContext.onPull.mock.calls[1][0]).toEqual({ url: 'http://example.com/' }); |
| 58 | }); |
| 59 | |
| 60 | test('pauses and resumes', async () => { |
| 61 | testContext.queue.push({ url: 'http://example.com/' }, 1, 0); |
| 62 | await Promise.all([ |
| 63 | testContext.queue.onIdle(), |
| 64 | testContext.queue.pause(), |
| 65 | ]); |
| 66 | expect(testContext.onPull).toHaveBeenCalledTimes(0); |
| 67 | expect(testContext.queue.isPaused()).toBe(true); |
| 68 | expect(testContext.queue.pending()).toBe(0); |
| 69 | const size = await testContext.queue.size(); |
| 70 | expect(size).toBe(1); |
| 71 | testContext.queue.resume(); |
| 72 | await testContext.queue.onIdle(); |
| 73 | expect(testContext.onPull).toHaveBeenCalledTimes(1); |