Skip to content

Foundation for strictmode #241

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Jul 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
- Support for displaying the clock without `perl` (for non-macOS)
- Add `-l|--log-junit <log.xml>` option
- Add `-r|--report-html <report.html>` option
- Foundation to enable strictmode

## [0.13.0](https://github.com/TypedDevs/bashunit/compare/0.12.0...0.13.0) - 2024-06-23

Expand Down
26 changes: 13 additions & 13 deletions src/console_results.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@ function console_results::render_result() {
echo ""

local total_tests=0
((total_tests+=$(state::get_tests_passed)))
((total_tests+=$(state::get_tests_skipped)))
((total_tests+=$(state::get_tests_incomplete)))
((total_tests+=$(state::get_tests_snapshot)))
((total_tests+=$(state::get_tests_failed)))
((total_tests += $(state::get_tests_passed))) || true
((total_tests += $(state::get_tests_skipped))) || true
((total_tests += $(state::get_tests_incomplete))) || true
((total_tests += $(state::get_tests_snapshot))) || true
((total_tests += $(state::get_tests_failed))) || true

local total_assertions=0
((total_assertions+=$(state::get_assertions_passed)))
((total_assertions+=$(state::get_assertions_skipped)))
((total_assertions+=$(state::get_assertions_incomplete)))
((total_assertions+=$(state::get_assertions_snapshot)))
((total_assertions+=$(state::get_assertions_failed)))
((total_assertions += $(state::get_assertions_passed))) || true
((total_assertions += $(state::get_assertions_skipped))) || true
((total_assertions += $(state::get_assertions_incomplete))) || true
((total_assertions += $(state::get_assertions_snapshot))) || true
((total_assertions += $(state::get_assertions_failed))) || true

printf "%sTests: %s" "$_COLOR_FAINT" "$_COLOR_DEFAULT"
if [[ "$(state::get_tests_passed)" -gt 0 ]] || [[ "$(state::get_assertions_passed)" -gt 0 ]]; then
Expand Down Expand Up @@ -108,7 +108,7 @@ function console_results::print_execution_time() {
}

function console_results::print_successful_test() {
((_SUCCESSFUL_TEST_COUNT++))
((_SUCCESSFUL_TEST_COUNT++)) || true

if [[ "$SIMPLE_OUTPUT" == true ]]; then
if (( _SUCCESSFUL_TEST_COUNT % 50 != 0 )); then
Expand Down Expand Up @@ -178,7 +178,7 @@ function console_results::print_failed_snapshot_test() {

function console_results::print_skipped_test() {
local test_name=$1
local reason=$2
local reason=${2-}

printf "${_COLOR_SKIPPED}β†· Skipped${_COLOR_DEFAULT}: %s\n" "${test_name}"

Expand All @@ -189,7 +189,7 @@ function console_results::print_skipped_test() {

function console_results::print_incomplete_test() {
local test_name=$1
local pending=$2
local pending=${2-}

printf "${_COLOR_INCOMPLETE}βœ’ Incomplete${_COLOR_DEFAULT}: %s\n" "${test_name}"

Expand Down
44 changes: 9 additions & 35 deletions src/env_configuration.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,12 @@ set -o allexport
[[ -f ".env" ]] && source .env set
set +o allexport

if [[ -z "$PARALLEL_RUN" ]]; then
PARALLEL_RUN=$_DEFAULT_PARALLEL_RUN
fi

if [[ -z "$SHOW_HEADER" ]]; then
SHOW_HEADER=$_DEFAULT_SHOW_HEADER
fi

if [[ -z "$HEADER_ASCII_ART" ]]; then
HEADER_ASCII_ART=$_DEFAULT_HEADER_ASCII_ART
fi

if [[ -z "$SIMPLE_OUTPUT" ]]; then
SIMPLE_OUTPUT=$_DEFAULT_SIMPLE_OUTPUT
fi

if [[ -z "$STOP_ON_FAILURE" ]]; then
STOP_ON_FAILURE=$_DEFAULT_STOP_ON_FAILURE
fi

if [[ -z "$SHOW_EXECUTION_TIME" ]]; then
SHOW_EXECUTION_TIME=$_DEFAULT_SHOW_EXECUTION_TIME
fi

if [[ -z "$DEFAULT_PATH" ]]; then
DEFAULT_PATH=$_DEFAULT_DEFAULT_PATH
fi

if [[ -z "$LOG_JUNIT" ]]; then
LOG_JUNIT=$_DEFAULT_LOG_JUNIT
fi

if [[ -z "$REPORT_HTML" ]]; then
REPORT_HTML=$_DEFAULT_REPORT_HTML
fi
: "${PARALLEL_RUN:=$_DEFAULT_PARALLEL_RUN}"
: "${SHOW_HEADER:=$_DEFAULT_SHOW_HEADER}"
: "${HEADER_ASCII_ART:=$_DEFAULT_HEADER_ASCII_ART}"
: "${SIMPLE_OUTPUT:=$_DEFAULT_SIMPLE_OUTPUT}"
: "${STOP_ON_FAILURE:=$_DEFAULT_STOP_ON_FAILURE}"
: "${SHOW_EXECUTION_TIME:=$_DEFAULT_SHOW_EXECUTION_TIME}"
: "${DEFAULT_PATH:=$_DEFAULT_DEFAULT_PATH}"
: "${LOG_JUNIT:=$_DEFAULT_LOG_JUNIT}"
: "${REPORT_HTML:=$_DEFAULT_REPORT_HTML}"
35 changes: 13 additions & 22 deletions src/helpers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ declare -r BASHUNIT_GIT_REPO="https://github.com/TypedDevs/bashunit"
# @return string Eg: "Some logic camelCase"
#
function helper::normalize_test_function_name() {
local original_function_name="$1"
local original_function_name="${1-}"
local result

# Remove "test_" prefix
Expand Down Expand Up @@ -55,37 +55,27 @@ function helper::get_functions_to_run() {
local filter=$2
local function_names=$3

local functions_to_run=()
local filtered_functions=""

for function_name in $function_names; do
if [[ $function_name != ${prefix}* ]]; then
continue
for fn in $function_names; do
if [[ $fn == ${prefix}_${filter}* ]]; then
if [[ $filtered_functions == *" $fn"* ]]; then
return 1
fi
filtered_functions+=" $fn"
fi

local lower_case_function_name
lower_case_function_name=$(echo "$function_name" | tr '[:upper:]' '[:lower:]')
local lower_case_filter
lower_case_filter=$(echo "$filter" | tr '[:upper:]' '[:lower:]')

if [[ -n $filter && $lower_case_function_name != *"$lower_case_filter"* ]]; then
continue
fi

if [[ "${functions_to_run[*]}" =~ ${function_name} ]]; then
return 1
fi

functions_to_run+=("$function_name")
done

echo "${functions_to_run[@]}"
echo "${filtered_functions# }"
}

#
# @param $1 string Eg: "do_something"
#
function helper::execute_function_if_exists() {
"$1" 2>/dev/null
if [[ "$(type -t "$1")" == "function" ]]; then
"$1" 2>/dev/null
fi
}

#
Expand Down Expand Up @@ -133,6 +123,7 @@ function helper::get_provider_data() {
grep -B 1 "function $function_name()" "$script" |\
grep "# data_provider " |\
sed -E -e 's/\ *# data_provider (.*)$/\1/g'\
|| true
)

if [[ -n "$data_provider_function" ]]; then
Expand Down
12 changes: 6 additions & 6 deletions src/runner.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function runner::call_test_functions() {
echo "Running $script"
fi

helper::check_duplicate_functions "$script"
helper::check_duplicate_functions "$script" || true

for function_name in "${functions_to_run[@]}"; do
local provider_data=()
Expand Down Expand Up @@ -134,11 +134,11 @@ function runner::parse_execution_result() {
sed -E -e 's/.*##ASSERTIONS_SNAPSHOT=([0-9]*)##.*/\1/g'\
)

_ASSERTIONS_PASSED=$((_ASSERTIONS_PASSED + assertions_passed))
_ASSERTIONS_FAILED=$((_ASSERTIONS_FAILED + assertions_failed))
_ASSERTIONS_SKIPPED=$((_ASSERTIONS_SKIPPED + assertions_skipped))
_ASSERTIONS_INCOMPLETE=$((_ASSERTIONS_INCOMPLETE + assertions_incomplete))
_ASSERTIONS_SNAPSHOT=$((_ASSERTIONS_SNAPSHOT + assertions_snapshot))
((_ASSERTIONS_PASSED += assertions_passed)) || true
((_ASSERTIONS_FAILED += assertions_failed)) || true
((_ASSERTIONS_SKIPPED += assertions_skipped)) || true
((_ASSERTIONS_INCOMPLETE += assertions_incomplete)) || true
((_ASSERTIONS_SNAPSHOT += assertions_snapshot)) || true
}

function runner::run_test() {
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash

function skip() {
local reason=$1
local reason=${1-}
local label
label="$(helper::normalize_test_function_name "${FUNCNAME[1]}")"

Expand All @@ -11,7 +11,7 @@ function skip() {
}

function todo() {
local pending=$1
local pending=${1-}
local label
label="$(helper::normalize_test_function_name "${FUNCNAME[1]}")"

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
bashunit [arguments] [options]

Arguments:
Specifies the directory or file containing the tests to run.
If a directory is specified, it will execute the tests within files ending with test.sh.
If you use wildcards, bashunit will run any tests it finds.

Options:
-a|--assert <function ...args>
Run a core assert function standalone without a test context.

-e|--env <file-path>
Load a custom env file overriding the .env environment variables.

-f|--filter <filter>
Filters the tests to run based on the test name.

-l|--log-junit <out.xml>
Create a report JUnit XML file that contains information about the test results.

-r|--report-html <out.html>
Create a report HTML file that contains information about the test results.

-s|simple || -v|verbose
Enables simplified or verbose output to the console.

-S|--stop-on-failure
Force to stop the runner right after encountering one failing test.

--version
Displays the current version of bashunit.

--upgrade
Upgrade to latest version of bashunit.

--help
This message.

See more: https://bashunit.typeddevs.com/command-line
2 changes: 1 addition & 1 deletion tests/functional/multi_invoker_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function tear_down_after_script() {
function test_multi_invoker_simple() {
local current_number="$1"
local second_arg="$2"
local third_arg="$3"
local third_arg="${3-}"

local current_iteration=0

Expand Down
4 changes: 2 additions & 2 deletions tests/unit/directory_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,8 @@ function test_unsuccessful_assert_is_directory_not_writable() {
assert_equals\
"$(console_results::print_failed_test\
"Unsuccessful assert is directory not writable" \
"$a_file" "to be not writable" "but is writable")"\
"$(assert_is_directory_not_writable "$a_file")"
"$a_directory" "to be not writable" "but is writable")"\
"$(assert_is_directory_not_writable "$a_directory")"

rmdir "$a_directory"
}