App-jl

 view release on metacpan or  search on metacpan

t/01_basic.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Capture::Tiny qw/capture/;
use JSON qw/encode_json/;
use Encode qw//;

use App::jl;

sub jl_test {
    my ($name, $src_json, $opt, $test_ref, $do_note) = @_;

    my $jl = App::jl->new($opt ? @{$opt} : ());
    $jl->{__current_orig_line} = $src_json;
    my $output = $jl->_run_line;

    note $name  if $do_note;
    note $output if $do_note;

    if (ref $test_ref eq 'CODE') {
        $test_ref->($output, $src_json);
    }
}

my $JSON = encode_json({
    foo => encode_json({
        bar => encode_json({
            baz => encode_json({
                hoge => 123,
            }),
        }),
    }),
});

note $JSON;

jl_test('BASIC', $JSON, [], sub {
    my ($output, $src) = @_;

    ok $output =~ m!foo!;
});

{
    my $like_json_not_json = '{"not":"JSON"';
    jl_test('LIKE_JSON_NOT_JSON', $like_json_not_json, [], sub {
        my ($output, $src) = @_;

        is $output, $like_json_not_json;
    });
}

jl_test('SORT_KEYS', encode_json({ z => 1, b => 1, a => 1 }), [], sub {
    my ($output, $src) = @_;

    ok $output =~ m!a.*b.*z!sm;
});

jl_test('JA', encode_json({ aiko => 'è©©' }), [], sub {
    my ($output, $src) = @_;

    my $s = Encode::encode('utf8', 'è©©');

    ok $output =~ m!"aiko"\s*:\s*"$s"!;
});

jl_test('NO_PRETTY', $JSON, ['--no-pretty'], sub {
    my ($output, $src) = @_;

    ok $output =~ m!foo.*bar.*baz.*hoge!;
});

{
    my $src_json = encode_json({ foo => 'bar' });
    my $json_in_log = encode_json({ message => qq|[05/09/2019 23:51:51]\t[warn]\t$src_json\n| });
    jl_test('X', $json_in_log, ['-x'], sub {
        my ($output, $src) = @_;

        ok $output =~ m!\Q"[warn]",!;
    });
}

{
    my $src_json = encode_json({ foo => 'bar' });
    my $json_in_log = encode_json({ message => qq|[05/09/2019 23:51:51] foo, bar, baz \n$src_json\n| });
    jl_test('XX', $json_in_log, ['-xx'], sub {
        my ($output, $src) = @_;

        ok $output =~ m!"bar",! && $output =~ m!"baz"! && $output =~ m!"foo"\s*:\s*"bar"!;
    });
}

{
    my $src_json = encode_json({ foo => 'bar' });
    my $json_in_log = encode_json({ message => qq|[05/09/2019 23:51:51](warn)<server> \n$src_json\n| });
    jl_test('XXX', $json_in_log, ['-xxx'], sub {
        my ($output, $src) = @_;

        ok $output =~ m!"\Q(warn)"! && $output =~ m!"<server>"! && $output =~ m!"foo"\s*:\s*"bar"!;
    });
}

{
    my $src_json = encode_json([
        { created    => 1560026367 },
        { updated    => 1560026367.123 },
        { created_at => '1560026367' },
        { time       => '1560026367123' },
        { unixtime   => 1560026367123 },



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