From: idealseal <[email protected]> Add an array 'skip_tests' that can be declared to skip multiple tests. All test names will be converted to the right command line flag for cargo test.
Signed-off-by: idealseal <[email protected]> --- eclass/cargo.eclass | 46 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass index 76d3b9a61a64..05744a26141f 100644 --- a/eclass/cargo.eclass +++ b/eclass/cargo.eclass @@ -201,6 +201,22 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo" # } # @CODE +# @ECLASS_VARIABLE: skip_tests +# @DEFAULT_UNSET +# @DESCRIPTION: +# Optional array of test names to be skipped +# Should be defined before calling cargo_src_test. +# +# @CODE +# src_test() { +# local skip_tests=( +# tests::filesystem +# tests::network +# ) +# cargo_src_test --no-fail-fast +# } +# @CODE + # @ECLASS_VARIABLE: ECARGO_HOME # @OUTPUT_VARIABLE # @DESCRIPTION: @@ -836,7 +852,35 @@ cargo_src_test() { _cargo_check_initialized - set -- "${CARGO}" test $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@" + # This is the same as myfeatures in cargo_src_configure: + # Prefix all test names with '--skip'. + [[ -z ${skip_tests} ]] && declare -a skip_tests=() + local skip_teststype=$(declare -p skip_tests 2>&-) + if [[ "${skip_teststype}" != "declare -a skip_tests="* ]]; then + die "skip_tests must be declared as array" + fi + + skip_tests=( ${skip_tests[@]/#/--skip } ) + + # The skip flags must be passed to the test harness, after a '--' + # on the command line. + # To avoid breakage if the caller of cargo_src_test also passes '--', + # we split the caller args and group the skip args together with the + # caller args. + local args=( $@ ) + + sep="${#args}" + for i in "${!args[@]}"; do + [[ "${args[i]}" == "--" ]] && sep="$i"; + done + + cargo_test_args=( ${args[@]:0:sep} ) + test_harness_args=( -- ${skip_tests[@]} ${args[@]:sep} ) + + set -- "${CARGO}" test $(usex debug "" --release) \ + ${ECARGO_ARGS[@]} \ + ${cargo_test_args[@]} \ + ${test_harness_args[@]} einfo "${@}" cargo_env "${@}" || die "cargo test failed" } -- 2.53.0
