use strict; use Test::More tests => 13; use List::Util qw( max ); use_ok 'Crypt::OpenPGP::Armour'; my $obj = "FOO OBJECT"; my %headers = ( foo => 'bar', baz => 'quux' ); { # Test with a short input string. my $data = "foo bar bar"; my $armoured = Crypt::OpenPGP::Armour->armour( Data => $data, Object => $obj, Headers => \%headers ); ok $armoured, 'armoured text is produced'; my $max_len = max map { length } split /\n/, $armoured; cmp_ok $max_len, '<=', 64, 'max line length is <= 64 characters'; my $ref = Crypt::OpenPGP::Armour->unarmour( $armoured ); is $ref->{Data}, $data, 'unarmour produces original text'; is $ref->{Object}, "PGP $obj", 'Object is defined properly'; is_deeply $ref->{Headers}, { foo => $headers{foo}, baz => $headers{baz}, Version => Crypt::OpenPGP->version_string, }, 'Headers contains our headers, plus Version'; } { # Test with a longer input string. my $data = "foobarbaz" x 50; my $armoured = Crypt::OpenPGP::Armour->armour( Data => $data, Object => $obj, Headers => \%headers ); ok $armoured, 'armoured text is produced'; my $max_len = max map { length } split /\n/, $armoured; cmp_ok $max_len, '<=', 64, 'max line length is <= 64 characters'; my $ref = Crypt::OpenPGP::Armour->unarmour( $armoured ); is $ref->{Data}, $data, 'unarmour produces original text'; is $ref->{Object}, "PGP $obj", 'Object is defined properly'; is_deeply $ref->{Headers}, { foo => $headers{foo}, baz => $headers{baz}, Version => Crypt::OpenPGP->version_string, }, 'Headers contains our headers, plus Version'; } { my $data = "foobarbaz" x 50; # Test that we get rid of \r (\cM) characters from armoured text # when calling unarmour. my $armoured = Crypt::OpenPGP::Armour->armour( Data => $data, Object => $obj, Headers => \%headers ); ok $armoured, 'armoured text is produced'; $armoured = join "\r\n", split /\n/, $armoured; my $ref = Crypt::OpenPGP::Armour->unarmour( $armoured ); is $data, $ref->{Data}, 'unarmour discards \r characters'; }