From 45b9b89d11398b73986b7e62339453121063f388 Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Fri, 29 May 2026 11:48:15 +0200 Subject: [PATCH] pybricks.messaging: Add tests. --- jedi/src/pybricks_jedi/__init__.py | 2 + jedi/tests/test_complete_import.py | 2 + jedi/tests/test_complete_messaging.py | 61 +++++++++++++++++++++++++++ src/pybricks/messaging.py | 5 +++ 4 files changed, 70 insertions(+) create mode 100644 jedi/tests/test_complete_messaging.py diff --git a/jedi/src/pybricks_jedi/__init__.py b/jedi/src/pybricks_jedi/__init__.py index 2175f38..4f96f68 100644 --- a/jedi/src/pybricks_jedi/__init__.py +++ b/jedi/src/pybricks_jedi/__init__.py @@ -15,6 +15,7 @@ PYBRICKS_CODE_PACKAGES = { "pybricks", "pybricks.hubs", "pybricks.iodevices", + "pybricks.messaging", "pybricks.parameters", "pybricks.pupdevices", "pybricks.robotics", @@ -490,6 +491,7 @@ def initialize(): "pybricks.ev3dev.speaker", "pybricks.hubs", "pybricks.iodevices", + "pybricks.messaging", "pybricks.parameters", "pybricks.pupdevices", "pybricks.robotics", diff --git a/jedi/tests/test_complete_import.py b/jedi/tests/test_complete_import.py index 96f889e..48d76af 100644 --- a/jedi/tests/test_complete_import.py +++ b/jedi/tests/test_complete_import.py @@ -61,6 +61,7 @@ def test_from_pybricks_import(): assert [c["insertText"] for c in completions] == [ "hubs", "iodevices", + "messaging", "parameters", "pupdevices", "robotics", @@ -75,6 +76,7 @@ def test_from_pybricks_dot(): assert [c["insertText"] for c in completions] == [ "hubs", "iodevices", + "messaging", "parameters", "pupdevices", "robotics", diff --git a/jedi/tests/test_complete_messaging.py b/jedi/tests/test_complete_messaging.py new file mode 100644 index 0000000..559e72b --- /dev/null +++ b/jedi/tests/test_complete_messaging.py @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: MIT +# Copyright (c) 2026 The Pybricks Authors + +""" +Tests for correct code completion of the messaging module. +""" + +import json + +import pytest +from pybricks_jedi import CompletionItem, complete + + +def test_from_pybricks_messaging_import(): + code = "from pybricks.messaging import " + completions: list[CompletionItem] = json.loads(complete(code, 1, len(code) + 1)) + assert [c["insertText"] for c in completions] == [ + "AppData", + "BLERadio", + "BluetoothMailboxClient", + "BluetoothMailboxServer", + "Connection", + "LogicMailbox", + "Mailbox", + "NumericMailbox", + "TextMailbox", + ] + + +def test_ble_radio_dot(): + code = "\n".join( + [ + "from pybricks.messaging import BLERadio", + "ble = BLERadio()", + "ble.", + ] + ) + completions: list[CompletionItem] = json.loads(complete(code, 3, 5)) + assert [c["insertText"] for c in completions] == [ + "broadcast", + "observe", + "signal_strength", + "version", + ] + + +def test_app_data_dot(): + code = "\n".join( + [ + "from pybricks.messaging import AppData", + "app = AppData([(0, 4)])", + "app.", + ] + ) + completions: list[CompletionItem] = json.loads(complete(code, 3, 5)) + assert [c["insertText"] for c in completions] == [ + "close", + "configure", + "get_bytes", + "write_bytes", + ] diff --git a/src/pybricks/messaging.py b/src/pybricks/messaging.py index 8924164..fac5260 100644 --- a/src/pybricks/messaging.py +++ b/src/pybricks/messaging.py @@ -458,3 +458,8 @@ class AppData: This is also called automatically when the object is garbage collected. """ + + +if TYPE_CHECKING: + del MaybeAwaitable + del T