diff --git a/pkg/fish-spec/basic_formatter.fish b/pkg/fish-spec/basic_formatter.fish new file mode 100644 index 0000000000000000000000000000000000000000..289a4818e602f6ff4b66a1f32990ac48ba815318 --- /dev/null +++ b/pkg/fish-spec/basic_formatter.fish @@ -0,0 +1,59 @@ +function __fish-spec.all_specs_init -e all_specs_init -a spec + set -g __fish_spec_start_time (__fish-spec.current_time) +end + +function __fish-spec.all_specs_finished -e all_specs_finished -a spec + set -l __fish_spec_end_time (__fish-spec.current_time) + set -l diff (math "scale=3;($__fish_spec_end_time - $__fish_spec_start_time) / 1000") + + echo -en '\n\nFinished in ' + printf '%g' $diff + echo ' seconds' +end + +function __fish-spec.spec_init -e spec_init -a spec + set -g __current_spec_name (echo $spec | sed 's/^[0-9]*_//;s/_/ /g;s/^it/It/') + set -e __current_spec_output + set -e __current_spec_status +end + +function __fish-spec.spec_finished -e spec_finished -a spec + functions -e $spec + + switch "$__current_spec_status" + case success + emit spec_success + case error + emit spec_error + case '*' + emit spec_no_assertions + end +end + +function __fish-spec.spec_success -e spec_success + echo -n '.' +end + +function __fish-spec.spec_error -e spec_error + echo -e "\n\nFailure: $__current_spec_name" + + if not set -q __current_spec_quiet + echo (omf::em) $__current_spec_output(omf::off) + end + + set -g __any_spec_failed true +end + +function __fish-spec.spec_no_assertions -e spec_no_assertions + echo -n 'N/A' +end + +function __fish-spec_assertion_success -e assertion_success + set -q __current_spec_status; or set -g __current_spec_status success +end + +function __fish-spec_assertion_error -e assertion_error -a error_message + # Mimics output redirect inside an event handler + set -g __current_spec_output $error_message + set -g __current_spec_status error +end diff --git a/pkg/fish-spec/functions/assert.error_message.fish b/pkg/fish-spec/functions/assert.error_message.fish index 3b7f3494d5bed70bdf22dfe70ec9dc2f2c388693..cac1716b5a8e369eabff83f10f1cf10b25141581 100644 --- a/pkg/fish-spec/functions/assert.error_message.fish +++ b/pkg/fish-spec/functions/assert.error_message.fish @@ -6,26 +6,26 @@ function assert.error_message switch $number_of_arguments case 3 set operator (assert.expand_operator $argv[2]) - set expected $argv[3] - echo "Expected $expected to not be $operator" + set actual $argv[3] + echo "Expected result to not be $operator but it was $actual" case 4 set expected $argv[2] set operator "not" (assert.expand_operator $argv[3]) set actual $argv[4] - echo "Expected $expected to $operator $actual" + echo "Expected result to $operator $expected but it was $actual" case \* return 1 end case \-\* test $number_of_arguments != 2; and return 1 set operator (assert.expand_operator $argv[1]) - set expected $argv[2] - echo "Expected $expected to be $operator" + set actual $argv[2] + echo "Expected result to be $operator but it was $actual" case \* test $number_of_arguments != 3; and return 1 set expected $argv[1] set operator (assert.expand_operator $argv[2]) set actual $argv[3] - echo "Expected $expected to $operator $actual" + echo "Expected result to $operator $expected but it was $actual" end end diff --git a/pkg/fish-spec/functions/fish-spec.fish b/pkg/fish-spec/functions/fish-spec.fish index bf5ea0982e96ab30d4d783fecb25862122492d56..fc81fc926acdaadc9522af624ed52d678bad1fe9 100644 --- a/pkg/fish-spec/functions/fish-spec.fish +++ b/pkg/fish-spec/functions/fish-spec.fish @@ -1,4 +1,9 @@ function fish-spec + set -g __fish_spec_dir (dirname (dirname (status -f))) + + # Source formatter + source $__fish_spec_dir/basic_formatter.fish + # Reset internal variables set -e __any_spec_failed @@ -10,9 +15,13 @@ function fish-spec # Load helper file source spec/helper.fish ^/dev/null + emit all_specs_init + # Run all specs __fish-spec.run_all_specs + emit all_specs_finished + not set -q __any_spec_failed end @@ -47,47 +56,12 @@ function __fish-spec.run_suite -a suite_name functions -e before_all before_each after_each after_all end -function __fish-spec.spec_init -e spec_init -a spec - set -e __current_spec_status -end - -function __fish-spec.spec_finished -e spec_finished -a spec - functions -e $spec - - switch "$__current_spec_status" - case success - emit spec_success - case error - emit spec_error - case '*' - emit spec_no_assertions - end -end - -function __fish-spec.spec_success -e spec_success - echo -n '.' -end - -function __fish-spec.spec_error -e spec_error - echo -n 'F' - set -g __any_spec_failed true -end - -function __fish-spec.spec_no_assertions -e spec_no_assertions - echo -n 'N/A' -end - -function __fish-spec_assertion_success -e assertion_success - set -q __current_spec_status; or set -g __current_spec_status success -end - -function __fish-spec_assertion_error -e assertion_error -a error_message - # Mimics output redirect inside an event handler - if set -q __fish_spec_output - set __fish_spec_output $error_message +function __fish-spec.current_time + if test (uname) = 'Darwin' + set filename 'epoch.osx' else - echo $error_message + set filename 'epoch.linux' end - set -g __current_spec_status error + eval $__fish_spec_dir/utils/$filename end diff --git a/pkg/fish-spec/spec/assert_error_message_spec.fish b/pkg/fish-spec/spec/assert_error_message_spec.fish index 03660da8b97a73a53ecfd1d3c412eb9f62e49188..bfc7ad2733fb9ca9a453b2a5366ae2d4dc1d89e9 100644 --- a/pkg/fish-spec/spec/assert_error_message_spec.fish +++ b/pkg/fish-spec/spec/assert_error_message_spec.fish @@ -1,10 +1,10 @@ function describe_assert_error_message function before_each - set -g __fish_spec_output "initial test value" + set -g __current_spec_quiet end function after_each - set -e __fish_spec_output + set -e __current_spec_quiet end function it_has_no_output_when_the_test_succeeds @@ -13,16 +13,16 @@ function describe_assert_error_message # Reset test status set -e __current_spec_status - assert 'initial test value' = "$__fish_spec_output"; or echo $__fish_spec_output + assert -z "$__current_spec_output" end function it_supports_unary_operators - assert -z "string" + assert -z "abc" # Reset test status set -e __current_spec_status - assert 'Expected string to be empty' = "$__fish_spec_output"; or echo $__fish_spec_output + assert 'Expected result to be empty but it was abc' = "$__current_spec_output" end function it_supports_binary_operators @@ -31,7 +31,7 @@ function describe_assert_error_message # Reset test status set -e __current_spec_status - assert 'Expected 1 to equals 2' = "$__fish_spec_output"; or echo $__fish_spec_output + assert 'Expected result to equals 1 but it was 2' = "$__current_spec_output" end function it_supports_inversion_on_unary_operators @@ -40,7 +40,7 @@ function describe_assert_error_message # Reset test status set -e __current_spec_status - assert 'Expected to not be empty' = "$__fish_spec_output"; or echo $__fish_spec_output + assert 'Expected result to not be empty but it was ' = "$__current_spec_output" end function it_supports_inversion_on_binary_operators @@ -49,6 +49,6 @@ function describe_assert_error_message # Reset test status set -e __current_spec_status - assert 'Expected 1 to not equals 1' = "$__fish_spec_output"; or echo $__fish_spec_output + assert 'Expected result to not equals 1 but it was 1' = "$__current_spec_output" end end diff --git a/pkg/fish-spec/spec/results_spec.fish b/pkg/fish-spec/spec/results_spec.fish index 9cae8821a196238c60ecb0747273d12871aff65a..eaa47cdd00840aa3301485341419dc056e5765e1 100644 --- a/pkg/fish-spec/spec/results_spec.fish +++ b/pkg/fish-spec/spec/results_spec.fish @@ -1,8 +1,4 @@ function describe_results - function after_each - set -e __fish_spec_quiet - end - function it_succeeds_when_single_assertion_succeeds assert 1 = 1 diff --git a/pkg/fish-spec/utils/epoch.c b/pkg/fish-spec/utils/epoch.c new file mode 100644 index 0000000000000000000000000000000000000000..4daaf2bd94119e8ac9d8b5c8cc2ebcc6b718595c --- /dev/null +++ b/pkg/fish-spec/utils/epoch.c @@ -0,0 +1,10 @@ +#include <stdio.h> +#include <sys/time.h> + +int main(int argc, char** argv) { + struct timeval time_struct; + gettimeofday(&time_struct, 0); + printf("%lld", (time_struct.tv_sec * 1000ll) + (time_struct.tv_usec / 1000ll)); + + return 0; +} diff --git a/pkg/fish-spec/utils/epoch.linux b/pkg/fish-spec/utils/epoch.linux new file mode 100755 index 0000000000000000000000000000000000000000..3898514e7a8c4fb0a9c12ccfbb570508a4562bc2 Binary files /dev/null and b/pkg/fish-spec/utils/epoch.linux differ diff --git a/pkg/fish-spec/utils/epoch.osx b/pkg/fish-spec/utils/epoch.osx new file mode 100755 index 0000000000000000000000000000000000000000..3d27ae9be2e6744fb1a69fd7af0e4c5147965fff Binary files /dev/null and b/pkg/fish-spec/utils/epoch.osx differ