@@ -102,6 +102,16 @@ def compiler_for(filename, force_c=False):
102102 return EMCC
103103
104104
105+ def get_nodejs (all_engines = None ):
106+ if not all_engines :
107+ all_engines = config .JS_ENGINES
108+ if config .NODE_JS_TEST and config .NODE_JS_TEST in all_engines :
109+ return config .NODE_JS_TEST
110+ if config .NODE_JS and config .NODE_JS in all_engines :
111+ return config .NODE_JS
112+ return None
113+
114+
105115# Generic decorator that calls a function named 'condition' on the test class and
106116# skips the test if that function returns true
107117def skip_if (func , condition , explanation = '' , negate = False ):
@@ -317,7 +327,8 @@ def metafunc(self, with_bigint):
317327 if self .get_setting ('WASM_BIGINT' ) is not None :
318328 self .skipTest ('redundant in bigint test config' )
319329 self .set_setting ('WASM_BIGINT' )
320- self .node_args += shared .node_bigint_flags ()
330+ nodejs = self .require_node ()
331+ self .node_args += shared .node_bigint_flags (nodejs )
321332 f (self )
322333 else :
323334 f (self )
@@ -381,7 +392,8 @@ def metafunc(self, standalone):
381392 # if we are impure, disallow all wasm engines
382393 if impure :
383394 self .wasm_engines = []
384- self .node_args += shared .node_bigint_flags ()
395+ nodejs = self .require_nodejs ()
396+ self .node_args += shared .node_bigint_flags (nodejs )
385397 func (self )
386398
387399 metafunc ._parameterize = {'' : (False ,),
@@ -606,19 +618,25 @@ def require_v8(self):
606618 self .require_engine (config .V8_ENGINE )
607619 self .emcc_args .append ('-sENVIRONMENT=shell' )
608620
621+ def get_nodejs (self ):
622+ return get_nodejs (self .js_engines )
623+
609624 def require_node (self ):
610- if not config .NODE_JS or config .NODE_JS not in config .JS_ENGINES :
625+ nodejs = self .get_nodejs ()
626+ if not nodejs :
611627 if 'EMTEST_SKIP_NODE' in os .environ :
612628 self .skipTest ('test requires node and EMTEST_SKIP_NODE is set' )
613629 else :
614630 self .fail ('node required to run this test. Use EMTEST_SKIP_NODE to skip' )
615- self .require_engine (config .NODE_JS )
631+ self .require_engine (nodejs )
632+ return nodejs
616633
617634 def require_node_canary (self ):
618- if config .NODE_JS or config .NODE_JS in config .JS_ENGINES :
619- version = shared .check_node_version ()
635+ nodejs = self .get_nodejs ()
636+ if nodejs :
637+ version = shared .get_node_version (nodejs )
620638 if version >= (20 , 0 , 0 ):
621- self .require_engine (config . NODE_JS )
639+ self .require_engine (nodejs )
622640 return
623641
624642 if 'EMTEST_SKIP_NODE_CANARY' in os .environ :
@@ -635,10 +653,11 @@ def require_engine(self, engine):
635653 self .wasm_engines = []
636654
637655 def require_wasm64 (self ):
638- if config .NODE_JS and config .NODE_JS in self .js_engines :
639- version = shared .check_node_version ()
656+ nodejs = self .get_nodejs ()
657+ if nodejs :
658+ version = shared .get_node_version (nodejs )
640659 if version >= (16 , 0 , 0 ):
641- self .js_engines = [config . NODE_JS ]
660+ self .js_engines = [nodejs ]
642661 self .node_args += shared .node_memory64_flags ()
643662 return
644663
@@ -654,10 +673,11 @@ def require_wasm64(self):
654673 self .fail ('either d8 or node >= 16 required to run wasm64 tests. Use EMTEST_SKIP_WASM64 to skip' )
655674
656675 def require_simd (self ):
657- if config .NODE_JS and config .NODE_JS in self .js_engines :
658- version = shared .check_node_version ()
676+ nodejs = self .get_nodejs ()
677+ if nodejs :
678+ version = shared .get_node_version (nodejs )
659679 if version >= (16 , 0 , 0 ):
660- self .js_engines = [config . NODE_JS ]
680+ self .js_engines = [nodejs ]
661681 return
662682
663683 if config .V8_ENGINE and config .V8_ENGINE in self .js_engines :
@@ -671,10 +691,11 @@ def require_simd(self):
671691 self .fail ('either d8 or node >= 16 required to run wasm64 tests. Use EMTEST_SKIP_SIMD to skip' )
672692
673693 def require_wasm_eh (self ):
674- if config .NODE_JS and config .NODE_JS in self .js_engines :
675- version = shared .check_node_version ()
694+ nodejs = self .get_nodejs ()
695+ if nodejs :
696+ version = shared .get_node_version (nodejs )
676697 if version >= (17 , 0 , 0 ):
677- self .js_engines = [config . NODE_JS ]
698+ self .js_engines = [nodejs ]
678699 return
679700
680701 if config .V8_ENGINE and config .V8_ENGINE in self .js_engines :
@@ -701,12 +722,13 @@ def require_jspi(self):
701722 return
702723
703724 exp_args = ['--experimental-wasm-stack-switching' , '--experimental-wasm-type-reflection' ]
704- if config .NODE_JS and config .NODE_JS in self .js_engines :
705- version = shared .check_node_version ()
725+ nodejs = self .get_nodejs ()
726+ if nodejs :
727+ version = shared .get_node_vession (nodejs )
706728 # Support for JSPI came earlier than 19, but 19 is what currently works
707729 # with emscripten's implementation.
708730 if version >= (19 , 0 , 0 ):
709- self .js_engines = [config . NODE_JS ]
731+ self .js_engines = [nodejs ]
710732 self .node_args += exp_args
711733 return
712734
@@ -726,8 +748,9 @@ def setup_node_pthreads(self):
726748 self .emcc_args += ['-Wno-pthreads-mem-growth' , '-pthread' ]
727749 if self .get_setting ('MINIMAL_RUNTIME' ):
728750 self .skipTest ('node pthreads not yet supported with MINIMAL_RUNTIME' )
729- self .js_engines = [config .NODE_JS ]
730- self .node_args += shared .node_pthread_flags ()
751+ nodejs = self .get_nodejs ()
752+ self .js_engines = [nodejs ]
753+ self .node_args += shared .node_pthread_flags (nodejs )
731754
732755 def uses_memory_init_file (self ):
733756 if self .get_setting ('SIDE_MODULE' ) or (self .is_wasm () and not self .get_setting ('WASM2JS' )):
@@ -753,13 +776,15 @@ def setUpClass(cls):
753776
754777 def setUp (self ):
755778 super ().setUp ()
779+ self .js_engines = config .JS_ENGINES .copy ()
756780 self .settings_mods = {}
757781 self .emcc_args = ['-Wclosure' , '-Werror' , '-Wno-limited-postlink-optimizations' ]
758782 self .ldflags = []
759783 # Increate stack trace limit to maximise usefulness of test failure reports
760784 self .node_args = ['--stack-trace-limit=50' ]
761785
762- node_version = shared .check_node_version ()
786+ nodejs = self .get_nodejs ()
787+ node_version = shared .get_node_version (nodejs )
763788 if node_version :
764789 if node_version < (11 , 0 , 0 ):
765790 self .node_args .append ('--unhandled-rejections=strict' )
@@ -787,7 +812,6 @@ def setUp(self):
787812 self .env = {}
788813 self .temp_files_before_run = []
789814 self .uses_es6 = False
790- self .js_engines = config .JS_ENGINES .copy ()
791815 self .required_engine = None
792816 self .wasm_engines = config .WASM_ENGINES .copy ()
793817 self .use_all_engines = EMTEST_ALL_ENGINES
@@ -2103,8 +2127,8 @@ def btest(self, filename, expected=None, reference=None,
21032127 if not isinstance (expected , list ):
21042128 expected = [expected ]
21052129 if EMTEST_BROWSER == 'node' :
2106- self .require_node ()
2107- self .node_args += shared .node_pthread_flags ()
2130+ nodejs = self .require_node ()
2131+ self .node_args += shared .node_pthread_flags (nodejs )
21082132 output = self .run_js ('test.js' )
21092133 self .assertContained ('RESULT: ' + expected [0 ], output )
21102134 else :
0 commit comments