summaryrefslogtreecommitdiff
path: root/regress/infra-unittests
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2020-07-01 08:15:58 +0000
committerrillig <rillig@pkgsrc.org>2020-07-01 08:15:58 +0000
commitff50c412d18c6ad05b34e1f67927a6389a00f7ec (patch)
tree7f23fb0fc0f5b4fc89a9a65a0a80e500048dda8d /regress/infra-unittests
parent196ad11ac5677deecb284c4e8131999f657c782f (diff)
downloadpkgsrc-ff50c412d18c6ad05b34e1f67927a6389a00f7ec.tar.gz
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.
Diffstat (limited to 'regress/infra-unittests')
-rw-r--r--regress/infra-unittests/show-all.sh157
1 files changed, 157 insertions, 0 deletions
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