Update web-platform-tests to revision 8a2ceb5f18911302b7a5c1cd2791f4ab50ad4326

This commit is contained in:
Josh Matthews 2017-10-12 09:25:50 -04:00
parent 462c272380
commit 1f531f66ea
5377 changed files with 174916 additions and 84369 deletions

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>brand-checks.js dedicated worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
fetch_tests_from_worker(new Worker('brand-checks.js'));
</script>

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>brand-checks.js browser context wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/test-utils.js"></script>
<script src="brand-checks.js"></script>

View file

@ -0,0 +1,194 @@
'use strict';
if (self.importScripts) {
self.importScripts('../resources/test-utils.js');
self.importScripts('/resources/testharness.js');
}
let ReadableStreamBYOBReader;
let ReadableByteStreamController;
test(() => {
// It's not exposed globally, but we test a few of its properties here.
ReadableStreamBYOBReader = realRSBYOBReader().constructor;
assert_equals(ReadableStreamBYOBReader.name, 'ReadableStreamBYOBReader', 'ReadableStreamBYOBReader should be set');
}, 'Can get the ReadableStreamBYOBReader constructor indirectly');
test(() => {
// It's not exposed globally, but we test a few of its properties here.
ReadableByteStreamController = realRBSController().constructor;
assert_equals(ReadableByteStreamController.name, 'ReadableByteStreamController',
'ReadableByteStreamController should be set');
}, 'Can get the ReadableByteStreamController constructor indirectly');
function fakeRS() {
return Object.setPrototypeOf({
cancel() { return Promise.resolve(); },
getReader() { return realRSBYOBReader(); },
pipeThrough(obj) { return obj.readable; },
pipeTo() { return Promise.resolve(); },
tee() { return [realRS(), realRS()]; }
}, ReadableStream.prototype);
}
function realRS() {
return new ReadableStream();
}
function fakeRSBYOBReader() {
return Object.setPrototypeOf({
get closed() { return Promise.resolve(); },
cancel() { return Promise.resolve(); },
read() { return Promise.resolve({ value: undefined, done: true }); },
releaseLock() { return; }
}, ReadableStreamBYOBReader.prototype);
}
function realRSBYOBReader() {
return new ReadableStream({ type: 'bytes' }).getReader({ mode: 'byob' });
}
function fakeRBSController() {
return Object.setPrototypeOf({
close() { },
enqueue() { },
error() { }
}, ReadableByteStreamController.prototype);
}
function realRBSController() {
let controller;
new ReadableStream({
start(c) {
controller = c;
},
type: 'bytes'
});
return controller;
}
test(() => {
assert_throws(new TypeError(), () => new ReadableStreamBYOBReader(fakeRS()), 'constructor should throw');
}, 'ReadableStreamBYOBReader enforces a brand check on its argument');
promise_test(t => {
return getterRejectsForAll(t, ReadableStreamBYOBReader.prototype, 'closed',
[fakeRSBYOBReader(), realRS(), realRBSController(), undefined, null]);
}, 'ReadableStreamBYOBReader.prototype.closed enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, ReadableStreamBYOBReader.prototype, 'cancel',
[fakeRSBYOBReader(), realRS(), realRBSController(), undefined, null]);
}, 'ReadableStreamBYOBReader.prototype.cancel enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, ReadableStreamBYOBReader.prototype, 'read',
[fakeRSBYOBReader(), realRS(), realRBSController(), undefined, null], [new Uint8Array(1)]);
}, 'ReadableStreamBYOBReader.prototype.read enforces a brand check');
test(() => {
methodThrowsForAll(ReadableStreamBYOBReader.prototype, 'releaseLock',
[fakeRSBYOBReader(), realRS(), realRBSController(), undefined, null]);
}, 'ReadableStreamBYOBReader.prototype.releaseLock enforces a brand check');
test(() => {
assert_throws(new TypeError(), () => new ReadableByteStreamController(fakeRS()),
'Constructing a ReadableByteStreamController should throw');
}, 'ReadableByteStreamController enforces a brand check on its arguments');
test(() => {
assert_throws(new TypeError(), () => new ReadableByteStreamController(realRS()),
'Constructing a ReadableByteStreamController should throw');
}, 'ReadableByteStreamController can\'t be given a fully-constructed ReadableStream');
test(() => {
getterThrowsForAll(ReadableByteStreamController.prototype, 'byobRequest',
[fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null]);
}, 'ReadableByteStreamController.prototype.byobRequest enforces a brand check');
test(() => {
methodThrowsForAll(ReadableByteStreamController.prototype, 'close',
[fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null]);
}, 'ReadableByteStreamController.prototype.close enforces a brand check');
test(() => {
methodThrowsForAll(ReadableByteStreamController.prototype, 'enqueue',
[fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null], [new Uint8Array(1)]);
}, 'ReadableByteStreamController.prototype.enqueue enforces a brand check');
test(() => {
methodThrowsForAll(ReadableByteStreamController.prototype, 'error',
[fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null]);
}, 'ReadableByteStreamController.prototype.error enforces a brand check');
// ReadableStreamBYOBRequest can only be accessed asynchronously, so cram everything into one test.
promise_test(t => {
let ReadableStreamBYOBRequest;
const rs = new ReadableStream({
pull(controller) {
return t.step(() => {
const byobRequest = controller.byobRequest;
ReadableStreamBYOBRequest = byobRequest.constructor;
brandChecks();
byobRequest.respond(1);
});
},
type: 'bytes'
});
const reader = rs.getReader({ mode: 'byob' });
return reader.read(new Uint8Array(1));
function fakeRSBYOBRequest() {
return Object.setPrototypeOf({
get view() {},
respond() {},
respondWithNewView() {}
}, ReadableStreamBYOBRequest.prototype);
}
function brandChecks() {
for (const badController of [fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null]) {
assert_throws(new TypeError(), () => new ReadableStreamBYOBRequest(badController, new Uint8Array(1)),
'ReadableStreamBYOBRequest constructor must throw for an invalid controller argument');
}
getterThrowsForAll(ReadableStreamBYOBRequest.prototype, 'view',
[fakeRSBYOBRequest(), realRS(), realRSBYOBReader(), realRBSController(), undefined, null]);
methodThrowsForAll(ReadableStreamBYOBRequest.prototype, 'respond',
[fakeRSBYOBRequest(), realRS(), realRSBYOBReader(), realRBSController(), undefined, null], [1]);
methodThrowsForAll(ReadableStreamBYOBRequest.prototype, 'respondWithNewView',
[fakeRSBYOBRequest(), realRS(), realRSBYOBReader(), realRBSController(), undefined, null],
[new Uint8Array(1)]);
}
}, 'ReadableStreamBYOBRequest enforces brand checks');
done();

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>brand-checks.js service worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>
'use strict';
service_worker_test('brand-checks.js', 'Service worker test setup');
</script>

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>brand-checks.js shared worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
fetch_tests_from_worker(new SharedWorker('brand-checks.js'));
</script>

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>detached-buffers.js dedicated worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
fetch_tests_from_worker(new Worker('detached-buffers.js'));
</script>

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>detached-buffers.js browser context wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="detached-buffers.js"></script>

View file

@ -0,0 +1,156 @@
'use strict';
if (self.importScripts) {
self.importScripts('/resources/testharness.js');
}
promise_test(() => {
const stream = new ReadableStream({
start(c) {
c.close();
},
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
const view = new Uint8Array([1, 2, 3]);
return reader.read(view).then(({ value, done }) => {
// Sanity checks
assert_true(value instanceof Uint8Array, 'The value read must be a Uint8Array');
assert_not_equals(value, view, 'The value read must not be the *same* Uint8Array');
assert_array_equals(value, [], 'The value read must be an empty Uint8Array, since the stream is closed');
assert_true(done, 'done must be true, since the stream is closed');
// The important assertions
assert_not_equals(value.buffer, view.buffer, 'a different ArrayBuffer must underlie the value');
assert_equals(view.buffer.byteLength, 0, 'the original buffer must be detached');
});
}, 'ReadableStream with byte source: read()ing from a closed stream still transfers the buffer');
promise_test(() => {
const stream = new ReadableStream({
start(c) {
c.enqueue(new Uint8Array([1, 2, 3]));
},
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
const view = new Uint8Array([4, 5, 6]);
return reader.read(view).then(({ value, done }) => {
// Sanity checks
assert_true(value instanceof Uint8Array, 'The value read must be a Uint8Array');
assert_not_equals(value, view, 'The value read must not be the *same* Uint8Array');
assert_array_equals(value, [1, 2, 3], 'The value read must be the enqueued Uint8Array, not the original values');
assert_false(done, 'done must be false, since the stream is not closed');
// The important assertions
assert_not_equals(value.buffer, view.buffer, 'a different ArrayBuffer must underlie the value');
assert_equals(view.buffer.byteLength, 0, 'the original buffer must be detached');
});
}, 'ReadableStream with byte source: read()ing from a stream with queued chunks still transfers the buffer');
test(() => {
const stream = new ReadableStream({
start(c) {
const view = new Uint8Array([1, 2, 3]);
c.enqueue(view);
assert_throws(new TypeError(), () => c.enqueue(view), 'enqueuing an already-detached buffer must throw');
},
type: 'bytes'
});
}, 'ReadableStream with byte source: enqueuing an already-detached buffer throws');
promise_test(t => {
const stream = new ReadableStream({
start(c) {
c.enqueue(new Uint8Array([1, 2, 3]));
},
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
const view = new Uint8Array([4, 5, 6]);
return reader.read(view).then(() => {
// view is now detached
return promise_rejects(t, new TypeError(), reader.read(view),
'read(view) must reject when given an already-detached buffer');
});
}, 'ReadableStream with byte source: reading into an already-detached buffer rejects');
async_test(t => {
const stream = new ReadableStream({
pull: t.step_func_done(c => {
// Detach it by reading into it
reader.read(c.byobRequest.view);
assert_throws(new TypeError(), () => c.byobRequest.respond(1),
'respond() must throw if the corresponding view has become detached');
}),
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respond() throws if the BYOB request\'s buffer has been detached (in the ' +
'readable state)');
async_test(t => {
const stream = new ReadableStream({
pull: t.step_func_done(c => {
// Detach it by reading into it
reader.read(c.byobRequest.view);
c.close();
assert_throws(new TypeError(), () => c.byobRequest.respond(0),
'respond() must throw if the corresponding view has become detached');
}),
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respond() throws if the BYOB request\'s buffer has been detached (in the ' +
'closed state)');
async_test(t => {
const stream = new ReadableStream({
pull: t.step_func_done(c => {
// Detach it by reading into it
const view = new Uint8Array([1, 2, 3]);
reader.read(view);
assert_throws(new TypeError(), () => c.byobRequest.respondWithNewView(view),
'respondWithNewView() must throw if passed a detached view');
}),
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view\'s buffer has been detached ' +
'(in the readable state)');
async_test(t => {
const stream = new ReadableStream({
pull: t.step_func_done(c => {
// Detach it by reading into it
const view = new Uint8Array([1, 2, 3]);
reader.read(view);
c.close();
const zeroLengthView = new Uint8Array(view.buffer, 0, 0);
assert_throws(new TypeError(), () => c.byobRequest.respondWithNewView(zeroLengthView),
'respondWithNewView() must throw if passed a (zero-length) view whose buffer has been detached');
}),
type: 'bytes'
});
const reader = stream.getReader({ mode: 'byob' });
reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view\'s buffer has been detached ' +
'(in the closed state)');
done();

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>detached-buffers.js service worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>
'use strict';
service_worker_test('detached-buffers.js', 'Service worker test setup');
</script>

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>detached-buffers.js shared worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
fetch_tests_from_worker(new SharedWorker('detached-buffers.js'));
</script>

View file

@ -1906,7 +1906,7 @@ promise_test(() => {
start(c) {
controller = c;
},
type: "bytes"
type: 'bytes'
});
const readPromise = rs.getReader().read();

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>properties.js dedicated worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
fetch_tests_from_worker(new Worker('properties.js'));
</script>

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>properties.js browser context wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/rs-utils.js"></script>
<script src="properties.js"></script>

View file

@ -0,0 +1,147 @@
'use strict';
if (self.importScripts) {
self.importScripts('../resources/rs-utils.js');
self.importScripts('/resources/testharness.js');
}
let ReadableStreamBYOBReader;
test(() => {
// It's not exposed globally, but we test a few of its properties here.
ReadableStreamBYOBReader = (new ReadableStream({ type: 'bytes' }))
.getReader({ mode: 'byob' }).constructor;
}, 'Can get the ReadableStreamBYOBReader constructor indirectly');
test(() => {
assert_throws(new TypeError(), () => new ReadableStreamBYOBReader('potato'));
assert_throws(new TypeError(), () => new ReadableStreamBYOBReader({}));
assert_throws(new TypeError(), () => new ReadableStreamBYOBReader());
}, 'ReadableStreamBYOBReader constructor should get a ReadableStream object as argument');
test(() => {
const methods = ['cancel', 'constructor', 'read', 'releaseLock'];
const properties = methods.concat(['closed']).sort();
const rsReader = new ReadableStreamBYOBReader(new ReadableStream({ type: 'bytes' }));
const proto = Object.getPrototypeOf(rsReader);
assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties);
for (const m of methods) {
const propDesc = Object.getOwnPropertyDescriptor(proto, m);
assert_equals(propDesc.enumerable, false, 'method should be non-enumerable');
assert_equals(propDesc.configurable, true, 'method should be configurable');
assert_equals(propDesc.writable, true, 'method should be writable');
assert_equals(typeof rsReader[m], 'function', 'should have be a method');
const expectedName = m === 'constructor' ? 'ReadableStreamBYOBReader' : m;
assert_equals(rsReader[m].name, expectedName, 'method should have the correct name');
}
const closedPropDesc = Object.getOwnPropertyDescriptor(proto, 'closed');
assert_equals(closedPropDesc.enumerable, false, 'closed should be non-enumerable');
assert_equals(closedPropDesc.configurable, true, 'closed should be configurable');
assert_not_equals(closedPropDesc.get, undefined, 'closed should have a getter');
assert_equals(closedPropDesc.set, undefined, 'closed should not have a setter');
assert_equals(rsReader.cancel.length, 1, 'cancel has 1 parameter');
assert_not_equals(rsReader.closed, undefined, 'has a non-undefined closed property');
assert_equals(typeof rsReader.closed.then, 'function', 'closed property is thenable');
assert_equals(rsReader.constructor.length, 1, 'constructor has 1 parameter');
assert_equals(rsReader.read.length, 1, 'read has 1 parameter');
assert_equals(rsReader.releaseLock.length, 0, 'releaseLock has no parameters');
}, 'ReadableStreamBYOBReader instances should have the correct list of properties');
promise_test(t => {
const rs = new ReadableStream({
pull(controller) {
return t.step(() => {
const byobRequest = controller.byobRequest;
const methods = ['constructor', 'respond', 'respondWithNewView'];
const properties = methods.concat(['view']).sort();
const proto = Object.getPrototypeOf(byobRequest);
assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties);
for (const m of methods) {
const propDesc = Object.getOwnPropertyDescriptor(proto, m);
assert_equals(propDesc.enumerable, false, 'method should be non-enumerable');
assert_equals(propDesc.configurable, true, 'method should be configurable');
assert_equals(propDesc.writable, true, 'method should be writable');
assert_equals(typeof byobRequest[m], 'function', 'should have a method');
const expectedName = m === 'constructor' ? 'ReadableStreamBYOBRequest' : m;
assert_equals(byobRequest[m].name, expectedName, 'method should have the correct name');
}
const viewPropDesc = Object.getOwnPropertyDescriptor(proto, 'view');
assert_equals(viewPropDesc.enumerable, false, 'view should be non-enumerable');
assert_equals(viewPropDesc.configurable, true, 'view should be configurable');
assert_not_equals(viewPropDesc.get, undefined, 'view should have a getter');
assert_equals(viewPropDesc.set, undefined, 'view should not have a setter');
assert_not_equals(byobRequest.view, undefined, 'has a non-undefined view property');
assert_equals(byobRequest.constructor.length, 2, 'constructor has 1 parameter');
assert_equals(byobRequest.respond.length, 1, 'respond has 1 parameter');
assert_equals(byobRequest.respondWithNewView.length, 1, 'releaseLock has 1 parameter');
byobRequest.respond(1);
});
},
type: 'bytes' });
const reader = rs.getReader({ mode: 'byob' });
return reader.read(new Uint8Array(1));
}, 'ReadableStreamBYOBRequest instances should have the correct list of properties');
test(() => {
const methods = ['close', 'constructor', 'enqueue', 'error'];
const accessors = ['byobRequest', 'desiredSize'];
const properties = methods.concat(accessors).sort();
let controller;
new ReadableStream({
start(c) {
controller = c;
},
type: 'bytes'
});
const proto = Object.getPrototypeOf(controller);
assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties);
for (const m of methods) {
const propDesc = Object.getOwnPropertyDescriptor(proto, m);
assert_equals(propDesc.enumerable, false, 'method should be non-enumerable');
assert_equals(propDesc.configurable, true, 'method should be configurable');
assert_equals(propDesc.writable, true, 'method should be writable');
assert_equals(typeof controller[m], 'function', 'should have be a method');
const expectedName = m === 'constructor' ? 'ReadableByteStreamController' : m;
assert_equals(controller[m].name, expectedName, 'method should have the correct name');
}
for (const a of accessors) {
const propDesc = Object.getOwnPropertyDescriptor(proto, a);
assert_equals(propDesc.enumerable, false, `${a} should be non-enumerable`);
assert_equals(propDesc.configurable, true, `${a} should be configurable`);
assert_not_equals(propDesc.get, undefined, `${a} should have a getter`);
assert_equals(propDesc.set, undefined, `${a} should not have a setter`);
}
assert_equals(controller.close.length, 0, 'cancel has no parameters');
assert_equals(controller.constructor.length, 3, 'constructor has 3 parameters');
assert_equals(controller.enqueue.length, 1, 'enqueue has 1 parameter');
assert_equals(controller.error.length, 1, 'releaseLock has 1 parameter');
}, 'ReadableByteStreamController instances should have the correct list of properties');
done();

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>properties.js service worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>
'use strict';
service_worker_test('properties.js', 'Service worker test setup');
</script>

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>properties.js shared worker wrapper file</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
fetch_tests_from_worker(new SharedWorker('properties.js'));
</script>