[Readable Streams API] Add ReadableByteStreamController byobRequest attribute
[WebKit-https.git] / LayoutTests / streams / readable-stream-byob-request.js
1 'use strict';
2
3 if (self.importScripts) {
4     self.importScripts('../resources/testharness.js');
5 }
6
7 test(() => {
8     const methods = ['constructor', 'respond', 'respondWithNewView'];
9     const properties = methods.concat(['view']).sort();
10
11     let controller;
12
13     // FIXME: Remove next line when bug https://bugs.webkit.org/show_bug.cgi?id=167697
14     // is fixed. For the moment, so that test may pass, we have to insert a reference
15     // to Uint8Array here (otherwise, the private variable cannot be resolved).
16     const d = new Uint8Array(1);
17
18     // Specifying autoAllocateChunkSize and calling read() are steps that allow
19     // getting a ReadableStreamBYOBRequest returned instead of undefined. The
20     // purpose here is just to get such an object.
21     const rs = new ReadableStream({
22         autoAllocateChunkSize: 128,
23         start: function(c) {
24             controller = c;
25         },
26         type: "bytes"
27     });
28
29     rs.getReader().read();
30     const byobReq = controller.byobRequest;
31
32     const proto = Object.getPrototypeOf(byobReq);
33
34     assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties);
35
36     for (const m of methods) {
37         const propDesc = Object.getOwnPropertyDescriptor(proto, m);
38         assert_equals(propDesc.enumerable, false, 'method should be non-enumerable');
39         assert_equals(propDesc.configurable, true, 'method should be configurable');
40         assert_equals(propDesc.writable, true, 'method should be writable');
41         assert_equals(typeof byobReq[m], 'function', 'should have be a method');
42     }
43
44     const viewPropDesc = Object.getOwnPropertyDescriptor(proto, 'view');
45     assert_equals(viewPropDesc.enumerable, false, 'view should be non-enumerable');
46     assert_equals(viewPropDesc.configurable, true, 'view should be configurable');
47     assert_not_equals(viewPropDesc.get, undefined, 'view should have a getter');
48     assert_equals(viewPropDesc.set, undefined, 'view should not have a setter');
49
50     assert_equals(byobReq.constructor.length, 2, 'constructor has 2 parameters');
51     assert_equals(byobReq.respond.length, 1, 'respond has 1 parameter');
52     assert_equals(byobReq.respondWithNewView.length, 1, 'respondWithNewView has 1 parameter');
53
54 }, 'ReadableStreamBYOBRequest instances should have the correct list of properties');
55
56 test(function() {
57     let controller;
58
59     const rs = new ReadableStream({
60         start: function(c) {
61             controller = c;
62         },
63         type: "bytes"
64     });
65
66     assert_equals(controller.byobRequest, undefined, "by default byobRequest should be undefined");
67 }, "By default, byobRequest should be undefined");
68
69 done();