1#!/usr/bin/perl 2# Exercise du's --files0-from option. 3# FIXME: keep this file in sync with tests/misc/wc-files0-from. 4 5# Copyright (C) 2004-2023 Free Software Foundation, Inc. 6 7# This program is free software: you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation, either version 3 of the License, or 10# (at your option) any later version. 11 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <https://www.gnu.org/licenses/>. 19 20use strict; 21 22(my $program_name = $0) =~ s|.*/||; 23 24my $prog = 'du'; 25 26# Turn off localization of executable's output. 27@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; 28 29my @Tests = 30 ( 31 # invalid extra command line argument 32 ['f-extra-arg', '--files0-from=- no-such', {IN=>"a"}, {EXIT=>1}, 33 {ERR => "$prog: extra operand 'no-such'\n" 34 . "file operands cannot be combined with --files0-from\n" 35 . "Try '$prog --help' for more information.\n"} 36 ], 37 38 # missing input file 39 ['missing', '--files0-from=missing', {EXIT=>1}, 40 {ERR => "$prog: cannot open 'missing' for reading: " 41 . "No such file or directory\n"}], 42 43 # input file name of '-' 44 ['minus-in-stdin', '--files0-from=-', '<', {IN=>{f=>'-'}}, {EXIT=>1}, 45 {ERR => "$prog: when reading file names from stdin, no file name of" 46 . " '-' allowed\n"}], 47 48 # empty input, regular file 49 ['empty', '--files0-from=@AUX@', {AUX=>''}], 50 51 # empty input, from non-regular file 52 ['empty-nonreg', '--files0-from=/dev/null'], 53 54 # one NUL 55 ['nul-1', '--files0-from=-', '<', {IN=>"\0"}, {EXIT=>1}, 56 {ERR => "$prog: -:1: invalid zero-length file name\n"}], 57 58 # two NULs 59 ['nul-2', '--files0-from=-', '<', {IN=>"\0\0"}, {EXIT=>1}, 60 {ERR => "$prog: -:1: invalid zero-length file name\n" 61 . "$prog: -:2: invalid zero-length file name\n"}], 62 63 # one file name, no NUL 64 ['1', '--files0-from=-', '<', 65 {IN=>{f=>"g"}}, {AUX=>{g=>''}}, 66 {OUT=>"0\tg\n"}, {OUT_SUBST=>'s/^\d+/0/'} ], 67 68 # one file name, with NUL 69 ['1a', '--files0-from=-', '<', 70 {IN=>{f=>"g\0"}}, {AUX=>{g=>''}}, 71 {OUT=>"0\tg\n"}, {OUT_SUBST=>'s/^\d+/0/'} ], 72 73 # two identical file names, no final NUL 74 ['2', '--files0-from=-', '<', 75 {IN=>{f=>"g\0g"}}, {AUX=>{g=>''}}, 76 {OUT=>"0\tg\n"}, {OUT_SUBST=>'s/^\d+/0/'} ], 77 78 # two identical file names, with final NUL 79 ['2a', '--files0-from=-', '<', 80 {IN=>{f=>"g\0g\0"}}, {AUX=>{g=>''}}, 81 {OUT=>"0\tg\n"}, {OUT_SUBST=>'s/^\d+/0/'} ], 82 83 # Ensure that $prog processes FILEs following a zero-length name. 84 ['zero-len', '--files0-from=-', '<', 85 {IN=>{f=>"\0g\0"}}, {AUX=>{g=>''}}, 86 {OUT=>"0\tg\n"}, {OUT_SUBST=>'s/^\d+/0/'}, 87 {ERR => "$prog: -:1: invalid zero-length file name\n"}, {EXIT=>1} ], 88 ); 89 90my $save_temps = $ENV{DEBUG}; 91my $verbose = $ENV{VERBOSE}; 92 93my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose); 94exit $fail; 95