summaryrefslogtreecommitdiff
path: root/unit-tests/varmod.mk
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests/varmod.mk')
-rw-r--r--unit-tests/varmod.mk51
1 files changed, 47 insertions, 4 deletions
diff --git a/unit-tests/varmod.mk b/unit-tests/varmod.mk
index 68bf165bf72b4..0a2a4c52c29b3 100644
--- a/unit-tests/varmod.mk
+++ b/unit-tests/varmod.mk
@@ -1,8 +1,51 @@
-# $NetBSD: varmod.mk,v 1.2 2020/08/16 14:25:16 rillig Exp $
+# $NetBSD: varmod.mk,v 1.3 2020/09/13 07:42:20 rillig Exp $
#
# Tests for variable modifiers, such as :Q, :S,from,to or :Ufallback.
-# TODO: Implementation
+DOLLAR1= $$
+DOLLAR2= ${:U\$}
-all:
- @:;
+# To get a single '$' sign in the value of a variable expression, it has to
+# be written as '$$' in a literal variable value.
+#
+# See Var_Parse, where it calls Var_Subst.
+.if ${DOLLAR1} != "\$"
+. error
+.endif
+
+# Another way to get a single '$' sign is to use the :U modifier. In the
+# argument of that modifier, a '$' is escaped using the backslash instead.
+#
+# See Var_Parse, where it calls Var_Subst.
+.if ${DOLLAR2} != "\$"
+. error
+.endif
+
+# It is also possible to use the :U modifier directly in the expression.
+#
+# See Var_Parse, where it calls Var_Subst.
+.if ${:U\$} != "\$"
+. error
+.endif
+
+# XXX: As of 2020-09-13, it is not possible to use '$$' in a variable name
+# to mean a single '$'. This contradicts the manual page, which says that
+# '$' can be escaped as '$$'.
+.if ${$$:L} != ""
+. error
+.endif
+
+# In lint mode, make prints helpful error messages.
+# For compatibility, make does not print these error messages in normal mode.
+# Should it?
+.MAKEFLAGS: -dL
+.if ${$$:L} != ""
+. error
+.endif
+
+# A '$' followed by nothing is an error as well.
+.if ${:Uword:@word@${word}$@} != "word"
+. error
+.endif
+
+all: # nothing