[Streams API] Support the start function parameter in ReadableStream constructor
[WebKit-https.git] / LayoutTests / streams / readablestream-start.html
1 <!DOCTYPE html>
2 <script src='../resources/testharness.js'></script>
3 <script src='../resources/testharnessreport.js'></script>
4 <script>
5
6 test(function()
7 {
8     var isStartCalled = false;
9     var source =
10     { start:
11         function(controller) {
12             assert_equals(this, source);
13
14             assert_array_equals(Object.getOwnPropertyNames(controller), ['enqueue', 'close', 'error']);
15
16             enqueue = controller.enqueue;
17             close = controller.close;
18             error = controller.error;
19
20             assert_equals(typeof enqueue, 'function');
21             assert_equals(typeof close, 'function');
22             assert_equals(typeof error, 'function');
23
24             assert_array_equals(Object.getOwnPropertyNames(enqueue), ['name', 'length']);
25             assert_array_equals(Object.getOwnPropertyNames(close), ['name', 'length']);
26             assert_array_equals(Object.getOwnPropertyNames(error), ['name', 'length']);
27
28             assert_equals(enqueue.name, '');
29             assert_equals(close.name, '');
30             assert_equals(error.name, '');
31
32             assert_equals(enqueue.length, 1);
33             assert_equals(close.length, 0);
34             assert_equals(error.length, 1);
35
36             isStartCalled = true;
37         }
38     };
39     var rs = new ReadableStream(source);
40     assert_true(isStartCalled);
41 }, 'ReadableStream start should be called with the proper parameters');
42
43 test(function()
44 {
45     var isStartCalled = false;
46     var source =
47     { start:
48         function(controller) {
49             assert_array_equals(Object.getOwnPropertyNames(controller), ['enqueue', 'close', 'error']);
50             controller.test = "";
51             assert_array_equals(Object.getOwnPropertyNames(controller), ['enqueue', 'close', 'error', 'test']);
52
53             isStartCalled = true;
54         }
55     };
56     var rs = new ReadableStream(source);
57     assert_true(isStartCalled);
58 }, 'ReadableStream start controller parameter should be updatable');
59
60 test(function()
61 {
62     var isStartCalled = false;
63     SimpleStreamSource = function() { };
64     SimpleStreamSource.prototype.start = function() { isStartCalled = true; };
65     SimpleStreamSource.prototype.constructor = SimpleStreamSource;
66
67     var rs = new ReadableStream(new SimpleStreamSource());
68     assert_true(isStartCalled);
69 }, 'ReadableStream should be able to call start method within prototype chain of its source');
70
71 test(function()
72 {
73     mashedError = new Error('potato');
74     assert_throws(mashedError, function() {
75         var rs = new ReadableStream(
76         { start:
77             function() {
78                 throw mashedError;
79             }
80         });
81     });
82 }, 'ReadableStream start should be able to throw');
83
84 test(function() {
85     assert_throws(new TypeError(), function() {
86         new ReadableStream({ start: 'potato'});
87     });
88 }, 'ReadableStream constructor should get a function as start argument');
89
90 </script>