Add bounded MCP text input for Sprinter programs

This commit is contained in:
Александр Петров
2026-09-17 23:17:38 +03:00
parent 958ad0ae0f
commit e8189b137a
11 changed files with 195 additions and 18 deletions
+26
View File
@@ -77,6 +77,32 @@ class McpAdapterTests(unittest.TestCase):
self.assertEqual(keys[1]['tag'], keys[-2]['tag'])
self.assertTrue(all(item['owner'] == client.owner for item in keys))
def test_type_string_checks_layout_before_input_and_releases_each_key(self):
calls = []
frame = 0
def rpc(path, method, arguments, timeout=10, **identity):
nonlocal frame
calls.append((method, arguments))
if method == 'status':
return {'session_id': 'test-session', 'build_id': 'test-build',
'generation': 7, 'running': True}
if method == 'snapshot':
frame += 1
return {'state': 'running', 'frame': frame}
return {}
client = McpSession('/tmp/sprinter-test.sock', rpc=rpc)
with self.assertRaisesRegex(SessionError, 'нет раскладки'):
client.type_string('a€')
self.assertEqual(calls, [])
result = client.type_string('ab')
self.assertEqual(result, {'requested': 2, 'typed': 2,
'complete': True, 'stopped': False})
keys = [args for method, args in calls if method == 'input_key']
self.assertEqual([item['down'] for item in keys],
[True, False, True, False])
if __name__ == '__main__':
unittest.main()