1- import { ok } from "node:assert/strict" ;
1+ import { equal , ok } from "node:assert/strict" ;
22import { afterEach , before , describe , it } from "node:test" ;
3- import { isBridgelessEnabled , isNewArchEnabled } from "../../ios/features.mjs" ;
3+ import {
4+ isBridgelessEnabled ,
5+ isHermesEnabled ,
6+ isNewArchEnabled ,
7+ } from "../../ios/features.mjs" ;
48import { v } from "../../scripts/helpers.js" ;
59
610describe ( "isBridgelessEnabled()" , ( ) => {
@@ -19,34 +23,76 @@ describe("isBridgelessEnabled()", () => {
1923 } ) ;
2024
2125 it ( "returns true only when new architecture is enabled" , ( ) => {
22- ok ( ! isBridgelessEnabled ( { } , 0 ) ) ;
23- ok ( ! isBridgelessEnabled ( { } , firstAvailableVersion ) ) ;
26+ ok ( ! isBridgelessEnabled ( 0 , { } ) ) ;
27+ ok ( ! isBridgelessEnabled ( firstAvailableVersion , { } ) ) ;
2428
2529 const options = { bridgelessEnabled : true , fabricEnabled : true } ;
2630
27- ok ( ! isBridgelessEnabled ( options , v ( 0 , 72 , 999 ) ) ) ;
28- ok ( isBridgelessEnabled ( options , firstAvailableVersion ) ) ;
31+ ok ( ! isBridgelessEnabled ( v ( 0 , 72 , 999 ) , options ) ) ;
32+ ok ( isBridgelessEnabled ( firstAvailableVersion , options ) ) ;
2933 } ) ;
3034
3135 it ( "returns true by default starting with 0.74" , ( ) => {
3236 // Bridgeless mode is enabled by default starting with 0.74 unless opted-out of
33- ok ( isBridgelessEnabled ( { fabricEnabled : true } , defaultVersion ) ) ;
37+ ok ( isBridgelessEnabled ( defaultVersion , { fabricEnabled : true } ) ) ;
3438 ok (
35- ! isBridgelessEnabled (
36- { bridgelessEnabled : false , fabricEnabled : true } ,
37- defaultVersion
38- )
39+ ! isBridgelessEnabled ( defaultVersion , {
40+ bridgelessEnabled : false ,
41+ fabricEnabled : true ,
42+ } )
3943 ) ;
4044 } ) ;
4145
4246 it ( "does not return true just because `RCT_NEW_ARCH_ENABLED` is set" , ( ) => {
4347 // `RCT_NEW_ARCH_ENABLED` does not enable bridgeless on older versions
4448 process . env [ "RCT_NEW_ARCH_ENABLED" ] = "1" ;
4549
46- ok ( ! isBridgelessEnabled ( { } , v ( 0 , 72 , 999 ) ) ) ;
47- ok ( ! isBridgelessEnabled ( { } , firstAvailableVersion ) ) ;
48- ok ( isBridgelessEnabled ( { } , defaultVersion ) ) ;
49- ok ( ! isBridgelessEnabled ( { bridgelessEnabled : false } , defaultVersion ) ) ;
50+ ok ( ! isBridgelessEnabled ( v ( 0 , 72 , 999 ) , { } ) ) ;
51+ ok ( ! isBridgelessEnabled ( firstAvailableVersion , { } ) ) ;
52+ ok ( isBridgelessEnabled ( defaultVersion , { } ) ) ;
53+ ok ( ! isBridgelessEnabled ( defaultVersion , { bridgelessEnabled : false } ) ) ;
54+ } ) ;
55+ } ) ;
56+
57+ describe ( "isHermesEnabled()" , ( ) => {
58+ before ( ( ) => {
59+ delete process . env [ "USE_HERMES" ] ;
60+ } ) ;
61+
62+ afterEach ( ( ) => {
63+ delete process . env [ "USE_HERMES" ] ;
64+ } ) ;
65+
66+ for ( const platform of [ "ios" , "macos" , "visionos" ] as const ) {
67+ it ( `[${ platform } ] is disabled by default` , ( ) => {
68+ ok ( ! isHermesEnabled ( platform , v ( 1 , 0 , 0 ) , { } ) ) ;
69+ } ) ;
70+
71+ it ( `[${ platform } ] returns true when enabled` , ( ) => {
72+ ok ( isHermesEnabled ( platform , v ( 1 , 0 , 0 ) , { hermesEnabled : true } ) ) ;
73+ } ) ;
74+
75+ it ( `[${ platform } ] returns true if 'USE_HERMES=1'` , ( ) => {
76+ process . env [ "USE_HERMES" ] = "1" ;
77+ ok ( isHermesEnabled ( platform , v ( 1 , 0 , 0 ) , { } ) ) ;
78+ } ) ;
79+
80+ it ( `[${ platform } ] returns false if 'USE_HERMES=0'` , ( ) => {
81+ process . env [ "USE_HERMES" ] = "0" ;
82+ ok ( ! isHermesEnabled ( platform , v ( 1 , 0 , 0 ) , { hermesEnabled : true } ) ) ;
83+ } ) ;
84+ }
85+
86+ it ( "[visionos] builds from source when necessary" , ( ) => {
87+ const options = { hermesEnabled : true } ;
88+
89+ equal ( isHermesEnabled ( "visionos" , v ( 0 , 75 , 0 ) , options ) , "from-source" ) ;
90+ equal ( isHermesEnabled ( "visionos" , v ( 0 , 76 , 0 ) , options ) , true ) ;
91+
92+ process . env [ "USE_HERMES" ] = "1" ;
93+
94+ equal ( isHermesEnabled ( "visionos" , v ( 0 , 75 , 0 ) , { } ) , "from-source" ) ;
95+ equal ( isHermesEnabled ( "visionos" , v ( 0 , 76 , 0 ) , { } ) , true ) ;
5096 } ) ;
5197} ) ;
5298
@@ -63,27 +109,27 @@ describe("isNewArchEnabled()", () => {
63109 } ) ;
64110
65111 it ( "returns true if New Architecture is available and enabled" , ( ) => {
66- ok ( ! isNewArchEnabled ( { } , 0 ) ) ;
67- ok ( ! isNewArchEnabled ( { } , firstAvailableVersion ) ) ;
112+ ok ( ! isNewArchEnabled ( 0 , { } ) ) ;
113+ ok ( ! isNewArchEnabled ( firstAvailableVersion , { } ) ) ;
68114
69115 // New architecture is first publicly available in 0.68, but we'll require 0.71
70- ok ( ! isNewArchEnabled ( { fabricEnabled : true } , v ( 0 , 70 , 999 ) ) ) ;
71- ok ( isNewArchEnabled ( { fabricEnabled : true } , firstAvailableVersion ) ) ;
72- ok ( isNewArchEnabled ( { newArchEnabled : true } , firstAvailableVersion ) ) ;
116+ ok ( ! isNewArchEnabled ( v ( 0 , 70 , 999 ) , { fabricEnabled : true } ) ) ;
117+ ok ( isNewArchEnabled ( firstAvailableVersion , { fabricEnabled : true } ) ) ;
118+ ok ( isNewArchEnabled ( firstAvailableVersion , { newArchEnabled : true } ) ) ;
73119 } ) ;
74120
75121 it ( "returns true if `RCT_NEW_ARCH_ENABLED=1`" , ( ) => {
76122 process . env [ "RCT_NEW_ARCH_ENABLED" ] = "1" ;
77123
78- ok ( ! isNewArchEnabled ( { } , v ( 0 , 70 , 999 ) ) ) ;
79- ok ( isNewArchEnabled ( { } , firstAvailableVersion ) ) ;
124+ ok ( ! isNewArchEnabled ( v ( 0 , 70 , 999 ) , { } ) ) ;
125+ ok ( isNewArchEnabled ( firstAvailableVersion , { } ) ) ;
80126 } ) ;
81127
82128 it ( "returns false if `RCT_NEW_ARCH_ENABLED=0`" , ( ) => {
83129 process . env [ "RCT_NEW_ARCH_ENABLED" ] = "0" ;
84130
85- ok ( ! isNewArchEnabled ( { } , v ( 0 , 70 , 999 ) ) ) ;
86- ok ( ! isNewArchEnabled ( { } , firstAvailableVersion ) ) ;
87- ok ( ! isNewArchEnabled ( { fabric_enabled : true } , firstAvailableVersion ) ) ;
131+ ok ( ! isNewArchEnabled ( v ( 0 , 70 , 999 ) , { } ) ) ;
132+ ok ( ! isNewArchEnabled ( firstAvailableVersion , { } ) ) ;
133+ ok ( ! isNewArchEnabled ( firstAvailableVersion , { fabric_enabled : true } ) ) ;
88134 } ) ;
89135} ) ;
0 commit comments