mirror of
https://github.com/JoelBender/bacpypes
synced 2025-09-28 22:15:23 +08:00
154 lines
4.0 KiB
Python
154 lines
4.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Test Primitive Data Unsigned
|
|
----------------------------
|
|
"""
|
|
|
|
import sys
|
|
import unittest
|
|
|
|
from bacpypes.debugging import bacpypes_debugging, ModuleLogger, xtob
|
|
|
|
from bacpypes.errors import InvalidTag
|
|
from bacpypes.primitivedata import Unsigned, Tag
|
|
|
|
# some debugging
|
|
_debug = 0
|
|
_log = ModuleLogger(globals())
|
|
|
|
|
|
@bacpypes_debugging
|
|
def unsigned_tag(x):
|
|
"""Convert a hex string to an unsigned application tag."""
|
|
if _debug: unsigned_tag._debug("unsigned_tag %r", x)
|
|
|
|
b = xtob(x)
|
|
tag = Tag(Tag.applicationTagClass, Tag.unsignedAppTag, len(b), b)
|
|
if _debug: unsigned_endec._debug(" - tag: %r", tag)
|
|
|
|
return tag
|
|
|
|
|
|
@bacpypes_debugging
|
|
def unsigned_encode(obj):
|
|
"""Encode an Unsigned object into a tag."""
|
|
if _debug: unsigned_encode._debug("unsigned_encode %r", obj)
|
|
|
|
tag = Tag()
|
|
obj.encode(tag)
|
|
if _debug: unsigned_endec._debug(" - tag: %r", tag)
|
|
|
|
return tag
|
|
|
|
|
|
@bacpypes_debugging
|
|
def unsigned_decode(tag):
|
|
"""Decode an unsigned application tag into an unsigned."""
|
|
if _debug: unsigned_decode._debug("unsigned_decode %r", tag)
|
|
|
|
obj = Unsigned(tag)
|
|
if _debug: unsigned_decode._debug(" - obj: %r", obj)
|
|
|
|
return obj
|
|
|
|
|
|
@bacpypes_debugging
|
|
def unsigned_endec(v, x):
|
|
"""Pass the value to Unsigned, construct a tag from the hex string,
|
|
and compare results of encode and decoding each other."""
|
|
if _debug: unsigned_endec._debug("unsigned_endec %r %r", v, x)
|
|
|
|
tag = unsigned_tag(x)
|
|
if _debug: unsigned_endec._debug(" - tag: %r, %r", tag, tag.tagData)
|
|
|
|
obj = Unsigned(v)
|
|
if _debug: unsigned_endec._debug(" - obj: %r, %r", obj, obj.value)
|
|
|
|
assert unsigned_encode(obj) == tag
|
|
assert unsigned_decode(tag) == obj
|
|
|
|
|
|
@bacpypes_debugging
|
|
class TestUnsigned(unittest.TestCase):
|
|
|
|
def test_unsigned(self):
|
|
if _debug: TestUnsigned._debug("test_unsigned")
|
|
|
|
obj = Unsigned()
|
|
assert obj.value == 0
|
|
|
|
assert Unsigned.is_valid(1)
|
|
assert not Unsigned.is_valid(-1)
|
|
if sys.version[0] == 2:
|
|
assert Unsigned.is_valid(long(1))
|
|
assert not Unsigned.is_valid(long(-1))
|
|
|
|
assert not Unsigned.is_valid(True)
|
|
assert not Unsigned.is_valid(-1)
|
|
assert not Unsigned.is_valid(1.0)
|
|
|
|
with self.assertRaises(TypeError):
|
|
Unsigned("some string")
|
|
with self.assertRaises(TypeError):
|
|
Unsigned(1.0)
|
|
|
|
def test_unsigned_int(self):
|
|
if _debug: TestUnsigned._debug("test_unsigned_int")
|
|
|
|
obj = Unsigned(1)
|
|
assert obj.value == 1
|
|
assert str(obj) == "Unsigned(1)"
|
|
|
|
with self.assertRaises(ValueError):
|
|
Unsigned(-1)
|
|
|
|
def test_unsigned_tag(self):
|
|
if _debug: TestUnsigned._debug("test_unsigned_tag")
|
|
|
|
tag = Tag(Tag.applicationTagClass, Tag.unsignedAppTag, 1, xtob('01'))
|
|
obj = Unsigned(tag)
|
|
assert obj.value == 1
|
|
|
|
tag = Tag(Tag.applicationTagClass, Tag.booleanAppTag, 0, xtob(''))
|
|
with self.assertRaises(InvalidTag):
|
|
Unsigned(tag)
|
|
|
|
tag = Tag(Tag.contextTagClass, 0, 1, xtob('ff'))
|
|
with self.assertRaises(InvalidTag):
|
|
Unsigned(tag)
|
|
|
|
tag = Tag(Tag.openingTagClass, 0)
|
|
with self.assertRaises(InvalidTag):
|
|
Unsigned(tag)
|
|
|
|
def test_unsigned_copy(self):
|
|
if _debug: TestUnsigned._debug("test_unsigned_copy")
|
|
|
|
obj1 = Unsigned(12)
|
|
obj2 = Unsigned(obj1)
|
|
assert obj2.value == 12
|
|
|
|
def test_unsigned_endec(self):
|
|
if _debug: TestUnsigned._debug("test_unsigned_endec")
|
|
|
|
with self.assertRaises(InvalidTag):
|
|
obj = Unsigned(unsigned_tag(''))
|
|
|
|
unsigned_endec(0, '00')
|
|
unsigned_endec(1, '01')
|
|
unsigned_endec(127, '7f')
|
|
unsigned_endec(128, '80')
|
|
unsigned_endec(255, 'ff')
|
|
|
|
unsigned_endec(32767, '7fff')
|
|
unsigned_endec(32768, '8000')
|
|
|
|
unsigned_endec(8388607, '7fffff')
|
|
unsigned_endec(8388608, '800000')
|
|
|
|
unsigned_endec(2147483647, '7fffffff')
|
|
unsigned_endec(2147483648, '80000000')
|
|
|