From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id C733C1382C5 for ; Fri, 8 Jan 2021 00:14:30 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 4616EE087B; Fri, 8 Jan 2021 00:14:27 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 0D44FE083E for ; Fri, 8 Jan 2021 00:14:27 +0000 (UTC) From: Conrad Kostecki To: gentoo-dev@lists.gentoo.org Subject: [gentoo-dev] [PATCH v3] eclass/lua-utils.eclass: Add support for test-runners Date: Fri, 8 Jan 2021 01:14:15 +0100 Message-Id: <20210108001415.3124-1-conikost@gentoo.org> X-Mailer: git-send-email 2.30.0 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Archives-Salt: 1fa70236-c092-4298-a54e-fa8a791ca73f X-Archives-Hash: 2ddadd3ec6853d12e09e189c087cbdc6 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. PATCH v2 has two changes: - removed EAPI condition, as lua-utils is EAPI=7 only. - make test_directoy as a local variable and use eval in src_test to read it. PATCH v3 has the right patch, as v2 was wrong. Signed-off-by: Conrad Kostecki --- eclass/lua-utils.eclass | 70 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) 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: +# @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 , +# so will use that directory to search for tests. +# If not passed, a default directory of 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: [] # @DESCRIPTION: -- 2.30.0