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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
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 numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
- Add `--upgrade` option to `./bashunit`
- Remove support to deprecated `setUp`, `tearDown`, `setUpBeforeScript` and `tearDownAfterScript` functions
- Optimize test execution time
- Support tests written using Bash's errexit (-e), nounset (-u), and pipefail options ("unofficial strict mode").

## [0.10.1](https://github.com/TypedDevs/bashunit/compare/0.10.0...0.10.1) - 2023-11-13

Expand Down
1 change: 1 addition & 0 deletions bashunit
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.10.1"
Expand Down
28 changes: 14 additions & 14 deletions src/console_results.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,18 +15,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 DownExpand Up@@ -111,7 +111,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 All@@ -121,7 +121,7 @@ function console_results::print_successful_test() {
fi
else
local test_name=$1
local data=$2
local data=${2-}

if [[ -z "$data" ]]; then
printf "%sβœ“ Passed%s: %s\n" "$_COLOR_PASSED" "$_COLOR_DEFAULT" "${test_name}"
Expand DownExpand Up@@ -163,7 +163,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@@ -174,7 +174,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
34 changes: 7 additions & 27 deletions src/env_configuration.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,30 +5,10 @@ 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
: "${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}"
7 changes: 5 additions & 2 deletions src/helpers.sh
Original file line numberDiff line numberDiff 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 DownExpand Up@@ -85,7 +85,9 @@ function helper::get_functions_to_run() {
# @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 DownExpand Up@@ -133,6 +135,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
14 changes: 7 additions & 7 deletions src/runner.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,7 +50,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 DownExpand Up@@ -107,16 +107,16 @@ 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() {
local function_name="$1"
local data="$2"
local data="${2-}"
local current_assertions_failed
current_assertions_failed="$(state::get_assertions_failed)"
local current_assertions_snapshot
Expand Down
4 changes: 2 additions & 2 deletions src/skip_todo.sh
Original file line numberDiff line numberDiff 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
1 change: 1 addition & 0 deletions tests/acceptance/bashunit.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_execution_error_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_fail_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_find_tests_command_line_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_pass_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_path_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_stop_on_failure_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/bashunit_upgrade_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up() {
./build.sh >/dev/null
Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/install_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function set_up_before_script() {
TEST_ENV_FILE="./tests/acceptance/fixtures/.env.default"
Expand Down
1 change: 1 addition & 0 deletions tests/functional/logic_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"

Expand Down
1 change: 1 addition & 0 deletions tests/functional/provider_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

_TEST_GET_DATA_FROM_PROVIDER_ITERATION_FILE=""

Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_snapshot_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_match_snapshot() {
assert_empty "$(assert_match_snapshot "Hello World!")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/assert_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_equals() {
assert_empty "$(assert_equals "1" "1")"
Expand Down
1 change: 1 addition & 0 deletions tests/unit/console_results_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function mock_all_state_getters() {
mock state::is_duplicated_test_functions_found echo false
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/directory_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_directory_exists() {
local a_directory
Expand DownExpand Up@@ -260,8 +261,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"
}
1 change: 1 addition & 0 deletions tests/unit/file_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_successful_assert_file_exists() {
local a_file
Expand Down
1 change: 1 addition & 0 deletions tests/unit/helpers_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
helper::unset_if_exists fake_function
Expand Down
1 change: 1 addition & 0 deletions tests/unit/setup_teardown_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

TEST_COUNTER=1

Expand Down
1 change: 1 addition & 0 deletions tests/unit/skip_todo_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function test_skip_output() {
assert_equals\
Expand Down
1 change: 1 addition & 0 deletions tests/unit/state_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

# shellcheck disable=SC2034

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test_doubles_test.sh
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
#!/bin/bash
set -euo pipefail

function tear_down() {
unset code
Expand Down