Archive-BagIt

 view release on metacpan or  search on metacpan

lib/Archive/BagIt/Role/Portability.pm  view on Meta::CPAN

sub chomp_portable {
    my ($line) = @_;
    $line =~ s#\x{0d}?\x{0a}?\Z##s; # replace CR|CRNL with empty
    return $line;
}


sub normalize_payload_filepath {
    my ($filename) = @_;
    $filename =~ s#[\\](?![/])#/#g; # normalize Windows Backslashes, but only if they are no escape sequences
    $filename =~ s#%#%25#g; # normalize percent
    $filename =~ s#\x{0a}#%0A#g; #normalize NEWLINE
    $filename =~ s#\x{0d}#%0D#g; #normalize CARRIAGE RETURN
    $filename =~ s# #%20#g; # space
    $filename =~ s#"##g; # quotes
    return $filename;
}


sub check_if_payload_filepath_violates{
    my ($local_name) = @_;

t/internal.t  view on Meta::CPAN

is(Archive::BagIt::Role::Portability::normalize_payload_filepath(''), '', 'normalize_payload_filepath, empty');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data/foo'), 'data/foo', 'normalize_payload_filepath, standard');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data\foo'), 'data/foo', 'normalize_payload_filepath, windows standard');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data\foo\bar\baz'), 'data/foo/bar/baz', 'normalize_payload_filepath, windows standard, long');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data/foo bar'), 'data/foo%20bar', 'normalize_payload_filepath, space');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data\foo bar'), 'data/foo%20bar', 'normalize_payload_filepath, windows space');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data\/foo'), 'data\/foo', 'normalize_payload_filepath, escape \/');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('"data/foo bar"'), 'data/foo%20bar', 'normalize_payload_filepath, quoted space');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath("data/foo\nbar"), 'data/foo%0Abar', 'normalize_payload_filepath, <LF>');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath("data/foo\rbar"), 'data/foo%0Dbar', 'normalize_payload_filepath, <CR>');
is(Archive::BagIt::Role::Portability::normalize_payload_filepath('data/foo%bar'), 'data/foo%25bar', 'normalize_payload_filepath, percent');

ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('data/>foo'), 'Windows reserved char >' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('data/<foo'), 'Windows reserved char <' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('foo:'), 'Windows reserved char :' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('"'), 'Windows reserved char "' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('?'), 'Windows reserved char ?' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('*'), 'Windows reserved char *' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('|'), 'Windows reserved char |' );
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('CON'), 'Windows reserved name CON');
ok(Archive::BagIt::Role::Portability::check_if_payload_filepath_violates('PRN'), 'Windows reserved name PRN');



( run in 0.355 second using v1.01-cache-2.11-cpan-709fd43a63f )