File: dpt_17_scene_number_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 (48 lines) | stat: -rw-r--r-- 1,809 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
"""Unit test for KNX scene number."""

import pytest

from xknx.dpt import DPTArray, DPTSceneNumber
from xknx.exceptions import ConversionError, CouldNotParseTelegram


class TestDPTSceneNumber:
    """Test class for KNX scaling value."""

    @pytest.mark.parametrize(
        ("raw", "value"),
        [
            ((0x31,), 50),
            ((0x3F,), 64),
            ((0x00,), 1),
        ],
    )
    def test_transcoder(self, raw: tuple[int], value: int) -> None:
        """Test parsing and streaming of DPTSceneNumber."""
        assert DPTSceneNumber.to_knx(value) == DPTArray(raw)
        assert DPTSceneNumber.from_knx(DPTArray(raw)) == value

    def test_to_knx_min_exceeded(self) -> None:
        """Test parsing of DPTSceneNumber with wrong value (underflow)."""
        with pytest.raises(ConversionError):
            DPTSceneNumber.to_knx(DPTSceneNumber.value_min - 1)

    def test_to_knx_max_exceeded(self) -> None:
        """Test parsing of DPTSceneNumber with wrong value (overflow)."""
        with pytest.raises(ConversionError):
            DPTSceneNumber.to_knx(DPTSceneNumber.value_max + 1)

    def test_to_knx_wrong_parameter(self) -> None:
        """Test parsing of DPTSceneNumber with wrong value (string)."""
        with pytest.raises(ConversionError):
            DPTSceneNumber.to_knx("fnord")

    def test_from_knx_wrong_parameter(self) -> None:
        """Test parsing of DPTSceneNumber with wrong value (3 byte array)."""
        with pytest.raises(CouldNotParseTelegram):
            DPTSceneNumber.from_knx(DPTArray((0x01, 0x02, 0x03)))

    def test_from_knx_wrong_value(self) -> None:
        """Test parsing of DPTSceneNumber with value which exceeds limits."""
        with pytest.raises(ConversionError):
            DPTSceneNumber.from_knx(DPTArray((0x64,)))