blob: 2f13e5fc85d4a523f0f6fad871813306fa81608c [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh
2
3[ "$1" = python3-pyasn1 ] || exit 0
4
5python3 - << 'EOF'
6
7from collections import OrderedDict
8
9from pyasn1.type import namedtype
10from pyasn1.type import tag
11from pyasn1.type import univ
12from pyasn1.codec.der.encoder import encode as derEncode
13from pyasn1.codec.der.decoder import decode as derDecode
14from pyasn1.codec.native.encoder import encode as nativeEncode
15from pyasn1.codec.native.decoder import decode as nativeDecode
16
17class Record(univ.Sequence):
18 componentType = namedtype.NamedTypes(
19 namedtype.NamedType('id', univ.Integer()),
20 namedtype.OptionalNamedType(
21 'room', univ.Integer().subtype(
22 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)
23 )
24 ),
25 namedtype.DefaultedNamedType(
26 'house', univ.Integer(0).subtype(
27 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)
28 )
29 )
30 )
31
32# encoding modifies the object (https://github.com/pyasn1/pyasn1/issues/53)
33# so test decoding before encoding
34
35record = Record()
36record['id'] = 123
37record['room'] = 321
38assert str(record) == 'Record:\n id=123\n room=321\n'
39
40substrate = b'0\x07\x02\x01{\x80\x02\x01A'
41
42received_record, _ = derDecode(substrate, asn1Spec=Record())
43assert received_record == record
44
45dict_record = nativeDecode({'id': 123, 'room': 321}, asn1Spec=Record())
46assert dict_record == record
47
48assert derEncode(record) == substrate
49assert nativeEncode(record) == OrderedDict([('id', 123), ('room', 321), ('house', 0)])
50
51EOF