# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ##@cooked nocomments module: tests "tests unitaires" require: base function tests__get_line() { # obtenir le nom du script depuis lequel les fonctions de ce module ont été # appelées local mysource="${BASH_SOURCE[0]}" local i=1 while [ "${BASH_SOURCE[$i]}" == "$mysource" ]; do let i=i+1 done echo "${BASH_SOURCE[$i]}:${BASH_LINENO[$((i-1))]}" } function tests__set_message() { if [ "$1" == -m ]; then message="$2" return 2 elif [[ "$1" == -m* ]]; then message="${1#-m}" return 1 else return 0 fi } function: assert_ok "faire un test unitaire. la syntaxe est assert_ok [-m message] cmd la commande doit retourner vrai pour que le test soit réussi" function assert_ok() { local message; tests__set_message "$@" || shift $? "$@" && return 0 [ -n "$message" ] && message="$message: " message="${message}test failed at $(tests__get_line)" die "$message" } function assert() { assert_ok "$@"; } function: assert_ko "faire un test unitaire. la syntaxe est assert_ko [-m message] cmd la commande doit retourner faux pour que le test soit réussi" function assert_ko() { local message; tests__set_message "$@" || shift $? "$@" || return 0 [ -n "$message" ] && message="$message: " message="${message}test failed at $(tests__get_line)" die "$message" } function tests__assert() { local message="$1"; shift "assert_${1#assert_}" -m "$message" "${@:2}" } function assert_n() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$2" [ -n "$message" ] || message="value is empty" tests__assert "$message" ok [ -n "$1" ] } function assert_z() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$2" [ -n "$message" ] || message="value is not empty" tests__assert "$message" ok [ -z "$1" ] } function assert_same() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' and '$2' are different" tests__assert "$message" ok [ "$1" == "$2" ] } function assert_diff() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' and '$2' are the same" tests__assert "$message" ok [ "$1" != "$2" ] } function assert_eq() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' and '$2' are not equals" tests__assert "'$1' must be a number" ok isnum "$1" tests__assert "$message" ok [ "$1" -eq "$2" ] } function assert_ne() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' and '$2' are equals" tests__assert "'$1' must be a number" ok isnum "$1" tests__assert "$message" ok [ "$1" -ne "$2" ] } function assert_gt() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' is not greater than '$2'" tests__assert "'$1' must be a number" ok isnum "$1" tests__assert "$message" ok [ "$1" -gt "$2" ] } function assert_ge() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' is not greater than or equals to '$2'" tests__assert "'$1' must be a number" ok isnum "$1" tests__assert "$message" ok [ "$1" -ge "$2" ] } function assert_lt() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' is not less than '$2'" tests__assert "'$1' must be a number" ok isnum "$1" tests__assert "$message" ok [ "$1" -lt "$2" ] } function assert_le() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$3" [ -n "$message" ] || message="'$1' is not less than or equals to '$2'" tests__assert "'$1' must be a number" ok isnum "$1" tests__assert "$message" ok [ "$1" -le "$2" ] } function assert_is_defined() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$2" [ -n "$message" ] || message="'$1' is not defined" tests__assert "$message" ok is_defined "$1" } function assert_not_defined() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$2" [ -n "$message" ] || message="'$1' is defined" tests__assert "$message" ko is_defined "$1" } function assert_is_array() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$2" [ -n "$message" ] || message="'$1' is not an array" tests__assert "$message" ok is_array "$1" } function assert_not_array() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="$2" [ -n "$message" ] || message="'$1' is an array" tests__assert "$message" ko is_array "$1" } function assert_array_same() { local message; tests__set_message "$@" || shift $? [ -n "$message" ] || message="'$1' is not an array or not equals to (${*:2})" assert_is_array "$1" "$message" eval "actual=\"\$(qvals \"\${$1[@]}\")\""; shift eval "expected=\"\$(qvals \"\$@\")\"" assert_same "$actual" "$expected" "$message" }