Bug 18746: Text_CSV_Various parse failures
authorMark Tompsett <mtompset@hotmail.com>
Wed, 7 Jun 2017 22:07:13 +0000 (18:07 -0400)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 9 Jun 2017 13:20:08 +0000 (10:20 -0300)
While it might be an idea to just delete it,
this patch attempts to catch everything and make it
clear that Text::CSV::Unicode (binary) is the parser
that should be used.

Signed-off-by: Lee Jamison <ldjamison@marywood.edu>
Running 'prove xt/author/Text_CSV_Various.t' passes

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

xt/author/Text_CSV_Various.t

index a01f158..2ec49e0 100755 (executable)
@@ -3,15 +3,16 @@
 use strict;
 use warnings;
 
-use Test::More tests => 25;
+use Test::More tests => 32;
+use Test::Warn;
 BEGIN {
-    diag "
-This test demonstrates why Koha uses the CSV parser and configration it does.
-Specifically, the test is for Unicode compliance in text parsing and data.
-This test requires other modules that Koha doesn't actually use, in order to compare.
-Therefore, running this test is not necessary to test your Koha installation.
-
-";
+    diag q{
+This test demonstrates why Koha uses the CSV parser and configration
+it does.  Specifically, the test is for Unicode compliance in text
+parsing and data.  This test requires other modules that Koha doesn't
+actually use, in order to compare.  Therefore, running this test is not
+necessary to test your Koha installation.
+};
        use FindBin;
        use lib $FindBin::Bin;
        use_ok('Text::CSV');
@@ -42,7 +43,9 @@ my $lines = [
 ];
 # 010D: č LATIN SMALL LETTER C WITH CARON
 # 0117: ė LATIN SMALL LETTER E WITH DOT ABOVE
-diag sprintf "Testing %d lines with  %d parsers.", scalar(@$lines), scalar(keys %parsers);
+ok( scalar(keys %parsers)>0 && scalar(@$lines)>0,
+    sprintf "Testing %d lines with  %d parsers.",
+         scalar(@$lines), scalar(keys %parsers) );
 foreach my $key (sort keys %parsers) {
     my $parser = $parsers{$key};
     print "Testing parser $key version " . ($parser->version||'?') . "\n";
@@ -54,15 +57,31 @@ LINE: foreach (@$lines) {
     foreach my $key (sort keys %parsers) {
         my $parser = $parsers{$key};
         my ($status,$count,@fields);
-        ok($status = $parser->parse($_->{line}), "parse ($key)");
+        $status = $parser->parse($_->{line});
         if ($status) {
+            ok($status, "parse ($key)");
             @fields = $parser->fields;
             ok(($count = scalar(@fields)) == 6, "Number of fields ($count of 6)");
             my $j = 0;
             foreach my $f (@fields) {
-                print "\t field " . ++$j . ": $f\n";
+                ++$j;
+                if ($j==4) {
+                    if ($key ne 'Text::CSV::Unicode (binary)') {
+                        warning_like {
+                            print "\t field " . $j . ": $f\n"
+                        } [ qr/Wide character in print/ ], 'Expected wide print';
+                    } else {
+                        print "\t field " . $j . ": $f\n"
+                    }
+                }
+                else {
+                    print "\t field " . $j . ": $f\n";
+                }
             }
         }
+        else {
+            ok(! $status, "parse ($key) fails as expected");
+        }
     }
 }
-diag "done.\n";
+done_testing();