More hw synth refinement.
This commit is contained in:
@@ -123,7 +123,139 @@ def test_auto_device_detection_includes_classic_serial(
|
||||
try:
|
||||
assert speech_driver.device == slave_name
|
||||
speech_driver.speak("Serial")
|
||||
assert read_available(master_fd, 7) == b"Serial\r"
|
||||
assert read_available(master_fd, 9) == b"\x01ISerial\r"
|
||||
finally:
|
||||
speech_driver.shutdown()
|
||||
|
||||
|
||||
def test_auto_device_detection_prefers_probe_response(monkeypatch):
|
||||
opened_ports = []
|
||||
closed_ports = []
|
||||
writes = {}
|
||||
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.glob.glob",
|
||||
lambda pattern: ["/dev/ttyUSB0", "/dev/ttyUSB1"]
|
||||
if pattern == "/dev/ttyUSB*"
|
||||
else [],
|
||||
)
|
||||
|
||||
def fake_open(device, flags):
|
||||
port = 100 + len(opened_ports)
|
||||
opened_ports.append((device, port))
|
||||
return port
|
||||
|
||||
def fake_write(port, data):
|
||||
writes.setdefault(port, b"")
|
||||
writes[port] += data
|
||||
return len(data)
|
||||
|
||||
def fake_select(readable, writable, exceptional, timeout):
|
||||
port = readable[0]
|
||||
if port == 101 and writes.get(port) == b"\x01I":
|
||||
return readable, writable, exceptional
|
||||
return [], writable, exceptional
|
||||
|
||||
def fake_read(port, size):
|
||||
if port == 101:
|
||||
return b"RPItalk 1.3\r"
|
||||
return b""
|
||||
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.open",
|
||||
fake_open,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.close",
|
||||
lambda port: closed_ports.append(port),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.write",
|
||||
fake_write,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.read",
|
||||
fake_read,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.select.select",
|
||||
fake_select,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.termios.tcgetattr",
|
||||
lambda port: [0, 0, 0, 0, 0, 0, [0] * 32],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.termios.tcsetattr",
|
||||
lambda port, when, attrs: None,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.tty.setraw",
|
||||
lambda port: None,
|
||||
)
|
||||
|
||||
speech_driver = litetalkDriver.driver()
|
||||
speech_driver.initialize(build_environment("auto"))
|
||||
try:
|
||||
assert opened_ports == [("/dev/ttyUSB0", 100), ("/dev/ttyUSB1", 101)]
|
||||
assert writes == {100: b"\x01I", 101: b"\x01I"}
|
||||
assert closed_ports == [100]
|
||||
assert speech_driver.device == "/dev/ttyUSB1"
|
||||
finally:
|
||||
speech_driver.shutdown()
|
||||
|
||||
|
||||
def test_auto_device_detection_falls_back_without_probe_response(
|
||||
monkeypatch
|
||||
):
|
||||
opened_ports = []
|
||||
closed_ports = []
|
||||
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.glob.glob",
|
||||
lambda pattern: ["/dev/ttyUSB0", "/dev/ttyUSB1"]
|
||||
if pattern == "/dev/ttyUSB*"
|
||||
else [],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.open",
|
||||
lambda device, flags: opened_ports.append(device) or len(opened_ports),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.close",
|
||||
lambda port: closed_ports.append(port),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.os.write",
|
||||
lambda port, data: len(data),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.select.select",
|
||||
lambda readable, writable, exceptional, timeout: (
|
||||
[],
|
||||
writable,
|
||||
exceptional,
|
||||
),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.termios.tcgetattr",
|
||||
lambda port: [0, 0, 0, 0, 0, 0, [0] * 32],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.termios.tcsetattr",
|
||||
lambda port, when, attrs: None,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"fenrirscreenreader.speechDriver.hardwareSerialDriver.tty.setraw",
|
||||
lambda port: None,
|
||||
)
|
||||
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user