|
- import queue
- import unittest
- from unittest.mock import patch
-
- from plsr_gui import PlsrGui
- from plsr_test import COMMAND_RESET, Snapshot
-
-
- class PollingUiTests(unittest.TestCase):
- def setUp(self):
- self.app = PlsrGui()
- self.app.withdraw()
- self.worker_jobs = self.app.jobs
- self.app.jobs = queue.Queue()
- self.snapshot = Snapshot(0, 0, 0, 0, 0, 0, 4, 1)
- self.app.connected = True
- self.app.last_snapshot = self.snapshot
- self.app._update_controls()
-
- def tearDown(self):
- self.app.closing = True
- self.worker_jobs.put({"name": "shutdown"})
- self.app.destroy()
-
- def _states(self):
- widgets = (
- self.app.connect_button,
- self.app.save_outputs_button,
- self.app.start_button,
- self.app.stop_button,
- self.app.emergency_button,
- self.app.lamp_test_button,
- self.app.reset_button,
- self.app.clear_button,
- self.app.pulse_output_combo,
- self.app.direction_output_combo,
- self.app.pulses_spin,
- self.app.frequency_spin,
- self.app.apply_frequency_button,
- self.app.forward_radio,
- self.app.reverse_radio,
- )
- return tuple(str(widget.cget("state")) for widget in widgets)
-
- def test_running_state_allows_frequency_update_only(self):
- self.app.last_snapshot = Snapshot(2, 1, 1000, 0, 0, 10, 0, 0, 1)
- self.app._update_controls()
-
- self.assertEqual(str(self.app.frequency_spin.cget("state")), "normal")
- self.assertEqual(
- str(self.app.apply_frequency_button.cget("state")), "normal"
- )
- self.assertEqual(str(self.app.pulses_spin.cget("state")), "disabled")
- self.assertEqual(str(self.app.forward_radio.cget("state")), "disabled")
-
- def test_background_poll_does_not_toggle_controls(self):
- before = self._states()
-
- self.assertTrue(self.app._submit("snapshot", purpose="poll"))
- self.assertTrue(self.app.poll_active)
- self.assertEqual(self._states(), before)
-
- self.app._handle_result(
- {
- "type": "result",
- "name": "snapshot",
- "purpose": "poll",
- "result": self.snapshot,
- }
- )
- self.assertEqual(self._states(), before)
-
- def test_click_during_poll_is_deferred(self):
- self.app._submit("snapshot", purpose="poll")
-
- accepted = self.app._submit(
- "command", purpose="reset", command=COMMAND_RESET
- )
-
- self.assertTrue(accepted)
- self.assertIsNotNone(self.app.deferred_job)
- self.app._handle_result(
- {
- "type": "result",
- "name": "snapshot",
- "purpose": "poll",
- "result": self.snapshot,
- }
- )
- first = self.app.jobs.get_nowait()
- second = self.app.jobs.get_nowait()
- self.assertEqual(first["purpose"], "poll")
- self.assertEqual(second["purpose"], "reset")
- self.assertTrue(self.app.job_active)
- self.assertFalse(self.app.poll_active)
-
- def test_lamp_test_keeps_existing_cumulative_count(self):
- self.app.auto_phase = "forward"
- self.app.run_baseline = 40
- self.app.lamp_test_baseline = 40
-
- self.app._advance_lamp_test(Snapshot(5, 2, 2, 0, 0, 46, 4, 1))
- reverse = self.app.jobs.get_nowait()
- self.assertEqual(reverse["purpose"], "auto_reverse")
- self.assertTrue(reverse["restart"])
-
- with patch("plsr_gui.messagebox.showinfo"):
- self.app._advance_lamp_test(Snapshot(5, 2, 2, 0, 0, 40, 4, 1))
- self.assertIsNone(self.app.auto_phase)
-
-
- if __name__ == "__main__":
- unittest.main(verbosity=2)
|