File: remote_value_string_test.py

package info (click to toggle)
python-xknx 3.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,012 kB
  • sloc: python: 39,710; javascript: 8,556; makefile: 27; sh: 12
file content (154 lines) | stat: -rw-r--r-- 5,030 bytes parent folder | download
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"""Unit test for RemoteValueString objects."""

import pytest

from xknx import XKNX
from xknx.dpt import DPTArray, DPTBinary, DPTLatin1, DPTString
from xknx.exceptions import ConversionError
from xknx.remote_value import RemoteValueString
from xknx.telegram import GroupAddress, Telegram
from xknx.telegram.apci import GroupValueWrite


class TestRemoteValueString:
    """Test class for RemoteValueString objects."""

    def test_to_knx(self) -> None:
        """Test to_knx function with normal operation."""
        xknx = XKNX()
        dpt_array_string = DPTArray(
            (
                0x4B,
                0x4E,
                0x58,
                0x20,
                0x69,
                0x73,
                0x20,
                0x4F,
                0x4B,
                0x00,
                0x00,
                0x00,
                0x00,
                0x00,
            )
        )
        remote_value_default = RemoteValueString(xknx)
        assert remote_value_default.dpt_class == DPTString
        assert remote_value_default.to_knx("KNX is OK") == dpt_array_string

        remote_value_ascii = RemoteValueString(xknx, value_type="string")
        assert remote_value_ascii.dpt_class == DPTString
        assert remote_value_ascii.to_knx("KNX is OK") == dpt_array_string

        remote_value_latin1 = RemoteValueString(xknx, value_type="latin_1")
        assert remote_value_latin1.dpt_class == DPTLatin1
        assert remote_value_latin1.to_knx("KNX is OK") == dpt_array_string

    def test_from_knx(self) -> None:
        """Test from_knx function with normal operation."""
        xknx = XKNX()
        remote_value = RemoteValueString(xknx)
        assert (
            remote_value.from_knx(
                DPTArray(
                    (
                        0x4B,
                        0x4E,
                        0x58,
                        0x20,
                        0x69,
                        0x73,
                        0x20,
                        0x4F,
                        0x4B,
                        0x00,
                        0x00,
                        0x00,
                        0x00,
                        0x00,
                    )
                )
            )
            == "KNX is OK"
        )

    def test_to_knx_error(self) -> None:
        """Test to_knx function with wrong parametern."""
        xknx = XKNX()
        remote_value = RemoteValueString(xknx)
        with pytest.raises(ConversionError):
            remote_value.to_knx("123456789012345")

    async def test_set(self) -> None:
        """Test setting value."""
        xknx = XKNX()
        remote_value = RemoteValueString(xknx, group_address=GroupAddress("1/2/3"))
        remote_value.set("asdf")
        assert xknx.telegrams.qsize() == 1
        telegram = xknx.telegrams.get_nowait()
        assert telegram == Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(
                DPTArray((97, 115, 100, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
            ),
        )
        remote_value.set("ASDF")
        assert xknx.telegrams.qsize() == 1
        telegram = xknx.telegrams.get_nowait()
        assert telegram == Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(
                DPTArray((65, 83, 68, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
            ),
        )

    def test_process(self) -> None:
        """Test process telegram."""
        xknx = XKNX()
        remote_value = RemoteValueString(xknx, group_address=GroupAddress("1/2/3"))
        telegram = Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(
                DPTArray(
                    (
                        0x41,
                        0x41,
                        0x41,
                        0x41,
                        0x41,
                        0x42,
                        0x42,
                        0x42,
                        0x42,
                        0x42,
                        0x43,
                        0x43,
                        0x43,
                        0x43,
                    )
                )
            ),
        )
        remote_value.process(telegram)
        assert remote_value.value == "AAAAABBBBBCCCC"

    def test_to_process_error(self) -> None:
        """Test process erroneous telegram."""
        xknx = XKNX()
        remote_value = RemoteValueString(xknx, group_address=GroupAddress("1/2/3"))

        telegram = Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(DPTBinary(1)),
        )
        assert remote_value.process(telegram) is False

        telegram = Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(DPTArray((0x64, 0x65))),
        )
        assert remote_value.process(telegram) is False

        assert remote_value.value is None