The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

# message decoding
# Tue Dec 11 2007, Hessu, OH7LZB

use Test;

my @messageids = (1, 42, 10512, 'a', '1Ff84', 'F00b4');

BEGIN { plan tests => 6 * (6 + 5 + 5)};

use Ham::APRS::FAP qw(parseaprs);


foreach my $messageid (@messageids) {
	my $srccall = "OH7AA-1";
	my $destination = "OH7LZB   ";
	my $dstcall = "APRS";
	my $message = "Testing, 1 2 3";
	
	my $aprspacket = "$srccall>$dstcall,WIDE1-1,WIDE2-2,qAo,OH7AA::$destination:$message\{$messageid";
	my %h;
	my $retval = parseaprs($aprspacket, \%h);
	
	# whitespace will be stripped, ok...
	$destination =~ s/\s+$//;
	
	ok($retval, 1, "failed to parse a message packet");
	ok($h{'resultcode'}, undef, "wrong result code");
	ok($h{'type'}, 'message', "wrong packet type");
	ok($h{'destination'}, $destination, "wrong message dst callsign");
	ok($h{'messageid'}, $messageid, "wrong message id");
	ok($h{'message'}, $message, "wrong message");
	
	# ack
	$destination = "OH7LZB   ";
	$aprspacket = "$srccall>$dstcall,WIDE1-1,WIDE2-2,qAo,OH7AA::$destination:ack$messageid";
	$retval = parseaprs($aprspacket, \%h);
	$destination =~ s/\s+$//; # whitespace will be stripped, ok...
	
	ok($retval, 1, "failed to parse a message packet");
	ok($h{'resultcode'}, undef, "wrong result code");
	ok($h{'type'}, 'message', "wrong packet type");
	ok($h{'destination'}, $destination, "wrong message dst callsign");
	ok($h{'messageack'}, $messageid, "wrong message id in ack");
	
	# reject
	$destination = "OH7LZB   ";
	$aprspacket = "$srccall>$dstcall,WIDE1-1,WIDE2-2,qAo,OH7AA::$destination:rej$messageid";
	$retval = parseaprs($aprspacket, \%h);
	$destination =~ s/\s+$//; # whitespace will be stripped, ok...
	
	ok($retval, 1, "failed to parse a message packet");
	ok($h{'resultcode'}, undef, "wrong result code");
	ok($h{'type'}, 'message', "wrong packet type");
	ok($h{'destination'}, $destination, "wrong message dst callsign");
	ok($h{'messagerej'}, $messageid, "wrong message id in reject");
}