this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 345 lines 10 kB view raw
1#!/bin/bash 2 3# AXe Test Runner Script 4# Automates building AXe executable, playground app, and running tests 5 6set -e # Exit on any error 7 8# Colors for output 9RED='\033[0;31m' 10GREEN='\033[0;32m' 11YELLOW='\033[1;33m' 12BLUE='\033[0;34m' 13NC='\033[0m' # No Color 14 15# Configuration 16SIMULATOR_NAME="iPhone 17" 17SIMULATOR_UDID="7C3FA420-5440-4A08-8A66-A7E83F5EADE1" 18PLAYGROUND_PROJECT="AxePlaygroundApp/AxePlayground.xcodeproj" 19PLAYGROUND_SCHEME="AxePlayground" 20BUNDLE_ID="com.cameroncooke.AxePlayground" 21 22# Print colored messages 23print_info() { 24 echo -e "${BLUE}ℹ️ $1${NC}" 25} 26 27print_success() { 28 echo -e "${GREEN}$1${NC}" 29} 30 31print_warning() { 32 echo -e "${YELLOW}⚠️ $1${NC}" 33} 34 35print_error() { 36 echo -e "${RED}$1${NC}" 37} 38 39print_header() { 40 echo -e "\n${BLUE}================================================${NC}" 41 echo -e "${BLUE}🎯 $1${NC}" 42 echo -e "${BLUE}================================================${NC}\n" 43} 44 45# Function to show usage 46show_usage() { 47 echo "Usage: $0 [OPTIONS] [TEST_FILTER]" 48 echo "" 49 echo "Options:" 50 echo " -h, --help Show this help message" 51 echo " -b, --build-only Only build AXe and playground app (skip tests)" 52 echo " -t, --tests-only Only run tests (skip building)" 53 echo " -c, --clean Clean build before building" 54 echo " -s, --sequential Run tests sequentially (--no-parallel)" 55 echo " -v, --verbose Verbose output" 56 echo "" 57 echo "Test Filters (optional):" 58 echo " SwipeTests Run only swipe tests" 59 echo " TapTests Run only tap tests" 60 echo " KeyTests Run only key tests" 61 echo " TouchTests Run only touch tests" 62 echo " TypeTests Run only type tests" 63 echo " ButtonTests Run only button tests" 64 echo " GestureTests Run only gesture tests" 65 echo " ListSimulatorsTests Run only list simulators tests" 66 echo "" 67 echo "Examples:" 68 echo " $0 # Build everything and run all tests" 69 echo " $0 SwipeTests # Build everything and run only swipe tests" 70 echo " $0 -t SwipeTests # Skip building, run only swipe tests" 71 echo " $0 -b # Only build, skip tests" 72 echo " $0 -c # Clean build and run all tests" 73} 74 75# Parse command line arguments 76BUILD_ONLY=false 77TESTS_ONLY=false 78CLEAN_BUILD=false 79SEQUENTIAL=true 80VERBOSE=false 81TEST_FILTER="" 82 83while [[ $# -gt 0 ]]; do 84 case $1 in 85 -h|--help) 86 show_usage 87 exit 0 88 ;; 89 -b|--build-only) 90 BUILD_ONLY=true 91 shift 92 ;; 93 -t|--tests-only) 94 TESTS_ONLY=true 95 shift 96 ;; 97 -c|--clean) 98 CLEAN_BUILD=true 99 shift 100 ;; 101 -s|--sequential) 102 SEQUENTIAL=true 103 shift 104 ;; 105 -v|--verbose) 106 VERBOSE=true 107 shift 108 ;; 109 SwipeTests|TapTests|KeyTests|TouchTests|TypeTests|ButtonTests|GestureTests|ListSimulatorsTests) 110 TEST_FILTER="$1" 111 shift 112 ;; 113 *) 114 print_error "Unknown option: $1" 115 show_usage 116 exit 1 117 ;; 118 esac 119done 120 121# Function to check prerequisites 122check_prerequisites() { 123 print_header "Checking Prerequisites" 124 125 # Check if we're in the right directory 126 if [[ ! -f "Package.swift" ]]; then 127 print_error "Package.swift not found. Please run this script from the AXe project root." 128 exit 1 129 fi 130 131 # Check if Xcode is available 132 if ! command -v xcodebuild &> /dev/null; then 133 print_error "xcodebuild not found. Please install Xcode." 134 exit 1 135 fi 136 137 # Check if Swift is available 138 if ! command -v swift &> /dev/null; then 139 print_error "swift not found. Please install Swift." 140 exit 1 141 fi 142 143 print_success "All prerequisites satisfied" 144} 145 146# Function to boot simulator 147boot_simulator() { 148 print_header "Setting Up Simulator" 149 150 print_info "Checking simulator status..." 151 SIMULATOR_STATUS=$(xcrun simctl list devices | grep "$SIMULATOR_UDID" | grep -o "Booted\|Shutdown" || echo "NotFound") 152 153 if [[ "$SIMULATOR_STATUS" == "NotFound" ]]; then 154 print_error "Simulator with UDID $SIMULATOR_UDID not found" 155 print_info "Available simulators:" 156 xcrun simctl list devices | grep "iPhone" 157 exit 1 158 fi 159 160 if [[ "$SIMULATOR_STATUS" != "Booted" ]]; then 161 print_info "Booting simulator $SIMULATOR_NAME..." 162 xcrun simctl boot "$SIMULATOR_UDID" 163 sleep 3 164 print_success "Simulator booted" 165 else 166 print_success "Simulator already booted" 167 fi 168} 169 170# Function to clean build 171clean_build() { 172 if [[ "$CLEAN_BUILD" == true ]]; then 173 print_header "Cleaning Build" 174 175 print_info "Cleaning Swift build..." 176 swift package clean 177 178 print_info "Cleaning Xcode build..." 179 xcodebuild clean -project "$PLAYGROUND_PROJECT" -scheme "$PLAYGROUND_SCHEME" -destination "id=$SIMULATOR_UDID" 180 181 print_success "Build cleaned" 182 fi 183} 184 185# Function to build AXe executable 186build_axe() { 187 print_header "Building AXe Executable" 188 189 print_info "Building AXe CLI tool..." 190 if [[ "$VERBOSE" == true ]]; then 191 swift build 192 else 193 swift build > /dev/null 2>&1 194 fi 195 196 # Verify the executable exists 197 if [[ -f ".build/arm64-apple-macosx/debug/axe" ]]; then 198 print_success "AXe executable built successfully" 199 print_info "Location: .build/arm64-apple-macosx/debug/axe" 200 else 201 print_error "Failed to build AXe executable" 202 exit 1 203 fi 204} 205 206# Function to build and install playground app 207build_playground_app() { 208 print_header "Building and Installing Playground App" 209 210 # Terminate existing app instance 211 print_info "Terminating existing app instance..." 212 xcrun simctl terminate "$SIMULATOR_UDID" "$BUNDLE_ID" 2>/dev/null || true 213 214 # Build the app (not build-for-testing since this is a regular app) 215 print_info "Building AxePlayground app..." 216 if [[ "$VERBOSE" == true ]]; then 217 xcodebuild build \ 218 -project "$PLAYGROUND_PROJECT" \ 219 -scheme "$PLAYGROUND_SCHEME" \ 220 -destination "id=$SIMULATOR_UDID" 221 else 222 xcodebuild build \ 223 -project "$PLAYGROUND_PROJECT" \ 224 -scheme "$PLAYGROUND_SCHEME" \ 225 -destination "id=$SIMULATOR_UDID" \ 226 -quiet > /dev/null 2>&1 227 fi 228 229 # Find the built app path using TARGET_BUILD_DIR + FULL_PRODUCT_NAME (more semantically correct) 230 print_info "Getting app bundle path..." 231 BUILD_SETTINGS=$(xcodebuild -project "$PLAYGROUND_PROJECT" -scheme "$PLAYGROUND_SCHEME" -destination "id=$SIMULATOR_UDID" -showBuildSettings) 232 TARGET_BUILD_DIR=$(echo "$BUILD_SETTINGS" | grep "TARGET_BUILD_DIR" | head -1 | sed 's/.*= //') 233 FULL_PRODUCT_NAME=$(echo "$BUILD_SETTINGS" | grep "FULL_PRODUCT_NAME" | head -1 | sed 's/.*= //') 234 APP_PATH="$TARGET_BUILD_DIR/$FULL_PRODUCT_NAME" 235 236 if [[ -z "$APP_PATH" || ! -d "$APP_PATH" ]]; then 237 print_error "Built app not found at: $APP_PATH" 238 print_info "TARGET_BUILD_DIR: $TARGET_BUILD_DIR" 239 print_info "FULL_PRODUCT_NAME: $FULL_PRODUCT_NAME" 240 exit 1 241 fi 242 243 # Install the app 244 print_info "Installing AxePlayground app on simulator..." 245 if [[ "$VERBOSE" == true ]]; then 246 xcrun simctl install "$SIMULATOR_UDID" "$APP_PATH" 247 else 248 xcrun simctl install "$SIMULATOR_UDID" "$APP_PATH" > /dev/null 2>&1 249 fi 250 251 print_success "Playground app built and installed successfully" 252 print_info "App path: $APP_PATH" 253} 254 255# Function to run tests 256run_tests() { 257 print_header "Running Tests" 258 259 # Set up environment 260 export SIMULATOR_UDID="$SIMULATOR_UDID" 261 262 # Build test command 263 TEST_CMD="swift test" 264 265 if [[ -n "$TEST_FILTER" ]]; then 266 TEST_CMD="$TEST_CMD --filter $TEST_FILTER" 267 print_info "Running test filter: $TEST_FILTER" 268 else 269 print_info "Running all tests" 270 fi 271 272 if [[ "$SEQUENTIAL" == true ]]; then 273 TEST_CMD="$TEST_CMD --no-parallel" 274 print_info "Running tests sequentially" 275 fi 276 277 if [[ "$VERBOSE" == true ]]; then 278 TEST_CMD="$TEST_CMD --verbose" 279 fi 280 281 print_info "Test command: $TEST_CMD" 282 print_info "Environment: SIMULATOR_UDID=$SIMULATOR_UDID" 283 284 # Run the tests 285 echo "" 286 if eval "$TEST_CMD"; then 287 print_success "All tests passed! 🎉" 288 else 289 print_error "Some tests failed! 😞" 290 exit 1 291 fi 292} 293 294# Function to show summary 295show_summary() { 296 print_header "Summary" 297 298 if [[ "$BUILD_ONLY" == true ]]; then 299 print_success "Build completed successfully" 300 print_info "AXe executable: .build/arm64-apple-macosx/debug/axe" 301 print_info "Playground app installed on: $SIMULATOR_NAME ($SIMULATOR_UDID)" 302 elif [[ "$TESTS_ONLY" == true ]]; then 303 if [[ -n "$TEST_FILTER" ]]; then 304 print_success "Test suite '$TEST_FILTER' completed successfully" 305 else 306 print_success "All test suites completed successfully" 307 fi 308 else 309 print_success "Build and test cycle completed successfully" 310 print_info "AXe executable: .build/arm64-apple-macosx/debug/axe" 311 print_info "Playground app: Installed and tested on $SIMULATOR_NAME" 312 if [[ -n "$TEST_FILTER" ]]; then 313 print_info "Test suite: $TEST_FILTER" 314 else 315 print_info "Test coverage: All test suites" 316 fi 317 fi 318} 319 320# Main execution 321main() { 322 print_header "AXe Test Runner" 323 print_info "Starting automated build and test cycle..." 324 325 # Always check prerequisites 326 check_prerequisites 327 328 # Always boot simulator (needed for both building and testing) 329 boot_simulator 330 331 if [[ "$TESTS_ONLY" != true ]]; then 332 clean_build 333 build_axe 334 build_playground_app 335 fi 336 337 if [[ "$BUILD_ONLY" != true ]]; then 338 run_tests 339 fi 340 341 show_summary 342} 343 344# Run main function 345main "$@"