| #!/bin/sh |
| |
| [ "$1" = python3-pyasn1 ] || exit 0 |
| |
| python3 - << 'EOF' |
| |
| from collections import OrderedDict |
| |
| from pyasn1.type import namedtype |
| from pyasn1.type import tag |
| from pyasn1.type import univ |
| from pyasn1.codec.der.encoder import encode as derEncode |
| from pyasn1.codec.der.decoder import decode as derDecode |
| from pyasn1.codec.native.encoder import encode as nativeEncode |
| from pyasn1.codec.native.decoder import decode as nativeDecode |
| |
| class Record(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('id', univ.Integer()), |
| namedtype.OptionalNamedType( |
| 'room', univ.Integer().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0) |
| ) |
| ), |
| namedtype.DefaultedNamedType( |
| 'house', univ.Integer(0).subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1) |
| ) |
| ) |
| ) |
| |
| # encoding modifies the object (https://github.com/pyasn1/pyasn1/issues/53) |
| # so test decoding before encoding |
| |
| record = Record() |
| record['id'] = 123 |
| record['room'] = 321 |
| assert str(record) == 'Record:\n id=123\n room=321\n' |
| |
| substrate = b'0\x07\x02\x01{\x80\x02\x01A' |
| |
| received_record, _ = derDecode(substrate, asn1Spec=Record()) |
| assert received_record == record |
| |
| dict_record = nativeDecode({'id': 123, 'room': 321}, asn1Spec=Record()) |
| assert dict_record == record |
| |
| assert derEncode(record) == substrate |
| assert nativeEncode(record) == OrderedDict([('id', 123), ('room', 321), ('house', 0)]) |
| |
| EOF |