from markdown import Markdown from schematic_footprint_viewer import makeExtension from schematic_footprint_viewer.extension import ViewerOptions, render_viewer def test_render_viewer_outputs_two_canvas_boxes(): html = render_viewer(ViewerOptions(json_path="files/demo.json")) assert 'class="schematic-footprint-viewer"' in html assert 'data-sfv-json="files/demo.json"' in html assert "data-sfv-pcb-canvas" in html assert "data-sfv-sch-canvas" in html assert "sfv-main" not in html def test_extension_replaces_shortcode_with_json_attribute(): md = Markdown(extensions=[makeExtension()]) rendered = md.convert( 'Before\n\n{% schematic-footprint json="files/VL53L0X_merged.json" %}\n\nAfter', ) assert "{% schematic-footprint" not in rendered assert "Before" in rendered assert "After" in rendered assert 'data-sfv-json="files/VL53L0X_merged.json"' in rendered def test_extension_accepts_src_alias_and_dimensions(): md = Markdown(extensions=[makeExtension()]) rendered = md.convert( '{% schematic-footprint src="merged.json" width="24rem" height="20rem" %}', ) assert 'data-sfv-json="merged.json"' in rendered assert "--sfv-box-w:24rem" in rendered assert "--sfv-box-h:20rem" in rendered def test_extension_uses_default_json_when_no_attribute_is_given(): md = Markdown(extensions=[makeExtension(default_json="default.json")]) rendered = md.convert("{% schematic-footprint %}") assert 'data-sfv-json="default.json"' in rendered def test_extension_is_loadable_by_module_name(): md = Markdown(extensions=["schematic_footprint_viewer"]) rendered = md.convert('{% schematic-footprint json="module.json" %}') assert 'data-sfv-json="module.json"' in rendered