>From ec88c34b69f09416e67d971421073c38b61a1fb6 Mon Sep 17 00:00:00 2001 From: Assaf Gordon Date: Wed, 5 Jan 2022 18:37:18 -0700 Subject: [PATCH 3/9] tests: add 'cut -D' tests --- tests/misc/cut.pl | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/tests/misc/cut.pl b/tests/misc/cut.pl index c93d73813..2b4e562f0 100755 --- a/tests/misc/cut.pl +++ b/tests/misc/cut.pl @@ -36,6 +36,10 @@ my $inval_pos = "$prog: invalid byte or character range\n$try"; my $no_endpoint = "$prog: invalid range with no endpoint: -\n$try"; my $nofield = "$prog: an input delimiter may be specified only when " . "operating on fields\n$try"; +my $complement_with_D = "$prog: --complement cannot be used " . + "with -D\n$try"; +my $line_field_delim_differ = "$prog: line-delimiter must differ from field " . + "delimiter with -D\n$try"; my @Tests = ( @@ -227,6 +231,84 @@ my @Tests = {IN=>"123456\n"}, {OUT=>"1\n"}], ['EOL-subsumed-4', '--output-d=: -b1-2,2-3,3-', {IN=>"1234\n"}, {OUT=>"1234\n"}], + + + ## + ## Repeat some of the above tests for "-f", replacing it with "-D" + ## We expecte the exact same results (no overlapping or out-of-order + ## ranges in these tests) + ## + ['D-1', '-D -d:', '-f1,3-', {IN=>"a:b:c\n"}, {OUT=>"a:c\n"}], + ['D-2', '-D -d:', '-f1,3-', {IN=>"a:b:c\n"}, {OUT=>"a:c\n"}], + ['D-3', qw(-D -d: -f2-), {IN=>"a:b:c\n"}, {OUT=>"b:c\n"}], + ['D-4', qw(-D -d: -f4), {IN=>"a:b:c\n"}, {OUT=>"\n"}], + ['D-5', qw(-D -d: -f4), {IN=>""}, {OUT=>""}], + ['D-a', qw(-D -s -d:), '-f3-', {IN=>"a:b:c\n"}, {OUT=>"c\n"}], + ['D-b', qw(-D -s -d:), '-f2,3', {IN=>"a:b:c\n"}, {OUT=>"b:c\n"}], + ['D-c', qw(-D -s -d:), '-f1,3', {IN=>"a:b:c\n"}, {OUT=>"a:c\n"}], + # Trailing colon should not be output + ['D-d', qw(-D -s -d:), '-f1,3', {IN=>"a:b:c:\n"}, {OUT=>"a:c\n"}], + ['D-e', qw(-D -s -d:), '-f3-', {IN=>"a:b:c:\n"}, {OUT=>"c:\n"}], + ['D-f', qw(-D -s -d:), '-f3-4', {IN=>"a:b:c:\n"}, {OUT=>"c:\n"}], + ['D-g', qw(-D -s -d:), '-f3,4', {IN=>"a:b:c:\n"}, {OUT=>"c:\n"}], + # Make sure -s suppresses non-delimited lines + ['D-h', qw(-D -s -d:), '-f2,3', {IN=>"abc\n"}, {OUT=>""}], + # + ['D-i', qw(-D -d: -f1-3), {IN=>":::\n"}, {OUT=>"::\n"}], + ['D-j', qw(-D -d: -f1-4), {IN=>":::\n"}, {OUT=>":::\n"}], + ['D-k', qw(-D -d: -f2-3), {IN=>":::\n"}, {OUT=>":\n"}], + ['D-l', qw(-D -d: -f2-4), {IN=>":::\n"}, {OUT=>"::\n"}], + ['D-m', qw(-D -s -d: -f1-3), {IN=>":::\n"}, {OUT=>"::\n"}], + ['D-n', qw(-D -s -d: -f1-4), {IN=>":::\n"}, {OUT=>":::\n"}], + ['D-o', qw(-D -s -d: -f2-3), {IN=>":::\n"}, {OUT=>":\n"}], + ['D-p', qw(-D -s -d: -f2-4), {IN=>":::\n"}, {OUT=>"::\n"}], + ['D-q', qw(-D -s -d: -f2-4), {IN=>":::\n:\n"}, {OUT=>"::\n\n"}], + ['D-r', qw(-D -s -d: -f2-4), {IN=>":::\n:1\n"}, {OUT=>"::\n1\n"}], + ['D-s', qw(-D -s -d: -f1-4), {IN=>":::\n:a\n"}, {OUT=>":::\n:a\n"}], + ['D-t', qw(-D -s -d: -f3-), {IN=>":::\n:1\n"}, {OUT=>":\n\n"}], + # Make sure it handles empty input properly, with and without -s. + ['D-u', qw(-D -s -f3-), {IN=>""}, {OUT=>""}], + ['D-o-delim', qw(-D -d: --out=_), '-f2,3', {IN=>"a:b:c\n"}, {OUT=>"b_c\n"}], + ['D-nul-idelim', qw(-D -d '' --out=_), '-f2,3', {IN=>"a\0b\0c\n"}, {OUT=>"b_c\n"}], + ['D-nul-odelim', qw(-D -d: --out=), '-f2,3', {IN=>"a:b:c\n"}, {OUT=>"b\0c\n"}], + ['D-multichar-od', qw(-D -d: --out=_._), '-f2,3', {IN=>"a:b:c\n"}, + {OUT=>"b_._c\n"}], + ['D-newline-2', '-D -f1-', {IN=>""}, {OUT=>""}], + ['D-newline-3', '-D -d:', '-f1', {IN=>"a:1\nb:2\n"}, {OUT=>"a\nb\n"}], + ['D-newline-4', '-D -d:', '-f1', {IN=>"a:1\nb:2"}, {OUT=>"a\nb\n"}], + ['D-newline-5', '-D -d:', '-f2', {IN=>"a:1\nb:2\n"}, {OUT=>"1\n2\n"}], + ['D-newline-6', '-D -d:', '-f2', {IN=>"a:1\nb:2"}, {OUT=>"1\n2\n"}], + ['D-newline-7', '-D -s', '-d:', '-f1', {IN=>"a:1\nb:2"}, {OUT=>"a\nb\n"}], + ['D-newline-8', '-D -s', '-d:', '-f1', {IN=>"a:1\nb:2\n"}, {OUT=>"a\nb\n"}], + ['D-newline-9', '-D -s', '-d:', '-f1', {IN=>"a1\nb2"}, {OUT=>""}], + ['D-newline-10', '-D -s', '-d:', '-f1,2', {IN=>"a:1\nb:2"}, {OUT=>"a:1\nb:2\n"}], + ['D-newline-11', '-D -s', '-d:', '-f1,2', {IN=>"a:1\nb:2\n"}, {OUT=>"a:1\nb:2\n"}], + ['D-newline-12', '-D -s', '-d:', '-f1', {IN=>"a:1\nb:"}, {OUT=>"a\nb\n"}], + ['D-newline-13', '-D -d:', '-f1-', {IN=>"a1:\n:"}, {OUT=>"a1:\n:\n"}], + ## 'newlines-14' to 'newline-26' are not supported - using '\n' + ## for both line and field delimiter. + ['D-zerot-3', '-D -z -f1-', {IN=>""}, {OUT=>""}], + ['D-zerot-4', '-D -z -d:', '-f1', {IN=>"a:1\0b:2"}, {OUT=>"a\0b\0"}], + ['D-zerot-5', '-D -z -d:', '-f1-', {IN=>"a1:\0:"}, {OUT=>"a1:\0:\0"}], + ## 'zerot-6' uses NUL for both line and field delimiter. + + + ## + ## Test "-D" with duplicated/out-of-order fields + ## + ['DD-1', '-D -d:', '-f2,3,3,1', {IN=>"a:b:c\n"}, {OUT=>"b:c:c:a\n"}], + ['DD-2', '-D -d:', '-f2-,1', {IN=>"a:b:c\n"}, {OUT=>"b:c:a\n"}], + ['DD-3', '-D -d:', '-f1-,1', {IN=>"a:b:c\n"}, {OUT=>"a:b:c:a\n"}], + ['DD-4', '-D -d:', '-f1,1-', {IN=>"a:b:c\n"}, {OUT=>"a:a:b:c\n"}], + ['DD-5', '-D -d:', '-f-3,-2', {IN=>"a:b:c\n"}, {OUT=>"a:b:c:a:b\n"}], + ['DD-6', '-D -d:', '-f-3,2-', {IN=>"a:b:c:d\n"}, {OUT=>"a:b:c:b:c:d\n"}], + + ## Check -D related errors + ['DD-err-2', '--complement -D -f2', {ERR=>$complement_with_D}, {EXIT => 1} ], + ['DD-err-3', "-D -f2 -d'\n'", {ERR=>$line_field_delim_differ}, {EXIT => 1} ], + ['DD-err-4', "-D -f2 -d '' -z", {ERR=>$line_field_delim_differ}, {EXIT => 1} ], + + ); if ($mb_locale ne 'C') @@ -246,6 +328,7 @@ if ($mb_locale ne 'C') } + @Tests = triple_test \@Tests; my $save_temps = $ENV{DEBUG}; -- 2.20.1