File: test_construct_classes.py

package info (click to toggle)
python-construct-classes 0.1.2-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 108 kB
  • sloc: python: 108; makefile: 3
file content (69 lines) | stat: -rw-r--r-- 1,221 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import typing as t

import construct as c

from construct_classes import Struct, subcon


class BasicStruct(Struct):
    a: int
    b: int

    SUBCON = c.Struct(
        "a" / c.Int8ub,
        "b" / c.Int8ub,
    )


def test_basic():
    bs = BasicStruct(a=5, b=10)

    compiled = bs.build()
    parsed = BasicStruct.parse(compiled)
    assert parsed == bs


class SubconStruct(Struct):
    a: int
    b: BasicStruct = subcon(BasicStruct)

    SUBCON = c.Struct(
        "a" / c.Int8ub,
        "b" / BasicStruct.SUBCON,
    )


def test_subcon():
    ss = SubconStruct(a=5, b=BasicStruct(a=10, b=20))

    compiled = ss.build()
    parsed = SubconStruct.parse(compiled)
    assert parsed == ss

    substr = parsed.b.build()
    assert substr in compiled


class WithDefaultFactory(Struct):
    array: t.List[BasicStruct] = subcon(BasicStruct, default_factory=list)

    SUBCON = c.Struct(
        "array" / c.Array(2, BasicStruct.SUBCON),
    )


def test_default():
    dd = WithDefaultFactory()
    assert dd.array == []


class MoreFieldsInConstruct(Struct):
    a: int

    SUBCON = c.Struct(
        "a" / c.Int8ub,
        "b" / c.Tell,
    )

def test_more_fields():
    MoreFieldsInConstruct.parse(b"\x01")