@@ -79,7 +79,18 @@ test("rethrows error thrown in handler", async (t) => {
79
79
await t . throwsAsync ( promise , { message : "Whoops!" } ) ;
80
80
} ) ;
81
81
82
- test ( "handles concurrent rewriters with async handlers" , async ( t ) => {
82
+ test ( "rethrows error thrown in async handler" , async ( t ) => {
83
+ const rewriter = new RawHTMLRewriter ( ( ) => { } ) . on ( "p" , {
84
+ async element ( ) {
85
+ throw new Error ( "Whoops!" ) ;
86
+ } ,
87
+ } ) ;
88
+
89
+ const promise = rewriter . write ( new TextEncoder ( ) . encode ( "<p>test</p>" ) ) ;
90
+ await t . throwsAsync ( promise , { message : "Whoops!" } ) ;
91
+ } ) ;
92
+
93
+ test . serial ( "handles concurrent rewriters with async handlers" , async ( t ) => {
83
94
// Note this test requires the "safe" HTMLRewriter, see comments in
84
95
// src/modules/rewriter.ts for more details
85
96
const rewriter = ( i : number ) =>
@@ -103,6 +114,24 @@ test("handles concurrent rewriters with async handlers", async (t) => {
103
114
t . deepEqual ( texts , [ "<p>new 3</p>" , "<p>new 4</p>" ] ) ;
104
115
} ) ;
105
116
117
+ test . serial ( "handles many async handlers for single chunk write" , async ( t ) => {
118
+ const rewriter = new HTMLRewriter ( ) ;
119
+ rewriter . on ( "h1" , {
120
+ async element ( element ) {
121
+ await wait ( 50 ) ;
122
+ element . setInnerContent ( "new h1" ) ;
123
+ } ,
124
+ } ) ;
125
+ rewriter . on ( "p" , {
126
+ async element ( element ) {
127
+ await wait ( 50 ) ;
128
+ element . setInnerContent ( "new p" ) ;
129
+ } ,
130
+ } ) ;
131
+ const res = await rewriter . transform ( "<h1>old h1</h1><p>old p</p>" ) ;
132
+ t . is ( res , "<h1>new h1</h1><p>new p</p>" ) ;
133
+ } ) ;
134
+
106
135
test ( "rewriter allows chaining" , ( t ) => {
107
136
const rewriter = new RawHTMLRewriter ( ( ) => { } ) ;
108
137
t . is ( rewriter . on ( "p" , { } ) , rewriter ) ;
0 commit comments