mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-08 01:00:05 +00:00
LibWeb: Import ReadableStreamPipeTo observability tests
This commit is contained in:
parent
6ff2324f26
commit
99550dc4ad
Notes:
github-actions[bot]
2025-04-14 11:42:55 +00:00
Author: https://github.com/trflynn89
Commit: 99550dc4ad
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4340
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
Add a link
Reference in a new issue