Skip to content

Commit

Permalink
Migrate apple_static_library-depending shell test to Starlark.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 456845433
(cherry picked from commit c462b1f)
  • Loading branch information
nglevin authored and keith committed Jul 9, 2022
1 parent 3c41110 commit f5cad48
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 180 deletions.
50 changes: 50 additions & 0 deletions test/starlark_tests/targets_under_test/tvos/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ load(
load(
"//apple:apple.bzl",
"apple_dynamic_framework_import",
"apple_static_framework_import",
)
load("//test/starlark_tests:common.bzl", "FIXTURE_TAGS")
load(
Expand Down Expand Up @@ -174,6 +175,21 @@ tvos_application(
],
)

tvos_application(
name = "app_with_runtime_framework_using_import_static_lib_dep",
bundle_id = "com.google.example",
frameworks = [":fmwk_with_imported_static_framework"],
infoplists = [
"//test/starlark_tests/resources:Info.plist",
],
ipa_post_processor = "//test/starlark_tests/targets_under_test/apple:ipa_post_processor_verify_codesigning",
minimum_os_version = "9.0",
tags = FIXTURE_TAGS,
deps = [
"//test/starlark_tests/resources:objc_main_lib",
],
)

tvos_framework(
name = "fmwk",
bundle_id = "com.google.example.framework",
Expand Down Expand Up @@ -261,6 +277,19 @@ tvos_framework(
],
)

tvos_framework(
name = "fmwk_with_imported_static_framework",
bundle_id = "com.google.example.framework",
infoplists = [
"//test/starlark_tests/resources:Info.plist",
],
minimum_os_version = "9.0",
tags = FIXTURE_TAGS,
deps = [
":static_fmwk_depending_lib",
],
)

# ---------------------------------------------------------------------------------------

objc_library(
Expand All @@ -287,6 +316,27 @@ generate_import_framework(

# ---------------------------------------------------------------------------------------

objc_library(
name = "static_fmwk_depending_lib",
srcs = ["@bazel_tools//tools/objc:dummy.c"],
deps = [":imported_tvos_static_fmwk"],
)

apple_static_framework_import(
name = "imported_tvos_static_fmwk",
framework_imports = [":generated_tvos_static_fmwk"],
)

generate_import_framework(
name = "generated_tvos_static_fmwk",
archs = ["x86_64"],
libtype = "static",
minimum_os_version = "9.0",
sdk = "appletvsimulator",
)

# ---------------------------------------------------------------------------------------

tvos_static_framework(
name = "static_fmwk",
hdrs = [
Expand Down
32 changes: 32 additions & 0 deletions test/starlark_tests/tvos_framework_tests.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
load(
":rules/common_verification_tests.bzl",
"archive_contents_test",
"binary_contents_test",
)
load(
":rules/infoplist_contents_test.bzl",
Expand Down Expand Up @@ -135,6 +136,37 @@ def tvos_framework_test_suite(name):
tags = [name],
)

# Test that if a tvos_framework target depends on a prebuilt static library (i.e.,
# apple_static_framework_import), that the static library is defined in the tvos_framework.
binary_contents_test(
name = "{}_defines_static_library_impl".format(name),
build_type = "simulator",
binary_test_architecture = "x86_64",
binary_test_file = "$BUNDLE_ROOT/Frameworks/fmwk_with_imported_static_framework.framework/fmwk_with_imported_static_framework",
binary_contains_symbols = [
"-[SharedClass doSomethingShared]",
"_OBJC_CLASS_$_SharedClass",
],
target_under_test = "//test/starlark_tests/targets_under_test/tvos:app_with_runtime_framework_using_import_static_lib_dep",
tags = [name],
)

# Test that if a tvos_framework target depends on a prebuilt static library (i.e.,
# apple_static_framework_import), that the static library is NOT defined in its associated
# tvos_application.
binary_contents_test(
name = "{}_associated_tvos_application_does_not_define_static_library_impl".format(name),
build_type = "simulator",
binary_test_architecture = "x86_64",
binary_test_file = "$BINARY",
binary_not_contains_symbols = [
"-[SharedClass doSomethingShared]",
"_OBJC_CLASS_$_SharedClass",
],
target_under_test = "//test/starlark_tests/targets_under_test/tvos:app_with_runtime_framework_using_import_static_lib_dep",
tags = [name],
)

native.test_suite(
name = name,
tags = [name],
Expand Down
180 changes: 0 additions & 180 deletions test/tvos_framework_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1575,184 +1575,4 @@ EOF
"Payload/app.app/Frameworks/framework.framework/framework" "doStuff"
}

# Test that if a tvos_framework target depends on a prebuilt static library
# framework (i.e., apple_dynamic_framework_import), that the inner framework is
# propagated up to the application and not nested in the outer framework.
function test_framework_depends_on_prebuilt_static_apple_framework_import() {
cat > app/BUILD <<EOF
load("@build_bazel_rules_apple//apple:tvos.bzl",
"tvos_application",
"tvos_framework"
)
load("@build_bazel_rules_apple//apple:apple.bzl",
"apple_static_framework_import",
)
objc_library(
name = "lib",
srcs = ["main.m"],
deps = [
":inner_framework",
],
)
tvos_application(
name = "app",
bundle_id = "my.bundle.id",
frameworks = [":outer_framework"],
infoplists = ["Info-App.plist"],
minimum_os_version = "9.0",
provisioning_profile = "@build_bazel_rules_apple//test/testdata/provisioning:integration_testing_tvos.mobileprovision",
deps = [
":lib",
],
)
tvos_framework(
name = "outer_framework",
hdrs = ["OuterFramework.h"],
bundle_id = "my.bundle.id.framework",
infoplists = ["Info-Framework.plist"],
# Verify that deduping happens even for different minimum OS from the app.
minimum_os_version = "10.0",
deps = [
":outer_framework_lib",
],
)
objc_library(
name = "outer_framework_lib",
srcs = [
"OuterFramework.h",
"OuterFramework.m",
],
deps = [
":inner_framework",
],
alwayslink = 1,
)
genrule(
name = "gen_static_framework",
srcs = [":inner_framework_pregen"],
outs = ["InnerFramework.framework/InnerFramework"],
cmd = "cp \$< \$@",
)
apple_static_framework_import(
name = "inner_framework",
framework_imports = glob(["InnerFramework.framework/**"]) + ["InnerFramework.framework/InnerFramework"],
)
EOF

mkdir -p app/InnerFramework.framework
mkdir -p app/InnerFramework.framework/Headers

cat > app/InnerFramework.framework/Info.plist <<EOF
Dummy plist
EOF

cat > app/InnerFramework.framework/Headers/InnerFramework.h <<EOF
#ifndef INNER_FRAMEWORK_INNER_FRAMEWORK_H_
#define INNER_FRAMEWORK_INNER_FRAMEWORK_H_
void doStuff();
#endif // INNER_FRAMEWORK_INNER_FRAMEWORK_H_
EOF
cp app/InnerFramework.framework/Headers/InnerFramework.h app/InnerFramework.h

cat > app/Info-Framework.plist <<EOF
{
CFBundleIdentifier = "\${PRODUCT_BUNDLE_IDENTIFIER}";
CFBundleName = "\${PRODUCT_NAME}";
CFBundlePackageType = "FMWK";
CFBundleShortVersionString = "1.0";
CFBundleVersion = "1.0";
}
EOF
cat > app/Info-App.plist <<EOF
{
CFBundleIdentifier = "\${PRODUCT_BUNDLE_IDENTIFIER}";
CFBundleName = "\${PRODUCT_NAME}";
CFBundlePackageType = "APPL";
CFBundleShortVersionString = "1.0";
CFBundleVersion = "1.0";
}
EOF

cat > app/main.m <<EOF
#import <InnerFramework/InnerFramework.h>
int main(int argc, char **argv) {
doStuff();
return 0;
}
EOF

cat > app/OuterFramework.h <<EOF
#ifndef OUTER_FRAMEWORK_OUTER_FRAMEWORK_H_
#define OUTER_FRAMEWORK_OUTER_FRAMEWORK_H_
void outer();
#endif // OUTER_FRAMEWORK_OUTER_FRAMEWORK_H_
EOF

cat > app/OuterFramework.m <<EOF
#import <Foundation/Foundation.h>
#import <InnerFramework/InnerFramework.h>
void outer() {
doStuff();
NSLog(@"Outer framework method called\n");
}
EOF

mkdir -p staticlib

cat > staticlib/BUILD <<EOF
load("@build_bazel_rules_apple//apple:apple_static_library.bzl", "apple_static_library")
genrule(
name = "gen_staticlib",
srcs = [":dostuff_staticlib_lipo.a"],
outs = ["staticlib.a"],
cmd = "cp \$< \$@",
)
apple_static_library(
name = "dostuff_staticlib",
minimum_os_version = "9.0",
platform_type = "tvos",
deps = [":dostuff_lib"],
)
objc_library(
name = "dostuff_lib",
srcs = [":dostuff.m"],
)
EOF

cat > staticlib/dostuff.m <<EOF
#import <Foundation/Foundation.h>
void doStuff() {
NSLog(@"doStuff called\n");
}
EOF

do_build tvos //staticlib:gen_staticlib || fail "Should build static lib"

cp test-bin/staticlib/staticlib.a \
app/inner_framework_pregen

do_build tvos //app:app -s || fail "Should build"

assert_binary_contains tvos "test-bin/app/app.ipa" \
"Payload/app.app/Frameworks/outer_framework.framework/outer_framework" "doStuff"
assert_binary_not_contains tvos "test-bin/app/app.ipa" \
"Payload/app.app/app" "doStuff"
}

run_suite "tvos_framework bundling tests"

0 comments on commit f5cad48

Please sign in to comment.