diff --git a/contrib/one-true-awk/bugs-fixed/missing-precision.err b/contrib/one-true-awk/bugs-fixed/missing-precision.err new file mode 100644 --- /dev/null +++ b/contrib/one-true-awk/bugs-fixed/missing-precision.err @@ -0,0 +1,2 @@ +awk: not enough args in printf(%*s) + source line number 1 diff --git a/contrib/one-true-awk/bugs-fixed/missing-precision.ok b/contrib/one-true-awk/bugs-fixed/missing-precision.ok deleted file mode 100644 --- a/contrib/one-true-awk/bugs-fixed/missing-precision.ok +++ /dev/null @@ -1,2 +0,0 @@ -../a.out: not enough args in printf(%*s) - source line number 1 diff --git a/contrib/one-true-awk/bugs-fixed/negative-nf.err b/contrib/one-true-awk/bugs-fixed/negative-nf.err new file mode 100644 --- /dev/null +++ b/contrib/one-true-awk/bugs-fixed/negative-nf.err @@ -0,0 +1,2 @@ +awk: cannot set NF to a negative value + source line number 1 diff --git a/contrib/one-true-awk/bugs-fixed/negative-nf.ok b/contrib/one-true-awk/bugs-fixed/negative-nf.ok deleted file mode 100644 --- a/contrib/one-true-awk/bugs-fixed/negative-nf.ok +++ /dev/null @@ -1,2 +0,0 @@ -../a.out: cannot set NF to a negative value - source line number 1 diff --git a/contrib/one-true-awk/bugs-fixed/pfile-overflow.ok b/contrib/one-true-awk/bugs-fixed/pfile-overflow.ok deleted file mode 100644 --- a/contrib/one-true-awk/bugs-fixed/pfile-overflow.ok +++ /dev/null @@ -1,4 +0,0 @@ -../a.out: syntax error at source line 1 source file pfile-overflow.awk - context is - >>> <<< -../a.out: bailing out at source line 1 source file pfile-overflow.awk diff --git a/contrib/one-true-awk/bugs-fixed/system-status.awk b/contrib/one-true-awk/bugs-fixed/system-status.awk deleted file mode 100644 --- a/contrib/one-true-awk/bugs-fixed/system-status.awk +++ /dev/null @@ -1,19 +0,0 @@ -# Unmodified nawk prints the 16 bit exit status divided by 256, but -# does so using floating point arithmetic, yielding strange results. -# -# The fix is to use the various macros defined for wait(2) and to -# use the signal number + 256 for death by signal, or signal number + 512 -# for death by signal with core dump. - -BEGIN { - status = system("exit 42") - print "normal status", status - - status = system("kill -HUP $$") - print "death by signal status", status - - status = system("kill -ABRT $$") - print "death by signal with core dump status", status - - system("rm -f core*") -} diff --git a/contrib/one-true-awk/bugs-fixed/system-status.bad b/contrib/one-true-awk/bugs-fixed/system-status.bad deleted file mode 100644 --- a/contrib/one-true-awk/bugs-fixed/system-status.bad +++ /dev/null @@ -1,3 +0,0 @@ -normal status 42 -death by signal status 0.00390625 -death by signal with core dump status 0.523438 diff --git a/contrib/one-true-awk/bugs-fixed/system-status.ok b/contrib/one-true-awk/bugs-fixed/system-status.ok deleted file mode 100644 --- a/contrib/one-true-awk/bugs-fixed/system-status.ok +++ /dev/null @@ -1,3 +0,0 @@ -normal status 42 -death by signal status 257 -death by signal with core dump status 518 diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist --- a/etc/mtree/BSD.tests.dist +++ b/etc/mtree/BSD.tests.dist @@ -873,6 +873,10 @@ apply .. awk + bugs-fixed + .. + netbsd + .. .. basename .. diff --git a/usr.bin/awk/tests/Makefile b/usr.bin/awk/tests/Makefile --- a/usr.bin/awk/tests/Makefile +++ b/usr.bin/awk/tests/Makefile @@ -1,33 +1,8 @@ # $FreeBSD$ -PACKAGE= tests +.include -NETBSD_ATF_TESTS_SH= awk_test - -${PACKAGE}FILES+= d_assign_NF.awk -${PACKAGE}FILES+= d_assign_NF.in -${PACKAGE}FILES+= d_assign_NF.out -${PACKAGE}FILES+= d_big_regexp.awk -${PACKAGE}FILES+= d_big_regexp.in -${PACKAGE}FILES+= d_big_regexp.out -${PACKAGE}FILES+= d_end1.awk -${PACKAGE}FILES+= d_end1.in -${PACKAGE}FILES+= d_end1.out -${PACKAGE}FILES+= d_end2.awk -${PACKAGE}FILES+= d_end2.in -${PACKAGE}FILES+= d_end2.out -${PACKAGE}FILES+= d_period.awk -${PACKAGE}FILES+= d_period.in -${PACKAGE}FILES+= d_period.out -${PACKAGE}FILES+= d_string1.awk -${PACKAGE}FILES+= d_string1.out -${PACKAGE}FILES+= d_tolower.awk -${PACKAGE}FILES+= d_tolower.in -${PACKAGE}FILES+= d_tolower.out -${PACKAGE}FILES+= d_toupper.awk -${PACKAGE}FILES+= d_toupper.in -${PACKAGE}FILES+= d_toupper.out - -.include +TESTS_SUBDIRS+= bugs-fixed +TESTS_SUBDIRS+= netbsd .include diff --git a/usr.bin/awk/tests/bugs-fixed/Makefile b/usr.bin/awk/tests/bugs-fixed/Makefile new file mode 100644 --- /dev/null +++ b/usr.bin/awk/tests/bugs-fixed/Makefile @@ -0,0 +1,14 @@ +# $FreeBSD$ + +PACKAGE= tests + +TESTSDIR= ${TESTSBASE}/usr.bin/awk/${.CURDIR:T} +TESTSRC= ${SRCTOP}/contrib/one-true-awk/bugs-fixed + +ATF_TESTS_SH= bug_fix_test + +.PATH: ${TESTSRC} +# Upstream controls the list of tests, so generate it dynamically +${PACKAGE}FILES!=(cd ${TESTSRC} ; ls *.awk *.ok *.in *.err) + +.include diff --git a/usr.bin/awk/tests/bugs-fixed/bug_fix_test.sh b/usr.bin/awk/tests/bugs-fixed/bug_fix_test.sh new file mode 100644 --- /dev/null +++ b/usr.bin/awk/tests/bugs-fixed/bug_fix_test.sh @@ -0,0 +1,75 @@ +# +# Copyright 2014 EMC Corp. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# $FreeBSD$ + +SRCDIR=$(atf_get_srcdir) + +check() +{ + local tc=${1%.awk}; shift + local in_flag out_flag err_flag + + awk=awk + + local out_file="${SRCDIR}/${tc}.ok" + [ -f "${out_file}" ] && out_flag="-o file:${out_file}" + local err_file="${SRCDIR}/${tc}.err" + [ -f "${err_file}" ] && err_flag="-e file:${err_file} -s exit:2" + local in_file="${SRCDIR}/${tc}.in" + [ -f "${in_file}" ] && in_flag="${in_file}" + + (cd ${SRCDIR} ; atf_check ${out_flag} ${err_flag} ${awk} -f "${tc}.awk" ${in_flag}) +} + +add_testcase() +{ + local tc=${1%.awk} + local tc_escaped word + + case "${tc%.*}" in + *-*) + local IFS="-" + for word in ${tc}; do + tc_escaped="${tc_escaped:+${tc_escaped}_}${word}" + done + ;; + *) + tc_escaped=${tc} + ;; + esac + + atf_test_case ${tc_escaped} + eval "${tc_escaped}_body() { check ${tc}; }" + atf_add_test_case ${tc_escaped} +} + +atf_init_test_cases() +{ + for path in $(find -s "${SRCDIR}" -name '*.awk'); do + add_testcase ${path##*/} + done +} diff --git a/usr.bin/awk/tests/Makefile b/usr.bin/awk/tests/netbsd/Makefile copy from usr.bin/awk/tests/Makefile copy to usr.bin/awk/tests/netbsd/Makefile --- a/usr.bin/awk/tests/Makefile +++ b/usr.bin/awk/tests/netbsd/Makefile @@ -2,6 +2,9 @@ PACKAGE= tests +TESTSDIR= ${TESTSBASE}/usr.bin/awk/${.CURDIR:T} +TESTSRC= ${SRCTOP}/contrib/netbsd-tests/usr.bin/awk + NETBSD_ATF_TESTS_SH= awk_test ${PACKAGE}FILES+= d_assign_NF.awk