clone

a browser-first diagram editor with live svg previews, local drafts and encrypted, accountless sharing

main
diagramzip / renderers / python / wireviz-translator / test / test_render.py
test_render.py 1.9K
1from pathlib import Path23import pytest45from render import render_dot678EXAMPLE = Path(__file__).parents[4] / 'examples/diagrams/wireviz.yaml'91011def test_shared_example_lowers_to_graphviz_dot():12 dot = render_dot(EXAMPLE.read_text())13 assert dot.startswith('graph {')14 assert 'X1' in dot and 'X2' in dot and 'W1' in dot15 assert 'port="w1"' in dot16 assert 'port="p1r"' in dot17 assert '#00ff00' in dot181920def test_images_are_rejected_before_upstream_graph_generation():21 with pytest.raises(ValueError, match='images'):22 render_dot('connectors:\n X:\n pincount: 1\n image:\n src: /etc/passwd\n')232425def test_raw_tweaks_are_rejected():26 with pytest.raises(ValueError, match='tweak'):27 render_dot('tweak:\n append: "evil [image=/etc/passwd]"\nconnectors: {}\n')282930def test_large_ranges_are_rejected():31 with pytest.raises(ValueError, match='ranges'):32 render_dot('connectors:\n X:\n pincount: 1\ncables:\n C:\n wirecount: 1\nconnections:\n - [X: 1-999999, C: 1]\n')333435def test_yaml_templates_remain_supported_within_complexity_bounds():36 dot = render_dot('''37templates:38 - &connector39 type: Shared connector40 pincount: 141connectors:42 X1: {<<: *connector}43 X2: {<<: *connector}44cables:45 W: {wirecount: 1}46connections:47 - [X1: 1, W: 1, X2: 1]48''')49 assert 'Shared connector' in dot505152def test_recursive_aliases_and_oversized_component_counts_are_rejected():53 with pytest.raises(ValueError, match='recursive'):54 render_dot('connectors: &loop\n X: *loop\n')55 with pytest.raises(ValueError, match='too large'):56 render_dot('connectors:\n X:\n pincount: 99999999\n')575859def test_designators_with_spaces_remain_valid_dot_endpoints():60 dot = render_dot('''61connectors:62 Connector A:63 pincount: 164cables:65 Cable 1:66 wirecount: 167connections:68 -69 - Connector A: 170 - Cable 1: 171''')72 assert '"Connector A":p1r:e -- "Cable 1":w1:w' in dot