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 )