| <!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> |