Add Cthulhu Remote plugin
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import sys
|
||||
import types
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
|
||||
|
||||
input_event_manager_stub = types.ModuleType("cthulhu.input_event_manager")
|
||||
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.plugins.CthulhuRemote.connection_info import ConnectionInfo, ConnectionMode
|
||||
from cthulhu.plugins.CthulhuRemote.local_machine import LocalMachine
|
||||
from cthulhu.plugins.CthulhuRemote.protocol import RemoteMessageType
|
||||
from cthulhu.plugins.CthulhuRemote.serializer import JSONSerializer
|
||||
|
||||
|
||||
class CthulhuRemotePluginTests(unittest.TestCase):
|
||||
def test_connection_info_accepts_nvda_remote_style_fields(self):
|
||||
info = ConnectionInfo.from_url("cthulhuremote://example.com:1234?key=abc&mode=slave")
|
||||
|
||||
self.assertEqual(info.hostname, "example.com")
|
||||
self.assertEqual(info.port, 1234)
|
||||
self.assertEqual(info.key, "abc")
|
||||
self.assertEqual(info.mode, ConnectionMode.SLAVE)
|
||||
self.assertEqual(
|
||||
info.get_url_to_connect(),
|
||||
"cthulhuremote://example.com:1234?key=abc&mode=master",
|
||||
)
|
||||
|
||||
def test_json_serializer_uses_remote_message_type_values(self):
|
||||
serializer = JSONSerializer()
|
||||
|
||||
payload = serializer.deserialize(serializer.serialize(RemoteMessageType.join, channel="abc"))
|
||||
|
||||
self.assertEqual(payload["type"], "join")
|
||||
self.assertEqual(payload["channel"], "abc")
|
||||
|
||||
def test_local_machine_maps_common_windows_vk_codes_to_keyvals(self):
|
||||
machine = LocalMachine(lambda message: None)
|
||||
|
||||
self.assertEqual(machine._resolve_keyval(0x41, None), machine._resolve_keyval(None, "a"))
|
||||
self.assertEqual(machine._resolve_keyval(0x70, None), machine._resolve_keyval(None, "F1"))
|
||||
self.assertIsNone(machine._resolve_keyval(0xFF, None))
|
||||
|
||||
@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()
|
||||
app = mock.Mock()
|
||||
app.getSignalManager.return_value = mock.Mock()
|
||||
app.getAPIHelper.return_value = None
|
||||
manager = PluginSystemManager(app)
|
||||
manager.rescanPlugins()
|
||||
plugin_info = manager._resolve_plugin_info("CthulhuRemote")
|
||||
|
||||
self.assertIsNotNone(plugin_info)
|
||||
self.assertTrue(manager.loadPlugin(plugin_info))
|
||||
|
||||
self.assertEqual(plugin_info.instance.__class__.__name__, "CthulhuRemote")
|
||||
self.assertTrue(manager.unloadPlugin(plugin_info))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user