#!/usr/bin/env bash

function remove_test_files {
    rm -f ./*test{,.exe}
}

function fail {
    printf '%s\n' "$1" >&2
    # If we fail, clean up after ourselves
    remove_test_files
    exit 1
}

function main {
    test_dirs=()
    while IFS= read -r -d '' file
    do
        dir=$(dirname "$file")
        if [[ ! " ${test_dirs[*]} " =~ ${dir} ]]; then
            test_dirs+=("$dir")
        fi
    done <   <(find . -type f -iname '*_test.go' -print0)

    for goos in openbsd darwin windows
    do
        for dir in "${test_dirs[@]}"; do
            echo "Testing GOOS=$goos in dir $dir"
            GOOS="$goos" go test -c "./$dir" || fail "Test failed using $goos and $dir"
        done
    done

    # If all goes well, we should still clean up the test files
    echo "Test complete"
    remove_test_files
}

main "$@"