App-CSVUtils
view release on metacpan or search on metacpan
t/01-basic.t view on Meta::CPAN
require App::CSVUtils::csv_sum;
$stdout = capture_stdout { $res = App::CSVUtils::csv_sum::csv_sum(input_filename=>"$dir/4.csv") };
is($stdout, qq(f1,F3,f2\n5,7,9\n), "result");
$stdout = capture_stdout { $res = App::CSVUtils::csv_sum::csv_sum(input_filename=>"$dir/4.csv", with_data_rows=>1) };
is($stdout, qq(f1,F3,f2\n1,2,3\n4,5,6\n5,7,9\n), "output (with_data_rows=1)");
$stdout = capture_stdout { $res = App::CSVUtils::csv_sum::csv_sum(input_filename=>"$dir/no-rows.csv") };
is($stdout, qq(f1,f2,f3\n0,0,0\n), "output (no rows)");
};
subtest csv_avg => sub {
my ($res, $stdout);
require App::CSVUtils::csv_avg;
$stdout = capture_stdout { $res = App::CSVUtils::csv_avg::csv_avg(input_filename=>"$dir/4.csv") };
is($stdout, qq(f1,F3,f2\n2.5,3.5,4.5\n), "output");
$stdout = capture_stdout { $res = App::CSVUtils::csv_avg::csv_avg(input_filename=>"$dir/4.csv", with_data_rows=>1) };
is($stdout, qq(f1,F3,f2\n1,2,3\n4,5,6\n2.5,3.5,4.5\n), "output (with_data_rows=1)");
$stdout = capture_stdout { $res = App::CSVUtils::csv_avg::csv_avg(input_filename=>"$dir/no-rows.csv") };
is($stdout, qq(f1,f2,f3\n0,0,0\n), "output (no rows)");
};
subtest csv_select_rows => sub {
my ($res, $stdout);
require App::CSVUtils::csv_select_rows;
$stdout = capture_stdout { $res = App::CSVUtils::csv_select_rows::csv_select_rows(input_filename=>"$dir/5.csv", rownum_spec=>'10') };
is($stdout,qq(), "output (n, outside range)");
$stdout = capture_stdout { $res = App::CSVUtils::csv_select_rows::csv_select_rows(input_filename=>"$dir/5.csv", rownum_spec=>'4') };
is($stdout,qq(f1\n4\n), "output (n)");
$stdout = capture_stdout { $res = App::CSVUtils::csv_select_rows::csv_select_rows(input_filename=>"$dir/5.csv", rownum_spec=>'3-5') };
is($stdout,qq(f1\n3\n4\n5\n), "output (n-m)");
$stdout = capture_stdout { $res = App::CSVUtils::csv_select_rows::csv_select_rows(input_filename=>"$dir/5.csv", rownum_spec=>'1,3-5') };
is($stdout,qq(f1\n1\n3\n4\n5\n), "output (n1,n2-m)");
$res = App::CSVUtils::csv_select_rows::csv_select_rows(input_filename=>"$dir/5.csv", rownum_spec=>'1-');
is($res->[0], 400, "error in spec -> status 400");
};
subtest csv_convert_to_hash => sub {
my $res;
require App::CSVUtils::csv_convert_to_hash;
$res = App::CSVUtils::csv_convert_to_hash::csv_convert_to_hash(input_filename=>"$dir/1.csv");
is_deeply($res, [200,"OK",{f1=>1, f2=>2, f3=>3}], "result 1") or diag explain $res;
$res = App::CSVUtils::csv_convert_to_hash::csv_convert_to_hash(input_filename=>"$dir/1.csv", rownum=>2);
is_deeply($res, [200,"OK",{f1=>4, f2=>5, f3=>6}], "result 2");
$res = App::CSVUtils::csv_convert_to_hash::csv_convert_to_hash(input_filename=>"$dir/1.csv", rownum=>10);
is_deeply($res, [200,"OK",{f1=>undef, f2=>undef, f3=>undef}], "result 3");
};
subtest csv_concat => sub {
my ($res, $stdout);
require App::CSVUtils::csv_concat;
$stdout = capture_stdout { $res = App::CSVUtils::csv_concat::csv_concat(input_filenames=>["$dir/1.csv","$dir/2.csv","$dir/4.csv"]) };
is($stdout, qq(f1,f2,f3,F3\n1,2,3,\n4,5,6,\n7,8,9,\n1,,,\n2,,,\n3,,,\n1,3,,2\n4,6,,5\n), "output");
$stdout = capture_stdout { $res = App::CSVUtils::csv_concat::csv_concat(input_filenames=>["$dir/1.csv","$dir/2.csv","$dir/4.csv"], overlay=>1) };
is($stdout, qq(f1,f2,f3,F3\n1,2,3,2\n4,5,6,5\n7,8,9,\n), "output");
$stdout = capture_stdout { $res = App::CSVUtils::csv_concat::csv_concat(input_filenames=>["$dir/1.csv","$dir/2.csv","$dir/4.csv"], overlay=>1, overwrite_fields=>1) };
is($stdout, qq(f1,f2,f3,F3\n1,3,3,2\n4,6,6,5\n3,8,9,\n), "output");
};
subtest csv_select_fields => sub {
my ($res, $stdout);
require App::CSVUtils::csv_select_fields;
$res = App::CSVUtils::csv_select_fields::csv_select_fields(input_filename=>"$dir/1.csv", include_fields=>["f1", "f4"]);
is($res->[0], 400, "specifying unknown field -> error");
subtest "specifying unknown field with ignore_unknown_fields option -> ok" => sub {
$stdout = capture_stdout { $res = App::CSVUtils::csv_select_fields::csv_select_fields(input_filename=>"$dir/1.csv", include_fields=>["f1", "f4"], ignore_unknown_fields=>1) };
is($stdout, "f1\n1\n4\n7\n", "output");
};
subtest "ordering of fields as specified" => sub {
$stdout = capture_stdout { $res = App::CSVUtils::csv_select_fields::csv_select_fields(input_filename=>"$dir/1.csv", include_fields=>["f3", "f1"]) };
is($stdout, "f3,f1\n3,1\n6,4\n9,7\n", "output");
};
# XXX test include_field_pat, exclude_fields, exclude_field_pat (but these
# are already tested in testing csv_delete_fields().
# XXX test show_selected_fields (but this is already testing in testing
# csv_delete_fields()).
};
subtest csv_grep => sub {
my ($res, $stdout);
require App::CSVUtils::csv_grep;
$stdout = capture_stdout { $res = App::CSVUtils::csv_grep::csv_grep(input_filename=>"$dir/1.csv", eval=>'$_->[0] >= 4') };
is($stdout, "f1,f2,f3\n4,5,6\n7,8,9\n", "output");
subtest "opt: --hash" => sub {
$stdout = capture_stdout { $res = App::CSVUtils::csv_grep::csv_grep(input_filename=>"$dir/1.csv", hash=>1, eval=>'$_->{f1} >= 4') };
is($stdout, "f1,f2,f3\n4,5,6\n7,8,9\n", "output");
};
subtest "opt: --no-input-header" => sub {
$stdout = capture_stdout { $res = App::CSVUtils::csv_grep::csv_grep(input_filename=>"$dir/no-header-1.csv", input_header=>0, eval=>'$_->[0] >= 4') };
is($stdout, "4,5,6\n7,8,9\n", "output");
};
subtest "opt: --hash, --no-input-header" => sub {
$stdout = capture_stdout { $res = App::CSVUtils::csv_grep::csv_grep(input_filename=>"$dir/no-header-1.csv", hash=>1, input_header=>0, eval=>'$_->{field1} >= 4') };
is($stdout, "4,5,6\n7,8,9\n", "output");
};
};
subtest csv_map => sub {
my ($res, $stdout);
require App::CSVUtils::csv_map;
$stdout = capture_stdout { $res = App::CSVUtils::csv_map::csv_map(input_filename=>"$dir/1.csv", eval=>'"$_->[0].$_->[1].$_->[2]"') };
is($stdout, "1.2.3\n4.5.6\n7.8.9\n", "output");
subtest "opt: --hash" => sub {
$stdout = capture_stdout { $res = App::CSVUtils::csv_map::csv_map(hash=>1, input_filename=>"$dir/1.csv", eval=>'"$_->{f1}.$_->{f2}.$_->{f3}"') };
is($stdout, "1.2.3\n4.5.6\n7.8.9\n", "output");
};
( run in 0.528 second using v1.01-cache-2.11-cpan-39bf76dae61 )