"""Test: SVG, audio, video inline rendering (#481)""" import re def test_media_extension_regexes_exist(): """Verify SVG/audio/video extension regexes are defined.""" with open('static/ui.js') as f: src = f.read() assert '_SVG_EXTS' in src, "Missing _SVG_EXTS regex" assert '_AUDIO_EXTS' in src, "Missing _AUDIO_EXTS regex" assert '_VIDEO_EXTS' in src, "Missing _VIDEO_EXTS regex" # Verify they test correct extensions assert 'svg' in src, "SVG regex should match .svg" assert 'mp3' in src, "AUDIO regex should match .mp3" assert 'ogg' in src, "AUDIO regex should match .ogg" assert 'mp4' in src, "VIDEO regex should match .mp4" assert 'webm' in src, "VIDEO regex should match .webm" def test_svg_rendered_before_image_catch_all(): """Verify SVG handler for URLs runs before the catch-all image handler.""" with open('static/ui.js') as f: src = f.read() # Find positions of SVG vs image catch-all in the URL section svg_url_match = src.find("SVG URLs") # Comment can say either variant of the catch-all description image_catch_all = src.find("Render all https:// URLs as ") assert svg_url_match > 0, "SVG URL handler not found" assert image_catch_all > 0, "Image catch-all handler not found" assert svg_url_match < image_catch_all, \ "SVG handler must come before image catch-all to avoid being shadowed" def test_local_svg_inline_rendering(): """Verify local SVG files render as inline image.""" with open('static/ui.js') as f: src = f.read() assert "msg-media-svg" in src, "Missing msg-media-svg CSS class for SVG rendering" # Should have at least 2 SVG handlers (URL + local) count = src.count("msg-media-svg") assert count >= 2, f"Expected >=2 msg-media-svg references, got {count}" def test_local_audio_inline_rendering(): """Verify local audio files render as inline player.""" with open('static/ui.js') as f: src = f.read() assert "msg-media-audio" in src, "Missing msg-media-audio CSS class" assert "