diff options
Diffstat (limited to 'tests/introspect/visualize.test.py')
| -rw-r--r-- | tests/introspect/visualize.test.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/tests/introspect/visualize.test.py b/tests/introspect/visualize.test.py new file mode 100644 index 0000000..a1e2ef5 --- /dev/null +++ b/tests/introspect/visualize.test.py @@ -0,0 +1,92 @@ +"""Tests for the visualize dispatcher in :mod:`edify.introspect.visualize`.""" + +import pytest + +from edify import RegexBuilder +from edify.elements.types.leaves import DigitElement +from edify.errors.introspect import ( + UnsupportedVisualizationEngineError, + UnsupportedVisualizationFormatError, +) +from edify.introspect.visualize import visualize_elements + + +def _digit_regex(): + return RegexBuilder().digit().to_regex() + + +def test_default_format_and_engine_produce_ascii_railroad_output(): + output = visualize_elements((DigitElement(),)) + assert "| START |" in output + assert "| digit |" in output + assert "| END |" in output + + +def test_explicit_ascii_format_and_engine_produce_ascii_railroad_output(): + output = visualize_elements((DigitElement(),), format="ascii", engine="ascii") + assert "| digit |" in output + + +def test_ascii_format_with_wrong_engine_raises_engine_error(): + with pytest.raises(UnsupportedVisualizationEngineError): + visualize_elements((DigitElement(),), format="ascii", engine="graphviz") + + +def test_svg_format_with_graphviz_engine_produces_svg_output(): + regex = _digit_regex() + output = visualize_elements(regex.elements, format="svg", engine="graphviz") + assert "</svg>" in output + + +def test_svg_format_with_wrong_engine_raises_engine_error(): + with pytest.raises(UnsupportedVisualizationEngineError): + visualize_elements((DigitElement(),), format="svg", engine="ascii") + + +def test_unknown_format_raises_format_error(): + with pytest.raises(UnsupportedVisualizationFormatError): + visualize_elements((DigitElement(),), format="pdf") + + +def test_unknown_format_error_names_the_received_format_in_message(): + with pytest.raises(UnsupportedVisualizationFormatError) as excinfo: + visualize_elements((DigitElement(),), format="mermaid") + assert "'mermaid'" in str(excinfo.value) + + +def test_engine_error_names_both_format_and_engine_in_message(): + with pytest.raises(UnsupportedVisualizationEngineError) as excinfo: + visualize_elements((DigitElement(),), format="ascii", engine="mermaid") + message = str(excinfo.value) + assert "'ascii'" in message + assert "'mermaid'" in message + + +def test_regex_visualize_end_to_end_defaults_to_ascii(): + regex = _digit_regex() + output = regex.visualize() + assert "| digit |" in output + + +def test_regex_visualize_svg_end_to_end(): + regex = _digit_regex() + output = regex.visualize(format="svg", engine="graphviz") + assert "</svg>" in output + + +def test_regex_visualize_rejects_unknown_format_end_to_end(): + regex = _digit_regex() + with pytest.raises(UnsupportedVisualizationFormatError): + regex.visualize(format="dot") + + +def test_regex_visualize_rejects_engine_mismatch_end_to_end(): + regex = _digit_regex() + with pytest.raises(UnsupportedVisualizationEngineError): + regex.visualize(format="svg", engine="ascii") + + +def test_empty_elements_still_render_start_and_end(): + output = visualize_elements(()) + assert "START" in output + assert "END" in output |
