···201201 This isn't a strict requirement, but some operators should ensure that
202202 all sources are well behaved. This is particularly true for operators
203203 that either Close sources themselves or may operate on multiple sources. */
204204-const passesStrictEnd = (operator: types.operatorT<any, any>) =>
204204+const passesStrictEnd = (operator: types.operatorT<any, any>) => {
205205 it('stops all signals after End has been received (spec: strict end)', () => {
206206 let pulls = 0;
207207 const signals = [];
···231231 expect(signals).toEqual([deriving.end()]);
232232 expect(pulls).toBe(1);
233233 });
234234+235235+ it('stops all signals after Close has been received (spec: strict close)', () => {
236236+ const signals = [];
237237+238238+ const source: types.sourceT<any> = sink => {
239239+ sink(deriving.start(tb => {
240240+ if (tb === deriving.close) {
241241+ sink(deriving.push(123));
242242+ }
243243+ }));
244244+ };
245245+246246+ const sink: types.sinkT<any> = signal => {
247247+ if (deriving.isStart(signal)) {
248248+ deriving.unboxStart(signal)(deriving.close);
249249+ } else {
250250+ signals.push(signal);
251251+ }
252252+ };
253253+254254+ operator(source)(sink);
255255+256256+ // The Push signal should've been dropped
257257+ jest.runAllTimers();
258258+ expect(signals).toEqual([]);
259259+ });
260260+};
234261235262/* This tests an immediately closing operator for End signals to
236263 the sink and Close signals to the source.
···968995 passesSinkClose(noop);
969996 passesSourceEnd(noop);
970997 passesSingleStart(noop);
971971- passesStrictEnd(noop);
972998 passesAsyncSequence(noop);
9739999741000 const ending = operators.takeWhile(() => false);