superlint/test/lib/detectFilesTest.sh
George L. Yermulnik 417a58a62d
fix: skip symbolic links when passing files to prettier (#6620)
Skip symbolic links when passing files to Prettier

- Fix #6378
- [`lib/functions/detectFiles.sh`]: Add `IsNotSymbolicLink()` function
  to check whether provided file is symbolic link or not
- [`lib/functions/buildFileList.sh`]: Use `IsNotSymbolicLink()` function
  to not add files that are symbolic links to the file array for
  Prettier
- [`test/lib/detectFilesTest.sh`]: Add test for `IsNotSymbolicLink()`
  function
- Add `test/linters/prettier/test_symlink_good.md` file symlinked into parent
  dir's `README.md` to test it is skipped from Prettier (also exclude
  its directory from JSCPD to suppress error about cloned content)
2025-03-05 13:33:32 +00:00

166 lines
4.1 KiB
Bash
Executable file

#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
# shellcheck disable=SC2034
LOG_LEVEL="DEBUG"
# shellcheck source=/dev/null
source "lib/functions/log.sh"
# shellcheck source=/dev/null
source "lib/functions/detectFiles.sh"
function RecognizeNoShebangTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/bash_exec/libraries/noShebang_bad.sh"
debug "Confirming ${FILE} has no shebang"
if ! HasNoShebang "${FILE}"; then
fatal "${FILE} is mis-classified as having a shebang"
fi
notice "${FUNCTION_NAME} PASS"
}
RecognizeCommentIsNotShebangTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/bash_exec/libraries/comment_bad.sh"
debug "Confirming ${FILE} starting with a comment has no shebang"
if ! HasNoShebang "${FILE}"; then
fatal "${FILE} with a comment is mis-classified as having a shebang"
fi
notice "${FUNCTION_NAME} PASS"
}
RecognizeIndentedShebangAsCommentTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/bash_exec/libraries/indentedShebang_bad.sh"
debug "Confirming indented shebang in ${FILE} is considered a comment"
if ! HasNoShebang "${FILE}"; then
fatal "${FILE} with a comment is mis-classified as having a shebang"
fi
notice "${FUNCTION_NAME} PASS"
}
RecognizeSecondLineShebangAsCommentTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/bash_exec/libraries/secondLineShebang_bad.sh"
debug "Confirming shebang on second line in ${FILE} is considered a comment"
if ! HasNoShebang "${FILE}"; then
fatal "${FILE} with a comment is mis-classified as having a shebang"
fi
notice "${FUNCTION_NAME} PASS"
}
function RecognizeShebangTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/bash_exec/libraries/shebang_bad.sh"
debug "Confirming ${FILE} has a shebang"
if HasNoShebang "${FILE}"; then
fatal "${FILE} is mis-classified as not having a shebang"
fi
notice "${FUNCTION_NAME} PASS"
}
function RecognizeShebangWithBlankTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/bash_exec/libraries/shebangWithBlank_bad.sh"
debug "Confirming shebang with blank in ${FILE} is recognized"
if HasNoShebang "${FILE}"; then
fatal "${FILE} is mis-classified as not having a shebang"
fi
notice "${FUNCTION_NAME} PASS"
}
function IsAnsibleDirectoryTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local GITHUB_WORKSPACE
GITHUB_WORKSPACE="$(mktemp -d)"
local FILE="${GITHUB_WORKSPACE}/ansible"
mkdir -p "${FILE}"
local ANSIBLE_DIRECTORY="/ansible"
export ANSIBLE_DIRECTORY
debug "Confirming that ${FILE} is an Ansible directory"
if ! IsAnsibleDirectory "${FILE}"; then
fatal "${FILE} is not considered to be an Ansible directory"
fi
notice "${FUNCTION_NAME} PASS"
}
function RecognizeNotSymbolicLink() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/symboliclinks/not_symbolic_link"
debug "Confirming that ${FILE} is not a symbolic link"
if ! IsNotSymbolicLink "${FILE}"; then
fatal "${FILE} is a symbolic link"
fi
notice "${FUNCTION_NAME} PASS"
}
function RecognizeSymbolicLink() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
local FILE="test/linters/symboliclinks/symbolic_link"
debug "Confirming that ${FILE} is a symbolic link"
if IsNotSymbolicLink "${FILE}"; then
fatal "${FILE} is not a symbolic link"
fi
notice "${FUNCTION_NAME} PASS"
}
RecognizeNoShebangTest
RecognizeCommentIsNotShebangTest
RecognizeIndentedShebangAsCommentTest
RecognizeSecondLineShebangAsCommentTest
RecognizeShebangTest
RecognizeShebangWithBlankTest
RecognizeNotSymbolicLink
RecognizeSymbolicLink
IsAnsibleDirectoryTest