Module Name:    src
Committed By:   rillig
Date:           Sun Jan 23 18:00:54 UTC 2022

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/usr.bin/make/unit-tests: Makefile comment.mk
            varmod-to-separator.exp varmod-to-separator.mk
Removed Files:
        src/usr.bin/make/unit-tests: modts.exp modts.mk

Log Message:
tests/make: migrate modts to varmod-to-separator and explain


To generate a diff of this commit:
cvs rdiff -u -r1.1184 -r1.1185 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.299 -r1.300 src/usr.bin/make/unit-tests/Makefile
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/comment.mk
cvs rdiff -u -r1.6 -r0 src/usr.bin/make/unit-tests/modts.exp
cvs rdiff -u -r1.8 -r0 src/usr.bin/make/unit-tests/modts.mk
cvs rdiff -u -r1.8 -r1.9 src/usr.bin/make/unit-tests/varmod-to-separator.exp
cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/varmod-to-separator.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1184 src/distrib/sets/lists/tests/mi:1.1185
--- src/distrib/sets/lists/tests/mi:1.1184	Sun Jan 23 16:25:53 2022
+++ src/distrib/sets/lists/tests/mi	Sun Jan 23 18:00:53 2022
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1184 2022/01/23 16:25:53 rillig Exp $
+# $NetBSD: mi,v 1.1185 2022/01/23 18:00:53 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -5721,8 +5721,8 @@
 ./usr/tests/usr.bin/make/unit-tests/modmisc.mk					tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/modorder.exp				tests-obsolete		obsolete
 ./usr/tests/usr.bin/make/unit-tests/modorder.mk					tests-obsolete		obsolete
-./usr/tests/usr.bin/make/unit-tests/modts.exp					tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/make/unit-tests/modts.mk					tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/modts.exp					tests-obsolete		obsolete,atf
+./usr/tests/usr.bin/make/unit-tests/modts.mk					tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/make/unit-tests/modword.exp					tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/make/unit-tests/modword.mk					tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/make/unit-tests/objdir-writable.exp				tests-usr.bin-tests	compattestfile,atf

Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.299 src/usr.bin/make/unit-tests/Makefile:1.300
--- src/usr.bin/make/unit-tests/Makefile:1.299	Sun Jan 23 16:25:54 2022
+++ src/usr.bin/make/unit-tests/Makefile	Sun Jan 23 18:00:53 2022
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.299 2022/01/23 16:25:54 rillig Exp $
+# $NetBSD: Makefile,v 1.300 2022/01/23 18:00:53 rillig Exp $
 #
 # Unit tests for make(1)
 #
@@ -218,7 +218,6 @@ TESTS+=		meta-cmd-cmp
 TESTS+=		moderrs
 TESTS+=		modmatch
 TESTS+=		modmisc
-TESTS+=		modts
 .if ${.MAKE.UID} > 0
 TESTS+=		objdir-writable
 .endif

Index: src/usr.bin/make/unit-tests/comment.mk
diff -u src/usr.bin/make/unit-tests/comment.mk:1.3 src/usr.bin/make/unit-tests/comment.mk:1.4
--- src/usr.bin/make/unit-tests/comment.mk:1.3	Sun Nov 15 14:07:53 2020
+++ src/usr.bin/make/unit-tests/comment.mk	Sun Jan 23 18:00:53 2022
@@ -1,4 +1,4 @@
-# $NetBSD: comment.mk,v 1.3 2020/11/15 14:07:53 rillig Exp $
+# $NetBSD: comment.mk,v 1.4 2022/01/23 18:00:53 rillig Exp $
 #
 # Demonstrate how comments are written in makefiles.
 
@@ -15,7 +15,9 @@ on and on.
  # Comments can be indented with spaces, but that is rather unusual.
 
 	# Comments can be indented with a tab.
-	# These are not shell commands, they are just makefile comments.
+	# Since parse.c 1.127 from 2007-01-01, these are not shell commands,
+	# they are just makefile comments.  Before that commit, these comments
+	# triggered the error message "Unassociated shell command".
 
 .if 1			# There can be comments after conditions.
 .endif			# And after the closing directive.

Index: src/usr.bin/make/unit-tests/varmod-to-separator.exp
diff -u src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.8 src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.9
--- src/usr.bin/make/unit-tests/varmod-to-separator.exp:1.8	Thu Dec  9 20:27:01 2021
+++ src/usr.bin/make/unit-tests/varmod-to-separator.exp	Sun Jan 23 18:00:53 2022
@@ -1,19 +1,21 @@
-make: "varmod-to-separator.mk" line 107: Invalid character number at "400:tu}"
-make: "varmod-to-separator.mk" line 107: Malformed conditional (${WORDS:[1..3]:ts\400:tu})
-make: "varmod-to-separator.mk" line 121: Invalid character number at "100:tu}"
-make: "varmod-to-separator.mk" line 121: Malformed conditional (${WORDS:[1..3]:ts\x100:tu})
+make: "varmod-to-separator.mk" line 153: Invalid character number at "400:tu}"
+make: "varmod-to-separator.mk" line 153: Malformed conditional (${WORDS:[1..3]:ts\400:tu})
+make: "varmod-to-separator.mk" line 167: Invalid character number at "100:tu}"
+make: "varmod-to-separator.mk" line 167: Malformed conditional (${WORDS:[1..3]:ts\x100:tu})
 make: Bad modifier ":ts\-300" for variable "WORDS"
-make: "varmod-to-separator.mk" line 128: Malformed conditional (${WORDS:[1..3]:ts\-300:tu})
+make: "varmod-to-separator.mk" line 174: Malformed conditional (${WORDS:[1..3]:ts\-300:tu})
 make: Bad modifier ":ts\8" for variable "1 2 3"
-make: "varmod-to-separator.mk" line 136: Malformed conditional (${1 2 3:L:ts\8:tu})
+make: "varmod-to-separator.mk" line 182: Malformed conditional (${1 2 3:L:ts\8:tu})
 make: Bad modifier ":ts\100L" for variable "1 2 3"
-make: "varmod-to-separator.mk" line 143: Malformed conditional (${1 2 3:L:ts\100L})
+make: "varmod-to-separator.mk" line 189: Malformed conditional (${1 2 3:L:ts\100L})
 make: Bad modifier ":ts\x40g" for variable "1 2 3"
-make: "varmod-to-separator.mk" line 150: Malformed conditional (${1 2 3:L:ts\x40g})
+make: "varmod-to-separator.mk" line 196: Malformed conditional (${1 2 3:L:ts\x40g})
 make: Bad modifier ":tx" for variable "WORDS"
-make: "varmod-to-separator.mk" line 158: Malformed conditional (${WORDS:tx} != "anything")
+make: "varmod-to-separator.mk" line 205: Malformed conditional (${WORDS:tx})
+make: Bad modifier ":ts\X" for variable "WORDS"
+make: "varmod-to-separator.mk" line 213: Malformed conditional (${WORDS:ts\X})
 make: Bad modifier ":t\X" for variable "WORDS"
-make: "varmod-to-separator.mk" line 165: Malformed conditional (${WORDS:t\X} != "anything")
+make: "varmod-to-separator.mk" line 221: Malformed conditional (${WORDS:t\X} != "anything")
 make: Fatal errors encountered -- cannot continue
 make: stopped in unit-tests
 exit status 1

Index: src/usr.bin/make/unit-tests/varmod-to-separator.mk
diff -u src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.7 src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.8
--- src/usr.bin/make/unit-tests/varmod-to-separator.mk:1.7	Sun Nov 15 20:20:58 2020
+++ src/usr.bin/make/unit-tests/varmod-to-separator.mk	Sun Jan 23 18:00:53 2022
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-to-separator.mk,v 1.7 2020/11/15 20:20:58 rillig Exp $
+# $NetBSD: varmod-to-separator.mk,v 1.8 2022/01/23 18:00:53 rillig Exp $
 #
 # Tests for the :ts variable modifier, which joins the words of the variable
 # using an arbitrary character as word separator.
@@ -80,6 +80,52 @@ WORDS=	one two three four five six
 .  warning The :ts modifier followed by an :S modifier does not work.
 .endif
 
+# After the modifier ':ts/', the expression value is a single word since all
+# spaces have been replaced with '/'.  This single word does not start with
+# 'two', which makes the modifier ':S' a no-op.
+.if ${WORDS:ts/:S/^two/2/} != "one/two/three/four/five/six"
+.  error
+.endif
+
+# After the :ts modifier, the whole string is interpreted as a single
+# word since all spaces have been replaced with x.  Because of this single
+# word, only the first 'b' is replaced with 'B'.
+.if ${aa bb aa bb aa bb:L:tsx:S,b,B,} != "aaxBbxaaxbbxaaxbb"
+.  error
+.endif
+
+# The :ts modifier also applies to word separators that are added
+# afterwards.  First, the modifier ':tsx' joins the 3 words, then the modifier
+# ':S' replaces the 2 'b's with spaces.  These spaces are part of the word,
+# so when the words are joined at the end of the modifier ':S', there is only
+# a single word, and the custom separator from the modifier ':tsx' has no
+# effect.
+.if ${a ababa c:L:tsx:S,b, ,g} != "axa a axc"
+.  error
+.endif
+
+# Adding the modifier ':M*' at the end of the above chain splits the
+# expression value and then joins it again.  At this point of splitting, the
+# newly added spaces are treated as word separators, resulting in 3 words.
+# When these 3 words are joined, the separator from the modifier ':tsx' is
+# used.
+.if ${a ababa c:L:tsx:S,b, ,g:M*} != "axaxaxaxc"
+.  error
+.endif
+
+# Not all modifiers use the separator from the previous modifier ':ts' though.
+# The modifier ':@' always uses a space as word separator instead.  This has
+# probably been an oversight during implementation.  For consistency, the
+# result should rather be "axaxaxaxc", as in the previous example.
+.if ${a ababa c:L:tsx:S,b, ,g:@v@$v@} != "axa a axc"
+.  error
+.endif
+
+# Adding a final :M* modifier applies the :ts separator again, though.
+.if ${a ababa c:L:tsx:S,b, ,g:@v@${v}@:M*} != "axaxaxaxc"
+.  error
+.endif
+
 # The separator can be \n, which is a newline.
 .if ${WORDS:[1..3]:ts\n} != "one${.newline}two${.newline}three"
 .  warning The separator \n does not produce a newline.
@@ -155,9 +201,19 @@ WORDS=	one two three four five six
 
 
 # In the :t modifier, the :t must be followed by any of A, l, s, u.
-.if ${WORDS:tx} != "anything"
-.  info This line is not reached because of the malformed condition.
-.  info If this line were reached, it would be visible in the -dcpv log.
+# expect: Bad modifier ":tx" for variable "WORDS"
+.if ${WORDS:tx}
+.  error
+.else
+.  error
+.endif
+
+# The word separator must be can only be a single character.
+# expect: Bad modifier ":ts\X" for variable "WORDS"
+.if ${WORDS:ts\X}
+.  error
+.else
+.  error
 .endif
 
 # After the backslash, only n, t, an octal number, or x and a hexadecimal
@@ -171,5 +227,3 @@ WORDS=	one two three four five six
 # for ':ts\90' ('Z' in decimal ASCII, undefined in octal)?
 
 # TODO: :ts\x1F600
-
-all:

Reply via email to