blob: ea46bf3d2d3f88a16d5b45359f86ac449252105c [file] [log] [blame]
<!DOCTYPE html>
<script src='../resources/testharness.js'></script>
<script src='../resources/testharnessreport.js'></script>
<script src='../resources/gc.js'></script>
<script>
test(function() {
assert_throws(new TypeError(), function() {
new ReadableStreamReader('potato');
});
assert_throws(new TypeError(), function() {
new ReadableStreamReader({});
});
assert_throws(new TypeError(), function() {
new ReadableStreamReader();
});
}, 'ReadableStreamReader constructor should get a ReadableStream object as argument');
test(function() {
var rsReader = new ReadableStreamReader(new ReadableStream());
assert_array_equals(Object.getOwnPropertyNames(rsReader), ['closed']);
assert_array_equals(Object.getOwnPropertyNames(Object.getPrototypeOf(rsReader)), ['constructor', 'read', 'cancel', 'releaseLock']);
assert_true(Object.getOwnPropertyDescriptor(rsReader, 'closed').enumerable);
assert_false(Object.getOwnPropertyDescriptor(rsReader, 'closed').configurable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'cancel').enumerable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'cancel').configurable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'cancel').writable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'read').enumerable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'read').configurable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'read').writable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'releaseLock').enumerable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'releaseLock').configurable);
assert_true(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(rsReader), 'releaseLock').writable);
assert_exists(rsReader, 'closed', 'has a closed property');
assert_equals(typeof rsReader.closed.then, 'function', 'closed property is thenable');
assert_equals(typeof rsReader.cancel, 'function', 'has a cancel method');
assert_equals(rsReader.cancel.length, 1);
assert_equals(typeof rsReader.read, 'function', 'has a getReader method');
assert_equals(rsReader.read.length, 0);
assert_equals(typeof rsReader.releaseLock, 'function', 'has a releaseLock method');
assert_equals(rsReader.releaseLock.length, 0);
}, 'ReadableStream instances should have the correct list of properties');
test(function() {
rsReader = new ReadableStreamReader(new ReadableStream());
closedPromise = rsReader.closed;
assert_equals(closedPromise, rsReader.closed);
assert_array_equals(Object.keys(rsReader), ['closed']);
assert_array_equals(Object.getOwnPropertyNames(rsReader), ['closed']);
}, 'ReadableStreamReader closed should always return the same promise object');
test(function() {
rs = new ReadableStream();
assert_throws(new TypeError(), function() {
rs.getReader();
new ReadableStreamReader(rs);
});
rs = new ReadableStream();
assert_throws(new TypeError(), function() {
new ReadableStreamReader(rs);
rs.getReader();
});
rs = new ReadableStream();
assert_throws(new TypeError(), function() {
rs.getReader();
rs.getReader();
});
rs = new ReadableStream();
assert_throws(new TypeError(), function() {
new ReadableStreamReader(rs);
new ReadableStreamReader(rs);
});
}, 'ReadableStream getReader should throw if ReadableStream is locked');
test(function() {
rs = new ReadableStream({});
rs.getReader();
window.gc();
assert_throws(new TypeError(), function() { rs.getReader(); });
}, 'Collecting a ReadableStreamReader should not unlock its stream.');
</script>