Attempt to make auto at least somewhat more reliable. Recommend that device be explicitly set if possible.

This commit is contained in:
Storm Dragon
2026-05-23 18:23:58 -04:00
parent 6e3d7fee94
commit 604221a29d
7 changed files with 49 additions and 53 deletions
+18 -21
View File
@@ -105,7 +105,7 @@ def test_litetalk_driver_writes_settings_and_cancel(serial_pair):
speech_driver.shutdown()
def test_auto_device_detection_includes_classic_serial(
def test_configured_device_supports_classic_serial(
monkeypatch, serial_pair
):
master_fd, slave_name = serial_pair
@@ -120,11 +120,11 @@ def test_auto_device_detection_includes_classic_serial(
fake_glob,
)
speech_driver = litetalkDriver.driver()
speech_driver.initialize(build_environment("auto"))
speech_driver.initialize(build_environment(slave_name))
try:
assert speech_driver.device == slave_name
speech_driver.speak("Serial")
assert read_available(master_fd, 9) == b"\x01ISerial\r"
assert read_available(master_fd, 7) == b"Serial\r"
finally:
speech_driver.shutdown()
@@ -219,7 +219,7 @@ def test_auto_device_detection_prefers_probe_response(monkeypatch):
speech_driver.shutdown()
def test_auto_device_detection_falls_back_without_probe_response(
def test_auto_device_detection_fails_without_probe_response(
monkeypatch
):
opened_ports = []
@@ -265,13 +265,12 @@ def test_auto_device_detection_falls_back_without_probe_response(
)
speech_driver = litetalkDriver.driver()
speech_driver.initialize(build_environment("auto"))
try:
assert opened_ports == ["/dev/ttyUSB0", "/dev/ttyUSB1"]
assert closed_ports == [2]
assert speech_driver.device == "/dev/ttyUSB0"
finally:
speech_driver.shutdown()
with pytest.raises(RuntimeError, match="hardware speech device"):
speech_driver.initialize(build_environment("auto"))
assert opened_ports == ["/dev/ttyUSB0", "/dev/ttyUSB1"]
assert closed_ports == [1, 2]
assert speech_driver.device == "auto"
def test_auto_device_detection_skips_termios_failures(monkeypatch):
@@ -280,10 +279,8 @@ def test_auto_device_detection_skips_termios_failures(monkeypatch):
monkeypatch.setattr(
"fenrirscreenreader.speechDriver.hardwareSerialDriver.glob.glob",
lambda pattern: ["/dev/ttyUSB0"]
lambda pattern: ["/dev/ttyUSB0", "/dev/ttyUSB1"]
if pattern == "/dev/ttyUSB*"
else ["/dev/ttyS0"]
if pattern == "/dev/ttyS*"
else [],
)
@@ -293,7 +290,7 @@ def test_auto_device_detection_skips_termios_failures(monkeypatch):
return port
def fake_tcgetattr(port):
if port == 101:
if port == 100:
raise termios.error(5, "Input/output error")
return [0, 0, 0, 0, 0, 0, [0] * 32]
@@ -331,12 +328,12 @@ def test_auto_device_detection_skips_termios_failures(monkeypatch):
)
speech_driver = litetalkDriver.driver()
speech_driver.initialize(build_environment("auto"))
try:
assert opened_ports == [("/dev/ttyUSB0", 100), ("/dev/ttyS0", 101)]
assert speech_driver.device == "/dev/ttyUSB0"
finally:
speech_driver.shutdown()
with pytest.raises(RuntimeError, match="hardware speech device"):
speech_driver.initialize(build_environment("auto"))
assert opened_ports == [("/dev/ttyUSB0", 100), ("/dev/ttyUSB1", 101)]
assert closed_ports == [100, 101]
assert speech_driver.device == "auto"
def test_auto_device_detection_fails_when_no_serial_device(monkeypatch):