Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

114 linhas
3.7 KiB

  1. import queue
  2. import unittest
  3. from unittest.mock import patch
  4. from plsr_gui import PlsrGui
  5. from plsr_test import COMMAND_RESET, Snapshot
  6. class PollingUiTests(unittest.TestCase):
  7. def setUp(self):
  8. self.app = PlsrGui()
  9. self.app.withdraw()
  10. self.worker_jobs = self.app.jobs
  11. self.app.jobs = queue.Queue()
  12. self.snapshot = Snapshot(0, 0, 0, 0, 0, 0, 4, 1)
  13. self.app.connected = True
  14. self.app.last_snapshot = self.snapshot
  15. self.app._update_controls()
  16. def tearDown(self):
  17. self.app.closing = True
  18. self.worker_jobs.put({"name": "shutdown"})
  19. self.app.destroy()
  20. def _states(self):
  21. widgets = (
  22. self.app.connect_button,
  23. self.app.save_outputs_button,
  24. self.app.start_button,
  25. self.app.stop_button,
  26. self.app.emergency_button,
  27. self.app.lamp_test_button,
  28. self.app.reset_button,
  29. self.app.clear_button,
  30. self.app.pulse_output_combo,
  31. self.app.direction_output_combo,
  32. self.app.pulses_spin,
  33. self.app.frequency_spin,
  34. self.app.apply_frequency_button,
  35. self.app.forward_radio,
  36. self.app.reverse_radio,
  37. )
  38. return tuple(str(widget.cget("state")) for widget in widgets)
  39. def test_running_state_allows_frequency_update_only(self):
  40. self.app.last_snapshot = Snapshot(2, 1, 1000, 0, 0, 10, 0, 0, 1)
  41. self.app._update_controls()
  42. self.assertEqual(str(self.app.frequency_spin.cget("state")), "normal")
  43. self.assertEqual(
  44. str(self.app.apply_frequency_button.cget("state")), "normal"
  45. )
  46. self.assertEqual(str(self.app.pulses_spin.cget("state")), "disabled")
  47. self.assertEqual(str(self.app.forward_radio.cget("state")), "disabled")
  48. def test_background_poll_does_not_toggle_controls(self):
  49. before = self._states()
  50. self.assertTrue(self.app._submit("snapshot", purpose="poll"))
  51. self.assertTrue(self.app.poll_active)
  52. self.assertEqual(self._states(), before)
  53. self.app._handle_result(
  54. {
  55. "type": "result",
  56. "name": "snapshot",
  57. "purpose": "poll",
  58. "result": self.snapshot,
  59. }
  60. )
  61. self.assertEqual(self._states(), before)
  62. def test_click_during_poll_is_deferred(self):
  63. self.app._submit("snapshot", purpose="poll")
  64. accepted = self.app._submit(
  65. "command", purpose="reset", command=COMMAND_RESET
  66. )
  67. self.assertTrue(accepted)
  68. self.assertIsNotNone(self.app.deferred_job)
  69. self.app._handle_result(
  70. {
  71. "type": "result",
  72. "name": "snapshot",
  73. "purpose": "poll",
  74. "result": self.snapshot,
  75. }
  76. )
  77. first = self.app.jobs.get_nowait()
  78. second = self.app.jobs.get_nowait()
  79. self.assertEqual(first["purpose"], "poll")
  80. self.assertEqual(second["purpose"], "reset")
  81. self.assertTrue(self.app.job_active)
  82. self.assertFalse(self.app.poll_active)
  83. def test_lamp_test_keeps_existing_cumulative_count(self):
  84. self.app.auto_phase = "forward"
  85. self.app.run_baseline = 40
  86. self.app.lamp_test_baseline = 40
  87. self.app._advance_lamp_test(Snapshot(5, 2, 2, 0, 0, 46, 4, 1))
  88. reverse = self.app.jobs.get_nowait()
  89. self.assertEqual(reverse["purpose"], "auto_reverse")
  90. self.assertTrue(reverse["restart"])
  91. with patch("plsr_gui.messagebox.showinfo"):
  92. self.app._advance_lamp_test(Snapshot(5, 2, 2, 0, 0, 40, 4, 1))
  93. self.assertIsNone(self.app.auto_phase)
  94. if __name__ == "__main__":
  95. unittest.main(verbosity=2)