mirror of
https://github.com/JoelBender/bacpypes
synced 2025-09-28 22:15:23 +08:00
125 lines
3.5 KiB
Python
125 lines
3.5 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Test Constructed Data Sequence
|
|
------------------------------
|
|
"""
|
|
|
|
import unittest
|
|
|
|
from bacpypes.debugging import bacpypes_debugging, ModuleLogger, xtob
|
|
|
|
from bacpypes.errors import MissingRequiredParameter
|
|
from bacpypes.primitivedata import Boolean, Integer, Tag, TagList
|
|
from bacpypes.constructeddata import Element, Sequence
|
|
|
|
# some debugging
|
|
_debug = 0
|
|
_log = ModuleLogger(globals())
|
|
|
|
|
|
@bacpypes_debugging
|
|
class EmptySequence(Sequence):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
if _debug: EmptySequence._debug("__init__ %r %r", args, kwargs)
|
|
Sequence.__init__(self, *args, **kwargs)
|
|
|
|
|
|
@bacpypes_debugging
|
|
class TestEmptySequence(unittest.TestCase):
|
|
|
|
def test_empty_sequence(self):
|
|
if _debug: TestEmptySequence._debug("test_empty_sequence")
|
|
|
|
# create a sequence
|
|
seq = EmptySequence()
|
|
if _debug: TestEmptySequence._debug(" - seq: %r", seq)
|
|
|
|
# encode it in a tag list
|
|
tag_list = TagList()
|
|
seq.encode(tag_list)
|
|
if _debug: TestEmptySequence._debug(" - tag_list: %r", tag_list)
|
|
|
|
# create another sequence and decode the tag list
|
|
seq = EmptySequence()
|
|
seq.decode(tag_list)
|
|
if _debug: TestEmptySequence._debug(" - seq: %r", seq)
|
|
|
|
def test_no_elements(self):
|
|
if _debug: TestEmptySequence._debug("test_no_elements")
|
|
|
|
# create a sequence with an undefined element
|
|
with self.assertRaises(TypeError):
|
|
seq = EmptySequence(some_element=None)
|
|
|
|
|
|
@bacpypes_debugging
|
|
class SimpleSequence(Sequence):
|
|
|
|
sequenceElements = [
|
|
Element('hydrogen', Boolean),
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
if _debug: SimpleSequence._debug("__init__ %r %r", args, kwargs)
|
|
Sequence.__init__(self, *args, **kwargs)
|
|
|
|
|
|
@bacpypes_debugging
|
|
class TestSimpleSequence(unittest.TestCase):
|
|
|
|
def test_simple_sequence_missing(self):
|
|
if _debug: TestSimpleSequence._debug("test_simple_sequence_missing")
|
|
|
|
# create a sequence with a missing required element
|
|
seq = SimpleSequence()
|
|
if _debug: TestSimpleSequence._debug(" - seq: %r", seq)
|
|
|
|
# encode it in a tag list
|
|
tag_list = TagList()
|
|
with self.assertRaises(MissingRequiredParameter):
|
|
seq.encode(tag_list)
|
|
|
|
def test_simple_sequence(self):
|
|
if _debug: TestSimpleSequence._debug("test_simple_sequence")
|
|
|
|
# create a sequence
|
|
seq = SimpleSequence(hydrogen=False)
|
|
if _debug: TestSimpleSequence._debug(" - seq: %r", seq)
|
|
|
|
# encode it in a tag list
|
|
tag_list = TagList()
|
|
seq.encode(tag_list)
|
|
if _debug: TestSimpleSequence._debug(" - tag_list: %r", tag_list)
|
|
|
|
# create another sequence and decode the tag list
|
|
seq = SimpleSequence()
|
|
seq.decode(tag_list)
|
|
if _debug: TestSimpleSequence._debug(" - seq: %r", seq)
|
|
|
|
def test_simple_sequence_wrong_type(self):
|
|
if _debug: TestSimpleSequence._debug("test_simple_sequence_wrong_type")
|
|
|
|
# create a sequence with wrong element value type
|
|
seq = SimpleSequence(hydrogen=12)
|
|
with self.assertRaises(TypeError):
|
|
tag_list = TagList()
|
|
seq.encode(tag_list)
|
|
|
|
|
|
@bacpypes_debugging
|
|
class CompoundSequenceOne(Sequence):
|
|
|
|
sequenceElements = [
|
|
Element('hydrogen', Boolean),
|
|
Element('helium', Integer),
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
if _debug: CompoundSequenceOne._debug("__init__ %r %r", args, kwargs)
|
|
Sequence.__init__(self, *args, **kwargs)
|
|
|
|
|