diff --git a/lit.cfg b/lit.cfg
index 5c2c512..4851623 100644
--- a/lit.cfg
+++ b/lit.cfg
@@ -121,10 +121,13 @@
 # Get the package path.
 package_path = lit_config.params.get("package-path")
 if package_path is None:
+    # If a package wasn't provided, use the current selected toolchain on Darwin.
+    if platform.system() == "Darwin":
+        package_path = os.path.abspath(
+            os.path.join(subprocess.check_output(["xcrun", "--find", "swift"]).strip(), "../../../"))
+if package_path is None:
     lit_config.fatal("'--param package-path=PATH' is required")
 package_path = os.path.abspath(package_path)
-# if platform.system() == "Darwin":
-#     package_path = os.path.join(package_path, "Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
 lit_config.note("testing package: %r" % (package_path,))
 
 # Find the path to FileCheck. We just pick any one out of the build directory.
@@ -177,7 +180,10 @@
 if not os.path.exists(filecheck_path):
     lit_config.fatal("filecheck does not exist!")
 if not os.path.exists(lldb_path):
-    lit_config.fatal("lldb does not exist!")
+    if platform.system() == "Darwin":
+        lldb_path = subprocess.check_output(["xcrun", "--find", "lldb"]).strip()
+    else:
+        lit_config.fatal("lldb does not exist!")
 
 # Define our supported substitutions.
 config.substitutions.append( ('%{not}', os.path.join(srcroot, "not")) )
@@ -186,13 +192,17 @@
 config.substitutions.append( ('%{swiftc}', swiftc_path) )
 config.substitutions.append( ('%{FileCheck}', filecheck_path) )
 
-# Add a substitution for swiftpm build directory. This is useful for
-# running the integration tests locally, for e.g. by changing:
-# %{swift} build -> %{swiftpm_build}/swift-build
+# Add substitutions for swiftpm executables.
 swiftpm_build = lit_config.params.get("swiftpm-build")
 if swiftpm_build is not None:
-    config.substitutions.append( ('%{swiftpm_build}', swiftpm_build) )
     lit_config.note("testing using swiftpm build directory: {}".format(swiftpm_build))
+    config.substitutions.append( ('%{swift-build}',  os.path.join(swiftpm_build, "swift-build")) )
+    config.substitutions.append( ('%{swift-test}',  os.path.join(swiftpm_build, "swift-test")) )
+    config.substitutions.append( ('%{swift-run}',  os.path.join(swiftpm_build, "swift-run")) )
+else:
+    config.substitutions.append( ('%{swift-build}', swift_path + ' build') )
+    config.substitutions.append( ('%{swift-test}', swift_path + ' test') )
+    config.substitutions.append( ('%{swift-run}', swift_path + ' run') )
 
 ###
 
diff --git a/test-complex-xctest-package/SwiftCMixed/Sources/see/see.c b/test-complex-xctest-package/SwiftCMixed/Sources/see/see.c
index 56a6706..29dfbda 100644
--- a/test-complex-xctest-package/SwiftCMixed/Sources/see/see.c
+++ b/test-complex-xctest-package/SwiftCMixed/Sources/see/see.c
@@ -1,5 +1,9 @@
 #include "see.h"
 
+int (^simpleBlock)(int) = ^(int a){
+    return a+1;
+};
+
 int foo() {
-    return 5;
+    return simpleBlock(4);
 }
diff --git a/test-complex-xctest-package/SwiftCMixed/Sources/swifty/swifty.swift b/test-complex-xctest-package/SwiftCMixed/Sources/swifty/swifty.swift
index 8abf1ec..c5ff442 100644
--- a/test-complex-xctest-package/SwiftCMixed/Sources/swifty/swifty.swift
+++ b/test-complex-xctest-package/SwiftCMixed/Sources/swifty/swifty.swift
@@ -1,4 +1,5 @@
 import see
+import Dispatch
 
 func swiftyFoo() -> Int {
     return Int(foo())
diff --git a/test-complex-xctest-package/test-xctest-package.txt b/test-complex-xctest-package/test-xctest-package.txt
index 006acf3..c050f86 100644
--- a/test-complex-xctest-package/test-xctest-package.txt
+++ b/test-complex-xctest-package/test-xctest-package.txt
@@ -4,7 +4,7 @@
 // RUN: rm -rf %t.dir
 // RUN: mkdir -p %t.dir
 // RUN: cp -r %S/SwiftCMixed %t.dir/
-// RUN: %{swift} test --package-path %t.dir/SwiftCMixed -v 2>&1 | tee %t.build-log
+// RUN: %{swift-test} --package-path %t.dir/SwiftCMixed -v 2>&1 | tee %t.build-log
 //
 // Check the build log.
 //
