aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java5
-rwxr-xr-xsrc/test/shell/bazel/bazel_apple_test.sh49
2 files changed, 53 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index b4e7c855bb..7c49f81c0e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -133,9 +133,12 @@ public final class IosTest implements RuleConfiguredTargetFactory {
// -bundle_loader causes the code in this test to have access to the symbols in the test rig,
// or more specifically, the flag causes ld to consider the given binary when checking for
// missing symbols.
+ // -rpath @loader_path/Frameworks allows test bundles to load dylibs from the app's
+ // Frameworks directory.
extraLinkArgs = new ExtraLinkArgs(
"-bundle",
- "-bundle_loader", bundleLoader.getExecPathString());
+ "-bundle_loader", bundleLoader.getExecPathString(),
+ "-Xlinker", "-rpath", "-Xlinker", "@loader_path/Frameworks");
extraLinkInputs = ImmutableList.of(bundleLoader);
bundleFormat = ReleaseBundlingSupport.XCTEST_BUNDLE_DIR_FORMAT;
diff --git a/src/test/shell/bazel/bazel_apple_test.sh b/src/test/shell/bazel/bazel_apple_test.sh
index 9f9be2eafb..e2b8d92f36 100755
--- a/src/test/shell/bazel/bazel_apple_test.sh
+++ b/src/test/shell/bazel/bazel_apple_test.sh
@@ -370,4 +370,53 @@ EOF
//ios:swift_lib >$TEST_log 2>&1 || fail "should build"
}
+function test_swift_tests() {
+ make_app
+
+ cat >ios/tests.swift <<EOF
+ import XCTest
+
+class FooTest: XCTestCase {
+ func testFoo() { XCTAssertEqual(2, 3) }
+}
+EOF
+
+ cat >ios/BUILD <<EOF
+load("//tools/build_defs/apple:swift.bzl", "swift_library")
+
+swift_library(name = "SwiftMain",
+ srcs = ["app.swift"])
+
+objc_binary(name = "bin",
+ # TODO(b/28723643): This dummy is only here to trigger the
+ # USES_SWIFT flag on ObjcProvider and should not be necessary.
+ srcs = ['dummy.swift'],
+ deps = [":SwiftMain"])
+
+ios_application(name = "app",
+ binary = ':bin',
+ infoplist = 'App-Info.plist')
+
+swift_library(name = "SwiftTest",
+ srcs = ["tests.swift"])
+
+ios_test(name = "app_test",
+ srcs = ['dummy.swift'],
+ deps = [":SwiftTest"],
+ xctest_app = "app")
+EOF
+
+ bazel build --verbose_failures --ios_sdk_version=$IOS_SDK_VERSION \
+ //ios:app_test >$TEST_log 2>&1 || fail "should build"
+
+ otool -lv bazel-bin/ios/app_test_bin \
+ | grep @executable_path/Frameworks -sq \
+ || fail "expected test binary to contain @executable_path in LC_RPATH"
+
+ otool -lv bazel-bin/ios/app_test_bin \
+ | grep @loader_path/Frameworks -sq \
+ || fail "expected test binary to contain @executable_path in LC_RPATH"
+
+}
+
run_suite "apple_tests"