Files
Plugin_SN_Basis/tests/test_ly_style_wrapper.py
T

55 lines
2.0 KiB
Python
Raw Normal View History

"""Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).
`apply_style` bleibt ausgeklammert: hardcodiert 'sn_verfahrensgebiet' in platformneutralem
sn_basis-Code (mutmaßlicher Bug, siehe docs/tests/testkatalog.md und Issue-Historie #63).
"""
import unittest
from sn_basis.functions.ly_style_wrapper import apply_style_from_path
class _FakeLayer:
def __init__(self, ergebnis=(True, ""), wirft_fehler: bool = False) -> None:
self._ergebnis = ergebnis
self._wirft_fehler = wirft_fehler
self.repaint_aufgerufen = False
def loadNamedStyle(self, path: str):
if self._wirft_fehler:
raise RuntimeError("kaputt")
return self._ergebnis
def triggerRepaint(self) -> None:
self.repaint_aufgerufen = True
class ApplyStyleFromPathTests(unittest.TestCase):
def test_fehlender_layer_liefert_false(self):
"""Prüft, dass ein fehlender Layer (None) False liefert, ohne einen Stil zu laden."""
self.assertFalse(apply_style_from_path(None, "stil.qml"))
def test_erfolgreiches_laden_liefert_true_und_triggert_repaint(self):
"""Prüft, dass ein erfolgreich geladener Stil True liefert und den Layer neu zeichnet."""
layer = _FakeLayer(ergebnis=(True, ""))
self.assertTrue(apply_style_from_path(layer, "stil.qml"))
self.assertTrue(layer.repaint_aufgerufen)
def test_fehlgeschlagenes_laden_liefert_false_ohne_repaint(self):
"""Prüft, dass ein fehlgeschlagenes Laden False liefert, ohne den Layer neu zu zeichnen."""
layer = _FakeLayer(ergebnis=(False, "ungültiges QML"))
self.assertFalse(apply_style_from_path(layer, "stil.qml"))
self.assertFalse(layer.repaint_aufgerufen)
def test_ausnahme_beim_laden_wird_abgefangen(self):
"""Prüft, dass eine Ausnahme beim Laden des Stils abgefangen wird und False liefert."""
layer = _FakeLayer(wirft_fehler=True)
self.assertFalse(apply_style_from_path(layer, "stil.qml"))
if __name__ == "__main__":
unittest.main()