summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Kostecki <conikost@gentoo.org>2021-01-04 14:15:19 +0100
committerConrad Kostecki <conikost@gentoo.org>2021-01-20 22:18:16 +0100
commit0ee2ce738bd38c7ffcdc69943e66273e38f5a189 (patch)
tree3f66cfeb261eb4176bdff74c8d0fab6e06a2c084 /eclass/lua-utils.eclass
parentsys-apps/haveged: Revbump to not install .la files (diff)
downloadgentoo-0ee2ce738bd38c7ffcdc69943e66273e38f5a189.tar.gz
gentoo-0ee2ce738bd38c7ffcdc69943e66273e38f5a189.tar.bz2
gentoo-0ee2ce738bd38c7ffcdc69943e66273e38f5a189.zip
eclass/lua-utils.eclass: Add support for test-runners
During migration of dev-lua/* ebuilds to slotted lua, I noticed, that many ebuilds use 'dev-lua/busted' for running tests. This change adds support for running a test-runner, at first only 'busted' for now. Also a non-color and plaintext output will be used for the test-runner 'busted'. This is basically a copy of the test-runner section, written by mgorny, which already exists in 'distutils-r1', but modified and adapted to lua. In order to use this feature, you can define 'lua_enable_tests busted' to setup everything needed for tests and run them. By default, 'dev-lua/busted' assumes, that tests are in the 'spec' folder. If this is not the case, you can add a second argument to specify a different folder. For example, if the folder is called 'foo', you can just run 'lua_enable_tests busted foo'. More test-runners can be added in future, if needed. Signed-off-by: Conrad Kostecki <conikost@gentoo.org>
Diffstat (limited to 'eclass/lua-utils.eclass')
-rw-r--r--eclass/lua-utils.eclass70
1 files changed, 70 insertions, 0 deletions
diff --git a/eclass/lua-utils.eclass b/eclass/lua-utils.eclass
index 100be14cb08..0589318ef51 100644
--- a/eclass/lua-utils.eclass
+++ b/eclass/lua-utils.eclass
@@ -344,6 +344,76 @@ _lua_export() {
done
}
+# @FUNCTION: lua_enable_tests
+# @USAGE: <test-runner> <test-directory>
+# @DESCRIPTION:
+# Set up IUSE, RESTRICT, BDEPEND and src_test() for running tests
+# with the specified test runner. Also copies the current value
+# of RDEPEND to test?-BDEPEND. The test-runner argument must be one of:
+#
+# - busted: dev-lua/busted
+#
+# Additionally, a second argument can be passed after <test-runner>,
+# so <test-runner> will use that directory to search for tests.
+# If not passed, a default directory of <test-runner> will be used.
+#
+# - busted: spec
+#
+# This function is meant as a helper for common use cases, and it only
+# takes care of basic setup. You still need to list additional test
+# dependencies manually. If you have uncommon use case, you should
+# not use it and instead enable tests manually.
+#
+# This function must be called in global scope, after RDEPEND has been
+# declared. Take care not to overwrite the variables set by it.
+lua_enable_tests() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ [[ ${#} -ge 1 ]] || die "${FUNCNAME} takes at least one argument: test-runner (test-directory)"
+ local test_directory
+ local test_pkg
+ case ${1} in
+ busted)
+ test_directory="${2:-spec}"
+ test_pkg="dev-lua/busted"
+ if [[ ! ${_LUA_SINGLE_R0} ]]; then
+ eval "lua_src_test() {
+ busted --lua=\"\${ELUA}\" --output=\"plainTerminal\" \"${test_directory}\" || die \"Tests fail with \${ELUA}\"
+ }"
+ src_test() {
+ lua_foreach_impl lua_src_test
+ }
+ else
+ eval "src_test() {
+ busted --lua=\"\${ELUA}\" --output=\"plainTerminal\" \"${test_directory}\" || die \"Tests fail with \${ELUA}\"
+ }"
+ fi
+ ;;
+ *)
+ die "${FUNCNAME}: unsupported argument: ${1}"
+ esac
+
+ local test_deps=${RDEPEND}
+ if [[ -n ${test_pkg} ]]; then
+ if [[ ! ${_LUA_SINGLE_R0} ]]; then
+ test_deps+=" ${test_pkg}[${LUA_USEDEP}]"
+ else
+ test_deps+=" $(lua_gen_cond_dep "
+ ${test_pkg}[\${LUA_USEDEP}]
+ ")"
+ fi
+ fi
+ if [[ -n ${test_deps} ]]; then
+ IUSE+=" test"
+ RESTRICT+=" !test? ( test )"
+ BDEPEND+=" test? ( ${test_deps} )"
+ fi
+
+ # we need to ensure successful return in case we're called last,
+ # otherwise Portage may wrongly assume sourcing failed
+ return 0
+}
+
# @FUNCTION: lua_get_CFLAGS
# @USAGE: [<impl>]
# @DESCRIPTION: