Fix a regression that broke writing to the clipboard using the OSC 5522 protocol

Fixes #7858
This commit is contained in:
Kovid Goyal
2024-09-15 08:42:50 +05:30
parent 7537fa00e4
commit 481153318b
5 changed files with 63 additions and 7 deletions

View File

@@ -1,8 +1,10 @@
#!/usr/bin/env python
# License: GPLv3 Copyright: 2022, Kovid Goyal <kovid at kovidgoyal.net>
from base64 import standard_b64decode, standard_b64encode
from kitty.clipboard import WriteRequest
from kitty.fast_data_types import StreamingBase64Decoder
from . import BaseTest
@@ -30,3 +32,23 @@ class TestClipboard(BaseTest):
for x in 'bGlnaHQgd29y':
wr.add_base64_data(x)
self.ae(wr.data_for(), b'light wor')
def test_base64_streaming_decoder(self):
d = StreamingBase64Decoder()
c = standard_b64encode(b'abcdef')
self.ae(b'abcdef', d.decode(c))
self.assertFalse(d.needs_more_data())
a = d.decode(c[:4])
self.assertFalse(d.needs_more_data())
self.ae(b'abcdef', a + d.decode(c[4:]))
self.assertFalse(d.needs_more_data())
a = d.decode(c[:1])
self.assertTrue(d.needs_more_data())
self.ae(b'abcdef', a + d.decode(c[1:4]) + d.decode(c[4:]))
self.assertFalse(d.needs_more_data())
c = standard_b64encode(b'abcd')
self.ae(b'abcd', d.decode(c[:2]) + d.decode(c[2:]))
c1 = standard_b64encode(b'1' * 4096)
c2 = standard_b64encode(b'2' * 4096)
self.ae(standard_b64decode(c1) + standard_b64decode(c2), d.decode(c1) + d.decode(c2))
self.assertFalse(d.needs_more_data())