Skip to content

Commit

Permalink
Merge pull request #241 from TypedDevs/strictmode
Browse files Browse the repository at this point in the history
Foundation for strictmode
  • Loading branch information
Chemaclass authored Jul 12, 2024
2 parents 335c576 + 186d40e commit a2eb9bd
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 81 deletions.
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"
}

0 comments on commit a2eb9bd

Please sign in to comment.