From d8945c8d8f7f4505e9beb61a1005b1ece09e2790 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Thu, 1 Sep 2011 21:30:10 +0200 Subject: [PATCH] tests: cut: exercise distro-added multibyte code paths * tests/misc/cut: Repeat each test using a multibyte locale, if the configure-time test found such a locale. Adjust the tests so that they also accept a slightly different diagnostic that is specific to the MB-patched cut. --- tests/misc/cut | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/misc/cut b/tests/misc/cut index c905ba9..7ed4134 100755 --- a/tests/misc/cut +++ b/tests/misc/cut @@ -23,6 +23,10 @@ use strict; # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; +my $mb_locale = $ENV{LOCALE_FR_UTF8}; +! defined $mb_locale || $mb_locale eq 'none' + and $mb_locale = 'C'; + my $prog = 'cut'; my $try = "Try \`$prog --help' for more information.\n"; my $from_1 = "$prog: fields and positions are numbered from 1\n$try"; @@ -156,6 +160,35 @@ my @Tests = ['big-unbounded-f', '--output-d=:', '-f1234567890-', {IN=>''}, {OUT=>''}], ); +if ($mb_locale ne 'C') + { + # Duplicate each test vector, appending "-mb" to the test name and + # inserting {ENV => "LC_ALL=$mb_locale"} in the copy, so that we + # provide coverage for the distro-added multi-byte code paths. + my @new; + foreach my $t (@Tests) + { + my @new_t = @$t; + my $test_name = shift @new_t; + + # Depending on whether cut is multi-byte-patched, + # it emits different diagnostics: + # non-MB: invalid byte or field list + # MB: invalid byte, character or field list + # Adjust the expected error output accordingly. + if (grep {ref $_ eq 'HASH' && exists $_->{ERR} && $_->{ERR} eq $inval} + (@new_t)) + { + my $sub = {ERR_SUBST => 's/, character//'}; + push @new_t, $sub; + push @$t, $sub; + } + push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}]; + } + push @Tests, @new; + } + + @Tests = triple_test \@Tests; my $save_temps = $ENV{DEBUG}; -- 2.7.4