Browse Source

added tests for `_enable_receive_mode`, `_get_received_packet` & `_ReceivedPacket`

Fabian Peter Hammerle 3 years ago
parent
commit
3ce71bf2d1
3 changed files with 67 additions and 1 deletions
  1. 2 1
      cc1101/__init__.py
  2. 32 0
      tests/test_receive.py
  3. 33 0
      tests/test_received_packet.py

+ 2 - 1
cc1101/__init__.py

@@ -75,6 +75,7 @@ class _ReceivedPacket:  # unstable
 
     def __init__(
         self,
+        *,
         data: bytes,
         rssi_index: int,
         checksum_valid: bool,
@@ -99,7 +100,7 @@ class _ReceivedPacket:  # unstable
         return self._rssi_index / 2 - self._RSSI_OFFSET_dB
 
     def __str__(self) -> str:
-        return "{}(RSSI {:.1f} dBm, 0x{})".format(
+        return "{}(RSSI {:.0f}dBm, 0x{})".format(
             type(self).__name__,
             self.rssi_dbm,
             "".join("{:02x}".format(b) for b in self.data),

+ 32 - 0
tests/test_receive.py

@@ -0,0 +1,32 @@
+import unittest.mock
+
+import pytest
+
+import cc1101
+
+# pylint: disable=protected-access
+
+
+def test__enable_receive_mode(transceiver):
+    transceiver._spi.xfer.return_value = [15]
+    transceiver._enable_receive_mode()
+    transceiver._spi.xfer.assert_called_once_with([0x34 | 0x00])
+
+
+@pytest.mark.parametrize("data", [b"\0", b"\x12\x45\x56"])
+def test__get_received_packet(transceiver, data):
+    fifo_buffer = list(data) + [128, (1 << 7) | 42]
+    with unittest.mock.patch.object(
+        transceiver, "_read_status_register", return_value=len(fifo_buffer)
+    ) as read_status_register, unittest.mock.patch.object(
+        transceiver, "_read_burst", return_value=fifo_buffer
+    ) as read_burst_mock:
+        received_packet = transceiver._get_received_packet()
+    read_status_register.assert_called_once_with(0x3B)
+    read_burst_mock.assert_called_once_with(
+        start_register=0x3F, length=len(fifo_buffer)
+    )
+    assert received_packet.data == data
+    assert received_packet._rssi_index == 128
+    assert received_packet.checksum_valid
+    assert received_packet.link_quality_indicator == 42

+ 33 - 0
tests/test_received_packet.py

@@ -0,0 +1,33 @@
+import pytest
+
+import cc1101
+
+# pylint: disable=protected-access
+
+
+@pytest.mark.parametrize(
+    ("rssi_index", "rssi_dbm"),
+    [
+        (128, -64 - 74),
+        (204, -100),
+        (255, -0.5 - 74),
+        (0, -74),
+        (64, 32 - 74),
+        (127, 63.5 - 74),
+    ],
+)
+def test_rss_dbm(rssi_index, rssi_dbm):
+    packet = cc1101._ReceivedPacket(
+        data=b"\0", rssi_index=rssi_index, checksum_valid=True, link_quality_indicator=0
+    )
+    assert packet.rssi_dbm == pytest.approx(rssi_dbm)
+
+
+def test___str__():
+    packet = cc1101._ReceivedPacket(
+        data=b"\0\x12\x34",
+        rssi_index=204,
+        checksum_valid=True,
+        link_quality_indicator=0,
+    )
+    assert str(packet) == "_ReceivedPacket(RSSI -100dBm, 0x001234)"