xref: /freebsd/contrib/bmake/unit-tests/cond-cmp-string.mk (revision 36d6566e5985030fd2f1100bd9c1387bbe0bd290)
1# $NetBSD: cond-cmp-string.mk,v 1.11 2020/10/30 14:53:31 rillig Exp $
2#
3# Tests for string comparisons in .if conditions.
4
5# This is a simple comparison of string literals.
6# Nothing surprising here.
7.if "str" != "str"
8.  error
9.endif
10
11# The right-hand side of the comparison may be written without quotes.
12.if "str" != str
13.  error
14.endif
15
16# The left-hand side of the comparison must be enclosed in quotes.
17# This one is not enclosed in quotes and thus generates an error message.
18.if str != str
19.  error
20.endif
21
22# The left-hand side of the comparison requires a defined variable.
23# The variable named "" is not defined, but applying the :U modifier to it
24# makes it "kind of defined" (see VAR_KEEP).  Therefore it is ok here.
25.if ${:Ustr} != "str"
26.  error
27.endif
28
29# Any character in a string literal may be escaped using a backslash.
30# This means that "\n" does not mean a newline but a simple "n".
31.if "string" != "\s\t\r\i\n\g"
32.  error
33.endif
34
35# It is not possible to concatenate two string literals to form a single
36# string.
37.if "string" != "str""ing"
38.  error
39.endif
40
41# There is no = operator for strings.
42.if !("value" = "value")
43.  error
44.else
45.  error
46.endif
47
48# There is no === operator for strings either.
49.if !("value" === "value")
50.  error
51.else
52.  error
53.endif
54
55# A variable expression can be enclosed in double quotes.
56.if ${:Uword} != "${:Uword}"
57.  error
58.endif
59
60# Between 2003-01-01 (maybe even earlier) and 2020-10-30, adding one of the
61# characters " \t!=><" directly after a variable expression resulted in a
62# "Malformed conditional", even though the string was well-formed.
63.if ${:Uword } != "${:Uword} "
64.  error
65.endif
66# Some other characters worked though, and some didn't.
67# Those that are mentioned in is_separator didn't work.
68.if ${:Uword0} != "${:Uword}0"
69.  error
70.endif
71.if ${:Uword&} != "${:Uword}&"
72.  error
73.endif
74.if ${:Uword!} != "${:Uword}!"
75.  error
76.endif
77.if ${:Uword<} != "${:Uword}<"
78.  error
79.endif
80
81# Adding another variable expression to the string literal works though.
82.if ${:Uword} != "${:Uwo}${:Urd}"
83.  error
84.endif
85
86# Adding a space at the beginning of the quoted variable expression works
87# though.
88.if ${:U word } != " ${:Uword} "
89.  error
90.endif
91