1
0
mirror of https://github.com/JoelBender/bacpypes synced 2025-09-28 22:15:23 +08:00
bacpypes/tests/test_constructed_data/test_sequence.py
2017-11-02 23:27:35 -04:00

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)