@@ -10,26 +10,31 @@ if (!process.env.RUBY_NPM_PACKAGE_ROOT) {
1010 setupProxy ( context ) ;
1111 } )
1212
13+ const resolveBinding = async ( page : Page , name : string ) => {
14+ let checkResolved ;
15+ const resolvedValue = new Promise ( ( resolve ) => {
16+ checkResolved = resolve ;
17+ } )
18+ await page . exposeBinding ( name , async ( source , v ) => {
19+ checkResolved ( v ) ;
20+ } ) ;
21+ return async ( ) => await resolvedValue
22+ }
23+
1324 test . describe ( 'data-eval="async"' , ( ) => {
14- test ( "JS::Object#await returns value" , async ( { page, context } ) => {
15- let checkResolved ;
16- const resolvedValue = new Promise ( ( resolve ) => {
17- checkResolved = resolve ;
18- } )
19- await page . exposeBinding ( 'checkResolved' , async ( source , v ) => {
20- checkResolved ( v ) ;
21- } ) ;
25+ test ( "JS::Object#await returns value" , async ( { page } ) => {
26+ const resolve = await resolveBinding ( page , "checkResolved" ) ;
2227 await page . setContent ( `
2328 <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@latest/dist/browser.script.iife.js"></script>
2429 <script type="text/ruby" data-eval="async">
2530 require "js"
2631 JS.global.checkResolved JS.global[:Promise].resolve(42).await
2732 </script>
2833 ` )
29- expect ( await resolvedValue ) . toBe ( 42 ) ;
34+ expect ( await resolve ( ) ) . toBe ( 42 ) ;
3035 } )
3136
32- test ( "JS::Object#await throws error on default attr" , async ( { page, context } ) => {
37+ test ( "JS::Object#await throws error on default attr" , async ( { page } ) => {
3338 await page . setContent ( `
3439 <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@latest/dist/browser.script.iife.js"></script>
3540 <script type="text/ruby">
@@ -40,5 +45,17 @@ if (!process.env.RUBY_NPM_PACKAGE_ROOT) {
4045 const error = await page . waitForEvent ( "pageerror" )
4146 expect ( error . message ) . toMatch ( / p l e a s e e n s u r e t h a t y o u s p e c i f y ` d a t a - e v a l = " a s y n c " ` / )
4247 } )
48+
49+ test ( "default stack size is enough to require 'json'" , async ( { page } ) => {
50+ const resolve = await resolveBinding ( page , "checkResolved" ) ;
51+ await page . setContent ( `
52+ <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@latest/dist/browser.script.iife.js"></script>
53+ <script type="text/ruby" data-eval="async">
54+ require 'json'
55+ JS.global.checkResolved "ok"
56+ </script>
57+ ` )
58+ expect ( await resolve ( ) ) . toBe ( "ok" ) ;
59+ } )
4360 } )
4461}
0 commit comments