105 lines
3.6 KiB
Python
105 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Unit-Tests für Angetriebene_Kurve (Refactored)
|
|
"""
|
|
import unittest
|
|
|
|
from .Angetriebene_Kurve import Angetriebene_Kurve
|
|
|
|
|
|
class TestAngetriebeneKurveModell(unittest.TestCase):
|
|
"""Tests für das Angetriebene_Kurve Modell."""
|
|
|
|
def test_from_merkmale(self):
|
|
merkmale = {
|
|
"Höhe Anfang": "1.5",
|
|
"Höhe Ende": "2.0",
|
|
"Kurvenwinkel": "90",
|
|
"Kurvenrichtung": "links",
|
|
"AntriebNebenStrecke": "außen",
|
|
"Drehung": "-270",
|
|
}
|
|
obj = Angetriebene_Kurve.from_merkmale("AK-001", 100.0, 200.0, merkmale)
|
|
self.assertEqual(obj.teileid, "AK-001")
|
|
self.assertEqual(obj.hoehe0, 1500.0)
|
|
self.assertEqual(obj.hoehe1, 2000.0)
|
|
self.assertEqual(obj.winkel, 90)
|
|
self.assertEqual(obj.kurvenrichtung, "links")
|
|
self.assertEqual(obj.drehung, -270.0)
|
|
|
|
def test_from_merkmale_drehung_fehlend(self):
|
|
merkmale = {
|
|
"Höhe Anfang": "1.0",
|
|
"Höhe Ende": "1.0",
|
|
"Kurvenwinkel": "45",
|
|
"Kurvenrichtung": "rechts",
|
|
"AntriebNebenStrecke": "innen",
|
|
}
|
|
obj = Angetriebene_Kurve.from_merkmale("AK-002", 0.0, 0.0, merkmale)
|
|
self.assertEqual(obj.drehung, 0.0) # None → default
|
|
|
|
|
|
class TestAntriebNormalisierung(unittest.TestCase):
|
|
"""Tests für die field_validator Normalisierung von antriebNebenStrecke."""
|
|
|
|
def test_aussen_normalisiert(self):
|
|
"""'Aussen' wird beim Erstellen zu 'außen' normalisiert."""
|
|
obj = Angetriebene_Kurve(
|
|
teileid="T", x=0, y=0, kurvenrichtung="links",
|
|
antriebNebenStrecke="Aussen", winkel=90,
|
|
)
|
|
self.assertEqual(obj.antriebNebenStrecke, "außen")
|
|
self.assertEqual(obj.antrieb, "außen")
|
|
|
|
def test_innen_normalisiert(self):
|
|
"""'Innen' wird beim Erstellen zu 'innen' normalisiert."""
|
|
obj = Angetriebene_Kurve(
|
|
teileid="T", x=0, y=0, kurvenrichtung="rechts",
|
|
antriebNebenStrecke="Innen", winkel=45,
|
|
)
|
|
self.assertEqual(obj.antriebNebenStrecke, "innen")
|
|
self.assertEqual(obj.antrieb, "innen")
|
|
|
|
def test_bereits_normalisiert_bleibt(self):
|
|
"""Bereits normalisierte Werte bleiben unverändert."""
|
|
obj = Angetriebene_Kurve(
|
|
teileid="T", x=0, y=0, kurvenrichtung="links",
|
|
antriebNebenStrecke="außen", winkel=90,
|
|
)
|
|
self.assertEqual(obj.antriebNebenStrecke, "außen")
|
|
|
|
def test_unbekannter_wert_bleibt(self):
|
|
"""Unbekannte Werte werden nicht verändert."""
|
|
obj = Angetriebene_Kurve(
|
|
teileid="T", x=0, y=0, kurvenrichtung="links",
|
|
antriebNebenStrecke="custom_wert", winkel=90,
|
|
)
|
|
self.assertEqual(obj.antriebNebenStrecke, "custom_wert")
|
|
|
|
def test_antrieb_property_read_only(self):
|
|
"""antrieb Property gibt den normierten Wert zurück ohne Side-Effect."""
|
|
obj = Angetriebene_Kurve(
|
|
teileid="T", x=0, y=0, kurvenrichtung="links",
|
|
antriebNebenStrecke="Aussen", winkel=90,
|
|
)
|
|
# Mehrfacher Zugriff ändert nichts
|
|
_ = obj.antrieb
|
|
_ = obj.antrieb
|
|
self.assertEqual(obj.antrieb, "außen")
|
|
|
|
|
|
class TestHightZwischen(unittest.TestCase):
|
|
"""Tests für hight_zwischen Property."""
|
|
|
|
def test_mittlere_hoehe(self):
|
|
obj = Angetriebene_Kurve(
|
|
teileid="T", x=0, y=0, kurvenrichtung="links",
|
|
antriebNebenStrecke="außen", winkel=90,
|
|
hoehe0=1000, hoehe1=3000,
|
|
)
|
|
self.assertEqual(obj.hight_zwischen, 2000.0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|