"""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()