-
Notifications
You must be signed in to change notification settings - Fork 24.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move Flipper to dedicated flipper.rb
Summary: This Diff moves all the Flipper.rb related setup in the cocoapods scripts to a dedicated script. It also removes the not needed dummy files and add tests for flipper. ## Changelog [iOS][Internal] - Extract Flipper setup in a separate file and add tests Reviewed By: cortinico Differential Revision: D36129808 fbshipit-source-id: 5446203a69b527146c893aa9611e98688e20b778
- Loading branch information
1 parent
0d9e054
commit d96806b
Showing
9 changed files
with
374 additions
and
104 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
# 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 "../flipper.rb" | ||
require_relative "./test_utils/podSpy.rb" | ||
require_relative "./test_utils/InstallerMock.rb" | ||
|
||
class FlipperTests < Test::Unit::TestCase | ||
def setup | ||
podSpy_cleanUp() | ||
end | ||
|
||
# =========================== # | ||
# TEST - Install Dependencies # | ||
# =========================== # | ||
def test_installFlipperDependencies_whenProductionIsFalse_installDependencies | ||
# Act | ||
install_flipper_dependencies(false, '../..') | ||
|
||
# Assert | ||
assert_equal($podInvocationCount, 1) | ||
assert_equal($podInvocation['React-Core/DevSupport'][:path], "../../" ) | ||
end | ||
|
||
def test_installFlipperDependencies_whenProductionIsTrue_skipDependencies | ||
# Act | ||
install_flipper_dependencies(true, '../..') | ||
|
||
# Assert | ||
assert_equal($podInvocationCount, 0) | ||
assert_true($podInvocation.empty?) | ||
end | ||
|
||
# ======================= # | ||
# TEST - Use Flipper Pods # | ||
# ======================= # | ||
|
||
def test_UseFlipperPods_WithDefaultValues_InstallsPods | ||
# Arrange | ||
configurations = ['Debug'] | ||
|
||
# Act | ||
use_flipper_pods() | ||
|
||
# Assert | ||
check_all_flipper_pods($flipper_default_versions, configurations) | ||
# the number of times the `pod` function has been invoked to install a dependency | ||
assert_equal($podInvocationCount, 22) | ||
end | ||
|
||
def test_UseFlipperPods_WithCustomValues_InstallsPods | ||
# Arrange | ||
versions = { | ||
"Flipper" => "1.0.0", | ||
"Flipper-Boost-iOSX" => "1.1.0", | ||
"Flipper-DoubleConversion" => "1.1.1", | ||
"Flipper-Fmt" => "1.2.1", | ||
"Flipper-Folly" => "2.1.1", | ||
"Flipper-Glog" => "0.1.2", | ||
"Flipper-PeerTalk" => "0.0.1", | ||
"Flipper-RSocket" => "0.1.4", | ||
"OpenSSL-Universal" => "2.2.2200", | ||
} | ||
configurations = ['Debug', 'CI'] | ||
|
||
# Act | ||
use_flipper_pods(versions, :configurations => configurations) | ||
|
||
# Assert | ||
check_all_flipper_pods(versions, configurations) | ||
# the number of times the `pod` function has been invoked to install a dependency | ||
assert_equal($podInvocationCount, 22) | ||
end | ||
|
||
# ================= # | ||
# Test Post Install # | ||
# ================= # | ||
|
||
def test_postInstall_updatesThePodCorrectly | ||
# Arrange | ||
installer = prepare_mocked_installer | ||
|
||
# Act | ||
flipper_post_install(installer) | ||
|
||
# Assert | ||
yoga_target = installer.target_with_name("YogaKit") | ||
yoga_target.build_configurations.each do |config| | ||
assert_equal(config.build_settings['SWIFT_VERSION'], '4.1') | ||
end | ||
|
||
reactCore_target = installer.target_with_name("React-Core") | ||
reactCore_target.build_configurations.each do |config| | ||
if config.name == 'Debug' then | ||
assert_equal(config.build_settings['OTHER_CFLAGS'], "$(inherited) -DFB_SONARKIT_ENABLED=1") | ||
else | ||
assert_true(config.build_settings.empty?) | ||
end | ||
end | ||
end | ||
|
||
# ======= # | ||
# HELPERS # | ||
# ======= # | ||
|
||
def check_all_flipper_pods(versions, configurations) | ||
check_flipper_pod('Flipper', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FlipperKitLayoutPlugin', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/SKIOSNetworkPlugin', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FlipperKitUserDefaultsPlugin', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FlipperKitReactPlugin', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/Core', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/CppBridge', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FBCxxFollyDynamicConvert', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FBDefines', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FKPortForwarding', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FlipperKitHighlightOverlay', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FlipperKitLayoutTextSearchable', versions['Flipper'], configurations) | ||
check_flipper_pod('FlipperKit/FlipperKitNetworkPlugin', versions['Flipper'], configurations) | ||
check_flipper_pod('Flipper-Boost-iOSX', versions['Flipper-Boost-iOSX'], configurations) | ||
check_flipper_pod('Flipper-DoubleConversion', versions['Flipper-DoubleConversion'], configurations) | ||
check_flipper_pod('Flipper-Fmt', versions['Flipper-Fmt'], configurations) | ||
check_flipper_pod('Flipper-Folly', versions['Flipper-Folly'], configurations) | ||
check_flipper_pod('Flipper-Glog', versions['Flipper-Glog'], configurations) | ||
check_flipper_pod('Flipper-PeerTalk', versions['Flipper-PeerTalk'], configurations) | ||
check_flipper_pod('Flipper-RSocket', versions['Flipper-RSocket'], configurations) | ||
check_flipper_pod('OpenSSL-Universal', versions['OpenSSL-Universal'], configurations) | ||
end | ||
|
||
def check_flipper_pod(name, expectedVersion, expectedConfigurations) | ||
params = $podInvocation[name] | ||
assert_equal(params[:version], expectedVersion) | ||
assert_equal(params[:configurations], expectedConfigurations) | ||
end | ||
|
||
def prepare_mocked_installer | ||
return InstallerMock.new( | ||
PodsProjectMock.new([ | ||
TargetMock.new( | ||
"YogaKit", | ||
[ | ||
BuildConfigurationMock.new("Debug"), | ||
BuildConfigurationMock.new("Release"), | ||
] | ||
), | ||
TargetMock.new( | ||
"React-Core", | ||
[ | ||
BuildConfigurationMock.new("Debug"), | ||
BuildConfigurationMock.new("Release"), | ||
] | ||
) | ||
] | ||
) | ||
) | ||
end | ||
|
||
end |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# 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. | ||
|
||
|
||
# This file replicate the structure of the Installer used Cocoapods in the post_install step. | ||
# | ||
# To use it, add `require_relative path/to/InstallerMock.rb` into your test file | ||
# | ||
# ## Initialization | ||
# You can create a new mock with the `InstallerMock.new` statement. In this case, you will | ||
# create an empty mock. | ||
# | ||
# It's possible to create complex with the initializer. To create an Installer with a pod, for example, we can | ||
# use the following code: | ||
# | ||
# ```ruby | ||
# installer = Installer.new( | ||
# PodsProjectMock.new([ | ||
# TargetMock.new( | ||
# "MyPod", | ||
# [ | ||
# BuildConfigurationMock.new("Debug"), | ||
# ] | ||
# ) | ||
# ) | ||
# ) | ||
# ``` | ||
# | ||
# ## Assert | ||
# All the properties of these objects are accessible in read mode. | ||
# To access the target's list, for example, you can use the following line: | ||
# | ||
# ```ruby | ||
# targets = installer.pods_project.targets | ||
# ``` | ||
|
||
class InstallerMock | ||
attr_reader :pods_project | ||
|
||
def initialize(pods_project = PodsProjectMock.new) | ||
@pods_project = pods_project | ||
end | ||
|
||
def target_with_name(name) | ||
return @pods_project.targets | ||
.select { |target| target.name == name } | ||
.first | ||
end | ||
end | ||
|
||
class PodsProjectMock | ||
attr_reader :targets | ||
|
||
def initialize(targets = []) | ||
@targets = targets | ||
end | ||
end | ||
|
||
class TargetMock | ||
attr_reader :name | ||
attr_reader :build_configurations | ||
|
||
def initialize(name, build_configurations = []) | ||
@name = name | ||
@build_configurations = build_configurations | ||
end | ||
end | ||
|
||
class BuildConfigurationMock | ||
attr_reader :name | ||
attr_reader :build_settings | ||
|
||
def initialize(name, build_settings = {}) | ||
@name = name | ||
@build_settings = build_settings | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# 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. | ||
|
||
# This file contains the utilities required to mock properly the | ||
# usage of the `pod` function. | ||
# | ||
# To use this file, just add `require_relative "path/to/podSpy.rb"` to your test file. | ||
# | ||
# Remember to invoke `podSpy_cleanUp` in your setup/teardown method, to start from a clean situation. | ||
# | ||
# Whenever your ruby script uses the `pod` function, the invocation is recorded in the `$podInvocation` global | ||
# variable. A $podInvocationCount counter is increased as well. | ||
# | ||
# You can assert against these variables to check: | ||
# * The `pod` function has been invoked X times: `assert_equal($podInvocationCount, X)` | ||
# * A specific pod has been installed: `assert_equal($podInvocation["MyPod"][:version], "15.4.6")` | ||
|
||
|
||
$podInvocation = {} | ||
$podInvocationCount = 0 | ||
|
||
def podSpy_cleanUp | ||
$podInvocation = {} | ||
$podInvocationCount = 0 | ||
end | ||
|
||
def pod(name, version = nil, path: nil, configurations: nil) | ||
$podInvocationCount += 1 | ||
params = {} | ||
if version != nil then params[:version] = version end | ||
if path != nil then params[:path] = path end | ||
if configurations != nil then params[:configurations] = configurations end | ||
$podInvocation[name] = params | ||
end |
Oops, something went wrong.