1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
import sys
from shutil import which
from unittest import TestCase, skipUnless
import pexpect
from vncdotool import rfb
@skipUnless(which("vncev"), reason="requires https://github.com/LibVNC/libvncserver")
class TestLogEvents(TestCase):
def setUp(self) -> None:
cmd = 'vncev -rfbport 5999 -rfbwait 1000'
self.server = pexpect.spawn(cmd, timeout=2)
self.server.logfile_read = sys.stdout.buffer
cmd = 'vnclog --listen 1842 -s :99 -'
self.recorder = pexpect.spawn(cmd, timeout=2)
self.recorder.logfile_read = sys.stdout.buffer
def tearDown(self) -> None:
self.server.terminate(force=True)
if self.recorder:
self.recorder.terminate(force=True)
def run_vncdo(self, commands: str) -> None:
cmd = 'vncdo -s localhost::1842 ' + commands
vnc = pexpect.spawn(cmd, timeout=2)
vnc.logfile_read = sys.stdout.buffer
retval = vnc.wait()
assert retval == 0, (retval, str(vnc))
def assertKeyDown(self, key: int) -> None:
down = rf'^.*down:\s+\({key:#x}\)\r'
self.server.expect(down)
def assertKeyUp(self, key: int) -> None:
up = rf'^.*up:\s+\({key:#x}\)\r'
self.server.expect(up)
def assertMouse(self, x: int, y: int, buttonmask: int) -> None:
output = f'^.*Ptr: mouse button mask {buttonmask:#x} at {x},{y}'
self.server.expect(output)
def test_key_alpha(self) -> None:
self.run_vncdo('key z')
self.assertKeyDown(ord('z'))
self.assertKeyUp(ord('z'))
self.recorder.expect('keydown z')
self.recorder.expect('keyup z')
def test_key_ctrl_a(self) -> None:
self.run_vncdo('key ctrl-a')
self.assertKeyDown(rfb.KEY_ControlLeft)
self.assertKeyDown(ord('a'))
self.assertKeyUp(rfb.KEY_ControlLeft)
self.assertKeyUp(ord('a'))
def test_mouse(self) -> None:
self.run_vncdo('move 111 222 click 1')
self.assertMouse(111, 222, 1)
self.recorder.expect('move 111 222')
self.recorder.expect('click 1')
|