Add bounded MCP text input for Sprinter programs
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user