#shellcheck shell=sh # shellcheck source=lib/libexec.sh . "${SHELLSPEC_LIB:-./lib}/libexec.sh" use includes replace_all executor() { #shellcheck disable=SC2039,SC3045 [ "$(ulimit -n)" -lt 1024 ] && ulimit -n 1024 count=0 eval count_specfiles count ${1+'"$@"'} create_workdirs "$count" #shellcheck disable=SC2034 SHELLSPEC_COVERAGE_SETUP="$SHELLSPEC_LIB/cov/kcov.sh" # The directory of $SHELLSPEC_KCOV_IN_FILE should be empty # kcov try to parse files around $SHELLSPEC_KCOV_IN_FILE mkdir -p "${SHELLSPEC_KCOV_IN_FILE%/*}" translator --coverage --fd=8 --progress "$@" > "$SHELLSPEC_KCOV_IN_FILE" kcov_preprocess #shellcheck disable=SC2039,SC2086 ( "$SHELLSPEC_KCOV_PATH" \ $SHELLSPEC_KCOV_COMMON_OPTS \ $SHELLSPEC_KCOV_OPTS \ --bash-method=DEBUG \ --bash-parser="$SHELLSPEC_SHELL" \ --bash-parse-files-in-dir=. \ --configure=command-name="shellspec $*" \ "$SHELLSPEC_COVERAGEDIR" "$SHELLSPEC_KCOV_IN_FILE" ) eval "kcov_postprocess; return $?" } kcov_preprocess() { [ -d "$SHELLSPEC_COVERAGEDIR" ] || return 0 # Cleanup previous coverage data rm -rf "${SHELLSPEC_COVERAGEDIR:?}/${SHELLSPEC_KCOV_FILENAME:?}"* } kcov_postprocess() { [ -d "$SHELLSPEC_COVERAGEDIR" ] || return 0 ( CDPATH= cd "$SHELLSPEC_COVERAGEDIR" || exit # Delete unnecessary files and directories rm -rf bash-helper.sh bash-helper-debug-trap.sh \ libbash_execve_redirector.so kcov-merged ||: # Swap directory and symlink if [ -L "$SHELLSPEC_KCOV_FILENAME" ]; then link=$(ls -dl "$SHELLSPEC_KCOV_FILENAME") link=${link#*" $SHELLSPEC_KCOV_FILENAME -> "} link=${link%/} && link=${link##*/} set -- "$link" "$SHELLSPEC_KCOV_FILENAME" { rm "$2" && mv "$1" "$2" && ln -s "$2" "$1"; } ||: edit_in_place "index.json" kcov_fix_index "$1" "$2" # kcov version = v35 edit_in_place "index.js" kcov_fix_index "$1" "$2" # kcov version >= v36 fi # Replace physical path to logical path cd "$SHELLSPEC_PROJECT_ROOT" || exit set -- "$(pwd -P)" "$(pwd -L)" "$SHELLSPEC_KCOV_FILENAME" cd "$SHELLSPEC_COVERAGEDIR" || exit for file in coverage.json sonarqube.xml cobertura.xml; do edit_in_place "$3/$file" "kcov_fix_${file%.*}" "$1" "$2" ln -snf "$3/$file" "$file" ||: done edit_in_place "index.html" kcov_add_extra_info ) 2>/dev/null } kcov_fix_index() { while IFS= read -r line; do includes "$line" "\"link\":\"$1/" && replace_all line "$1" "$2" putsn "$line" done } kcov_fix_coverage() { while IFS= read -r line; do includes "$line" "\"file\": \"$1/" && replace_all line "$1" "$2" putsn "$line" done } kcov_fix_sonarqube() { while IFS= read -r line; do includes "$line" "$1" && replace_all line "$1" "$2" includes "$line" "$2/" && replace_all line "/" "" putsn "$line" done } kcov_add_extra_info() { while IFS= read -r line; do if includes "$line" ""; then putsn "" putsn "" putsn "
" putsn "Tested by: ShellSpec" \ "$SHELLSPEC_VERSION" \ "(with $SHELLSPEC_SHELL_TYPE $SHELLSPEC_SHELL_VERSION" \ "and $SHELLSPEC_KCOV_VERSION)" putsn "
" fi putsn "$line" done }