git: 16e073df4a33 - main - m4: Convert tests to ATF

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Sat, 07 Feb 2026 18:17:04 UTC
The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=16e073df4a33646fa0e0fba5b41ddc6b44df3605

commit 16e073df4a33646fa0e0fba5b41ddc6b44df3605
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-02-07 18:16:17 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-02-07 18:16:17 +0000

    m4: Convert tests to ATF
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D55115
---
 ObsoleteFiles.inc                         |   3 +
 usr.bin/m4/tests/Makefile                 |  13 +-
 usr.bin/m4/tests/legacy_test.sh           |   5 -
 usr.bin/m4/tests/m4_test.sh               | 240 ++++++++++++++++++++++++++++++
 usr.bin/m4/tests/regress.gnuprefix.err    |  44 ++++++
 usr.bin/m4/tests/regress.gnuprefix.out    |  44 ------
 usr.bin/m4/tests/regress.gnusofterror.err |   1 +
 usr.bin/m4/tests/regress.gnusofterror.out |   1 -
 usr.bin/m4/tests/regress.quotes.err       |   2 +
 usr.bin/m4/tests/regress.quotes.out       |   2 -
 usr.bin/m4/tests/regress.sh               |  32 ----
 11 files changed, 298 insertions(+), 89 deletions(-)

diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index a65251d0a9ee..e131bb0d8a82 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,9 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 20260204: replaced with ATF test
+OLD_FILES+=usr/tests/usr.bin/m4/legacy_test
+OLD_FILES+=usr/tests/usr.bin/m4/regress.sh
 
 # 20260120: remove obsolete MIT KRB5 plugin files
 OLD_LIBS+=usr/lib/krb5/plugins/kdb/db2.so.121
diff --git a/usr.bin/m4/tests/Makefile b/usr.bin/m4/tests/Makefile
index 45245d75e85d..bbf26d4e42d9 100644
--- a/usr.bin/m4/tests/Makefile
+++ b/usr.bin/m4/tests/Makefile
@@ -1,6 +1,6 @@
 PACKAGE=	tests
 
-TAP_TESTS_SH=	legacy_test
+ATF_TESTS_SH=	m4_test
 
 ${PACKAGE}FILES+=		args.m4
 ${PACKAGE}FILES+=		args2.m4
@@ -20,6 +20,10 @@ ${PACKAGE}FILES+=		m4wrap3.m4
 ${PACKAGE}FILES+=		patterns.m4
 ${PACKAGE}FILES+=		quotes.m4
 ${PACKAGE}FILES+=		redef.m4
+${PACKAGE}FILES+=		strangequotes.m4.uu
+${PACKAGE}FILES+=		translit.m4
+${PACKAGE}FILES+=		translit2.m4
+
 ${PACKAGE}FILES+=		regress.args.out
 ${PACKAGE}FILES+=		regress.args2.out
 ${PACKAGE}FILES+=		regress.comments.out
@@ -31,19 +35,18 @@ ${PACKAGE}FILES+=		regress.gnuformat.out
 ${PACKAGE}FILES+=		regress.gnupatterns.out
 ${PACKAGE}FILES+=		regress.gnupatterns2.out
 ${PACKAGE}FILES+=		regress.gnuprefix.out
+${PACKAGE}FILES+=		regress.gnuprefix.err
 ${PACKAGE}FILES+=		regress.gnusofterror.out
+${PACKAGE}FILES+=		regress.gnusofterror.err
 ${PACKAGE}FILES+=		regress.gnutranslit2.out
 ${PACKAGE}FILES+=		regress.includes.out
 ${PACKAGE}FILES+=		regress.m4wrap3.out
 ${PACKAGE}FILES+=		regress.patterns.out
 ${PACKAGE}FILES+=		regress.quotes.out
+${PACKAGE}FILES+=		regress.quotes.err
 ${PACKAGE}FILES+=		regress.redef.out
-${PACKAGE}FILES+=		regress.sh
 ${PACKAGE}FILES+=		regress.strangequotes.out
 ${PACKAGE}FILES+=		regress.translit.out
 ${PACKAGE}FILES+=		regress.translit2.out
-${PACKAGE}FILES+=		strangequotes.m4.uu
-${PACKAGE}FILES+=		translit.m4
-${PACKAGE}FILES+=		translit2.m4
 
 .include <bsd.test.mk>
diff --git a/usr.bin/m4/tests/legacy_test.sh b/usr.bin/m4/tests/legacy_test.sh
deleted file mode 100644
index 3c7842d07bf0..000000000000
--- a/usr.bin/m4/tests/legacy_test.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-SRCDIR="$(dirname "${0}")"; export SRCDIR
-
-m4 "${SRCDIR}/../regress.m4" "${SRCDIR}/regress.sh" | sh
diff --git a/usr.bin/m4/tests/m4_test.sh b/usr.bin/m4/tests/m4_test.sh
new file mode 100644
index 000000000000..671f25ff4673
--- /dev/null
+++ b/usr.bin/m4/tests/m4_test.sh
@@ -0,0 +1,240 @@
+#
+# Copyright (c) 2026 Klara, Inc.
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+m4_test()
+{
+	local dir=$(atf_get_srcdir)
+	local rc=0
+	local args opt output script
+	while getopts "1gP" opt ; do
+		case ${opt} in
+		1)
+			rc=1
+			;;
+		*)
+			args="${args% }-${opt}"
+			;;
+		esac
+	done
+	shift $((OPTIND - 1))
+	script=$1
+	output=$2
+	if [ -z "${output}" ] ; then
+		output="${script}"
+	fi
+	if [ -f "${dir}/regress.${output}.out" ] ; then
+		ln -s "${dir}/regress.${output}.out" out
+	else
+		atf_fail "regress.${output}.out not found"
+	fi
+	if [ -f "${dir}/regress.${output}.err" ] ; then
+		ln -s "${dir}/regress.${output}.err" err
+	else
+		touch err
+	fi
+	if [ -f "${dir}/${script}.m4.uu" ] ; then
+		atf_check uudecode -o "${script}.m4" "${dir}/${script}.m4.uu"
+	elif [ -f "${dir}/${script}.m4" ] ; then
+		ln -s "${dir}/${script}.m4" "${script}.m4"
+	else
+		atf_fail "${script}.m4 not found"
+	fi
+	atf_check -s exit:${rc} -o file:out -e file:err \
+	    m4 -I "${dir}" ${args} "${script}.m4"
+}
+
+args_head()
+{
+}
+args_body()
+{
+	m4_test args
+}
+
+args2_head()
+{
+}
+args2_body()
+{
+	m4_test args2
+}
+
+comments_head()
+{
+}
+comments_body()
+{
+	m4_test comments
+}
+
+esyscmd_head()
+{
+}
+esyscmd_body()
+{
+	m4_test esyscmd
+}
+
+eval_head()
+{
+}
+eval_body()
+{
+	m4_test eval
+}
+
+ff_after_dnl_head()
+{
+}
+ff_after_dnl_body()
+{
+	m4_test ff_after_dnl
+}
+
+gnueval_head()
+{
+}
+gnueval_body()
+{
+	m4_test -g gnueval
+}
+
+gnuformat_head()
+{
+}
+gnuformat_body()
+{
+	m4_test -g gnuformat
+}
+
+gnupatterns_head()
+{
+}
+gnupatterns_body()
+{
+	m4_test -g gnupatterns
+}
+
+gnupatterns2_head()
+{
+}
+gnupatterns2_body()
+{
+	m4_test -g gnupatterns2
+}
+
+gnuprefix_head()
+{
+}
+gnuprefix_body()
+{
+	m4_test -P gnuprefix
+}
+
+gnusofterror_head()
+{
+}
+gnusofterror_body()
+{
+	m4_test -1 -g gnusofterror
+}
+
+gnutranslit2_head()
+{
+}
+gnutranslit2_body()
+{
+	m4_test -g translit2 gnutranslit2
+}
+
+includes_head()
+{
+}
+includes_body()
+{
+	m4_test includes
+}
+
+m4wrap3_head()
+{
+}
+m4wrap3_body()
+{
+	m4_test m4wrap3
+}
+
+patterns_head()
+{
+}
+patterns_body()
+{
+	m4_test patterns
+}
+
+quotes_head()
+{
+}
+quotes_body()
+{
+	m4_test -1 quotes
+}
+
+redef_head()
+{
+}
+redef_body()
+{
+	m4_test redef
+}
+
+strangequotes_head()
+{
+}
+strangequotes_body()
+{
+	m4_test strangequotes
+}
+
+translit_head()
+{
+}
+translit_body()
+{
+	m4_test translit
+}
+
+translit2_head()
+{
+}
+translit2_body()
+{
+	m4_test translit2
+}
+
+atf_init_test_cases()
+{
+	atf_add_test_case args
+	atf_add_test_case args2
+	atf_add_test_case comments
+	atf_add_test_case esyscmd
+	atf_add_test_case eval
+	atf_add_test_case ff_after_dnl
+	atf_add_test_case gnueval
+	atf_add_test_case gnuformat
+	atf_add_test_case gnupatterns
+	atf_add_test_case gnupatterns2
+	atf_add_test_case gnuprefix
+	atf_add_test_case gnusofterror
+	atf_add_test_case gnutranslit2
+	atf_add_test_case includes
+	atf_add_test_case m4wrap3
+	atf_add_test_case patterns
+	atf_add_test_case quotes
+	atf_add_test_case redef
+	atf_add_test_case strangequotes
+	atf_add_test_case translit
+	atf_add_test_case translit2
+}
diff --git a/usr.bin/m4/tests/regress.gnuprefix.err b/usr.bin/m4/tests/regress.gnuprefix.err
new file mode 100644
index 000000000000..8939371e81f4
--- /dev/null
+++ b/usr.bin/m4/tests/regress.gnuprefix.err
@@ -0,0 +1,44 @@
+`m4_ifelse'	`m4_ifelse'
+`m4_dnl'	`m4_dnl'
+`m4_expr'	`m4_expr'
+`m4_builtin'	`m4_builtin'
+`m4_popdef'	`m4_popdef'
+`m4_eval'	`m4_eval'
+`m4_len'	`m4_len'
+`m4_indir'	`m4_indir'
+`m4_sinclude'	`m4_sinclude'
+`m4_index'	`m4_index'
+`m4_traceoff'	`m4_traceoff'
+`m4___file__'	`m4___file__'
+`m4_unix'	`m4_unix'
+`m4_mkstemp'	`m4_mkstemp'
+`m4_changecom'	`m4_changecom'
+`m4_defn'	`m4_defn'
+`m4_decr'	`m4_decr'
+`m4_translit'	`m4_translit'
+`m4_patsubst'	`m4_patsubst'
+`m4_dumpdef'	`m4_dumpdef'
+`m4___line__'	`m4___line__'
+`m4_esyscmd'	`m4_esyscmd'
+`m4_traceon'	`m4_traceon'
+`m4_incr'	`m4_incr'
+`m4_shift'	`m4_shift'
+`m4_syscmd'	`m4_syscmd'
+`m4_include'	`m4_include'
+`m4_pushdef'	`m4_pushdef'
+`m4_paste'	`m4_paste'
+`m4_regexp'	`m4_regexp'
+`m4_changequote'	`m4_changequote'
+`m4_undivert'	`m4_undivert'
+`m4_m4exit'	`m4_m4exit'
+`m4_substr'	`m4_substr'
+`m4_m4wrap'	`m4_m4wrap'
+`m4_ifdef'	`m4_ifdef'
+`m4_sysval'	`m4_sysval'
+`m4_divert'	`m4_divert'
+`m4_maketemp'	`m4_maketemp'
+`m4_spaste'	`m4_spaste'
+`m4_define'	`m4_define'
+`m4_undefine'	`m4_undefine'
+`m4_divnum'	`m4_divnum'
+`m4_errprint'	`m4_errprint'
diff --git a/usr.bin/m4/tests/regress.gnuprefix.out b/usr.bin/m4/tests/regress.gnuprefix.out
index 186421d8650b..3e86f4db699c 100644
--- a/usr.bin/m4/tests/regress.gnuprefix.out
+++ b/usr.bin/m4/tests/regress.gnuprefix.out
@@ -1,46 +1,2 @@
-`m4_ifelse'	`m4_ifelse'
-`m4_dnl'	`m4_dnl'
-`m4_expr'	`m4_expr'
-`m4_builtin'	`m4_builtin'
-`m4_popdef'	`m4_popdef'
-`m4_eval'	`m4_eval'
-`m4_len'	`m4_len'
-`m4_indir'	`m4_indir'
-`m4_sinclude'	`m4_sinclude'
-`m4_index'	`m4_index'
-`m4_traceoff'	`m4_traceoff'
-`m4___file__'	`m4___file__'
-`m4_unix'	`m4_unix'
-`m4_mkstemp'	`m4_mkstemp'
-`m4_changecom'	`m4_changecom'
-`m4_defn'	`m4_defn'
-`m4_decr'	`m4_decr'
-`m4_translit'	`m4_translit'
-`m4_patsubst'	`m4_patsubst'
-`m4_dumpdef'	`m4_dumpdef'
-`m4___line__'	`m4___line__'
-`m4_esyscmd'	`m4_esyscmd'
-`m4_traceon'	`m4_traceon'
-`m4_incr'	`m4_incr'
-`m4_shift'	`m4_shift'
-`m4_syscmd'	`m4_syscmd'
-`m4_include'	`m4_include'
-`m4_pushdef'	`m4_pushdef'
-`m4_paste'	`m4_paste'
-`m4_regexp'	`m4_regexp'
-`m4_changequote'	`m4_changequote'
-`m4_undivert'	`m4_undivert'
-`m4_m4exit'	`m4_m4exit'
-`m4_substr'	`m4_substr'
-`m4_m4wrap'	`m4_m4wrap'
-`m4_ifdef'	`m4_ifdef'
-`m4_sysval'	`m4_sysval'
-`m4_divert'	`m4_divert'
-`m4_maketemp'	`m4_maketemp'
-`m4_spaste'	`m4_spaste'
-`m4_define'	`m4_define'
-`m4_undefine'	`m4_undefine'
-`m4_divnum'	`m4_divnum'
-`m4_errprint'	`m4_errprint'
 dumpdef()
 
diff --git a/usr.bin/m4/tests/regress.gnusofterror.err b/usr.bin/m4/tests/regress.gnusofterror.err
new file mode 100644
index 000000000000..d34464e85791
--- /dev/null
+++ b/usr.bin/m4/tests/regress.gnusofterror.err
@@ -0,0 +1 @@
+m4: gnusofterror.m4 at line 2: include(hey I do not exit): No such file or directory
diff --git a/usr.bin/m4/tests/regress.gnusofterror.out b/usr.bin/m4/tests/regress.gnusofterror.out
index 5c23eb237b6c..8baef1b4abc4 100644
--- a/usr.bin/m4/tests/regress.gnusofterror.out
+++ b/usr.bin/m4/tests/regress.gnusofterror.out
@@ -1,2 +1 @@
-m4: gnusofterror.m4 at line 2: include(hey I do not exit): No such file or directory
 abc
diff --git a/usr.bin/m4/tests/regress.quotes.err b/usr.bin/m4/tests/regress.quotes.err
new file mode 100644
index 000000000000..50eb78ca62df
--- /dev/null
+++ b/usr.bin/m4/tests/regress.quotes.err
@@ -0,0 +1,2 @@
+m4: unclosed quote:
+   quotes.m4 at line 54
diff --git a/usr.bin/m4/tests/regress.quotes.out b/usr.bin/m4/tests/regress.quotes.out
index cf34ba42a8d0..df38b6e6cd4d 100644
--- a/usr.bin/m4/tests/regress.quotes.out
+++ b/usr.bin/m4/tests/regress.quotes.out
@@ -1,5 +1,3 @@
-m4: unclosed quote:
-   quotes.m4 at line 54
 1: normal
 quoted string
 [quoted STRING]
diff --git a/usr.bin/m4/tests/regress.sh b/usr.bin/m4/tests/regress.sh
deleted file mode 100644
index 39c9103db8d9..000000000000
--- a/usr.bin/m4/tests/regress.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-
-echo 1..21
-
-test_m4() {
-	m4 "${@}" 2>&1 | sed -e "s,${SRCDIR}/,,g"
-}
-
-REGRESSION_START($1)
-
-REGRESSION_TEST(`args', `test_m4 ${SRCDIR}/args.m4')
-REGRESSION_TEST(`args2', `test_m4 ${SRCDIR}/args2.m4')
-REGRESSION_TEST(`comments', `test_m4 ${SRCDIR}/comments.m4')
-REGRESSION_TEST(`esyscmd', `test_m4 ${SRCDIR}/esyscmd.m4')
-REGRESSION_TEST(`eval', `test_m4 ${SRCDIR}/eval.m4')
-REGRESSION_TEST(`ff_after_dnl', `uudecode -o /dev/stdout ${SRCDIR}/ff_after_dnl.m4.uu | m4')
-REGRESSION_TEST(`gnueval', `test_m4 -g ${SRCDIR}/gnueval.m4')
-REGRESSION_TEST(`gnuformat', `test_m4 -g ${SRCDIR}/gnuformat.m4')
-REGRESSION_TEST(`gnupatterns', `test_m4 -g ${SRCDIR}/gnupatterns.m4')
-REGRESSION_TEST(`gnupatterns2', `test_m4 -g ${SRCDIR}/gnupatterns2.m4')
-REGRESSION_TEST(`gnuprefix', `test_m4 -P ${SRCDIR}/gnuprefix.m4 2>&1')
-REGRESSION_TEST(`gnusofterror', `test_m4 -g ${SRCDIR}/gnusofterror.m4 2>&1')
-REGRESSION_TEST(`gnutranslit2', `test_m4 -g ${SRCDIR}/translit2.m4')
-REGRESSION_TEST(`includes', `test_m4 -I${SRCDIR} ${SRCDIR}/includes.m4')
-REGRESSION_TEST(`m4wrap3', `test_m4 ${SRCDIR}/m4wrap3.m4')
-REGRESSION_TEST(`patterns', `test_m4 ${SRCDIR}/patterns.m4')
-REGRESSION_TEST(`quotes', `test_m4 ${SRCDIR}/quotes.m4 2>&1')
-REGRESSION_TEST(`strangequotes', `uudecode -o /dev/stdout ${SRCDIR}/strangequotes.m4.uu | m4')
-REGRESSION_TEST(`redef', `test_m4 ${SRCDIR}/redef.m4')
-REGRESSION_TEST(`translit', `test_m4 ${SRCDIR}/translit.m4')
-REGRESSION_TEST(`translit2', `test_m4 ${SRCDIR}/translit2.m4')
-
-REGRESSION_END()