Blame t/10choice.t

Packit Service 8c15e4
#!/usr/bin/perl
Packit ef9df4
Packit ef9df4
#
Packit ef9df4
# Test the use of choices
Packit ef9df4
#
Packit ef9df4
Packit ef9df4
use Convert::ASN1;
Packit ef9df4
BEGIN { require 't/funcs.pl' }
Packit ef9df4
Packit ef9df4
print "1..10\n";
Packit ef9df4
Packit ef9df4
btest 1, $asn  = Convert::ASN1->new;
Packit ef9df4
btest 2, $asn->prepare( <<'[TheEnd]' ) or warn $asn->error;
Packit ef9df4
  Natural  ::= CHOICE {
Packit ef9df4
    prime   Prime,
Packit ef9df4
    product Product
Packit ef9df4
  }
Packit ef9df4
  Prime    ::= [1] INTEGER
Packit ef9df4
  Product  ::= CHOICE {
Packit ef9df4
    perfect Perfect,
Packit ef9df4
    plain   Plain
Packit ef9df4
  }
Packit ef9df4
  Perfect  ::= [2] INTEGER
Packit ef9df4
  Plain    ::= [3] INTEGER
Packit ef9df4
  Naturals ::= [4] SEQUENCE OF Natural
Packit ef9df4
  List     ::= [5] SEQUENCE { list Naturals }
Packit ef9df4
[TheEnd]
Packit ef9df4
Packit ef9df4
my $nl = $asn->find( 'List' );
Packit ef9df4
my $buf = $nl->encode( list => [
Packit ef9df4
                        { prime => 13 },
Packit ef9df4
                        { product => { perfect => 28 } },
Packit ef9df4
                        { product => { plain   => 42 } }, ] );
Packit ef9df4
$result = pack( 'C*', 0xa5, 0x0b,  0xa4, 0x09,
Packit ef9df4
                      0x81, 0x01, 0x0d,
Packit ef9df4
                      0x82, 0x01, 0x1c,
Packit ef9df4
                      0x83, 0x01, 0x2a, );
Packit ef9df4
stest 3, $result, $buf;
Packit ef9df4
Packit ef9df4
my $seq = $nl->decode( $buf ) or warn $asn->error;
Packit ef9df4
btest 4, defined( $seq ) && exists( $seq->{list} );
Packit ef9df4
ntest 5, 13, $seq->{list}->[0]->{prime};
Packit ef9df4
ntest 6, 28, $seq->{list}->[1]->{product}->{perfect};
Packit ef9df4
ntest 7, 42, $seq->{list}->[2]->{product}->{plain};
Packit ef9df4
Packit ef9df4
Packit ef9df4
btest 8, $asn->prepare( 'Foo ::= [1] EXPLICIT CHOICE { a  NULL }' ) or warn $asn->error;
Packit ef9df4
$nl = $asn->find('Foo');
Packit ef9df4
$buf = $nl->encode( a => 1 );
Packit ef9df4
$result = pack 'C*', map hex, qw(A1 02 05 00);
Packit ef9df4
stest 9, $result, $buf;
Packit ef9df4
$seq = $nl->decode( $result )  or warn $asn->error;
Packit ef9df4
btest 10, $seq->{a};