You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.8 KiB
143 lines
3.8 KiB
import assert from 'assert'; |
|
import { testMethodProperty } from './properties.js'; |
|
|
|
describe('observer.complete', () => { |
|
|
|
function getObserver(inner) { |
|
let observer; |
|
new Observable(x => { observer = x }).subscribe(inner); |
|
return observer; |
|
} |
|
|
|
it('is a method of SubscriptionObserver', () => { |
|
let observer = getObserver(); |
|
testMethodProperty(Object.getPrototypeOf(observer), 'complete', { |
|
configurable: true, |
|
writable: true, |
|
length: 0, |
|
}); |
|
}); |
|
|
|
it('does not forward arguments', () => { |
|
let args; |
|
let observer = getObserver({ complete(...a) { args = a } }); |
|
observer.complete(1); |
|
assert.deepEqual(args, []); |
|
}); |
|
|
|
it('does not return a value', () => { |
|
let observer = getObserver({ complete() { return 1 } }); |
|
assert.equal(observer.complete(), undefined); |
|
}); |
|
|
|
it('does not forward when the subscription is complete', () => { |
|
let count = 0; |
|
let observer = getObserver({ complete() { count++ } }); |
|
observer.complete(); |
|
observer.complete(); |
|
assert.equal(count, 1); |
|
}); |
|
|
|
it('does not forward when the subscription is cancelled', () => { |
|
let count = 0; |
|
let observer; |
|
let subscription = new Observable(x => { observer = x }).subscribe({ |
|
complete() { count++ }, |
|
}); |
|
subscription.unsubscribe(); |
|
observer.complete(); |
|
assert.equal(count, 0); |
|
}); |
|
|
|
it('queues if the subscription is not initialized', async () => { |
|
let completed = false; |
|
new Observable(x => { x.complete() }).subscribe({ |
|
complete() { completed = true }, |
|
}); |
|
assert.equal(completed, false); |
|
await null; |
|
assert.equal(completed, true); |
|
}); |
|
|
|
it('queues if the observer is running', async () => { |
|
let observer; |
|
let completed = false |
|
new Observable(x => { observer = x }).subscribe({ |
|
next() { observer.complete() }, |
|
complete() { completed = true }, |
|
}); |
|
observer.next(); |
|
assert.equal(completed, false); |
|
await null; |
|
assert.equal(completed, true); |
|
}); |
|
|
|
it('closes the subscription before invoking inner observer', () => { |
|
let closed; |
|
let observer = getObserver({ |
|
complete() { closed = observer.closed }, |
|
}); |
|
observer.complete(); |
|
assert.equal(closed, true); |
|
}); |
|
|
|
it('reports error if "complete" is not a method', () => { |
|
let observer = getObserver({ complete: 1 }); |
|
observer.complete(); |
|
assert.ok(hostError instanceof Error); |
|
}); |
|
|
|
it('does not report error if "complete" is undefined', () => { |
|
let observer = getObserver({ complete: undefined }); |
|
observer.complete(); |
|
assert.ok(!hostError); |
|
}); |
|
|
|
it('does not report error if "complete" is null', () => { |
|
let observer = getObserver({ complete: null }); |
|
observer.complete(); |
|
assert.ok(!hostError); |
|
}); |
|
|
|
it('reports error if "complete" throws', () => { |
|
let error = {}; |
|
let observer = getObserver({ complete() { throw error } }); |
|
observer.complete(); |
|
assert.equal(hostError, error); |
|
}); |
|
|
|
it('calls the cleanup method after "complete"', () => { |
|
let calls = []; |
|
let observer; |
|
new Observable(x => { |
|
observer = x; |
|
return () => { calls.push('cleanup') }; |
|
}).subscribe({ |
|
complete() { calls.push('complete') }, |
|
}); |
|
observer.complete(); |
|
assert.deepEqual(calls, ['complete', 'cleanup']); |
|
}); |
|
|
|
it('calls the cleanup method if there is no "complete"', () => { |
|
let calls = []; |
|
let observer; |
|
new Observable(x => { |
|
observer = x; |
|
return () => { calls.push('cleanup') }; |
|
}).subscribe({}); |
|
observer.complete(); |
|
assert.deepEqual(calls, ['cleanup']); |
|
}); |
|
|
|
it('reports error if the cleanup function throws', () => { |
|
let error = {}; |
|
let observer; |
|
new Observable(x => { |
|
observer = x; |
|
return () => { throw error }; |
|
}).subscribe(); |
|
observer.complete(); |
|
assert.equal(hostError, error); |
|
}); |
|
});
|
|
|