From ff50c412d18c6ad05b34e1f67927a6389a00f7ec Mon Sep 17 00:00:00 2001 From: rillig Date: Wed, 1 Jul 2020 08:15:58 +0000 Subject: regress/show-all: migrate to regress/infra-unittests The test framework over there makes it easier to run several independent tests. The previous way of squeezing all tests into a single package Makefile did not scale well and made it invonvenient to add new tests. In addition, there was no need to create a full-fledged package just to test this tiny piece of the pkgsrc infrastructure, since that can be used in categories and the top-level as well. --- regress/infra-unittests/show-all.sh | 157 ++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 regress/infra-unittests/show-all.sh (limited to 'regress/infra-unittests') diff --git a/regress/infra-unittests/show-all.sh b/regress/infra-unittests/show-all.sh new file mode 100644 index 00000000000..443f6d61bf5 --- /dev/null +++ b/regress/infra-unittests/show-all.sh @@ -0,0 +1,157 @@ +#! /bin/sh +# $NetBSD: show-all.sh,v 1.1 2020/07/01 08:15:58 rillig Exp $ +# +# Tests for the show-all target from mk/misc/show.mk. +# +# Ensures that the show-all target prints all variants of variable +# values as intended. This involves sorted multi-valued variables (like +# CONFIGURE_ENV), other multi-valued variables (like CONFIGURE_ARGS), +# variables containing special characters that need to be escaped, and +# various other edge cases. +# + +. './test.subr' + + +if test_case_begin 'show all'; then + + # Ensures that the output of the show-all target is easily + # recognizable by pkgsrc developers. + # + # The variable values are aligned in column 24 by default. The + # variable assignments have the same form as those that are + # written in Makefiles. + # + # For lists of values, each value is written on a line of its + # own, to aid readability. The final line only contains the + # comment marker, for ease of implementation. This comment + # marker also provides a convenient place for remarks like + # "sorted" or "ends with space". + + create_file 'test.mk' <<'EOF' +REGRESS.empty= # empty +REGRESS.space= ${:U } # a single space +REGRESS.value= All * kinds of `strange' \escape $$characters + +REGRESS_ENV.empty= # empty +REGRESS_ENV.space= ${:U } # a single space +REGRESS_ENV.value= VAR1=value1 VAR2=`command execution via backticks` *=all + +REGRESS_ARGS.empty= # empty +REGRESS_ARGS.space= ${:U } # a single space +REGRESS_ARGS.value= VAR1=value1 VAR2=`command execution via backticks` *=all + +# Variable names may also contain special characters that must be escaped. +# +# The "*" variable is built-in into bmake and expands to the current +# make target, which in this case is "show-all-regress". +# +# The "**" variable ensures that show-all doesn't accidentally expand +# filenames. +*= bmake built-in +**= asterisk + +_VARGROUPS+= regress +_PKG_VARS.regress+= REGRESS_ENV.undefined REGRESS_ENV.empty REGRESS_ENV.space REGRESS_ENV.value +_PKG_VARS.regress+= REGRESS_ARGS.undefined REGRESS_ARGS.empty REGRESS_ARGS.space REGRESS_ARGS.value +_PKG_VARS.regress+= REGRESS.undefined REGRESS.empty REGRESS.space REGRESS.value +_PKG_VARS.regress+= * ** +_SORTED_VARS.regress= *_ENV.* +_LISTED_VARS.regress= *_ARGS.* + +RUN= @set -eu; +.include "${PKGSRCDIR}/mk/misc/show.mk" +EOF + + PKGSRCDIR="$pkgsrcdir" \ + "$make" -f 'test.mk' 'show-all-regress' 1> 'output' 2>&1 \ + && exitcode=0 || exitcode=$? + + create_file 'expected' <<'EOF' +regress: + pkg REGRESS_ENV.undefined # undefined + pkg REGRESS_ENV.empty= # empty + pkg REGRESS_ENV.space= # empty + pkg REGRESS_ENV.value= \ + *=all \ + VAR1=value1 \ + VAR2=`command \ + backticks` \ + execution \ + via \ + # end of REGRESS_ENV.value (sorted) + pkg REGRESS_ARGS.undefined # undefined + pkg REGRESS_ARGS.empty= # empty + pkg REGRESS_ARGS.space= # empty + pkg REGRESS_ARGS.value= \ + VAR1=value1 \ + VAR2=`command \ + execution \ + via \ + backticks` \ + *=all \ + # end of REGRESS_ARGS.value + pkg REGRESS.undefined # undefined + pkg REGRESS.empty= # empty + pkg REGRESS.space= # ends with space + pkg REGRESS.value= All * kinds of `strange' \escape $$characters + pkg *= show-all-regress + pkg **= asterisk + +EOF + + # On first sight it may seem strange that bmake doesn't handle + # the backticks command as a single word. Luckily, this is a + # rare case. + # + # On the other hand, if it did, bmake would also have to handle + # variable expansion and all the other syntactic difficulties + # from parsing shell commands, and that would be just too much. + + assert_that "$exitcode" --equals '0' + assert_that 'output' --file-equals 'expected' + + test_case_end +fi + + +if test_case_begin 'show dollars in variable values'; then + + create_file 'test.mk' <<'EOF' +SHELLVAR_PLAIN= "$$var $${var} $$other $$$$" +SHELLVAR_ENV= "$$var $${var} $$other $$$$" +SHELLVAR_ARGS= "$$var $${var} $$other $$$$" + +_VARGROUPS+= shellvar +_PKG_VARS.shellvar= SHELLVAR_PLAIN SHELLVAR_ENV SHELLVAR_ARGS +_SORTED_VARS.shellvar= *_ENV +_LISTED_VARS.shellvar= *_ARGS + +RUN= @set -eu; +.include "${PKGSRCDIR}/mk/misc/show.mk" +EOF + + PKGSRCDIR="$pkgsrcdir" \ + "$make" -f 'test.mk' 'show-all-shellvar' 1> 'output' 2>&1 \ + && exitcode=0 || exitcode=$? + + # Up to 2020-03-20, the output of the ENV and ARGS variables differed + # a lot from the PLAIN variable. + # + create_file 'expected' <<'EOF' +shellvar: + pkg SHELLVAR_PLAIN= "$$var $${var} $$other $$$$" + pkg SHELLVAR_ENV= \ + "$$var $${var} $$other $$$$" \ + # end of SHELLVAR_ENV (sorted) + pkg SHELLVAR_ARGS= \ + "$$var $${var} $$other $$$$" \ + # end of SHELLVAR_ARGS + +EOF + + assert_that "$exitcode" --equals '0' + assert_that 'output' --file-equals 'expected' + + test_case_end +fi -- cgit v1.2.3