Improve Cthulhu Remote speech relay
This commit is contained in:
@@ -11,8 +11,11 @@ input_event_manager_stub.get_manager = mock.Mock(return_value=mock.Mock())
|
||||
sys.modules["cthulhu.input_event_manager"] = input_event_manager_stub
|
||||
|
||||
from cthulhu.plugin_system_manager import PluginSystemManager
|
||||
from cthulhu import cthulhu_state
|
||||
from cthulhu import speech
|
||||
from cthulhu.plugins.CthulhuRemote.connection_info import ConnectionInfo, ConnectionMode
|
||||
from cthulhu.plugins.CthulhuRemote.local_machine import LocalMachine
|
||||
from cthulhu.plugins.CthulhuRemote.plugin import CthulhuRemote
|
||||
from cthulhu.plugins.CthulhuRemote.protocol import RemoteMessageType
|
||||
from cthulhu.plugins.CthulhuRemote.serializer import JSONSerializer
|
||||
|
||||
@@ -45,6 +48,66 @@ class CthulhuRemotePluginTests(unittest.TestCase):
|
||||
self.assertEqual(machine._resolve_keyval(0x70, None), machine._resolve_keyval(None, "F1"))
|
||||
self.assertIsNone(machine._resolve_keyval(0xFF, None))
|
||||
|
||||
def test_speech_monitor_callbacks_are_additive(self):
|
||||
primary = mock.Mock()
|
||||
listener = mock.Mock()
|
||||
speech.set_monitor_callbacks(writeText=primary)
|
||||
speech.add_monitor_callback(listener)
|
||||
self.addCleanup(speech.set_monitor_callbacks, None)
|
||||
self.addCleanup(speech.remove_monitor_callback, listener)
|
||||
|
||||
speech._write_to_monitor("status")
|
||||
|
||||
primary.assert_called_once_with("status")
|
||||
listener.assert_called_once_with("status")
|
||||
|
||||
def test_remote_speech_does_not_echo_to_monitor_callbacks(self):
|
||||
listener = mock.Mock()
|
||||
speech.add_monitor_callback(listener)
|
||||
self.addCleanup(speech.remove_monitor_callback, listener)
|
||||
|
||||
with (
|
||||
mock.patch.object(speech, "_speechserver", None),
|
||||
mock.patch.object(speech.speech_history, "add"),
|
||||
mock.patch.object(cthulhu_state, "activeScript", None),
|
||||
):
|
||||
LocalMachine(lambda message: None).speak(["remote", "status"])
|
||||
|
||||
listener.assert_not_called()
|
||||
|
||||
def test_slave_mode_forwards_local_speech_to_relay(self):
|
||||
plugin = CthulhuRemote()
|
||||
plugin._connectionInfo = ConnectionInfo(
|
||||
hostname="example.com",
|
||||
port=1234,
|
||||
key="abc",
|
||||
mode=ConnectionMode.SLAVE,
|
||||
)
|
||||
plugin._transport = mock.Mock()
|
||||
plugin._transport.connected = True
|
||||
|
||||
plugin._send_local_speech("focused button")
|
||||
|
||||
plugin._transport.send.assert_called_once_with(
|
||||
RemoteMessageType.speak,
|
||||
sequence=["focused button"],
|
||||
)
|
||||
|
||||
def test_master_mode_does_not_forward_local_speech_to_relay(self):
|
||||
plugin = CthulhuRemote()
|
||||
plugin._connectionInfo = ConnectionInfo(
|
||||
hostname="example.com",
|
||||
port=1234,
|
||||
key="abc",
|
||||
mode=ConnectionMode.MASTER,
|
||||
)
|
||||
plugin._transport = mock.Mock()
|
||||
plugin._transport.connected = True
|
||||
|
||||
plugin._send_local_speech("local status")
|
||||
|
||||
plugin._transport.send.assert_not_called()
|
||||
|
||||
@mock.patch("cthulhu.plugin_system_manager.dbus_service.get_remote_controller")
|
||||
def test_plugin_manager_can_load_cthulhu_remote(self, remote_controller):
|
||||
remote_controller.return_value = mock.Mock()
|
||||
|
||||
Reference in New Issue
Block a user