From nobody Fri Jun 03 17:01:17 2022 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 0AE8C1BD6004; Fri, 3 Jun 2022 17:01:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LF8Kn5P9cz3vqW; Fri, 3 Jun 2022 17:01:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654275677; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UTpQ37jVoeNzbkRFWhHusY+z3BDAic4oWQSIOxxLHs4=; b=eknwsPQHQI1jYzV16kpFqOTmIH79/z5W6TMBT7wnGTqqPIba8Ze1OMJ2baXhVQJok3r1P3 buhfQdBQhVvP1fbHVbDeAcmJLJIPUecspVqPD6w/ofDFSeZTmI65nM8IT/Sm+dosdKjqxX +L0DbD8xJW1UH35PIyMjniQJ0iGnN5Y83UNEP4qMTBIi9MEo7D0qrehgeCM0F9FF/UqmLY QOsRDK+7VF+vYnnBPcmXa9WOb6ME+trtl1BkSDOb0oG0eSjX07J3hOSaJv+jsYz3iRGHIY 2JaudtHdCVQTO4VISm7xBDp9AWbtLjTo2Jh4MePsGQ5M6nOglqxjcAupoKDrlw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6D3F35381; Fri, 3 Jun 2022 17:01:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 253H1HYl049429; Fri, 3 Jun 2022 17:01:17 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 253H1HoZ049428; Fri, 3 Jun 2022 17:01:17 GMT (envelope-from git) Date: Fri, 3 Jun 2022 17:01:17 GMT Message-Id: <202206031701.253H1HoZ049428@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Po-Chuan Hsieh Subject: git: 535f310d337c - main - Mk/Uses/python.mk: Add preliminary support for "make test" for nose, nose2, pytest, unittest and unittest2 List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: sunpoet X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 535f310d337c0b7de64a972bc0b855bba6c6f1f0 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654275677; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UTpQ37jVoeNzbkRFWhHusY+z3BDAic4oWQSIOxxLHs4=; b=aRDUR0lp3dd8DVeNYbI/fdsRwbchMQWgLEdY+mHliQDv+eP6vO+ihPnK77IzYyAiyOxiS/ dSLciFqSGKkDNW/g6oYO6qm0Tr6bgM6sB2PJVSgb19PHHdH6yfMvGJAM1a+xkoyyuw/hAX 7qGVMU/3kvgw3mJeog/5WnnxjlPxqKEbSa9KuKTzxWJW99AQoyGonbpMok6wWv6YSh7+sM QZRwfzJKQI0C/JQLFo6rsQiBlXFiE19Klljx+JHHwEfx69r13TSxLKF9s0t1UZnd9Zhhbt ydh7bwSndMuNWK3OYhG06P5fow49H8P4EydG9RUMCmRqNFJW6/VRy95+7j1s5A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1654275677; a=rsa-sha256; cv=none; b=feC9tV5UffzpRe540B/hdPpfy4eJD2nTA1bgQUxhb50T27w/7kkYoc6z7+mHErDytNhKax 38DxMFIsOZfriVCc+Umh0CWNGPVLA4C/apTlSvMLDU3917WYh58W8vdHA9grwJxUWL2V1d nUh7j1abUILk/BjQUUwxICSJU+mmGMuIfZWAWU+Pk9P6KjPRF0Zlup/J/qknWPSIeemxgM eUy69rVUA+REtRnt3X7vwD6uFtiE5eaGm+fuqSZkuwHuDo9YDiclSERoHOj8TFynYN1jXD 1lr8ATjrxAlmB0bxMUS/ejjo4gS9UV5lrMGCJW/dSK6vBfgWuQ0JZlhz9eje5g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by sunpoet: URL: https://cgit.FreeBSD.org/ports/commit/?id=535f310d337c0b7de64a972bc0b855bba6c6f1f0 commit 535f310d337c0b7de64a972bc0b855bba6c6f1f0 Author: Po-Chuan Hsieh AuthorDate: 2022-06-03 16:56:59 +0000 Commit: Po-Chuan Hsieh CommitDate: 2022-06-03 16:56:59 +0000 Mk/Uses/python.mk: Add preliminary support for "make test" for nose, nose2, pytest, unittest and unittest2 This patch adds preliminary support for "make test". It supports nose, nose2, pytest, unittest and unittest2. Enable this by adding one of the following: USE_PYTHON=nose USE_PYTHON=nose2 USE_PYTHON=pytest USE_PYTHON=unittest USE_PYTHON=unittest2 The pytest support was derived from USES=pytest. All user-facing variables are kept unchanged except PYTEST_ARGS which has been changed to generic TEST_ARGS. USES=pytest can be changed to USE_PYTHON=pytest as follows: USES=pytest -> USE_PYTHON=pytest USES=pytest:4 -> USE_PYTHON=pytest4 PYTEST_ARGS -> TEST_ARGS --- Mk/Uses/python.mk | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 2 deletions(-) diff --git a/Mk/Uses/python.mk b/Mk/Uses/python.mk index 54f311ca5fe0..ee4d670fa57a 100644 --- a/Mk/Uses/python.mk +++ b/Mk/Uses/python.mk @@ -119,6 +119,18 @@ # # noegginfo - Skip an egg-info entry from plist, if defined. # +# nose - Run tests with nose (devel/py-nose) +# +# nose2 - Run tests with nose2 (devel/py-nose2) +# +# pytest - Run tests with latest pytest (devel/py-pytest) +# +# pytest4 - Run tests with pytest 4.x (devel/py-pytest4) +# +# unittest - Run tests with unittest +# +# unittest2 - Run tests with unittest2 (devel/py-unittest2) +# # PYTHON_CMD - Python's command line file name, including the # version number (used for dependencies). # default: ${PYTHONBASE}/bin/${PYTHON_VERSION} @@ -163,6 +175,14 @@ # - Canonical name for egg-info. # default: ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info # +# PYTEST_BROKEN_TESTS - Lists of 'pytest -k' patterns to skip tests which +# require fixing. +# default: +# +# PYTEST_IGNORED_TESTS - Lists of 'pytest -k' patterns to skip tests which are +# not expected to pass, e.g. requiring a database access. +# default: +# # The following variables can be read by ports and must not be modified: # # PYTHONBASE - The installation prefix of the chosen Python @@ -240,6 +260,13 @@ # PYDISTUTILS_INSTALLNOSINGLE # - Deprecated without replacement # +# The following variables may be set by the user: +# +# PYTEST_ENABLE_ALL_TESTS - Enable tests skipped by PYTEST_BROKEN_TESTS +# and PYTEST_IGNORED_TESTS. +# PYTEST_ENABLE_BROKEN_TESTS - Enable tests skipped by PYTEST_BROKEN_TESTS. +# PYTEST_ENABLE_IGNORED_TESTS - Enable tests skipped by PYTEST_IGNORED_TESTS. +# # MAINTAINER: python@FreeBSD.org .if !defined(_INCLUDE_USES_PYTHON_MK) @@ -255,8 +282,9 @@ _PYTHON_RELPORTDIR= lang/python # List all valid USE_PYTHON features here _VALID_PYTHON_FEATURES= allflavors autoplist concurrent cython cython_run \ - distutils flavors noegginfo noflavors optsuffix \ - py3kplist pythonprefix + distutils flavors noegginfo noflavors nose nose2 \ + optsuffix py3kplist pytest pytest4 pythonprefix \ + unittest unittest2 _INVALID_PYTHON_FEATURES= . for var in ${USE_PYTHON} . if empty(_VALID_PYTHON_FEATURES:M${var}) @@ -271,6 +299,9 @@ IGNORE= uses unknown USE_PYTHON features: ${_INVALID_PYTHON_FEATURES} . for var in ${USE_PYTHON} _PYTHON_FEATURE_${var:C/=.*$//:tu}= ${var:C/.*=//:S/,/ /g} . endfor +. if defined(_PYTHON_FEATURE_PYTEST) && defined(_PYTHON_FEATURE_PYTEST4) +IGNORE= uses either USE_PYTHON=pytest or USE_PYTHON=pytest4, not both of them +. endif # distutils automatically generates flavors depending on the supported # versions. @@ -587,6 +618,42 @@ PYDISTUTILS_PKGVERSION?=${PORTVERSION} PYDISTUTILS_EGGINFO?= ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info PYDISTUTILS_EGGINFODIR?=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} +# nose support +. if defined(_PYTHON_FEATURE_NOSE) +TEST_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}nose>=0:devel/py-nose@${PY_FLAVOR} +. endif + +# nose2 support +. if defined(_PYTHON_FEATURE_NOSE2) +TEST_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}nose2>=0:devel/py-nose2@${PY_FLAVOR} +. endif + +# pytest support +. if defined(_PYTHON_FEATURE_PYTEST) +TEST_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}pytest>=7,1:devel/py-pytest@${PY_FLAVOR} +. elif defined(_PYTHON_FEATURE_PYTEST4) +TEST_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}pytest4>=4.6,1:devel/py-pytest4@${PY_FLAVOR} +. endif +. if defined(_PYTHON_FEATURE_PYTEST) || defined(_PYTHON_FEATURE_PYTEST4) +PYTEST_BROKEN_TESTS?= # empty +PYTEST_IGNORED_TESTS?= # empty +_PYTEST_SKIPPED_TESTS?= # empty +. if !defined(PYTEST_ENABLE_ALL_TESTS) +. if !defined(PYTEST_ENABLE_BROKEN_TESTS) +_PYTEST_SKIPPED_TESTS+= ${PYTEST_BROKEN_TESTS} +. endif +. if !defined(PYTEST_ENABLE_IGNORED_TESTS) +_PYTEST_SKIPPED_TESTS+= ${PYTEST_IGNORED_TESTS} +. endif +. endif # !defined(PYTEST_ENABLE_ALL_TESTS) +_PYTEST_FILTER_EXPRESSION= ${_PYTEST_SKIPPED_TESTS:C/^(.)/and not \1/:tW:C/^and //} +. endif # defined(_PYTHON_FEATURE_PYTEST) || defined(_PYTHON_FEATURE_PYTEST4) + +# unittest2 support +. if defined(_PYTHON_FEATURE_UNITTEST2) +TEST_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}unittest2>=0:devel/py-unittest2@${PY_FLAVOR} +. endif + . if !defined(_PYTHON_FEATURE_NOEGGINFO) && \ !defined(_PYTHON_FEATURE_AUTOPLIST) && \ defined(_PYTHON_FEATURE_DISTUTILS) && \ @@ -722,4 +789,40 @@ do-install: @(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS}) . endif . endif # defined(_PYTHON_FEATURE_DISTUTILS) + +. if defined(_PYTHON_FEATURE_NOSE) +. if !target(do-test) +do-test: + cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m nose ${TEST_ARGS:NDESTDIR=*} -v +. endif +. endif # defined(_PYTHON_FEATURE_NOSE) + +. if defined(_PYTHON_FEATURE_NOSE2) +. if !target(do-test) +do-test: + cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m nose2 ${TEST_ARGS:NDESTDIR=*} -v +. endif +. endif # defined(_PYTHON_FEATURE_NOSE2) + +. if defined(_PYTHON_FEATURE_PYTEST) || defined(_PYTHON_FEATURE_PYTEST4) +. if !target(do-test) +do-test: + cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m pytest -k '${_PYTEST_FILTER_EXPRESSION}' -rs -v -o addopts= ${TEST_ARGS:NDESTDIR=*} +. endif +. endif # defined(_PYTHON_FEATURE_PYTEST) || defined(_PYTHON_FEATURE_PYTEST4) + +. if defined(_PYTHON_FEATURE_UNITTEST) +. if !target(do-test) +do-test: + cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m unittest ${TEST_ARGS:NDESTDIR=*} -v +. endif +. endif # defined(_PYTHON_FEATURE_UNITTEST) + +. if defined(_PYTHON_FEATURE_UNITTEST2) +. if !target(do-test) +do-test: + cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m unittest2 ${TEST_ARGS:NDESTDIR=*} -v +. endif +. endif # defined(_PYTHON_FEATURE_UNITTEST2) + .endif # defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK)