#!/bin/sh
set +e
mocha_args=""
ios_only=false
ios7_only=false
android_only=false
all_tests=true
xcode_path="$(xcode-select -print-path | sed s/\\/Contents\\/Developer//g)"
did_switch_xcode=false

function join_testfiles {
    testtype=$1
    shift
    outfile=$1
    rm -rf $outfile
    shift
    indirs=$@
    out=""
    touch $outfile
    echo "\"use strict\";\n\n" >> $outfile
    for indir in $indirs; do
        for infile in ./test/functional/$indir/*.js; do
            basefile=$(basename $infile | sed s/\.js//g)
            pre="describe('$testtype:$indir/$basefile', function() {"
            post="});"
            echo "Collating $infile..."
            echo "$pre\n" >> $outfile
            cat $infile >> $outfile
            echo "\n$post\n" >> $outfile
        done
    done
}

for arg in "$@"; do
    if [[ "$arg" = "--ios" ]]; then
        ios_only=true
        all_tests=false
    elif [[ "$arg" = "--android" ]]; then
        android_only=true
        all_tests=false
    elif [[ "$arg" = "--ios7" ]]; then
        ios7_only=true
        all_tests=false
    elif [[ "$arg" =~ " " ]]; then
        mocha_args="$mocha_args \"$arg\""
    else
        mocha_args="$mocha_args $arg"
    fi
done

appium_mocha="mocha -t 60000 -R spec $mocha_args"

mkdir -p ./test/functional/_joined

if $ios_only || $all_tests; then
    echo "RUNNING IOS 6.1 TESTS"
    echo "---------------------"
    ios_testfile="./test/functional/_joined/ios.js"
    ios_dirs="prefs safari testapp uicatalog webview"
    join_testfiles ios6.1 $ios_testfile $ios_dirs
    if test -d /Applications/Xcode-6.1.app; then
        echo "Found Xcode for iOS 6.1, switching to it"
        sudo xcode-select -switch /Applications/Xcode-6.1.app
        did_switch_xcode=true
    else
        echo "Did not find /Applications/Xcode-6.1.app, using default"
    fi
    $appium_mocha $ios_testfile
fi

if $ios7_only || $all_tests; then
    echo "RUNNING IOS 7.0 TESTS"
    echo "---------------------"
    ios7_testfile="./test/functional/_joined/ios7.js"
    ios7_dirs="testapp uicatalog webview"
    join_testfiles ios7 $ios7_testfile $ios7_dirs
    if test -d /Applications/Xcode-7.0.app; then
        echo "Found Xcode for iOS 7.0, switching to it"
        sudo xcode-select -switch /Applications/Xcode-7.0.app
        did_switch_xcode=true
    else
        echo "Did not find /Applications/Xcode-7.0.app, using default"
    fi
    $appium_mocha $ios7_testfile
fi

if $did_switch_xcode; then
    echo "Switching back to default Xcode ($xcode_path)"
    sudo xcode-select -switch $xcode_path
fi

if $android_only || $all_tests; then
    echo "RUNNING ANDROID TESTS"
    echo "---------------------"
    android_testfile="./test/functional/_joined/android.js"
    android_dirs="apidemos selendroid android"
    join_testfiles android $android_testfile $android_dirs
    $appium_mocha $android_testfile
fi
