mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/35397 This Diff removes the `HERMES_BUILD_FROM_SOURCE` that was not always propagated to the original script. This lead to some cases where hermesC was built during `pod install` and then removed by the `react_native_post_install`'s `else` branch. Basically, when the Pods are installed the first time, everything run smoothly. Subsequent invocations of `pod install`, to install other dependencies, for example, will incur in this problem because: 1. Cocoapods will see that hermes-engine is already installed 2. the podspec is not executed, given that the pod has been fetched from the cache 3. The env var is not set (given that the podspec is not executed) 4. the main script sees the env var as not set, `ENV['HERMES_BUILD_FROM_SOURCE'] == "1"` return false 5. The `else` branch is executed, and it removes the `hermesc_build_dir` and the `copy Hermes framework` script phase. ## Changelog: [iOS][Changed] - Remove `HERMES_BUILD_FROM_SOURCE` flag Reviewed By: cortinico, dmytrorykun Differential Revision: D41373439 fbshipit-source-id: ea4aafd187c0ca3ff5c0d79f8aeaaa46ad50f499
141 lines
5.0 KiB
Ruby
141 lines
5.0 KiB
Ruby
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
#
|
|
# This source code is licensed under the MIT license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
require "test/unit"
|
|
require_relative "../jsengine.rb"
|
|
require_relative "./test_utils/podSpy.rb"
|
|
require_relative "./test_utils/PodMock.rb"
|
|
require_relative "./test_utils/Open3Mock.rb"
|
|
|
|
class JSEngineTests < Test::Unit::TestCase
|
|
|
|
:react_native_path
|
|
|
|
def setup
|
|
@react_native_path = "../.."
|
|
podSpy_cleanUp()
|
|
end
|
|
|
|
def teardown
|
|
ENV['HERMES_ENGINE_TARBALL_PATH'] = nil
|
|
Open3.reset()
|
|
Pod::Config.reset()
|
|
Pod::UI.reset()
|
|
podSpy_cleanUp()
|
|
ENV['USE_HERMES'] = '1'
|
|
end
|
|
|
|
# =============== #
|
|
# TEST - setupJsc #
|
|
# =============== #
|
|
def test_setupJsc_installsPods
|
|
# Arrange
|
|
fabric_enabled = false
|
|
|
|
# Act
|
|
setup_jsc!(:react_native_path => @react_native_path, :fabric_enabled => fabric_enabled)
|
|
|
|
# Assert
|
|
assert_equal($podInvocationCount, 2)
|
|
assert_equal($podInvocation["React-jsi"][:path], "../../ReactCommon/jsi")
|
|
assert_equal($podInvocation["React-jsc"][:path], "../../ReactCommon/jsi")
|
|
end
|
|
|
|
def test_setupJsc_installsPods_installsFabricSubspecWhenFabricEnabled
|
|
# Arrange
|
|
fabric_enabled = true
|
|
|
|
# Act
|
|
setup_jsc!(:react_native_path => @react_native_path, :fabric_enabled => fabric_enabled)
|
|
|
|
# Assert
|
|
assert_equal($podInvocationCount, 3)
|
|
assert_equal($podInvocation["React-jsi"][:path], "../../ReactCommon/jsi")
|
|
assert_equal($podInvocation["React-jsc"][:path], "../../ReactCommon/jsi")
|
|
assert_equal($podInvocation["React-jsc/Fabric"][:path], "../../ReactCommon/jsi")
|
|
end
|
|
|
|
# ================== #
|
|
# TEST - setupHermes #
|
|
# ================== #
|
|
def test_setupHermes_whenHermesScriptFails_abort
|
|
# Arrange
|
|
fabric_enabled = false
|
|
Pod::Config.instance.installation_root.set_installation_root("Pods/")
|
|
Open3.set_returned_status(1)
|
|
Open3.set_returned_text("This test\nshould fail")
|
|
|
|
# Act
|
|
assert_raises {
|
|
setup_hermes!(:react_native_path => @react_native_path, :fabric_enabled => fabric_enabled)
|
|
}
|
|
|
|
# Assert
|
|
assert_equal(Open3.collected_commands, ["node scripts/hermes/prepare-hermes-for-build"])
|
|
assert_equal(Open3.collected_dirs, ["Pods/../.."])
|
|
assert_equal(Pod::UI.collected_infoes, ["This test", "should fail"])
|
|
assert_equal($podInvocationCount, 0)
|
|
assert_equal($podInvocation, {})
|
|
end
|
|
|
|
def test_setupHermes_whenHermesScriptSucceeds_installsPods
|
|
# Arrange
|
|
fabric_enabled = false
|
|
Pod::Config.instance.installation_root.set_installation_root("Pods/")
|
|
Open3.set_returned_status(0)
|
|
Open3.set_returned_text("This is\nthe text\nreturned by\nprepare-hermes-for-build")
|
|
|
|
# Act
|
|
setup_hermes!(:react_native_path => @react_native_path, :fabric_enabled => fabric_enabled)
|
|
|
|
# Assert
|
|
assert_equal(Open3.collected_commands, ["node scripts/hermes/prepare-hermes-for-build"])
|
|
assert_equal(Open3.collected_dirs, ["Pods/../.."])
|
|
assert_equal(Pod::UI.collected_infoes, [
|
|
"This is",
|
|
"the text",
|
|
"returned by",
|
|
"prepare-hermes-for-build",
|
|
])
|
|
assert_equal($podInvocationCount, 4)
|
|
assert_equal($podInvocation["React-jsi"][:path], "../../ReactCommon/jsi")
|
|
assert_equal($podInvocation["React-hermes"][:path], "../../ReactCommon/hermes")
|
|
assert_equal($podInvocation["libevent"][:version], "~> 2.1.12")
|
|
assert_equal($podInvocation["hermes-engine"][:podspec], "../../sdks/hermes/hermes-engine.podspec")
|
|
end
|
|
|
|
def test_setupHermes_installsPods_installsFabricSubspecWhenFabricEnabled
|
|
# Arrange
|
|
fabric_enabled = true
|
|
|
|
# Act
|
|
setup_hermes!(:react_native_path => @react_native_path, :fabric_enabled => fabric_enabled)
|
|
|
|
# Assert
|
|
assert_equal($podInvocationCount, 4)
|
|
assert_equal($podInvocation["React-jsi"][:path], "../../ReactCommon/jsi")
|
|
assert_equal($podInvocation["hermes-engine"][:podspec], "../../sdks/hermes/hermes-engine.podspec")
|
|
assert_equal($podInvocation["React-hermes"][:path], "../../ReactCommon/hermes")
|
|
assert_equal($podInvocation["libevent"][:version], "~> 2.1.12")
|
|
end
|
|
|
|
# ================================= #
|
|
# TEST - isBuildingHermesFromSource #
|
|
# ================================= #
|
|
def test_isBuildingHermesFromSource_whenTarballIsNilAndVersionIsNotNightly_returnTrue
|
|
assert_true(is_building_hermes_from_source("1000.0.0"))
|
|
end
|
|
|
|
def test_isBuildingHermesFromSource_whenTarballIsNotNil_returnFalse
|
|
ENV['HERMES_ENGINE_TARBALL_PATH'] = "~/Downloads/hermes-ios-debug.tar.gz"
|
|
assert_false(is_building_hermes_from_source("1000.0.0"))
|
|
end
|
|
|
|
def test_isBuildingHermesFromSource_whenIsNigthly_returnsFalse
|
|
assert_false(is_building_hermes_from_source("0.0.0-"))
|
|
end
|
|
|
|
end
|