#!/usr/bin/env bash
set -ex

if [ "$1" = "integration" ]; then
    if [ "$2" ]; then
        BACKEND="$2"
        shift 2
    else
        BACKEND=postgres
        shift
    fi
    if [ "$BACKEND" = "mysql" ]; then
        export RUST_TEST_THREADS=1
    fi
    (cd diesel_tests && cargo test --features "$BACKEND" --no-default-features "$*")
elif [ "$1" = "compile" ]; then
    shift
    (cd diesel_compile_tests && cargo test "$*")
else
    (cd diesel && cargo test --no-default-features --features "extras sqlite" "$*")
    (cd diesel && cargo test --no-default-features --features "extras postgres" "$*")
    (cd diesel && cargo test --no-default-features --features "mysql" "$*" -- --test-threads 1)

    (cd diesel_cli && cargo test --features "sqlite" --no-default-features "$*")
    (cd diesel_migrations && cargo test --features "sqlite diesel/sqlite" "$*")
    (cd diesel_migrations && cargo test --features "sqlite diesel/sqlite" "$*")
    (cd diesel_derives && cargo test --features "diesel/sqlite sqlite" "$*")
    (cd diesel_tests && cargo test --features "sqlite" --no-default-features "$*")
    (cd diesel_dynamic_schema && cargo test --features "sqlite diesel/sqlite" "$*")
    (cd diesel_bench && cargo test --features "sqlite" --benches "$*")

    (cd diesel_migrations && cargo test --features "postgres diesel/postgres" "$*")
    (cd diesel_migrations/migrations_macros && cargo test --features "diesel/postgres postgres" "$*")
    (cd diesel_derives && cargo test --features "diesel/postgres postgres" "$*")
    (cd diesel_cli && cargo test --features "postgres" --no-default-features "$*")
    (cd diesel_tests && cargo test --features "postgres" --no-default-features "$*")
    (cd diesel_dynamic_schema && cargo test --features "postgres diesel/postgres" "$*")
    (cd diesel_bench && cargo test --features "postgres" --benches "$*")

    (cd diesel_migrations && cargo test --features "mysql diesel/mysql" "$*" -- --test-threads 1)
    (cd diesel_migrations/migrations_macros && cargo test --features "diesel/mysql mysql" "$*" -- --test-threads 1)
    (cd diesel_derives && cargo test --features "diesel/mysql mysql" "$*" -- --test-threads 1)
    (cd diesel_cli && cargo test --features "mysql" --no-default-features "$*" -- --test-threads 1)
    (cd diesel_tests && cargo test --features "mysql" --no-default-features "$*" -- --test-threads 1)
    (cd diesel_dynamic_schema && cargo test --features "mysql diesel/mysql" "$*" -- --test-threads 1)
    (cd diesel_bench && cargo test --features "mysql" --benches "$*")

    (cd diesel_compile_tests && cargo test "$*")
    (cd diesel_migrations/migrations_internals && cargo test "$*")
    export BACKEND="mysql sqlite postgres"
    (cd examples && ./test_all "$*")
fi
