import pytest from naramotion import Path, Matrix2D, FillRule, Image, Context, Format def test_path_basic_verbs(): p = Path() assert p.is_empty() p.move_to(0, 0) p.line_to(100, 0) p.line_to(100, 100) p.close() assert not p.is_empty() assert p.size > 0 bounds = p.get_bounds() assert bounds.x0 == 0.0 assert bounds.y0 == 0.0 assert bounds.x1 == 100.0 assert bounds.y1 == 100.0 def test_path_hit_test(): p = Path() p.add_rect(10, 10, 80, 80) assert p.hit_test(50, 50, FillRule.NON_ZERO) is True assert p.hit_test(5, 5, FillRule.NON_ZERO) is False assert p.hit_test(150, 150, FillRule.NON_ZERO) is False def test_path_transform(): p = Path() p.add_rect(0, 0, 50, 50) m = Matrix2D.make_translation(100, 200) p.transform(m) bounds = p.get_bounds() assert bounds.x0 == 100.0 assert bounds.y0 == 200.0 assert bounds.x1 == 150.0 assert bounds.y1 == 250.0 def test_path_render(): img = Image(300, 300, Format.PRGB32) with Context(img) as ctx: p = Path() p.move_to(50, 50) p.cubic_to(100, 0, 200, 150, 250, 50) p.quad_to(200, 250, 50, 50) p.close() ctx.fill_path(p, "coral") ctx.stroke_width = 4.0 ctx.stroke_path(p, "navy")