Add incremental_svg parser (TDD) + fix pre-existing test regressions
New: - incremental_svg.py: parse_to_valid(prefix) handles any partial SVG - Closes open tags, opens quotes, truncates partial tags - Strips reasoning text and markdown fences from prefix - stream_to_valid(chunks) generator for incremental updates - tests/test_incremental_svg.py: 34 test cases including property-based Fixed (regressions from earlier today): - test_app.py: pass base_url and api_key to on_generate (new UI fields) - test_app.py: on_mode_change defaults updated to n=1 - test_renderer.py: mock both resvg and cairosvg since resvg is now primary - (manual fixes I did as owner, before letting streaming-client start) All tests: 157 passed, 1 skipped, 0 failed
This commit is contained in:
+14
-6
@@ -121,16 +121,24 @@ def test_render_png_invalid_svg_returns_none_or_raises_cairo():
|
||||
assert result is None # либо cairo нет, либо cairo бросил и мы вернули None
|
||||
|
||||
|
||||
def test_render_png_does_not_propagate_cairo_exceptions():
|
||||
"""Даже если cairosvg бросает — render_png() возвращает None, а не raise."""
|
||||
fake_cairosvg = type("Fake", (), {})()
|
||||
# Создаём фейк-модуль, у которого svg2png бросает
|
||||
def test_render_png_does_not_propagate_renderer_exceptions():
|
||||
"""Даже если все бэкенды бросают — render_png() возвращает None, а не raise.
|
||||
|
||||
Сейчас renderer использует resvg-py как первый бэкенд, cairosvg — fallback.
|
||||
Мокаем ОБА, чтобы render_png дошёл до конца и вернул None без exception.
|
||||
"""
|
||||
class FakeRenderer:
|
||||
@staticmethod
|
||||
def svg_to_bytes(**kwargs):
|
||||
raise RuntimeError("simulated resvg failure")
|
||||
|
||||
class FakeCairo:
|
||||
@staticmethod
|
||||
def svg2png(**kwargs):
|
||||
raise RuntimeError("simulated cairo failure")
|
||||
fake = FakeCairo()
|
||||
with patch("renderer._get_cairosvg", return_value=fake):
|
||||
|
||||
with patch("renderer._get_resvg", return_value=FakeRenderer()), \
|
||||
patch("renderer._get_cairosvg", return_value=FakeCairo()):
|
||||
result = render_png(VALID_ICON_SVG, size=(64, 64))
|
||||
assert result is None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user