From 983bd14d99e980ab87eee1cd63fff4f0513883ed Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Thu, 5 Oct 2023 08:26:43 -0700 Subject: [PATCH] Add warning when passing a value to the RCT_NEW_ARCH_ENABLED (#39782) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/39782 ## Changelog [Internal] - Add warning when passing a value to the RCT_NEW_ARCH_ENABLED Reviewed By: dmytrorykun Differential Revision: D49830121 fbshipit-source-id: 02bfd52ecf832d25f539f7178326472b2620acf6 --- .../__tests__/new_architecture-test.rb | 110 +++++++++++++++--- .../scripts/cocoapods/new_architecture.rb | 9 ++ 2 files changed, 102 insertions(+), 17 deletions(-) diff --git a/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb b/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb index 3c3a177f95c..d1b09403e0b 100644 --- a/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb +++ b/packages/react-native/scripts/cocoapods/__tests__/new_architecture-test.rb @@ -10,11 +10,19 @@ require_relative "./test_utils/PodMock.rb" require_relative "./test_utils/SpecMock.rb" require_relative "./test_utils/FileMock.rb" +## Monkey patching to reset properly static props of the Helper. +class NewArchitectureHelper + def self.reset + @@NewArchWarningEmitted = false + end +end + class NewArchitectureTests < Test::Unit::TestCase def teardown Pod::UI.reset() FileMock.reset() ENV["RCT_NEW_ARCH_ENABLED"] = nil + NewArchitectureHelper.reset() end # ============================= # @@ -189,58 +197,126 @@ class NewArchitectureTests < Test::Unit::TestCase # Test - Compute New Arch Enabled # # =============================== # - def test_computeNewArchEnabled_whenOnMainAndFlagTrue_returnTrue + def test_computeNewArchEnabled_whenOnMainAndFlagTrueAndEnvVarNil_returnTrueWithNoWarning version = '1000.0.0' new_arch_enabled = true - + ENV['RCT_NEW_ARCH_ENABLED'] = nil isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) assert_equal("1", isEnabled) + assert_equal([], Pod::UI.collected_warns) end - def test_computeNewArchEnabled_whenOnMainAndFlagFalse_returnFalse + def test_computeNewArchEnabled_whenOnMainAndFlagTrueAndEnvVar1_returnTrueWithNoWarning + version = '1000.0.0' + new_arch_enabled = true + ENV['RCT_NEW_ARCH_ENABLED'] = "1" + isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) + + assert_equal("1", isEnabled) + assert_equal([], Pod::UI.collected_warns) + end + + def test_computeNewArchEnabled_whenOnMainAndFlagFalseAndEnvVarNil_returnFalseWithNoWarning version = '1000.0.0' new_arch_enabled = false + ENV['RCT_NEW_ARCH_ENABLED'] = nil isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) assert_equal("0", isEnabled) + assert_equal([], Pod::UI.collected_warns) end - def test_computeNewArchEnabled_whenOnStableAndFlagTrue_returnTrue - version = '0.73.0' - new_arch_enabled = true - - isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) - - assert_equal("1", isEnabled) - end - - def test_computeNewArchEnabled_whenOnStableAndFlagFalse_returnFalse - version = '0.73.0' + def test_computeNewArchEnabled_whenOnMainAndFlagFalseAndEnvVar0_returnFalseWithNoWarning + version = '1000.0.0' new_arch_enabled = false + ENV['RCT_NEW_ARCH_ENABLED'] = "0" isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) assert_equal("0", isEnabled) + assert_equal([], Pod::UI.collected_warns) end - def test_computeNewArchEnabled_whenOn100AndFlagTrue_returnTrue + def test_computeNewArchEnabled_whenOnStableAndFlagTrueAndEnvNil_returnTrueWithNoWarning + version = '0.73.0' + new_arch_enabled = true + ENV['RCT_NEW_ARCH_ENABLED'] = nil + + isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) + + assert_equal("1", isEnabled) + assert_equal([], Pod::UI.collected_warns) + end + + def test_computeNewArchEnabled_whenOnStableAndFlagTrueAndEnv1_returnTrueWithNoWarning + version = '0.73.0' + new_arch_enabled = true + ENV['RCT_NEW_ARCH_ENABLED'] = "1" + + isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) + + assert_equal("1", isEnabled) + assert_equal([], Pod::UI.collected_warns) + end + + def test_computeNewArchEnabled_whenOnStableAndFlagFalseAndEnvNil_returnFalseWithNoWarning + version = '0.73.0' + new_arch_enabled = false + ENV['RCT_NEW_ARCH_ENABLED'] = nil + + isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) + + assert_equal("0", isEnabled) + assert_equal([], Pod::UI.collected_warns) + end + + def test_computeNewArchEnabled_whenOnStableAndFlagFalseAndEnv0_returnFalseWithNoWarning + version = '0.73.0' + new_arch_enabled = false + ENV['RCT_NEW_ARCH_ENABLED'] = "0" + + isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) + + assert_equal("0", isEnabled) + assert_equal([], Pod::UI.collected_warns) + end + + def test_computeNewArchEnabled_whenOn100AndFlagTrueAndEnvNil_returnTrueWithNoWarning version = '1.0.0-prealpha.0' new_arch_enabled = true + ENV['RCT_NEW_ARCH_ENABLED'] = nil isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) assert_equal("1", isEnabled) + assert_equal([], Pod::UI.collected_warns) end - def test_computeNewArchEnabled_whenOn100PrealphaWithDotsAndFlagFalse_returnTrue + def test_computeNewArchEnabled_whenOn100AndFlagTrueAndEnv1_returnTrueWithWarning version = '1.0.0-prealpha.0' - new_arch_enabled = false + new_arch_enabled = true + ENV['RCT_NEW_ARCH_ENABLED'] = "1" isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) assert_equal("1", isEnabled) + assert_equal(["[New Architecture] Starting from version 1.0.0-prealpha the value of the " \ + "RCT_NEW_ARCH_ENABLED flag is ignored and the New Architecture is enabled by default."], Pod::UI.collected_warns) + end + + + def test_computeNewArchEnabled_whenOn100PrealphaWithDotsAndFlagFalseAndEnv0_returnTrueWithWarning + version = '1.0.0-prealpha.0' + new_arch_enabled = false + ENV['RCT_NEW_ARCH_ENABLED'] = "0" + + isEnabled = NewArchitectureHelper.compute_new_arch_enabled(new_arch_enabled, version) + + assert_equal("1", isEnabled) + assert_equal(["[New Architecture] Starting from version 1.0.0-prealpha the value of the " \ + "RCT_NEW_ARCH_ENABLED flag is ignored and the New Architecture is enabled by default."], Pod::UI.collected_warns) end def test_computeNewArchEnabled_whenOn100PrealphaWithDashAndFlagFalse_returnTrue diff --git a/packages/react-native/scripts/cocoapods/new_architecture.rb b/packages/react-native/scripts/cocoapods/new_architecture.rb index 1f7a6f95875..c1a32fa3195 100644 --- a/packages/react-native/scripts/cocoapods/new_architecture.rb +++ b/packages/react-native/scripts/cocoapods/new_architecture.rb @@ -14,6 +14,8 @@ class NewArchitectureHelper @@cplusplus_version = "c++20" + @@NewArchWarningEmitted = false # Used not to spam warnings to the user. + def self.set_clang_cxx_language_standard_if_needed(installer) language_standard = nil @@ -189,6 +191,13 @@ class NewArchitectureHelper # We want to enforce the new architecture for 1.0.0 and greater, # but not for 1000 as version 1000 is currently main. if major > 0 && major < 1000 + if ENV['RCT_NEW_ARCH_ENABLED'] != nil && !@@NewArchWarningEmitted + warning_message = "[New Architecture] Starting from version 1.0.0-prealpha the value of the " \ + "RCT_NEW_ARCH_ENABLED flag is ignored and the New Architecture is enabled by default." + Pod::UI.warn warning_message + @@NewArchWarningEmitted = true + end + return "1" end end