From: Collin Funk Date: Wed, 6 May 2026 04:24:29 +0000 (-0700) Subject: tests: head: test 'head -n 0' and 'head -c 0' open files for reading X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=cab1d4bfbd0fa9e970e68e70d4b1453e6225f6e4;p=thirdparty%2Fcoreutils.git tests: head: test 'head -n 0' and 'head -c 0' open files for reading * tests/head/head-n0.sh: New file. * tests/local.mk: Add the new test case. --- diff --git a/tests/head/head-n0.sh b/tests/head/head-n0.sh new file mode 100755 index 0000000000..8da4597e7d --- /dev/null +++ b/tests/head/head-n0.sh @@ -0,0 +1,81 @@ +#!/bin/sh +# Make sure that 'head -n 0' and 'head -c 0' opens files for reading. + +# Copyright (C) 2026 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src +print_ver_ head +getlimits_ + +mkdir dir || framework_failure_ +echo a > file || framework_failure_ + +# Test 'head -n 0' with an existing file or directory. +for args in dir file; do + for opt in -n -c; do + head $opt 0 $args >out 2>err || fail=1 + compare /dev/null out || fail=1 + compare /dev/null err || fail=1 + done +done + +# Test 'head -n 0' with multiple existing arguments and headers disabled. +for args in 'dir file' 'file dir'; do + for opt in -n -c; do + head -q $opt 0 $args >out 2>err || fail=1 + compare /dev/null out || fail=1 + compare /dev/null err || fail=1 + done +done + +# Test 'head -n 0' with multiple existing arguments and headers enabled. +for args in 'dir file' 'file dir'; do + file1=$(echo "$args" | cut -d ' ' -f1) + file2=$(echo "$args" | cut -d ' ' -f2) + cat < exp || framework_failure_ +==> $file1 <== + +==> $file2 <== +EOF + for opt in -n -c; do + head $opt 0 $args >out 2>err || fail=1 + compare exp out || fail=1 + compare /dev/null err || fail=1 + done +done + +# Test 'head -n 0' with a missing file. +cat <exp || framework_failure_ +head: cannot open 'missing1' for reading: $ENOENT +EOF +for opt in -n -c; do + returns_ 1 head $opt 0 missing1 >out 2>err || fail=1 + compare /dev/null out || fail=1 + compare exp err || fail=1 +done + +# Test 'head -n 0' with multiple missing files. +cat <exp || framework_failure_ +head: cannot open 'missing1' for reading: $ENOENT +head: cannot open 'missing2' for reading: $ENOENT +EOF +for opt in -n -c; do + returns_ 1 head $opt 0 missing1 missing2 >out 2>err || fail=1 + compare /dev/null out || fail=1 + compare exp err || fail=1 +done + +Exit $fail diff --git a/tests/local.mk b/tests/local.mk index d72361e40c..727cf8b58b 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -365,6 +365,7 @@ all_tests = \ tests/groups/groups-process-all.sh \ tests/groups/groups-version.sh \ tests/head/head-c.sh \ + tests/head/head-n0.sh \ tests/head/head-pos.sh \ tests/head/head-write-error.sh \ tests/misc/kill.sh \