mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
85 lines
No EOL
2.7 KiB
Bash
Executable file
85 lines
No EOL
2.7 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Script to run iOS tests with code coverage using xcodebuild
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}Running VibeTunnel iOS Tests with Coverage${NC}"
|
|
|
|
# Check if we're in the right directory
|
|
if [ ! -f "VibeTunnel-iOS.xcodeproj/project.pbxproj" ]; then
|
|
echo -e "${RED}Error: Must run from ios/ directory${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Clean build directory
|
|
echo -e "${YELLOW}Cleaning build directory...${NC}"
|
|
rm -rf build
|
|
|
|
# Determine the simulator to use
|
|
DEVICE_TYPE="iPhone 15"
|
|
OS_VERSION="17.5"
|
|
SIMULATOR_NAME="${DEVICE_TYPE} (${OS_VERSION})"
|
|
|
|
# Check if simulator exists, if not use the latest available
|
|
if ! xcrun simctl list devices | grep -q "$SIMULATOR_NAME"; then
|
|
echo -e "${YELLOW}Simulator '$SIMULATOR_NAME' not found, using latest available iPhone simulator${NC}"
|
|
SIMULATOR_ID=$(xcrun simctl list devices available | grep "iPhone" | head -1 | awk -F '[()]' '{print $(NF-1)}')
|
|
else
|
|
SIMULATOR_ID=$(xcrun simctl list devices | grep "$SIMULATOR_NAME" | head -1 | awk -F '[()]' '{print $(NF-1)}')
|
|
fi
|
|
|
|
echo -e "${GREEN}Using simulator: $SIMULATOR_ID${NC}"
|
|
|
|
# Build and test with coverage
|
|
echo -e "${YELLOW}Building and testing...${NC}"
|
|
xcodebuild test \
|
|
-scheme VibeTunnel-iOS \
|
|
-project VibeTunnel-iOS.xcodeproj \
|
|
-destination "platform=iOS Simulator,id=$SIMULATOR_ID" \
|
|
-enableCodeCoverage YES \
|
|
-derivedDataPath build \
|
|
-resultBundlePath build/TestResults.xcresult \
|
|
| xcbeautify
|
|
|
|
# Check if tests passed
|
|
if [ ${PIPESTATUS[0]} -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Tests passed!${NC}"
|
|
else
|
|
echo -e "${RED}✗ Tests failed!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Extract coverage data
|
|
echo -e "${YELLOW}Extracting coverage data...${NC}"
|
|
xcrun xccov view --report --json build/TestResults.xcresult > build/coverage.json
|
|
|
|
# Calculate coverage percentage
|
|
COVERAGE=$(cat build/coverage.json | jq -r '.lineCoverage' | awk '{printf "%.1f", $1 * 100}')
|
|
echo -e "${GREEN}Line Coverage: ${COVERAGE}%${NC}"
|
|
|
|
# Generate human-readable coverage report
|
|
echo -e "${YELLOW}Generating coverage report...${NC}"
|
|
xcrun xccov view --report build/TestResults.xcresult > build/coverage.txt
|
|
|
|
# Show coverage summary
|
|
echo -e "\n${GREEN}Coverage Summary:${NC}"
|
|
xcrun xccov view --report build/TestResults.xcresult | head -20
|
|
|
|
# Optional: Open coverage report in Xcode
|
|
echo -e "\n${YELLOW}To view detailed coverage in Xcode, run:${NC}"
|
|
echo "open build/TestResults.xcresult"
|
|
|
|
# Check if coverage meets threshold (75% as per CI)
|
|
THRESHOLD=75
|
|
if (( $(echo "$COVERAGE < $THRESHOLD" | bc -l) )); then
|
|
echo -e "\n${RED}⚠️ Coverage ${COVERAGE}% is below threshold of ${THRESHOLD}%${NC}"
|
|
exit 1
|
|
else
|
|
echo -e "\n${GREEN}✓ Coverage ${COVERAGE}% meets threshold of ${THRESHOLD}%${NC}"
|
|
fi |