mirror of
https://github.com/oh-my-fish/oh-my-fish.git
synced 2024-12-02 14:03:51 +08:00
95 lines
2.4 KiB
Fish
95 lines
2.4 KiB
Fish
# NAME
|
|
# expect - assert a list of expected values match an actual value
|
|
#
|
|
# SYNOPSIS
|
|
# expect <expected> <condition> <actual>
|
|
|
|
# OPTIONS
|
|
# <expected>...
|
|
# <condition>
|
|
# --to-equal <actual> value equals <expected> value
|
|
# --to-not-equal <actual> value does not equals <expected> value
|
|
#
|
|
# --to-contain-all all <actual> values exist in <expected> list
|
|
# --to-not-contain-all all <actual> values does not exist in <expected> list
|
|
# --to-be-true exit status should be truthy
|
|
# --to-be-false exit status should be falsy
|
|
# <actual>...
|
|
#
|
|
# EXAMPLE
|
|
# import plugins/fish-spec
|
|
#
|
|
# function describe_my_test
|
|
# function it_does_my_task
|
|
# set -l result (my_task $data)
|
|
# expect $result --to-equal 0
|
|
# end
|
|
# end
|
|
# spec.run
|
|
#
|
|
# AUTHORS
|
|
# Bruno Pinto <@pfbruno>
|
|
# Jorge Bucaran <@bucaran>
|
|
#/
|
|
function expect
|
|
set -l result 0
|
|
# Parse expected / actual lists
|
|
set -l actual ""
|
|
set -l expected ""
|
|
set -l condition ""
|
|
|
|
for index in (seq (count $argv))
|
|
switch $argv[$index]
|
|
# --condition found, split expected/actual lists
|
|
case --\*
|
|
set expected $argv[1..(math $index-1)]
|
|
set condition $argv[$index]
|
|
# No comparison required e.g. --to-be-true
|
|
if [ $index -lt (count $argv) ]
|
|
set actual $argv[(math $index+1)..-1]
|
|
end
|
|
break
|
|
end
|
|
end
|
|
|
|
# Test conditions
|
|
switch $condition
|
|
case --to-be-false
|
|
eval "$expected"
|
|
test $status -ne 0
|
|
case --to-be-true
|
|
eval "$expected"
|
|
test $status -eq 0
|
|
case --to-contain-all
|
|
set result 0
|
|
for item in $actual
|
|
contains -- "$item" $expected
|
|
or set result $status
|
|
end
|
|
test $result -eq 0
|
|
case --to-not-contain-all
|
|
set result 0
|
|
for item in $actual
|
|
contains -- "$item" $expected
|
|
or set result $status
|
|
end
|
|
test $result -ne 0
|
|
case --to-equal
|
|
test "$expected" = "$actual"
|
|
case --to-not-equal
|
|
test "$expected" != "$actual"
|
|
case \*
|
|
test true = false
|
|
end
|
|
|
|
set result $status
|
|
if [ $result -eq 0 ]
|
|
# Return a non-empty string to indicate success.
|
|
set -g _spec_current_test_ouput (printf "$result")
|
|
else
|
|
# Return error information separated by \t and tested condition.
|
|
set -g _spec_current_test_ouput (printf "%s\n" $expected \t $condition $actual)
|
|
end
|
|
return $result
|
|
end
|