Test-Perinci-CmdLine

 view release on metacpan or  search on metacpan

lib/Test/Perinci/CmdLine.pm  view on Meta::CPAN

                        argv        => [],
                        stdin       => "bar\nbaz",
                        stdout_like => qr/a1=\[bar,baz\]/,
                    },
                ],
            }, # cmdline_src (stdin_or_args)

            {
                name => 'dry-run',
                tests => [
                    {
                        tags        => ['dry-run'],
                        name        => 'dry-run (via env, 0)',
                        gen_args    => {url=>'/Perinci/Examples/dry_run'},
                        #inline_gen_args => {...},
                        env         => {DRY_RUN=>0},
                        argv        => [],
                        stdout_like => qr/wet/,
                    },
                    {
                        tags        => ['dry-run'],
                        name        => 'dry-run (via env, 1)',
                        gen_args    => {url=>'/Perinci/Examples/dry_run'},
                        #inline_gen_args => {...},
                        env         => {DRY_RUN=>1},
                        argv        => [qw//],
                        stdout_like => qr/dry/,
                    },
                    {
                        tags        => ['dry-run'],
                        name        => 'dry-run (via cmdline opt)',
                        gen_args    => {url=>'/Perinci/Examples/dry_run'},
                        #inline_gen_args => {...},
                        argv        => [qw/--dry-run/],
                        stdout_like => qr/dry/,
                    },
                ],
            }, # dry-run

            {
                name => 'tx',
                tests => [
                    {
                        tags        => ['tx', 'dry-run'],
                        name        => 'dry_run (using tx) (w/o)',
                        gen_args    => {url=>'/Perinci/Examples/Tx/check_state'},
                        argv        => [],
                        stdout_like => qr/^$/,
                    },
                    {
                        tags        => ['tx', 'dry-run'],
                        name        => 'dry_run (using tx) (w/)',
                        gen_args    => {url=>'/Perinci/Examples/Tx/check_state'},
                        argv        => [qw/--dry-run/],
                        stdout_like => qr/check_state/,
                    },
                ],
            }, # tx

            {
                name => 'streaming',
                before_all_tests => sub {
                    write_text("$tempdir/infile-str", "one\ntwo three\nfour\n");
                    write_text("$tempdir/infile-hash-json", qq({}\n{"a":1}\n{"b":2,"c":3}\n{"d":4}\n));
                    write_text("$tempdir/infile-invalid-json", qq({}\n{\n));
                    write_text("$tempdir/infile-int", qq(1\n3\n5\n));
                    write_text("$tempdir/infile-invalid-int", qq(1\nx\n5\n));
                    write_text("$tempdir/infile-words", qq(word1\nword2\n));
                    write_text("$tempdir/infile-invalid-words", qq(word1\nword2\nnot a word\n));
                },
                tests => [
                    # streaming input
                    {
                        tags        => ['streaming', 'streaming-input'],
                        name        => "stream input, simple type, chomp on",
                        gen_args    => {url => '/Perinci/Examples/Stream/count_lines'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-str"],
                        stdout_like => qr/
                                             3
                                         /mx,
                    },
                    {
                        tags        => ['streaming', 'streaming-input'],
                        name        => "stream input, simple type, chomp off",
                        gen_args    => {url => '/Perinci/Examples/Stream/wc'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-str"],
                        stdout_like => qr/
                                             ^chars \s+ 19\n
                                             ^lines \s+ 3\n
                                             ^words \s+ 4\n
                                         /mx,
                    },
                    {
                        tags        => ['streaming', 'streaming-input'],
                        name        => "stream input, json stream",
                        gen_args    => {url => '/Perinci/Examples/Stream/wc_keys'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-hash-json"],
                        stdout_like => qr/^keys \s+ 4\n/mx,
                    },

                    {
                        tags        => ['streaming', 'streaming-input', 'validate-streaming-input'],
                        name        => 'stream input, simple type, word validation', # also test that each record is chomp-ed
                        gen_args    => {url => '/Perinci/Examples/Stream/count_words'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-words"],
                        stdout_like => qr/2/,
                    },
                    {
                        tags        => ['streaming', 'streaming-input', 'validate-streaming-input'],
                        name        => 'stream input, simple types, word validation, error',
                        gen_args    => {url => '/Perinci/Examples/Stream/count_words'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-invalid-words"],
                        exit_code_like => qr/[1-9]/,
                        stderr_like => qr/fails validation/,
                    },
                    {
                        tags        => ['streaming', 'streaming-input', 'validate-streaming-input'],
                        name        => 'stream input, simple types, word validation, error',
                        gen_args    => {url => '/Perinci/Examples/Stream/count_words'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-invalid-words"],
                        exit_code_like => qr/[1-9]/,
                        stderr_like => qr/fails validation/,
                    },
                    {
                        tags        => ['streaming', 'streaming-input', 'validate-streaming-input'],
                        name        => 'stream input, json stream, error',
                        gen_args    => {url => '/Perinci/Examples/Stream/wc_keys'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-invalid-json"],
                        exit_code => 200,
                    },

                    # streaming result
                    {
                        tags        => ['streaming', 'streaming-result', 'validate-streaming-result'],
                        name        => "stream result, simple types, word validation",
                        gen_args    => {url => '/Perinci/Examples/Stream/produce_words_err'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["-n", 9],
                    },
                    {
                        tags        => ['streaming', 'streaming-result', 'validate-streaming-result'],
                        name        => "stream result, simple types, word validation, error",
                        gen_args    => {url => '/Perinci/Examples/Stream/produce_words_err'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["-n", 10],
                        exit_code_like => qr/[1-9]/,
                        stderr_like => qr/fails validation/,
                    },
                    {
                        tags        => ['streaming', 'streaming-result'],
                        name        => "stream result, json stream",
                        gen_args    => {url => '/Perinci/Examples/Stream/produce_hashes'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => [qw/-n 3/],
                        stdout_like => qr/
                                             ^\Q{"num":1}\E\n
                                             ^\Q{"num":2}\E\n
                                             ^\Q{"num":3}\E\n
                                         /mx,
                    },

                    # streaming input+result
                    {
                        tags        => ['streaming', 'streaming-input', 'streaming-result'],
                        name        => "stream input+result, simple type, float validation",
                        gen_args    => {url => '/Perinci/Examples/Stream/square_nums'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-int"],
                        stdout_like => qr/
                                             ^"?1"?\n
                                             ^"?9"?\n
                                             ^"?25"?\n
                                         /mx,
                    },
                    {
                        tags        => ['streaming', 'streaming-input', 'streaming-result', 'validate-streaming-input'],
                        name        => "stream input+result, simple type, float validation, error",
                        gen_args    => {url => '/Perinci/Examples/Stream/square_nums'},
                        inline_gen_args => {load_module=>["Perinci::Examples::Stream"]},
                        argv        => ["$tempdir/infile-invalid-int"],
                        exit_code_like => qr/[1-9]/, # sometimes it's 9, sometimes it's 25; looks like the input line is being used somehow as exit code?
                        stderr_like => qr/fails validation/,
                    },
                ],
            }, # streaming

            {
                name => 'result metadata',
                tests => [
                    {
                        name        => 'cmdline.exit_code',
                        gen_args    => {url=>'/Perinci/Examples/CmdLineResMeta/exit_code'},
                        inline_gen_args => {load_module=>['Perinci::Examples::CmdLineResMeta']},
                        argv        => [qw//],
                        exit_code   => 7,
                    },
                    {
                        name        => 'cmdline.result',
                        gen_args    => {url=>'/Perinci/Examples/CmdLineResMeta/result'},
                        inline_gen_args => {load_module=>['Perinci::Examples::CmdLineResMeta']},
                        argv        => [qw//],
                        stdout_like => qr/false/,
                    },
                    {
                        name        => 'cmdline.default_format',
                        gen_args    => {url=>'/Perinci/Examples/CmdLineResMeta/default_format'},
                        inline_gen_args => {load_module=>['Perinci::Examples::CmdLineResMeta']},
                        argv        => [qw//],
                        stdout_like => qr/null/,
                    },
                    {
                        name        => 'cmdline.default_format (overriden by cmdline opt)',
                        gen_args    => {url=>'/Perinci/Examples/CmdLineResMeta/default_format'},
                        inline_gen_args => {load_module=>['Perinci::Examples::CmdLineResMeta']},
                        argv        => [qw/--format text/],
                        stdout_like => qr/\A\z/,
                    },
                    {
                        name        => 'cmdline.skip_format',
                        gen_args    => {url=>'/Perinci/Examples/CmdLineResMeta/skip_format'},
                        inline_gen_args => {load_module=>['Perinci::Examples::CmdLineResMeta']},
                        argv        => [qw//],
                        stdout_like => qr/ARRAY\(0x/,
                    },
                ],
            }, # result metadata

            {
                name => 'completion',
                completion_tests => [
                    {
                        name           => 'self-completion works',
                        gen_args       => {url => '/Perinci/Examples/Tiny/odd_even'},
                        inline_gen_args => {load_module=>['Perinci::Examples::Tiny']},
                        argv           => [],
                        comp_line0     => 'cmd --nu^',
                        comp_answer    => ['--number'],
                    },
                    {
                        tags           => ['subcommand'],
                        name           => 'completion of subcommand name',
                        gen_args    => {
                            url => '/Perinci/Examples/Tiny/',
                            subcommands => {
                                'sc1' => '/Perinci/Examples/Tiny/noop',



( run in 1.004 second using v1.01-cache-2.11-cpan-39bf76dae61 )