File: check.pl

package info (click to toggle)
libtext-csv-xs-perl 1.61-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,376 kB
  • sloc: perl: 8,771; makefile: 9
file content (58 lines) | stat: -rwxr-xr-x 1,267 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/pro/bin/perl

use 5.014002;
use warnings;

our $VERSION = "0.01 - 20200130";
our $CMD = $0 =~ s{.*/}{}r;

sub usage {
    my $err = shift and select STDERR;
    say "usage: $CMD ...";
    exit $err;
    } # usage

use CSV;
use Capture::Tiny qw( :all );;
use Getopt::Long  qw(:config bundling);
GetOptions (
    "help|?"		=> sub { usage (0); },
    "V|version"		=> sub { say "$CMD [$VERSION]"; exit 0; },

    "v|verbose:1"	=> \(my $opt_v = 0),
    ) or usage (1);

my %e = (
    2021 => [qw( -N --no-binary		)],
    2022 => [qw( -N --no-binary		)],
    2024 => [qw( -N -e :		)]
    );

my %m;
my $csv = Text::CSV_XS->new;
foreach my $e (1000 .. 9999) {
    $csv->SetDiag ($e);
    my $s = "" . $csv->error_diag or next;
    $s =~ m/[\x00-\x1f]/ and $s = DDisplay ($s) =~ s/^"(.*)"\z/$1/r;
    $m{$e} = $s;
    }

foreach my $ef (sort glob "E*.csv") {
    print STDERR "$ef\t";
    my $e = $ef =~ s/^E(\d+).*/$1/r;
    my $out = capture_merged {
	system $^X, "../examples/csv-check", @{$e{$e} || []}, $ef;
	};
    unless ($out =~ m/# CSV_XS ERROR: (.*)/) {
	say "$ef does not generate a parsable error:\n$out";
	next;
	}
    my $em = $1 =~ s/^([0-9]+) - //r;
    my $en = $1 // "----";
    if ($en eq $e) {
	warn "OK\n";
	}
    else {
	warn "$en - $em\n";
	}
    }