Problem
The upstream test_general test in the Node.js repository compiles a single target with NAPI_EXPERIMENTAL, which links against all experimental Node-API symbols (node_api_set_prototype, node_api_post_finalizer). This means the addon cannot be loaded on runtimes that don't export every experimental symbol.
In the CTS, this forces all test_general JS test files to guard loadAddon behind a check for every experimental feature the addon links against. The result is that even stable API tests (like napi_strict_equals, napi_typeof, napi_instanceof, etc.) are silently skipped on runtimes that don't support all experimental features.
Proposed solution
Split the upstream test_general into separate targets:
- Stable target — compiles without
NAPI_EXPERIMENTAL, includes all stable API functions
- Experimental target(s) — one per experimental feature, compiled with the appropriate
NAPI_EXPERIMENTAL define
This would allow the CTS to test stable APIs independently of experimental feature support.
Current workaround
The CTS ports test_general as a single experimental addon (matching upstream), with all JS tests guarded behind experimentalFeatures.setPrototype && experimentalFeatures.postFinalizer.
References
Problem
The upstream
test_generaltest in the Node.js repository compiles a single target withNAPI_EXPERIMENTAL, which links against all experimental Node-API symbols (node_api_set_prototype,node_api_post_finalizer). This means the addon cannot be loaded on runtimes that don't export every experimental symbol.In the CTS, this forces all test_general JS test files to guard
loadAddonbehind a check for every experimental feature the addon links against. The result is that even stable API tests (likenapi_strict_equals,napi_typeof,napi_instanceof, etc.) are silently skipped on runtimes that don't support all experimental features.Proposed solution
Split the upstream
test_generalinto separate targets:NAPI_EXPERIMENTAL, includes all stable API functionsNAPI_EXPERIMENTALdefineThis would allow the CTS to test stable APIs independently of experimental feature support.
Current workaround
The CTS ports
test_generalas a single experimental addon (matching upstream), with all JS tests guarded behindexperimentalFeatures.setPrototype && experimentalFeatures.postFinalizer.References
binding.gypdefinesNAPI_EXPERIMENTALon the single target