|
Packit |
e6c8bb |
# $Id: 02-text.t 1555 2017-03-22 09:47:16Z willem $ -*-perl-*-
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use strict;
|
|
Packit |
e6c8bb |
use Test::More tests => 37;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use_ok('Net::DNS::Text');
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $string = 'example';
|
|
Packit |
e6c8bb |
my $object = new Net::DNS::Text($string);
|
|
Packit |
e6c8bb |
ok( $object->isa('Net::DNS::Text'), 'object returned by new() constructor' );
|
|
Packit |
e6c8bb |
is( $object->value, $string, 'expected object->value' );
|
|
Packit |
e6c8bb |
is( $object->string, $string, 'expected object->string' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
eval { my $object = new Net::DNS::Text(); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "empty argument list\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
eval { my $object = new Net::DNS::Text(undef); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "argument undefined\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = '';
|
|
Packit |
e6c8bb |
my $expect = '""';
|
|
Packit |
e6c8bb |
my $result = new Net::DNS::Text($sample)->string;
|
|
Packit |
e6c8bb |
is( $result, $expect, 'null argument' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = 'example';
|
|
Packit |
e6c8bb |
my $escape = '\e\x\a\m\p\l\e';
|
|
Packit |
e6c8bb |
my $result = new Net::DNS::Text($escape)->string;
|
|
Packit |
e6c8bb |
is( $result, $sample, 'character escape' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = 'A';
|
|
Packit |
e6c8bb |
my $escape = '\065';
|
|
Packit |
e6c8bb |
my $result = new Net::DNS::Text($escape)->string;
|
|
Packit |
e6c8bb |
is( $result, $sample, 'numeric escape' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $string = 'a' x 256;
|
|
Packit |
e6c8bb |
my $object = new Net::DNS::Text($string);
|
|
Packit |
e6c8bb |
is( scalar(@$object), 2, 'new() splits long argument' );
|
|
Packit |
e6c8bb |
is( length( $object->value ), length($string), 'object->value reassembles string' );
|
|
Packit |
e6c8bb |
is( length( $object->string ), length($string), 'object->string reassembles string' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $utf8 = '\192\160';
|
|
Packit |
e6c8bb |
my $filler = 'a' x 254;
|
|
Packit |
e6c8bb |
my $string = join '', $filler, $utf8;
|
|
Packit |
e6c8bb |
my $object = new Net::DNS::Text($string);
|
|
Packit |
e6c8bb |
is( length( $object->[0] ), length($filler), 'new() does not break UTF8 sequence' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = 'x\000x\031x\127x\128x\159\160\255x';
|
|
Packit |
e6c8bb |
my $expect = '7800781f787f7880789fa0ff78';
|
|
Packit |
e6c8bb |
my $length = sprintf '%02x', length pack( 'H*', $expect );
|
|
Packit |
e6c8bb |
my $object = new Net::DNS::Text($sample);
|
|
Packit |
e6c8bb |
my $buffer = $object->encode;
|
|
Packit |
e6c8bb |
is( unpack( 'H*', $buffer ), $length . $expect, 'encode() returns expected data' );
|
|
Packit |
e6c8bb |
is( unpack( 'H*', $object->raw ), $expect, 'raw() returns expected data' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = 'example';
|
|
Packit |
e6c8bb |
my $buffer = new Net::DNS::Text($sample)->encode;
|
|
Packit |
e6c8bb |
my $object = decode Net::DNS::Text( \$buffer );
|
|
Packit |
e6c8bb |
ok( $object->isa('Net::DNS::Text'), 'object returned by decode() constructor' );
|
|
Packit |
e6c8bb |
is( $object->string, $sample, 'object matches original data' );
|
|
Packit |
e6c8bb |
my ( $x, $next ) = decode Net::DNS::Text( \$buffer );
|
|
Packit |
e6c8bb |
is( $next, length $buffer, 'expected offset returned by decode()' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = 'example';
|
|
Packit |
e6c8bb |
my $buffer = new Net::DNS::Text($sample)->encode;
|
|
Packit |
e6c8bb |
my ( $object, $next ) = decode Net::DNS::Text( \$buffer, 1, length($buffer) - 1 );
|
|
Packit |
e6c8bb |
is( $object->string, $sample, 'decode() extracts arbitrary substring' );
|
|
Packit |
e6c8bb |
is( $next, length $buffer, 'expected offset returned by decode()' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $sample = 'example';
|
|
Packit |
e6c8bb |
my $buffer = substr new Net::DNS::Text($sample)->encode, 0, 2;
|
|
Packit |
e6c8bb |
eval { my $object = decode Net::DNS::Text( \$buffer ); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "corrupt wire-format\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my %testcase = (
|
|
Packit |
e6c8bb |
'000102030405060708090a0b0c0d0e0f' =>
|
|
Packit |
e6c8bb |
'\000\001\002\003\004\005\006\007\008\009\010\011\012\013\014\015',
|
|
Packit |
e6c8bb |
'101112131415161718191a1b1c1d1e1f' =>
|
|
Packit |
e6c8bb |
'\016\017\018\019\020\021\022\023\024\025\026\027\028\029\030\031',
|
|
Packit |
e6c8bb |
);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
foreach my $hexcode ( sort keys %testcase ) {
|
|
Packit |
e6c8bb |
my $string = $testcase{$hexcode};
|
|
Packit |
e6c8bb |
my $content = pack 'H*', $hexcode;
|
|
Packit |
e6c8bb |
my $buffer = pack 'C a*', length $content, $content;
|
|
Packit |
e6c8bb |
my $decoded = decode Net::DNS::Text( \$buffer );
|
|
Packit |
e6c8bb |
my $compare = $decoded->string;
|
|
Packit |
e6c8bb |
is( $compare, qq($string), "C0 controls:\t$string" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my %testcase = (
|
|
Packit |
e6c8bb |
'202122232425262728292a2b2c2d2e2f' => q|" !\"#$%&'()*+,-./"|,
|
|
Packit |
e6c8bb |
'303132333435363738393a3b3c3d3e3f' => '0123456789:\;<=>?',
|
|
Packit |
e6c8bb |
'404142434445464748494a4b4c4d4e4f' => '\@ABCDEFGHIJKLMNO',
|
|
Packit |
e6c8bb |
'505152535455565758595a5b5c5d5e5f' => 'PQRSTUVWXYZ[\\\\]^_',
|
|
Packit |
e6c8bb |
'606162636465666768696a6b6c6d6e6f' => '`abcdefghijklmno',
|
|
Packit |
e6c8bb |
'707172737475767778797a7b7c7d7e7f' => 'pqrstuvwxyz{|}~\127'
|
|
Packit |
e6c8bb |
);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
foreach my $hexcode ( sort keys %testcase ) {
|
|
Packit |
e6c8bb |
my $string = $testcase{$hexcode};
|
|
Packit |
e6c8bb |
my $content = pack 'H*', $hexcode;
|
|
Packit |
e6c8bb |
my $buffer = pack 'C a*', length $content, $content;
|
|
Packit |
e6c8bb |
my $decoded = decode Net::DNS::Text( \$buffer );
|
|
Packit |
e6c8bb |
my $compare = $decoded->string;
|
|
Packit |
e6c8bb |
is( $compare, qq($string), "G0 graphics:\t$string" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my %testcase = (
|
|
Packit |
e6c8bb |
'808182838485868788898a8b8c8d8e8f' =>
|
|
Packit |
e6c8bb |
'\128\129\130\131\132\133\134\135\136\137\138\139\140\141\142\143',
|
|
Packit |
e6c8bb |
'909192939495969798999a9b9c9d9e9f' =>
|
|
Packit |
e6c8bb |
'\144\145\146\147\148\149\150\151\152\153\154\155\156\157\158\159',
|
|
Packit |
e6c8bb |
'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' =>
|
|
Packit |
e6c8bb |
'\160\161\162\163\164\165\166\167\168\169\170\171\172\173\174\175',
|
|
Packit |
e6c8bb |
'b0b1b2b3b4b5b6b7b8b9babbbcbdbebf' =>
|
|
Packit |
e6c8bb |
'\176\177\178\179\180\181\182\183\184\185\186\187\188\189\190\191',
|
|
Packit |
e6c8bb |
'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf' =>
|
|
Packit |
e6c8bb |
'\192\193\194\195\196\197\198\199\200\201\202\203\204\205\206\207',
|
|
Packit |
e6c8bb |
'd0d1d2d3d4d5d6d7d8d9dadbdcdddedf' =>
|
|
Packit |
e6c8bb |
'\208\209\210\211\212\213\214\215\216\217\218\219\220\221\222\223',
|
|
Packit |
e6c8bb |
'e0e1e2e3e4e5e6e7e8e9eaebecedeeef' =>
|
|
Packit |
e6c8bb |
'\224\225\226\227\228\229\230\231\232\233\234\235\236\237\238\239',
|
|
Packit |
e6c8bb |
'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' =>
|
|
Packit |
e6c8bb |
'\240\241\242\243\244\245\246\247\248\249\250\251\252\253\254\255'
|
|
Packit |
e6c8bb |
);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
foreach my $hexcode ( sort keys %testcase ) {
|
|
Packit |
e6c8bb |
my $string = $testcase{$hexcode};
|
|
Packit |
e6c8bb |
my $encoded = new Net::DNS::Text($string)->encode;
|
|
Packit |
e6c8bb |
is( unpack( 'xH*', $encoded ), $hexcode, qq(8-bit codes:\t$string) );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|