tests: add `src.ctf.fs` single field testing framework
[babeltrace.git] / tests / utils / utils.sh
index 8bf9df896509c3a6a7998174ed9da8f4b1d56fe2..037f5307ae0006a82013df74bcd94f526ef232f4 100644 (file)
@@ -61,7 +61,7 @@ export BT_TESTS_BUILDDIR
 
 # Source the generated environment file if it's present.
 if [ -f "${BT_TESTS_BUILDDIR}/utils/env.sh" ]; then
-       # shellcheck source=./env.sh
+       # shellcheck disable=SC1091
        . "${BT_TESTS_BUILDDIR}/utils/env.sh"
 fi
 
@@ -156,6 +156,10 @@ bt_remove_cr() {
        "$BT_TESTS_SED_BIN" -i'' -e 's/\r//g' "$1"
 }
 
+bt_remove_cr_inline() {
+       "$BT_TESTS_SED_BIN" 's/\r//g' "$1"
+}
+
 # Run the Babeltrace CLI, redirecting stdout and stderr to specified files.
 #
 #   $1: file to redirect stdout to
@@ -195,9 +199,7 @@ bt_diff() {
        # Strip any \r present due to Windows (\n -> \r\n).
        # "diff --string-trailing-cr" is not used since it is not present on
        # Solaris.
-       bt_remove_cr "$actual_file"
-
-       diff -u "$expected_file" "$actual_file" 1>&2
+       diff -u <(bt_remove_cr_inline "$expected_file") <(bt_remove_cr_inline "$actual_file") 1>&2
 
        return $?
 }
@@ -228,8 +230,8 @@ bt_diff_cli() {
        local ret_stdout
        local ret_stderr
 
-       temp_stdout_output_file="$(mktemp -t actual_stdout.XXXXXX)"
-       temp_stderr_output_file="$(mktemp -t actual_stderr.XXXXXX)"
+       temp_stdout_output_file="$(mktemp -t actual-stdout.XXXXXX)"
+       temp_stderr_output_file="$(mktemp -t actual-stderr.XXXXXX)"
 
        # Run the CLI to get a detailed file.
        bt_cli "$temp_stdout_output_file" "$temp_stderr_output_file" "${args[@]}"
@@ -297,6 +299,33 @@ bt_diff_details_ctf_gen_single() {
        return $ret
 }
 
+# Run the grep binary configured for the tests.
+bt_grep() {
+       "$BT_TESTS_GREP_BIN" "$@"
+}
+
+# ok() with the test name `$3` on the result of bt_grep() matching the
+# pattern `$1` within the file `$2`.
+bt_grep_ok() {
+       local pattern=$1
+       local file=$2
+       local test_name=$3
+
+       bt_grep --silent "$pattern" "$file"
+
+       local ret=$?
+
+       if ! ok $ret "$test_name"; then
+               {
+                       echo "Pattern \`$pattern\` doesn't match the contents of \`$file\`:"
+                       echo '--- 8< ---'
+                       cat "$file"
+                       echo '--- >8 ---'
+               } >&2
+       fi
+
+       return $ret
+}
 
 ### Functions ###
 
@@ -309,7 +338,7 @@ check_coverage() {
 run_python() {
        local our_pythonpath="${BT_TESTS_SRCDIR}/utils/python"
 
-       if [[ $BT_TESTS_PYTHON_VERSION = 3.4 ]]; then
+       if [[ $BT_TESTS_PYTHON_VERSION =~ 3.[45] ]]; then
                # Add a local directory containing a `typing.py` to `PYTHONPATH` for
                # Python 3.4 which doesn't offer the `typing` module.
                our_pythonpath="$our_pythonpath:${BT_TESTS_SRCDIR}/utils/python/typing"
@@ -358,7 +387,7 @@ run_python_bt2() {
        # existing ASAN_OPTIONS, such that we override the user's value if it
        # contains detect_leaks=1.
        if [ "${BT_TESTS_ENABLE_ASAN:-}" = "1" ]; then
-               if ${BT_TESTS_CC_BIN} --version | head -n 1 | grep -q '^gcc'; then
+               if ${BT_TESTS_CC_BIN} --version | head -n 1 | bt_grep -q '^gcc'; then
                        lib_asan="$(${BT_TESTS_CC_BIN} -print-file-name=libasan.so)"
                        local -x LD_PRELOAD="${lib_asan}${LD_PRELOAD:+:}${LD_PRELOAD:-}"
                fi
@@ -419,6 +448,6 @@ gen_mctf_trace() {
        local base_dir="$2"
 
        diag "Running: ${BT_TESTS_PYTHON_BIN} ${BT_TESTS_SRCDIR}/utils/python/mctf.py --base-dir ${base_dir} ${input_file}"
-       "${BT_TESTS_PYTHON_BIN}" "${BT_TESTS_SRCDIR}/utils/python/mctf.py" \
+       run_python "${BT_TESTS_PYTHON_BIN}" "${BT_TESTS_SRCDIR}/utils/python/mctf.py" \
                --base-dir "${base_dir}" "${input_file}"
 }
This page took 0.02613 seconds and 4 git commands to generate.