@@ -1328,6 +1328,122 @@ def test_format_invalid_class_raises(self):
13281328 f"{ TrafficLightMachine :invalid} "
13291329
13301330
1331+ class TestDocstringExpansion :
1332+ """Tests for {statechart:FORMAT} placeholder expansion in docstrings."""
1333+
1334+ def test_md_placeholder (self ):
1335+ from statemachine .state import State
1336+ from statemachine .statemachine import StateChart
1337+
1338+ class MyMachine (StateChart ):
1339+ """Machine.
1340+
1341+ {statechart:md}
1342+ """
1343+
1344+ s1 = State (initial = True )
1345+ s2 = State (final = True )
1346+
1347+ go = s1 .to (s2 )
1348+
1349+ assert "| State" in MyMachine .__doc__
1350+ assert "{statechart:md}" not in MyMachine .__doc__
1351+
1352+ def test_rst_placeholder (self ):
1353+ from statemachine .state import State
1354+ from statemachine .statemachine import StateChart
1355+
1356+ class MyMachine (StateChart ):
1357+ """Machine.
1358+
1359+ {statechart:rst}
1360+ """
1361+
1362+ s1 = State (initial = True )
1363+ s2 = State (final = True )
1364+
1365+ go = s1 .to (s2 )
1366+
1367+ assert "+---" in MyMachine .__doc__
1368+ assert "{statechart:rst}" not in MyMachine .__doc__
1369+
1370+ def test_mermaid_placeholder (self ):
1371+ from statemachine .state import State
1372+ from statemachine .statemachine import StateChart
1373+
1374+ class MyMachine (StateChart ):
1375+ """{statechart:mermaid}"""
1376+
1377+ s1 = State (initial = True )
1378+ s2 = State (final = True )
1379+
1380+ go = s1 .to (s2 )
1381+
1382+ assert "stateDiagram-v2" in MyMachine .__doc__
1383+
1384+ def test_no_placeholder_unchanged (self ):
1385+ from statemachine .state import State
1386+ from statemachine .statemachine import StateChart
1387+
1388+ class MyMachine (StateChart ):
1389+ """Just a plain docstring."""
1390+
1391+ s1 = State (initial = True )
1392+ s2 = State (final = True )
1393+
1394+ go = s1 .to (s2 )
1395+
1396+ assert MyMachine .__doc__ == "Just a plain docstring."
1397+
1398+ def test_no_docstring (self ):
1399+ from statemachine .state import State
1400+ from statemachine .statemachine import StateChart
1401+
1402+ class MyMachine (StateChart ):
1403+ s1 = State (initial = True )
1404+ s2 = State (final = True )
1405+
1406+ go = s1 .to (s2 )
1407+
1408+ assert MyMachine .__doc__ is None
1409+
1410+ def test_indentation_preserved (self ):
1411+ from statemachine .state import State
1412+ from statemachine .statemachine import StateChart
1413+
1414+ class MyMachine (StateChart ):
1415+ __doc__ = "Doc.\n \n Table:\n \n {statechart:md}\n \n End.\n "
1416+
1417+ s1 = State (initial = True )
1418+ s2 = State (final = True )
1419+
1420+ go = s1 .to (s2 )
1421+
1422+ lines = MyMachine .__doc__ .split ("\n " )
1423+ table_lines = [line for line in lines if "|" in line ]
1424+ for line in table_lines :
1425+ assert line .startswith (" |" )
1426+ assert "End." in MyMachine .__doc__
1427+
1428+ def test_multiple_placeholders (self ):
1429+ from statemachine .state import State
1430+ from statemachine .statemachine import StateChart
1431+
1432+ class MyMachine (StateChart ):
1433+ """MD: {statechart:md}
1434+
1435+ Mermaid: {statechart:mermaid}
1436+ """
1437+
1438+ s1 = State (initial = True )
1439+ s2 = State (final = True )
1440+
1441+ go = s1 .to (s2 )
1442+
1443+ assert "| State" in MyMachine .__doc__
1444+ assert "stateDiagram-v2" in MyMachine .__doc__
1445+
1446+
13311447class TestFormatter :
13321448 """Tests for the Formatter facade (render, register_format, supported_formats)."""
13331449
0 commit comments