mirror of
https://github.com/servo/servo.git
synced 2025-06-24 00:54:32 +01:00
148 lines
3.7 KiB
JavaScript
148 lines
3.7 KiB
JavaScript
'use strict';
|
|
|
|
if (self.importScripts) {
|
|
self.importScripts('/resources/testharness.js');
|
|
self.importScripts('../resources/test-utils.js');
|
|
self.importScripts('../resources/rs-test-templates.js');
|
|
}
|
|
|
|
// Run the readable stream test templates against readable streams created directly using the constructor
|
|
|
|
const theError = { name: 'boo!' };
|
|
const chunks = ['a', 'b'];
|
|
|
|
templatedRSEmpty('ReadableStream (empty)', () => {
|
|
return new ReadableStream();
|
|
});
|
|
|
|
templatedRSEmptyReader('ReadableStream (empty) reader', () => {
|
|
return streamAndDefaultReader(new ReadableStream());
|
|
});
|
|
|
|
templatedRSClosed('ReadableStream (closed via call in start)', () => {
|
|
return new ReadableStream({
|
|
start(c) {
|
|
c.close();
|
|
}
|
|
});
|
|
});
|
|
|
|
templatedRSClosedReader('ReadableStream reader (closed before getting reader)', () => {
|
|
let controller;
|
|
const stream = new ReadableStream({
|
|
start(c) {
|
|
controller = c;
|
|
}
|
|
});
|
|
controller.close();
|
|
const result = streamAndDefaultReader(stream);
|
|
return result;
|
|
});
|
|
|
|
templatedRSClosedReader('ReadableStream reader (closed after getting reader)', () => {
|
|
let controller;
|
|
const stream = new ReadableStream({
|
|
start(c) {
|
|
controller = c;
|
|
}
|
|
});
|
|
const result = streamAndDefaultReader(stream);
|
|
controller.close();
|
|
return result;
|
|
});
|
|
|
|
templatedRSClosed('ReadableStream (closed via cancel)', () => {
|
|
const stream = new ReadableStream();
|
|
stream.cancel();
|
|
return stream;
|
|
});
|
|
|
|
templatedRSClosedReader('ReadableStream reader (closed via cancel after getting reader)', () => {
|
|
const stream = new ReadableStream();
|
|
const result = streamAndDefaultReader(stream);
|
|
result.reader.cancel();
|
|
return result;
|
|
});
|
|
|
|
templatedRSErrored('ReadableStream (errored via call in start)', () => {
|
|
return new ReadableStream({
|
|
start(c) {
|
|
c.error(theError);
|
|
}
|
|
});
|
|
}, theError);
|
|
|
|
templatedRSErroredSyncOnly('ReadableStream (errored via call in start)', () => {
|
|
return new ReadableStream({
|
|
start(c) {
|
|
c.error(theError);
|
|
}
|
|
});
|
|
}, theError);
|
|
|
|
templatedRSErrored('ReadableStream (errored via returning a rejected promise in start)', () => {
|
|
return new ReadableStream({
|
|
start() {
|
|
return Promise.reject(theError);
|
|
}
|
|
});
|
|
}, theError);
|
|
|
|
templatedRSErroredReader('ReadableStream (errored via returning a rejected promise in start) reader', () => {
|
|
return streamAndDefaultReader(new ReadableStream({
|
|
start() {
|
|
return Promise.reject(theError);
|
|
}
|
|
}));
|
|
}, theError);
|
|
|
|
templatedRSErroredReader('ReadableStream reader (errored before getting reader)', () => {
|
|
let controller;
|
|
const stream = new ReadableStream({
|
|
start(c) {
|
|
controller = c;
|
|
}
|
|
});
|
|
controller.error(theError);
|
|
return streamAndDefaultReader(stream);
|
|
}, theError);
|
|
|
|
templatedRSErroredReader('ReadableStream reader (errored after getting reader)', () => {
|
|
let controller;
|
|
const result = streamAndDefaultReader(new ReadableStream({
|
|
start(c) {
|
|
controller = c;
|
|
}
|
|
}));
|
|
controller.error(theError);
|
|
return result;
|
|
}, theError);
|
|
|
|
templatedRSTwoChunksOpenReader('ReadableStream (two chunks enqueued, still open) reader', () => {
|
|
return streamAndDefaultReader(new ReadableStream({
|
|
start(c) {
|
|
c.enqueue(chunks[0]);
|
|
c.enqueue(chunks[1]);
|
|
}
|
|
}));
|
|
}, chunks);
|
|
|
|
templatedRSTwoChunksClosedReader('ReadableStream (two chunks enqueued, then closed) reader', () => {
|
|
let doClose;
|
|
const stream = new ReadableStream({
|
|
start(c) {
|
|
c.enqueue(chunks[0]);
|
|
c.enqueue(chunks[1]);
|
|
doClose = c.close.bind(c);
|
|
}
|
|
});
|
|
const result = streamAndDefaultReader(stream);
|
|
doClose();
|
|
return result;
|
|
}, chunks);
|
|
|
|
function streamAndDefaultReader(stream) {
|
|
return { stream, reader: stream.getReader() };
|
|
}
|
|
|
|
done();
|