gecko-dev/testing/web-platform/tests/streams/readable-streams/garbage-collection.any.js
Jason Orendorff 47519c94b2 Bug 1513570 - Part 1: Adapt stream tests to run in the shell. r=Ms2ger
We don't support byte streams, transform streams, writable streams, or piping
yet, but we will, and in the meantime our own meta files disable those tests
for us.

Differential Revision: https://phabricator.services.mozilla.com/D14314

--HG--
extra : moz-landing-system : lando
2018-12-14 18:14:56 +00:00

70 lines
1.7 KiB
JavaScript

// META: global=worker,jsshell
// META: script=../resources/test-utils.js
'use strict';
promise_test(() => {
let controller;
new ReadableStream({
start(c) {
controller = c;
}
});
garbageCollect();
return delay(50).then(() => {
controller.close();
assert_throws(new TypeError(), () => controller.close(), 'close should throw a TypeError the second time');
controller.error();
});
}, 'ReadableStreamController methods should continue working properly when scripts lose their reference to the ' +
'readable stream');
promise_test(() => {
let controller;
const closedPromise = new ReadableStream({
start(c) {
controller = c;
}
}).getReader().closed;
garbageCollect();
return delay(50).then(() => controller.close()).then(() => closedPromise);
}, 'ReadableStream closed promise should fulfill even if the stream and reader JS references are lost');
promise_test(t => {
const theError = new Error('boo');
let controller;
const closedPromise = new ReadableStream({
start(c) {
controller = c;
}
}).getReader().closed;
garbageCollect();
return delay(50).then(() => controller.error(theError))
.then(() => promise_rejects(t, theError, closedPromise));
}, 'ReadableStream closed promise should reject even if stream and reader JS references are lost');
promise_test(() => {
const rs = new ReadableStream({});
rs.getReader();
garbageCollect();
return delay(50).then(() => assert_throws(new TypeError(), () => rs.getReader(),
'old reader should still be locking the stream even after garbage collection'));
}, 'Garbage-collecting a ReadableStreamDefaultReader should not unlock its stream');