rewriter-rewrite-streaming.tentative.https.window.js (2162B)
1 // META: title=Rewriter Rewrite Streaming 2 // META: script=/common/gc.js 3 // META: script=/resources/testdriver.js 4 // META: script=../resources/util.js 5 // META: timeout=long 6 7 'use strict'; 8 9 promise_test(async () => { 10 const rewriter = await createRewriter(); 11 const streamingResponse = 12 rewriter.rewriteStreaming(kTestPrompt, { context: kTestContext }); 13 assert_equals( 14 Object.prototype.toString.call(streamingResponse), 15 '[object ReadableStream]'); 16 let result = ''; 17 for await (const chunk of streamingResponse) { 18 result += chunk; 19 } 20 assert_greater_than(result.length, 0); 21 }, 'Simple Rewriter.rewriteStreaming() call'); 22 23 promise_test(async (t) => { 24 const rewriter = await createRewriter(); 25 const stream = rewriter.rewriteStreaming(kTestPrompt); 26 27 rewriter.destroy(); 28 29 await promise_rejects_dom( 30 t, 'AbortError', stream.pipeTo(new WritableStream())); 31 }, 'Rewriter.rewriteStreaming() fails after destroyed'); 32 33 promise_test(async t => { 34 const rewriter = await createRewriter(); 35 const streamingResponse = rewriter.rewriteStreaming(''); 36 assert_equals( 37 Object.prototype.toString.call(streamingResponse), 38 "[object ReadableStream]" 39 ); 40 const { result, done } = await streamingResponse.getReader().read(); 41 assert_true(done); 42 }, 'Rewriter.rewriteStreaming() returns a ReadableStream without any chunk on an empty input'); 43 44 promise_test(async () => { 45 const rewriter = await createRewriter(); 46 await Promise.all([ 47 rewriter.rewriteStreaming(kTestPrompt), 48 rewriter.rewriteStreaming(kTestPrompt) 49 ]); 50 }, 'Multiple Rewriter.rewriteStreaming() calls are resolved successfully'); 51 52 promise_test(async () => { 53 const rewriter = await createRewriter(); 54 const streamingResponse = rewriter.rewriteStreaming(kTestPrompt); 55 garbageCollect(); 56 assert_equals(Object.prototype.toString.call(streamingResponse), 57 '[object ReadableStream]'); 58 let result = ''; 59 for await (const value of streamingResponse) { 60 result += value; 61 garbageCollect(); 62 } 63 assert_greater_than(result.length, 0, 'The result should not be empty.'); 64 }, 'Rewrite Streaming API must continue even after GC has been performed.');