App-Muter

 view release on metacpan or  search on metacpan

t/chain.t  view on Meta::CPAN

test_run_pattern('base32hex', 'foobar', 'CPNMUOJ1E8======', 'b32hex pattern 6');

# Test cases from the ascii85 Ruby gem.
test_run_pattern('ascii85', '',       '',         'empty ascii85 pattern');
test_run_pattern('ascii85', ' ',      '<~+9~>',   'ascii85 pattern 1');
test_run_pattern('ascii85', "\0",     '<~!!~>',   'ascii85 pattern 2');
test_run_pattern('ascii85', "\0" x 2, '<~!!!~>',  'ascii85 pattern 3');
test_run_pattern('ascii85', "\0" x 3, '<~!!!!~>', 'ascii85 pattern 4');
test_run_pattern('ascii85', "\0" x 4, '<~z~>',    'ascii85 pattern 5');
test_run_pattern('ascii85', "\0" x 5, '<~z!!~>',  'ascii85 pattern 6');
test_run_pattern('ascii85', "A\0\0\0\0", '<~5l^lb!!~>',   'ascii85 pattern 7');
test_run_pattern('ascii85', "A",         '<~5l~>',        'ascii85 pattern 8');
test_run_pattern('ascii85', "AB",        '<~5sb~>',       'ascii85 pattern 9');
test_run_pattern('ascii85', "ABC",       '<~5sdp~>',      'ascii85 pattern 10');
test_run_pattern('ascii85', "ABCD",      '<~5sdq,~>',     'ascii85 pattern 11');
test_run_pattern('ascii85', "ABCDE",     '<~5sdq,70~>',   'ascii85 pattern 12');
test_run_pattern('ascii85', "ABCDEF",    '<~5sdq,77I~>',  'ascii85 pattern 13');
test_run_pattern('ascii85', "ABCDEFG",   '<~5sdq,77Kc~>', 'ascii85 pattern 14');
test_run_pattern('ascii85', "ABCDEFGH", '<~5sdq,77Kd<~>', 'ascii85 pattern 15');
test_run_pattern('ascii85', "ABCDEFGHI", '<~5sdq,77Kd<8H~>',
    'ascii85 pattern 16');
test_run_pattern('ascii85', "Ascii85", '<~6$$OMBfIs~>', 'ascii85 pattern 17');
test_run_pattern(
    'ascii85',
    'Antidisestablishmentarianism' =>
        '<~6#LdYA8-*rF*(i"Ch[s(D.RU,@<-\'jDJ=0/~>',
    'ascii85 pattern 18'
);

test_run_pattern('uuencode', "Cat", "#0V%T\n`\n", "uuencode pattern 1");
test_run_pattern(
    'uuencode',
    "http://www.wikipedia.org\r\n",
    "::'1T<#HO+W=W=RYW:6MI<&5D:6\$N;W)G#0H`\n`\n",
    "uuencode pattern 2"
);

test_run_pattern(
    'xml',
    q{"Hello, ol' New Jersey! <:>"},
    '&quot;Hello, ol&apos; New Jersey! &lt;:&gt;&quot;',
    'xml pattern 1'
);
test_run_pattern(
    'xml(hex)',
    q{"Hello, ol' New Jersey! <:>"},
    '&#x22;Hello, ol&#x27; New Jersey! &#x3c;:&#x3e;&#x22;',
    'xml pattern 2'
);
test_run_pattern(
    'xml(html)',
    q{"Hello, ol' New Jersey! <:>"},
    '&quot;Hello, ol&#x27; New Jersey! &lt;:&gt;&quot;',
    'xml pattern 3'
);
test_run_chain('xml(hex)', '&abc', '&#x26;abc', 'xml pattern 4');
test_run_chain('xml,hex', '&abc', '&#x26;abc',
    'xml pattern 4 (without parentheses)');

test_run_chain('-xml', '&#x00a9;', '©',           'xml decode hex');
test_run_chain('-xml', '&#xfeff;', "\xef\xbb\xbf", 'xml decode hex BOM');

test_run_chain('-hex:base64', '00413780', 'AEE3gA==', 'simple chain');

test_run_chain(
    '-hex:hash(sha256):url64',
    '616263',
    'ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0',
    'simple chain with consuming filter'
);

test_run_chain(
    '-hex:hash,sha256:url64',
    '616263',
    'ungWv48Bz-pBQUDeXa4iI7ADYaOWF3qctBD_YfIAFa0',
    'simple chain with no parentheses'
);

Test::NoWarnings::had_no_warnings() if $INC{'Test/NoWarnings.pm'};

done_testing;

sub test_run_pattern {
    my ($chain, $input, $output, $desc) = @_;

    subtest $desc => sub {
        test_run_chain($chain,    $input,  $output, "$desc (encoding)");
        test_run_chain("-$chain", $output, $input,  "$desc (decoding)");
    };
    return;
}

sub test_run_chain {
    my ($chain, $input, $output, $desc) = @_;

    subtest $desc => sub {
        is(run_chain($chain, $input, 1),   $output, "$desc (1-byte chunks)");
        is(run_chain($chain, $input, 2),   $output, "$desc (2-byte chunks)");
        is(run_chain($chain, $input, 3),   $output, "$desc (3-byte chunks)");
        is(run_chain($chain, $input, 4),   $output, "$desc (4-byte chunks)");
        is(run_chain($chain, $input, 16),  $output, "$desc (16-byte chunks)");
        is(run_chain($chain, $input, 512), $output, "$desc (512-byte chunks)");
        is(App::Muter::Interface::process($chain, $input),
            $output, "$desc (one-shot)");
    };
    return;
}

sub run_chain {
    my ($chain, $input, $blocksize) = @_;
    my $output = '';
    my $ifh    = IO::Scalar->new(\$input);
    my $ofh    = IO::Scalar->new(\$output);

    App::Muter::Main::run_chain($chain, 0, [$ifh], $ofh, $blocksize);

    return $output;
}



( run in 0.602 second using v1.01-cache-2.11-cpan-d7f47b0818f )