use Test::More; use App::RecordStream::Test::Tester; BEGIN { use_ok( 'App::RecordStream::Operation::fromcsv' ) }; my $tester = App::RecordStream::Test::Tester->new('fromcsv'); my $input; my $output; my $error; $input = <test_stdin([], $input, $output); $input = <test_stdin(['--strict'], $input, $output); $input = <test_stdin(['--header'], $input, $output); $input = <test_stdin(['--key', 'zip/#0,zip/#1,zip/#2'], $input, $output); SKIP: { skip "Text::CSV_PP doesn't currently handle embedded newlines + allow_loose_quotes (i.e. recs-fromcsv without --strict option)" => 1 unless $INC{'Text/CSV_XS.pm'}; $input = <test_stdin(['--key', 'zip/#0,zip/#1,zip/#2'], $input, $output); } $input = <test_stdin(['--delim', ';'], $input, $output); $output = <do_match( 'fromcsv', ['--header', '--key', 'static', 'tests/files/data3.csv', 'tests/files/data4.csv'], '', $output, ); # Test that we error on parse fail in middle of file $input = <test_stdin(['--strict'], $input, ''); 1; 1; }, "Parsing bad input makes operation fail"; $error = $@; like $error, qr/^fromcsv: parse error:/, "Parsing bad input produces error"; like $error, qr/position \d, line 1, file NONE/, "Error contains position info"; # Text::CSV backends differ in ability to report character position # Test that we error on parse fail on last line $input = <test_stdin(['--strict'], $input, ''); 1; 1; }, "Parsing bad input makes operation fail"; $error = $@; like $error, qr/^fromcsv: parse error:/, "Parsing bad input produces error"; like $error, qr/position \d, line 2, file NONE/, "Error contains position info"; # Text::CSV backends differ in ability to report character position # Custom escape character $input = <test_stdin(['--strict', '--escape', '\\'], $input, $output); done_testing;