Skip to content

Commit

Permalink
More tests
Browse files Browse the repository at this point in the history
  • Loading branch information
elParaguayo committed Dec 20, 2023
1 parent 65b40f7 commit d9a78ed
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 13 deletions.
7 changes: 6 additions & 1 deletion qtile_extras/widget/iwd.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ def __init__(self, **config):
self.add_defaults(base.MarginMixin.defaults)
MenuMixin.__init__(self, **config)
self.bus = None
self.device = None
self.networks = {}
self.devices = {}
self._device_tasks = []
Expand Down Expand Up @@ -432,7 +433,7 @@ async def find_device(self):
self.device = device
break
else:
logger.warning("The interface '%s' was not found.")
logger.warning("The interface '%s' was not found.", self.interface)

return

Expand Down Expand Up @@ -469,6 +470,10 @@ def get_stats(self):
task.add_done_callback(self.refresh)

def refresh(self, *args):
if self.device is None:
self.update("Error")
return

self.update(
self.format.format(
ssid=self.networks[self.device.connected_network].name,
Expand Down
101 changes: 89 additions & 12 deletions test/widget/test_iwd.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,6 @@ def __init__(self, *args, connected=False, name="", known="", network_type="", *
self._known = known
self._type = network_type

# if self._known:
# def f(self) -> "o":
# return self._known

# self.KnownNetwork = dbus_property(access=PropertyAccess.READ)(f)

@dbus_property(access=PropertyAccess.READ)
def Name(self) -> "s": # noqa: F821, N802
return self._name
Expand Down Expand Up @@ -250,7 +244,6 @@ def widget(monkeypatch):
def force_session_bus(bus_type):
return get_session_bus_address()

# monkeypatch.setattr("libqtile.widget.bluetooth.BLUEZ_SERVICE", BLUEZ_SERVICE)
# Make dbus_next always return the session bus address even if system bus is requested
monkeypatch.setattr("dbus_next.message_bus.get_bus_address", force_session_bus)

Expand All @@ -272,14 +265,98 @@ def wait_for_text(widget, text):
assert widget.info()["text"] == text


@Retry(ignore_exceptions=(AssertionError,))
def wait_for_menu(manager, hidden=False):
windows = len(manager.c.internal_windows())
if hidden:
assert windows == 1
else:
assert windows == 2


def config(**kwargs):
return pytest.mark.parametrize("iwd_manager", [kwargs], indirect=True)


def test_defaults(iwd_manager):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")


def text():
return widget.info()["text"]
@config(interface="wlan0")
def test_named_interface(iwd_manager):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")


@config(interface="wlan1")
def test_invalid_interface(iwd_manager, logger):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "Error")
assert "The interface 'wlan1' was not found." in logger.text


@config(format="{ssid} {rssi} {quality}")
def test_string_format(iwd_manager):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras -75 50")

def click():
iwd_manager.c.bar["top"].fake_button_press(0, "top", 0, 0, 1)

# Show prefix plus list of connected devices (1 connected at startup)
@config(password_entry_app=None)
def test_no_password_entry_app(iwd_manager, logger):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")
assert "No password entry app provided. Agent will not be started." in logger.text


@config(password_entry_app="qtileextraapp")
def test_invalid_password_entry_app(iwd_manager, logger):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")
assert "Cannot find password entry app. Agent will not be started." in logger.text


@config(password_entry_args="This should be a list")
def test_bad_password_entry_args(iwd_manager, logger):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")
assert "password_entry_args must be a list. Agent will not be started." in logger.text


def test_menu(iwd_manager):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")
iwd_manager.c.bar["top"].fake_button_press(0, "top", 0, 0, 1)
wait_for_menu(iwd_manager)

windows = iwd_manager.c.internal_windows()
menu = [win for win in windows if win.get("name", "") == "popupmenu"]
items = menu[0]["controls"]
assert items[0]["text"] == "Scan for networks"

networks = set(items[x]["text"] for x in range(2, 5))
expected = {"8021x_network (8021x)", "open_network (open)", "qtile_extras (psk)"}
assert networks == expected

widget.eval("self.menu.controls[0].button_press(0, 0, 1)")
widget.eval("self.menu.kill()")
wait_for_menu(iwd_manager, hidden=True)
iwd_manager.c.bar["top"].fake_button_press(0, "top", 0, 0, 1)
wait_for_menu(iwd_manager)
windows = iwd_manager.c.internal_windows()
menu = [win for win in windows if win.get("name", "") == "popupmenu"]
items = menu[0]["controls"]
assert items[0]["text"] == "Scanning..."


def test_scan_command(iwd_manager):
widget = iwd_manager.c.widget["iwd"]
wait_for_text(widget, "qtile_extras (50%)")

widget.scan()
iwd_manager.c.bar["top"].fake_button_press(0, "top", 0, 0, 1)
wait_for_menu(iwd_manager)
windows = iwd_manager.c.internal_windows()
menu = [win for win in windows if win.get("name", "") == "popupmenu"]
items = menu[0]["controls"]
assert items[0]["text"] == "Scanning..."

0 comments on commit d9a78ed

Please sign in to comment.