161 lines
5.3 KiB
Bash
161 lines
5.3 KiB
Bash
# -*- 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"
|
|
}
|