mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 12:05:15 +00:00
LibWeb: Import ReadableStreamPipeTo observability tests
This commit is contained in:
parent
c286d38765
commit
c19b777886
3 changed files with 91 additions and 0 deletions
|
@ -0,0 +1,7 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 2 tests
|
||||
|
||||
2 Fail
|
||||
Fail piping should not be observable
|
||||
Fail tee should not be observable
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
||||
<script>
|
||||
self.GLOBAL = {
|
||||
isWindow: function() { return true; },
|
||||
isWorker: function() { return false; },
|
||||
isShadowRealm: function() { return false; },
|
||||
};
|
||||
</script>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script src="../resources/test-utils.js"></script>
|
||||
<script src="../resources/recording-streams.js"></script>
|
||||
<div id=log></div>
|
||||
<script src="../../streams/piping/then-interception.any.js"></script>
|
|
@ -0,0 +1,68 @@
|
|||
// META: global=window,worker,shadowrealm
|
||||
// META: script=../resources/test-utils.js
|
||||
// META: script=../resources/recording-streams.js
|
||||
'use strict';
|
||||
|
||||
function interceptThen() {
|
||||
const intercepted = [];
|
||||
let callCount = 0;
|
||||
Object.prototype.then = function(resolver) {
|
||||
if (!this.done) {
|
||||
intercepted.push(this.value);
|
||||
}
|
||||
const retval = Object.create(null);
|
||||
retval.done = ++callCount === 3;
|
||||
retval.value = callCount;
|
||||
resolver(retval);
|
||||
if (retval.done) {
|
||||
delete Object.prototype.then;
|
||||
}
|
||||
}
|
||||
return intercepted;
|
||||
}
|
||||
|
||||
promise_test(async t => {
|
||||
const rs = new ReadableStream({
|
||||
start(controller) {
|
||||
controller.enqueue('a');
|
||||
controller.close();
|
||||
}
|
||||
});
|
||||
const ws = recordingWritableStream();
|
||||
|
||||
const intercepted = interceptThen();
|
||||
t.add_cleanup(() => {
|
||||
delete Object.prototype.then;
|
||||
});
|
||||
|
||||
await rs.pipeTo(ws);
|
||||
delete Object.prototype.then;
|
||||
|
||||
|
||||
assert_array_equals(intercepted, [], 'nothing should have been intercepted');
|
||||
assert_array_equals(ws.events, ['write', 'a', 'close'], 'written chunk should be "a"');
|
||||
}, 'piping should not be observable');
|
||||
|
||||
promise_test(async t => {
|
||||
const rs = new ReadableStream({
|
||||
start(controller) {
|
||||
controller.enqueue('a');
|
||||
controller.close();
|
||||
}
|
||||
});
|
||||
const ws = recordingWritableStream();
|
||||
|
||||
const [ branch1, branch2 ] = rs.tee();
|
||||
|
||||
const intercepted = interceptThen();
|
||||
t.add_cleanup(() => {
|
||||
delete Object.prototype.then;
|
||||
});
|
||||
|
||||
await branch1.pipeTo(ws);
|
||||
delete Object.prototype.then;
|
||||
branch2.cancel();
|
||||
|
||||
assert_array_equals(intercepted, [], 'nothing should have been intercepted');
|
||||
assert_array_equals(ws.events, ['write', 'a', 'close'], 'written chunk should be "a"');
|
||||
}, 'tee should not be observable');
|
Loading…
Add table
Reference in a new issue