summaryrefslogtreecommitdiff
path: root/tests/cut/Test.pm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cut/Test.pm')
-rwxr-xr-xtests/cut/Test.pm132
1 files changed, 132 insertions, 0 deletions
diff --git a/tests/cut/Test.pm b/tests/cut/Test.pm
new file mode 100755
index 0000000..b4cd4e5
--- /dev/null
+++ b/tests/cut/Test.pm
@@ -0,0 +1,132 @@
+# Test 'cut'.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2003, 2004 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+package Test;
+require 5.002;
+use strict;
+
+$Test::input_via_default = {REDIR => 0, FILE => 0, PIPE => 0};
+
+my @tv = (
+# test flags input expected output expected return code
+#
+['1', '-d: -f1,3-', "a:b:c\n", "a:c\n", 0],
+['2', '-d: -f1,3-', "a:b:c\n", "a:c\n", 0],
+['3', '-d: -f2-', "a:b:c\n", "b:c\n", 0],
+['4', '-d: -f4', "a:b:c\n", "\n", 0],
+['5', '-d: -f4', "", "", 0],
+['6', '-c4', "123\n", "\n", 0],
+['7', '-c4', "123", "\n", 0],
+['8', '-c4', "123\n1", "\n\n", 0],
+['9', '-c4', "", "", 0],
+['a', '-s -d: -f3-', "a:b:c\n", "c\n", 0],
+['b', '-s -d: -f2,3', "a:b:c\n", "b:c\n", 0],
+['c', '-s -d: -f1,3', "a:b:c\n", "a:c\n", 0],
+# Trailing colon should not be output
+['d', '-s -d: -f1,3', "a:b:c:\n", "a:c\n", 0],
+['e', '-s -d: -f3-', "a:b:c:\n", "c:\n", 0],
+['f', '-s -d: -f3-4', "a:b:c:\n", "c:\n", 0],
+['g', '-s -d: -f3,4', "a:b:c:\n", "c:\n", 0],
+# Make sure -s suppresses non-delimited lines
+['h', '-s -d: -f2,3', "abc\n", "", 0],
+#
+['i', '-d: -f1-3', ":::\n", "::\n", 0],
+['j', '-d: -f1-4', ":::\n", ":::\n", 0],
+['k', '-d: -f2-3', ":::\n", ":\n", 0],
+['l', '-d: -f2-4', ":::\n", "::\n", 0],
+['m', '-s -d: -f1-3', ":::\n", "::\n", 0],
+['n', '-s -d: -f1-4', ":::\n", ":::\n", 0],
+['o', '-s -d: -f2-3', ":::\n", ":\n", 0],
+['p', '-s -d: -f2-4', ":::\n", "::\n", 0],
+['q', '-s -d: -f2-4', ":::\n:\n", "::\n\n", 0],
+['r', '-s -d: -f2-4', ":::\n:1\n", "::\n1\n", 0],
+['s', '-s -d: -f1-4', ":::\n:a\n", ":::\n:a\n", 0],
+['t', '-s -d: -f3-', ":::\n:1\n", ":\n\n", 0],
+# Make sure it handles empty input properly, with and without -s.
+['u', '-s -f3-', "", "", 0],
+['v', '-f3-', "", "", 0],
+# Make sure it handles empty input properly.
+['w', '-b 1', "", "", 0],
+['x', '-s -d: -f2-4', ":\n", "\n", 0],
+# Errors
+# -s may be used only with -f
+['y', '-s -b4', ":\n", "", 1],
+# You must specify bytes or fields (or chars)
+['z', '', ":\n", "", 1],
+# Empty field list
+['empty-fl', '-f \'\'', ":\n", "", 1],
+# Missing field list
+['missing-fl', '-f', ":\n", "", 1],
+# Empty byte list
+['empty-bl', '-b \'\'', ":\n", "", 1],
+# Missing byte list
+['missing-bl', '-b', ":\n", "", 1],
+
+# This test fails with cut from textutils-1.22.
+['empty-f1', '-f1', "", "", 0],
+
+['empty-f2', '-f2', "", "", 0],
+
+['o-delim', '-d: -f2,3 --out=_', "a:b:c\n", "b_c\n", 0],
+['nul-idelim', "-d '' -f2,3 --out=_", "a\0b\0c\n", "b_c\n", 0],
+['nul-odelim', "-d: -f2,3 --out=", "a:b:c\n", "b\0c\n", 0],
+['multichar-od', "-d: -f2,3 --out=_._", "a:b:c\n", "b_._c\n", 0],
+
+# Prior to 1.22i, you couldn't use a delimiter that would sign-extend.
+['8bit-delim', "'-d\255' -f2,3 --out=_", "a\255b\255c\n", "b_c\n", 0],
+
+# New functionality:
+['out-delim1', '-c1-3,5- --output-d=:', "abcdefg\n", "abc:efg\n", 0],
+# A totally overlapped field shouldn't change anything:
+['out-delim2', '-c1-3,2,5- --output-d=:', "abcdefg\n", "abc:efg\n", 0],
+# Partial overlap: index `2' is not at the start of a range.
+['out-delim3', '-c1-3,2-4,6 --output-d=:', "abcdefg\n", "abcd:f\n", 0],
+['out-delim3a', '-c1-3,2-4,6- --output-d=:', "abcdefg\n", "abcd:fg\n", 0],
+# Ensure that the following two commands produce the same output.
+# Before an off-by-one fix, the output from the former would not contain a `:'.
+['out-delim4', '-c4-,2-3 --output-d=:', "abcdefg\n", "bc:defg\n", 0],
+['out-delim5', '-c2-3,4- --output-d=:', "abcdefg\n", "bc:defg\n", 0],
+# This test would fail for cut from coreutils-5.0.1 and earlier.
+['out-delim6', '-c2,1-3 --output-d=:', "abc\n", "abc\n", 0],
+#
+['od-abut', '-b1-2,3-4 --output-d=:', "abcd\n", "ab:cd\n", 0],
+['od-overlap', '-b1-2,2 --output-d=:', "abc\n", "ab\n", 0],
+['od-overlap2', '-b1-2,2- --output-d=:', "abc\n", "abc\n", 0],
+['od-overlap3', '-b1-3,2- --output-d=:', "abcd\n", "abcd\n", 0],
+['od-overlap4', '-b1-3,2-3 --output-d=:', "abcd\n", "abc\n", 0],
+['od-overlap5', '-b1-3,1-4 --output-d=:', "abcde\n", "abcd\n", 0],
+
+);
+
+# Don't use a pipe for failing tests. Otherwise, sometimes they
+# fail so early they'd evoke the `Broken pipe' message.
+my $t;
+foreach $t (@tv)
+ {
+ my ($test_name, $flags, $in, $exp, $ret) = @$t;
+ $Test::input_via{$test_name} = {REDIR => 0, FILE => 0} if $ret;
+ }
+
+sub test_vector
+{
+ return @tv;
+}
+
+1;