diff options
Diffstat (limited to 'objectivec/Tests/CocoaPods/run_tests.sh')
-rwxr-xr-x | objectivec/Tests/CocoaPods/run_tests.sh | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/objectivec/Tests/CocoaPods/run_tests.sh b/objectivec/Tests/CocoaPods/run_tests.sh new file mode 100755 index 00000000..20eed96c --- /dev/null +++ b/objectivec/Tests/CocoaPods/run_tests.sh @@ -0,0 +1,126 @@ +#!/bin/bash +# +# Helper to run the pods tests. + +set -eu + +readonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")") + +printUsage() { + NAME=$(basename "${0}") + cat << EOF +usage: ${NAME} [OPTIONS] + +This script runs some test to check the CocoaPods integration. + +OPTIONS: + + General: + + -h, --help + Show this message + --skip-static + Skip the static based pods tests. + --skip-framework + Skip the framework based pods tests. + --skip-ios + Skip the iOS pods tests. + --skip-osx + Skip the OS X pods tests. + +EOF +} + +TEST_MODES=( "yes" "no" ) +TEST_NAMES=( "iOSCocoaPodsTester" "OSXCocoaPodsTester" ) +while [[ $# != 0 ]]; do + case "${1}" in + -h | --help ) + printUsage + exit 0 + ;; + --skip-static ) + TEST_MODES=(${TEST_MODES[@]/no}) + ;; + --skip-framework ) + TEST_MODES=(${TEST_MODES[@]/yes}) + ;; + --skip-ios ) + TEST_NAMES=(${TEST_NAMES[@]/iOSCocoaPodsTester}) + ;; + --skip-osx ) + TEST_NAMES=(${TEST_NAMES[@]/OSXCocoaPodsTester}) + ;; + -*) + echo "ERROR: Unknown option: ${1}" 1>&2 + printUsage + exit 1 + ;; + *) + echo "ERROR: Unknown argument: ${1}" 1>&2 + printUsage + exit 1 + ;; + esac + shift +done + +# Sanity check. +if [[ "${#TEST_NAMES[@]}" == 0 ]] ; then + echo "ERROR: Need to run at least iOS or OS X tests." 1>&2 + exit 2 +fi +if [[ "${#TEST_MODES[@]}" == 0 ]] ; then + echo "ERROR: Need to run at least static or frameworks tests." 1>&2 + exit 2 +fi + +header() { + echo "" + echo "========================================================================" + echo " ${@}" + echo "========================================================================" + echo "" +} + +# Cleanup hook for do_test, assumes directory is correct. +cleanup() { + local TEST_NAME="$1" + + echo "Cleaning up..." + + # Generally don't let things fail, and eat common stdout, but let stderr show + # incase something does hiccup. + xcodebuild -workspace "${TEST_NAME}.xcworkspace" -scheme "${TEST_NAME}" clean > /dev/null || true + pod deintegrate > /dev/null || true + # Delete the files left after pod deintegrate + rm -f Podfile.lock || true + rm -rf "${TEST_NAME}.xcworkspace" || true + git checkout -- "${TEST_NAME}.xcodeproj" || true +} + +do_test() { + local TEST_NAME="$1" + local USE_FRAMEWORKS_VALUE="$2" + + header "${TEST_NAME}" - USE_FRAMEWORKS: "${USE_FRAMEWORKS_VALUE}" + cd "${ScriptDir}/${TEST_NAME}" + + # Hook in cleanup for any failures. + trap "cleanup ${TEST_NAME}" EXIT + + # Invoke pod and then xcodebuild, but catch the results so we can cleanup. + USE_FRAMEWORKS="${USE_FRAMEWORKS_VALUE}" pod install + xcodebuild -workspace "${TEST_NAME}.xcworkspace" -scheme "${TEST_NAME}" build + + # Clear the hook and manually run cleanup. + trap - EXIT + cleanup "${TEST_NAME}" +} + +# Run the tests. +for TEST_NAME in "${TEST_NAMES[@]}" ; do + for TEST_MODE in "${TEST_MODES[@]}" ; do + do_test "${TEST_NAME}" "${TEST_MODE}" + done +done |