51 lines
2.5 KiB
Python
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()
|