259b16c3728530d83e6806ad899ffc60f867cea0
[platform/upstream/coreutils.git] / tests / uniq / Test.pm
1 package Test;
2 require 5.002;
3 use strict;
4
5 $Test::input_via_stdin = 1;
6
7 my @tv = (
8 # test flags  input              expected output    expected return code
9 #
10 ['1',  '',    '',                '',                0],
11 ['2',  '',    "a\na\n",          "a\n",             0],
12 ['3',  '',    "a\na",            "a\n",             0],
13 ['4',  '',    "a\nb",            "a\nb\n",          0],
14 ['5',  '',    "a\na\nb",         "a\nb\n",          0],
15 ['6',  '',    "b\na\na\n",       "b\na\n",          0],
16 ['7',  '',    "a\nb\nc\n",       "a\nb\nc\n",       0],
17 # Make sure that eight bit characters work
18 ['8',  '',    "ö\nv\n",          "ö\nv\n",          0],
19 # Test output of -u option; only unique lines
20 ['9',  '-u',  "a\na\n",          "",                0],
21 ['10', '-u',  "a\nb\n",          "a\nb\n",          0],
22 ['11', '-u',  "a\nb\na\n",       "a\nb\na\n",       0],
23 ['12', '-u',  "a\na\n",          "",                0],
24 ['13', '-u',  "a\na\n",          "",                0],
25 #['5',  '-u',  "a\na\n",          "",                0],
26 # Test output of -d option; only repeated lines
27 ['20', '-d',  "a\na\n",          "a\n",             0],
28 ['21', '-d',  "a\nb\n",          "",                0],
29 ['22', '-d',  "a\nb\na\n",       "",                0],
30 ['23', '-d',  "a\na\nb\n",       "a\n",             0],
31 # Check the key options
32 # If we skip over fields or characters, is the output deterministic?
33 ['obs30', '-1',  "a a\nb a\n",      "a a\n",           0],
34 ['31', '-f 1',"a a\nb a\n",      "a a\n",           0],
35 ['32', '-f 1',"a a\nb b\n",      "a a\nb b\n",      0],
36 ['33', '-f 1',"a a a\nb a c\n",  "a a a\nb a c\n",  0],
37 ['34', '-f 1',"b a\na a\n",      "b a\n",           0],
38 ['35', '-f 2',"a a c\nb a c\n",  "a a c\n",         0],
39 # Skip over characters.
40 ['obs-plus40', '+1',  "aaa\naaa\n",      "aaa\n",           0],
41 ['obs-plus41', '+1',  "baa\naaa\n",      "baa\n",           0],
42 ['42', '-s 1',"aaa\naaa\n",      "aaa\n",           0],
43 ['43', '-s 2',"baa\naaa\n",      "baa\n",           0],
44 ['obs-plus44', '+1 --',  "aaa\naaa\n",   "aaa\n",           0],
45 ['obs-plus45', '+1 --',  "baa\naaa\n",   "baa\n",           0],
46 # Skip over fields and characters
47 ['50', '-f 1 -s 1',"a aaa\nb ab\n",      "a aaa\nb ab\n",       0],
48 ['51', '-f 1 -s 1',"a aaa\nb aaa\n",     "a aaa\n",             0],
49 ['52', '-s 1 -f 1',"a aaa\nb ab\n",      "a aaa\nb ab\n",       0],
50 ['53', '-s 1 -f 1',"a aaa\nb aaa\n",     "a aaa\n",             0],
51 # Fixed in 2.0.15
52 ['54', '-s 4',     "abc\nabcd\n",        "abc\n",               0],
53 # Supported in 2.0.15
54 ['55', '-s 0',     "abc\nabcd\n",        "abc\nabcd\n",         0],
55 ['56', '-s 0',     "abc\n",              "abc\n",               0],
56 ['57', '-w 0',     "abc\nabcd\n",        "abc\n",               0],
57 # Only account for a number of characters
58 ['60', '-w 1',"a a\nb a\n",      "a a\nb a\n",         0],
59 ['61', '-w 3',"a a\nb a\n",      "a a\nb a\n",         0],
60 ['62', '-w 1 -f 1',"a a a\nb a c\n",  "a a a\n",       0],
61 ['63', '-f 1 -w 1',"a a a\nb a c\n",  "a a a\n",       0],
62 # The blank after field one is checked too
63 ['64', '-f 1 -w 4',"a a a\nb a c\n",  "a a a\nb a c\n",         0],
64 ['65', '-f 1 -w 3',"a a a\nb a c\n",  "a a a\n",                0],
65 # Make sure we don't break if the file contains \0
66 ['90', '',       "a\0a\na\n",  "a\0a\na\n",                     0],
67 # Check fields seperated by tabs and by spaces
68 ['91', '',       "a\ta\na a\n",  "a\ta\na a\n",                 0],
69 ['92', '-f 1',   "a\ta\na a\n",  "a\ta\na a\n",                 0],
70 ['93', '-f 2',   "a\ta a\na a a\n",  "a\ta a\n",                0],
71 ['94', '-f 1',   "a\ta\na\ta\n",  "a\ta\n",                     0],
72 # Check the count option; add tests for other options too
73 ['101', '-c',    "a\nb\n",          "      1 a\n      1 b\n", 0],
74 ['102', '-c',    "a\na\n",          "      2 a\n",             0],
75 # Check the local -D (--all-repeated) option
76 ['110', '-D',    "a\na\n",          "a\na\n",                   0],
77 ['111', '-D -w1',"a a\na b\n",      "a a\na b\n",               0],
78 ['112', '-D -c', "a a\na b\n",      "",                         1],
79 ['113', '--all-repeated=separate',"a\na\n",          "a\na\n",           0],
80 ['114', '--all-repeated=separate',"a\na\nb\nc\nc\n", "a\na\n\nc\nc\n",   0],
81 ['115', '--all-repeated=separate',"a\na\nb\nb\nc\n", "a\na\n\nb\nb\n",   0],
82 ['116', '--all-repeated=prepend', "a\na\n",          "\na\na\n",         0],
83 ['117', '--all-repeated=prepend', "a\na\nb\nc\nc\n", "\na\na\n\nc\nc\n", 0],
84 ['118', '--all-repeated=prepend', "a\nb\n",          "",                 0],
85 ['119', '--all-repeated=badoption', "a\n",           "",                 1],
86 # Check that -d and -u suppress all output, as POSIX requires.
87 ['120', '-d -u', "a\na\n\b",        "",                         0],
88 );
89
90 sub test_vector
91 {
92   my $t;
93   foreach $t (@tv)
94     {
95       my ($test_name, $flags, $in, $exp, $ret) = @$t;
96       $Test::input_via{$test_name} = {REDIR => 0, PIPE => 0};
97
98       $test_name =~ /^obs-plus/
99         and $Test::env{$test_name} = ['_POSIX2_VERSION=199209'];
100     }
101
102   return @tv;
103 }
104
105 1;