aboutsummaryrefslogtreecommitdiff
path: root/objectivec/Tests/CocoaPods/run_tests.sh
blob: 20eed96c0b6863c3c3fdc201e5a4c4787551be29 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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