summaryrefslogtreecommitdiff
path: root/tests/wc/Test.pm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wc/Test.pm')
-rwxr-xr-xtests/wc/Test.pm70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/wc/Test.pm b/tests/wc/Test.pm
new file mode 100755
index 0000000..3adbbba
--- /dev/null
+++ b/tests/wc/Test.pm
@@ -0,0 +1,70 @@
+# Test "wc".
+
+# Copyright (C) 1997, 2003, 2006 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_stdin = 1;
+
+my @tv = (
+# test flags input expected output expected return code
+['a0', '-c', '', "0\n", 0],
+['a1', '-l', '', "0\n", 0],
+['a2', '-w', '', "0\n", 0],
+['a3', '-c', 'x', "1\n", 0],
+['a4', '-w', 'x', "1\n", 0],
+['a5', '-w', "x y\n", "2\n", 0],
+['a6', '-w', "x y\nz", "3\n", 0],
+# Remember, -l counts *newline* bytes, not logical lines.
+['a7', '-l', "x y", "0\n", 0],
+['a8', '-l', "x y\n", "1\n", 0],
+['a9', '-l', "x\ny\n", "2\n", 0],
+['b0', '', "", "0 0 0\n", 0],
+['b1', '', "a b\nc\n", "2 3 6\n", 0],
+['c0', '-L', "1\n12\n", "2\n", 0],
+['c1', '-L', "1\n123\n1\n", "3\n", 0],
+['c2', '-L', "\n123456", "6\n", 0],
+);
+
+sub test_vector
+{
+ my $t;
+ foreach $t (@tv)
+ {
+ my ($test_name, $flags, $in, $exp, $ret) = @$t;
+ # By default, test both stdin-redirection and input from a pipe.
+ $Test::input_via{$test_name} = {REDIR => 0, PIPE => 0};
+
+ # But if test name ends with `-file', test only with file arg(s).
+ # FIXME: unfortunately, invoking wc like `wc FILE' makes it put
+ # FILE in the ouput -- and FILE is different depending on $srcdir.
+ $Test::input_via{$test_name} = {FILE => 0}
+ if $test_name =~ /-file$/;
+
+ # Now that `wc FILE' (note, with no options) produces results
+ # different from `cat FILE|wc', disable those two `PIPE' tests.
+ $flags eq ''
+ and delete $Test::input_via{$test_name}->{PIPE};
+ }
+
+ return @tv;
+}
+
+1;