aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_gui.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_gui.py')
-rw-r--r--tests/test_gui.py49
1 files changed, 46 insertions, 3 deletions
diff --git a/tests/test_gui.py b/tests/test_gui.py
index fb0044c..d77df20 100644
--- a/tests/test_gui.py
+++ b/tests/test_gui.py
@@ -29,7 +29,7 @@ import unittest # noqa: E402
ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
sys.path.insert(0, ROOT)
-from PyQt6.QtCore import QCoreApplication, QEvent, QObject, QProcess, pyqtSignal # noqa: E402
+from PyQt6.QtCore import QCoreApplication, QEvent, QObject, QPointF, QProcess, pyqtSignal # noqa: E402
from PyQt6.QtGui import QColor # noqa: E402
from PyQt6.QtWidgets import QApplication # noqa: E402
@@ -146,6 +146,9 @@ INVENTORY = {"columns": COLS, "rows": [
inv_row("pentesting/nmap", built="7.9", result="bad"),
inv_row("network/curl"),
]}
+RESULTS = {"rows": [["games/pcsx2", "failed", 1789992366, None, True], # newest first, as the helper
+ ["development/whisper.cpp", "aborted", 1789753147, None, False],
+ ["misc/nuclei", "ok", 1788978222, "3.11.0", True]]}
PREVIEW = {"id": "20260101-000000-slackrepo", "kind": "slackrepo", "status": "ok",
"args": ["update", "--preview", "nuclei"], "argv": [], "created": 0, "start": 0, "end": 1}
@@ -287,7 +290,11 @@ class SmokeTest(unittest.TestCase):
remote = FakeRemote({"version": ({"version": VERSION, "overlays": ["personal"]}, None),
"stats": (STATS, None), "jobs": ({"jobs": []}, None),
"gpg-status": ({"unlocked": True, "key": "K"}, None),
- "inventory": (INVENTORY, None), **answers})
+ "inventory": (INVENTORY, None), "results": (RESULTS, None),
+ "build-log": ({"build": "\x1b[1mERROR\x1b[0m: make failed\n",
+ "truncated": True, "mtime": 0,
+ "resource": "peak memory 3308M\n"}, None),
+ **answers})
w = MainWindow(config.load("/nonexistent")[0], remote, FakeNotifier())
self.addCleanup(w.deleteLater)
self.addCleanup(lambda: w.jobs_tab and w.jobs_tab.stop())
@@ -434,7 +441,8 @@ class SmokeTest(unittest.TestCase):
def test_ribbon_opens_tabs(self):
w, _ = self.window()
w.poll_jobs()
- self.assertEqual([a.text() for a in w.ribbon.actions()], ["Dashboard", "Packages", "Jobs"])
+ self.assertEqual([a.text() for a in w.ribbon.actions()],
+ ["Dashboard", "Packages", "Results", "Jobs"])
self.assertEqual([m.text() for m in w.menuBar().actions()], ["&File"])
w.ribbon.actions()[1].trigger()
self.assertIs(w.tabs.currentWidget(), w.packages_tab)
@@ -453,6 +461,41 @@ class SmokeTest(unittest.TestCase):
prev.activated.emit()
self.assertEqual(w.tabs.currentIndex(), 2)
+ def test_results_tab(self):
+ w, remote = self.window()
+ w.poll_jobs()
+ tab = w.open_results()
+ tab.table.selectRow(2) # nuclei, ok
+ tab.filter_to("failed")
+ self.assertEqual(tab.detail.text(), "") # hidden by the filter: no stale detail
+ self.assertIs(w.tabs.currentWidget(), tab)
+ self.assertEqual(tab.visible_paths(), ["games/pcsx2"])
+ tab.chips["failed"].setChecked(False)
+ self.assertEqual(tab.visible_paths(), ["games/pcsx2", "development/whisper.cpp", "misc/nuclei"])
+ tab.table.selectRow(1) # whisper.cpp: no log dir
+ self.assertFalse(tab.log_btn.isEnabled())
+ tab.table.selectRow(0)
+ self.assertTrue(tab.log_btn.isEnabled())
+ tab.show_log()
+ self.assertIn(("build-log", "games/pcsx2"), remote.calls)
+ viewer = tab.viewers[-1]
+ self.assertIn("ERROR: make failed", viewer.text.toPlainText()) # ANSI stripped
+ self.assertIn("peak memory", viewer.text.toPlainText())
+ self.assertIn("truncated", viewer.text.toPlainText())
+ self.assertTrue(viewer.text.toPlainText().endswith("make failed\n")) # failure stays last
+ viewer.close()
+
+ def test_dashboard_results_clicks(self):
+ w, _ = self.window(stats=(dict(STATS, slackrepo={"results": {"ok": 3, "failed": 1}, "built": 3}), None))
+ w.poll_jobs()
+ w.dashboard.legend.linkActivated.emit("failed")
+ self.assertIs(w.tabs.currentWidget(), w.results_tab)
+ self.assertEqual(w.results_tab.visible_paths(), ["games/pcsx2"])
+ bar = w.dashboard.bar
+ bar.resize(400, 14)
+ hit = bar.label_at(QPointF(5, 5))
+ self.assertEqual(hit, "ok")
+
def test_log_carriage_return(self):
w, _ = self.window()
jobs = w.open_jobs()