Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make/unit-tests make: add test for reading from make...



details:   https://anonhg.NetBSD.org/src/rev/e5013297ec1d
branches:  trunk
changeset: 980358:e5013297ec1d
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon Feb 01 20:31:41 2021 +0000

description:
make: add test for reading from make's stdin

Just out of curiosity whether that really works.  It does.

diffstat:

 distrib/sets/lists/tests/mi                        |   4 +-
 usr.bin/make/unit-tests/Makefile                   |   3 +-
 usr.bin/make/unit-tests/cmdline-redirect-stdin.exp |   1 +
 usr.bin/make/unit-tests/cmdline-redirect-stdin.mk  |  34 ++++++++++++++++++++++
 4 files changed, 40 insertions(+), 2 deletions(-)

diffs (78 lines):

diff -r 7286b9479409 -r e5013297ec1d distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi       Mon Feb 01 20:01:26 2021 +0000
+++ b/distrib/sets/lists/tests/mi       Mon Feb 01 20:31:41 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1014 2021/01/30 12:46:38 rillig Exp $
+# $NetBSD: mi,v 1.1015 2021/02/01 20:31:41 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -4826,6 +4826,8 @@
 ./usr/tests/usr.bin/make/unit-tests/cmd-errors.mk                              tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/cmd-interrupt.exp                          tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/cmd-interrupt.mk                           tests-usr.bin-tests     compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/cmdline-redirect-stdin.exp                 tests-usr.bin-tests     compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/cmdline-redirect-stdin.mk                  tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/cmdline-undefined.exp                      tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/cmdline-undefined.mk                       tests-usr.bin-tests     compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/cmdline.exp                                        tests-usr.bin-tests     compattestfile,atf
diff -r 7286b9479409 -r e5013297ec1d usr.bin/make/unit-tests/Makefile
--- a/usr.bin/make/unit-tests/Makefile  Mon Feb 01 20:01:26 2021 +0000
+++ b/usr.bin/make/unit-tests/Makefile  Mon Feb 01 20:31:41 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.264 2021/01/30 12:46:38 rillig Exp $
+# $NetBSD: Makefile,v 1.265 2021/02/01 20:31:41 rillig Exp $
 #
 # Unit tests for make(1)
 #
@@ -46,6 +46,7 @@
 TESTS+=                cmd-errors-lint
 TESTS+=                cmd-interrupt
 TESTS+=                cmdline
+TESTS+=                cmdline-redirect-stdin
 TESTS+=                cmdline-undefined
 TESTS+=                comment
 TESTS+=                compat-error
diff -r 7286b9479409 -r e5013297ec1d usr.bin/make/unit-tests/cmdline-redirect-stdin.exp
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/make/unit-tests/cmdline-redirect-stdin.exp        Mon Feb 01 20:31:41 2021 +0000
@@ -0,0 +1,1 @@
+exit status 0
diff -r 7286b9479409 -r e5013297ec1d usr.bin/make/unit-tests/cmdline-redirect-stdin.mk
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/make/unit-tests/cmdline-redirect-stdin.mk Mon Feb 01 20:31:41 2021 +0000
@@ -0,0 +1,34 @@
+# $NetBSD: cmdline-redirect-stdin.mk,v 1.1 2021/02/01 20:31:41 rillig Exp $
+#
+# Demonstrate that the '!=' assignment operator can read individual lines
+# from make's stdin.
+#
+# This edge case is an implementation detail that has no practical
+# application.
+
+all: .PHONY
+       @printf '%s\n' "first line" "second line" \
+       | ${MAKE} -f ${MAKEFILE} read-lines
+
+.if make(read-lines)
+line1!=                read line; echo "$$line"
+line2!=                read line; echo "$$line"
+
+.if ${line1} != "first line"
+.  error line1="${line1}"
+
+.elif ${line2} == ""
+# If this branch is ever reached, the shell from the assignment to line1
+# probably buffers its input.  Most shells use unbuffered stdin, and this
+# is actually specified by POSIX, which says that "The read utility shall
+# read a single line from standard input".  This is the reason why the shell
+# reads its input byte by byte, which makes it terribly slow for practical
+# applications.
+.  error The shell's read command does not read a single line.
+
+.elif ${line2} != "second line"
+.  error line2="${line2}"
+.endif
+
+read-lines: .PHONY
+.endif



Home | Main Index | Thread Index | Old Index