vdi-cloud/tools/test-cursor-poc.py

51 lines
2.5 KiB
Python

"""Cursor asset boundary/fallback tests; run on Linux (same fcntl environment as box)."""
import copy
import importlib.util
from pathlib import Path
import tempfile
import time
import unittest
spec=importlib.util.spec_from_file_location("cursor_poc",Path(__file__).with_name("cursor-poc-x11.py"))
m=importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
class Boundaries(unittest.TestCase):
def setUp(self):
self.asset=dict(version=1,shapes=[dict(name="arrow",width=1,height=1,hotX=0,hotY=0,invertedPixels=0,argb=[0xffffffff])])
def bad(self,key,value):
data=copy.deepcopy(self.asset); data["shapes"][0][key]=value
with self.assertRaises(ValueError): m.validate_assets(data)
def test_valid(self): self.assertIn("arrow",m.validate_assets(self.asset))
def test_dimensions(self):
for v in (-1,0,129,True,"32"): self.bad("width",v)
def test_hotspot(self):
for v in (-1,1): self.bad("hotX",v)
def test_xor_requires_fallback(self): self.bad("invertedPixels",1)
def test_pixels(self):
for v in ([],[True],[-1],[0x100000000],[0,0]): self.bad("argb",v)
def test_duplicate_shapes(self):
self.asset["shapes"]*=2
with self.assertRaises(ValueError): m.validate_assets(self.asset)
def test_envelopes(self):
for v in (None,[],{},dict(version=True,shapes=self.asset["shapes"])):
with self.assertRaises(ValueError): m.validate_assets(v)
def test_lease(self):
shapes=m.validate_assets(self.asset)
for expires in (time.time()-1,time.time()+60,float("nan"),float("inf"),True):
with self.assertRaises(ValueError): m.validate_state(dict(version=1,visible=True,shape="arrow",expires=expires),shapes)
def test_state(self):
shapes=m.validate_assets(self.asset)
state=dict(version=1,visible=True,shape="arrow",expires=time.time()+1)
self.assertEqual(m.validate_state(state,shapes),"arrow")
state["visible"]=False
self.assertEqual(m.validate_state(state,shapes),"__hidden")
for key,value in (("visible",1),("shape","missing"),("shape",[]),("version",True)):
bad=dict(state); bad[key]=value
with self.assertRaises(ValueError): m.validate_state(bad,shapes)
def test_oversize_file(self):
with tempfile.TemporaryDirectory() as d:
p=Path(d)/"data.json"; p.write_text(" "*1025)
with self.assertRaises(ValueError): m.read_json(p,1024)
if __name__=="__main__": unittest.main()