oh-my-fish/plugins/fish-spec/spec.run.fish

94 lines
2.3 KiB
Fish

# NAME
# spec.run - run a suite of tests
#
# SYNOPSIS
# spec.run [OPTIONS]
#
# OPTIONS
# -v --verbose
# Print full test output.
#
# DESCRIPTION
# In order to run tests create the test file, import plugins/spec at
# before adding any of the functions described above and call spec.run.
#
# FUNCTIONS
# function before_all Run before any tests are run.
# function before_each Run before each test.
# function describe_* Use to organize different specs.
# function it_* Use to test your library/plugin.
# function after_each Run after each test.
# function after_all Run after all tests are finished.
#
# NOTES
# After each test is evaluated, the function is erased from the scope by
# spec.eval to guarantee that subsequent describe blocks will not end up
# calling the previous describe's batch of tests.
#
# The fish-spec library is no different from other Oh-My-Fish plugins.
# Use `import plugins/fish-spec` at the top of your spec file and call
#
# spec.run $argv
#
# After your suite of tests.
#
# EXAMPLES
# import plugins/fish-spec
# function describe_erase
# function before_each
# set -g nums 1 2 3
# end
# function it_erases_one_item -d "It should erase an item from a list."
# erase 1 --from nums
# expect $nums --to-not-contain 1
# end
# end
# spec.run --verbose
#
# AUTHORS
# Bruno Pinto <@pfbruno>
# Jorge Bucaran <@bucaran>
#/
function spec.run
set -l result 0
set -l tests ""
set -l describes (spec.functions describe_)
# Load this suite unique set of tests.
for describe in $describes
spec.eval $describe --header $argv
spec.eval before_all $argv
set tests (spec.functions it_)
set -l failed 0
for test in $tests
spec.eval before_each $argv
if not spec.eval $test --tab 1 $argv
set result 1 # Flunk!
set failed (math 1+$failed)
end
spec.eval after_each $argv
end
spec.eval after_all $argv
if contains -- $argv[1] -v --verbose
spec.view --report (count $tests) $failed
end
# Clean up methods after all tests are finished.
spec.functions -e it_ before_ after_
end
if [ -z "$describes" -o -z "$tests" ]
echo "No tests found."
return 1
end
spec.functions -e describe_
return $result
end