| <!DOCTYPE html> | |
| <body> | |
| <script src="../resources/js-test-pre.js"></script> | |
| <script> | |
| description("Streams should not directly use array public APIs"); | |
| jsTestIsAsync = true; | |
| const ArrayPushBackup = Array.prototype.push; | |
| const ArrayShiftBackup = Array.prototype.shift; | |
| Array.prototype.push = function() { | |
| testFailed("Array.prototype.push called"); | |
| } | |
| Array.prototype.shift = function() { | |
| testFailed("Array.prototype.shift called"); | |
| } | |
| function cleanAndFinishTest() { | |
| Array.prototype.push = ArrayPushBackup; | |
| Array.prototype.shift = ArrayShiftBackup; | |
| finishJSTest(); | |
| } | |
| try { | |
| let _controller; | |
| const reader = new ReadableStream({ | |
| start: function(controller) { | |
| _controller = controller; | |
| } | |
| }).getReader(); | |
| // checking whether pushing/shifting pending read promises is shielded. | |
| const readPromise = reader.read().then(function(_result) { | |
| result = _result; | |
| shouldBeEqualToString("result.value", "half baked potato"); | |
| // checking whether pushing/shifting enqueued values is shielded. | |
| _controller.enqueue("fully baked potato"); | |
| return reader.read().then(function(_result) { | |
| result = _result; | |
| shouldBeEqualToString("result.value", "fully baked potato"); | |
| cleanAndFinishTest(); | |
| }, cleanAndFinishTest); | |
| }, cleanAndFinishTest); | |
| _controller.enqueue("half baked potato"); | |
| } catch (error) { | |
| testFailed("Exception thrown: " + error); | |
| cleanAndFinishTest(); | |
| } | |
| </script> | |
| <script src="../resources/js-test-post.js"></script> | |
| </body> |