from util.markdown import MarkdownParser import cross.fragments as f import pytest EMOJI = "🤬🤬" @pytest.fixture() def parser(): return MarkdownParser() def test_empty(parser: MarkdownParser): text, frgs = parser.parse("") assert text == "" assert frgs == [] def test_no_formatting(parser: MarkdownParser): text, frgs = parser.parse("text no formatting!") assert text == "text no formatting!" assert frgs == [] def test_link(parser: MarkdownParser): text, frgs = parser.parse("https://google.com") assert text == "https://google.com" assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.LinkFragment) assert frg.start == 0 and frg.end == 18 assert frg.url == "https://google.com" def test_link_emojis(parser: MarkdownParser): input = f"{EMOJI} https://google.com" text, frgs = parser.parse(input) assert text == input assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.LinkFragment) assert frg.start == 9 and frg.end == 27 assert frg.url == "https://google.com" def test_label_link(parser: MarkdownParser): text, frgs = parser.parse("[hello](https://google.com)") assert text == "hello" assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.LinkFragment) assert frg.start == 0 and frg.end == 5 assert frg.url == "https://google.com" def test_label_link_emojis(parser: MarkdownParser): input = f"[{EMOJI}]( https://google.com)" text, frgs = parser.parse(input) assert text == EMOJI assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.LinkFragment) assert frg.start == 0 and frg.end == 8 assert frg.url == "https://google.com" def test_tag(parser: MarkdownParser): input = "#testing" text, frgs = parser.parse(input) assert text == input assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.TagFragment) assert frg.start == 0 and frg.end == 8 assert frg.tag == "testing" def test_tag_emojis(parser: MarkdownParser): input = f"{EMOJI} #testing" text, frgs = parser.parse(input) assert text == input assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.TagFragment) assert frg.start == 9 and frg.end == 17 assert frg.tag == "testing" def test_mention(parser: MarkdownParser): input = "@zen@merping.synth.download" text, frgs = parser.parse(input) assert text == input assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.MentionFragment) assert frg.start == 0 and frg.end == 27 assert frg.uri == "zen@merping.synth.download" def test_mention_emojis(parser: MarkdownParser): input = f"{EMOJI} @zen@merping.synth.download" text, frgs = parser.parse(input) assert text == input assert len(frgs) == 1 frg = frgs[0] assert isinstance(frg, f.MentionFragment) assert frg.start == 9 and frg.end == 36 assert frg.uri == "zen@merping.synth.download" def test_mixed(parser: MarkdownParser): input = "#testing_tag @zen@merping.synth.download [hello](https://zenfyr.dev/) hii! https://example.com" text, frgs = parser.parse(input) expected_text = "#testing_tag @zen@merping.synth.download hello hii! https://example.com" assert text == expected_text assert len(frgs) == 4 assert isinstance(frgs[0], f.TagFragment) assert frgs[0].start == 0 and frgs[0].end == 12 assert frgs[0].tag == "testing_tag" assert isinstance(frgs[1], f.MentionFragment) assert frgs[1].start == 13 and frgs[1].end == 40 assert frgs[1].uri == "zen@merping.synth.download" assert isinstance(frgs[2], f.LinkFragment) assert frgs[2].start == 41 and frgs[2].end == 46 assert frgs[2].url == "https://zenfyr.dev/" assert isinstance(frgs[3], f.LinkFragment) assert frgs[3].start == 52 and frgs[3].end == 71 assert frgs[3].url == "https://example.com" def test_mixed_html(parser: MarkdownParser): input = f"
#testing_tag @zen@merping.synth.download
{EMOJI} hello hii! https://example.com" text, frgs = parser.parse(input) expected_text = f"#testing_tag @zen@merping.synth.download\n\n {EMOJI} **hello** hii! https://example.com" assert text == expected_text assert len(frgs) == 4 assert isinstance(frgs[0], f.TagFragment) assert frgs[0].start == 0 and frgs[0].end == 12 assert frgs[0].tag == "testing_tag" assert isinstance(frgs[1], f.MentionFragment) assert frgs[1].start == 13 and frgs[1].end == 40 assert frgs[1].uri == "zen@merping.synth.download" assert isinstance(frgs[2], f.LinkFragment) assert frgs[2].start == 52 and frgs[2].end == 61 assert frgs[2].url == "https://zenfyr.dev/" assert isinstance(frgs[3], f.LinkFragment) assert frgs[3].start == 67 and frgs[3].end == 86 assert frgs[3].url == "https://example.com"