social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky
1from util.markdown import MarkdownParser 2import cross.fragments as f 3import pytest 4 5EMOJI = "🤬🤬" 6 7 8@pytest.fixture() 9def parser(): 10 return MarkdownParser() 11 12 13def test_empty(parser: MarkdownParser): 14 text, frgs = parser.parse("") 15 assert text == "" 16 assert frgs == [] 17 18 19def test_no_formatting(parser: MarkdownParser): 20 text, frgs = parser.parse("text no formatting!") 21 assert text == "text no formatting!" 22 assert frgs == [] 23 24 25def test_link(parser: MarkdownParser): 26 text, frgs = parser.parse("https://google.com") 27 assert text == "https://google.com" 28 assert len(frgs) == 1 29 30 frg = frgs[0] 31 assert isinstance(frg, f.LinkFragment) 32 assert frg.start == 0 and frg.end == 18 33 assert frg.url == "https://google.com" 34 35 36def test_link_emojis(parser: MarkdownParser): 37 input = f"{EMOJI} https://google.com" 38 text, frgs = parser.parse(input) 39 assert text == input 40 assert len(frgs) == 1 41 42 frg = frgs[0] 43 assert isinstance(frg, f.LinkFragment) 44 assert frg.start == 9 and frg.end == 27 45 assert frg.url == "https://google.com" 46 47 48def test_label_link(parser: MarkdownParser): 49 text, frgs = parser.parse("[hello](https://google.com)") 50 assert text == "hello" 51 assert len(frgs) == 1 52 53 frg = frgs[0] 54 assert isinstance(frg, f.LinkFragment) 55 assert frg.start == 0 and frg.end == 5 56 assert frg.url == "https://google.com" 57 58 59def test_label_link_emojis(parser: MarkdownParser): 60 input = f"[{EMOJI}]( https://google.com)" 61 text, frgs = parser.parse(input) 62 assert text == EMOJI 63 assert len(frgs) == 1 64 65 frg = frgs[0] 66 assert isinstance(frg, f.LinkFragment) 67 assert frg.start == 0 and frg.end == 8 68 assert frg.url == "https://google.com" 69 70 71def test_tag(parser: MarkdownParser): 72 input = "#testing" 73 text, frgs = parser.parse(input) 74 assert text == input 75 assert len(frgs) == 1 76 77 frg = frgs[0] 78 assert isinstance(frg, f.TagFragment) 79 assert frg.start == 0 and frg.end == 8 80 assert frg.tag == "testing" 81 82def test_tag_emojis(parser: MarkdownParser): 83 input = f"{EMOJI} #testing" 84 text, frgs = parser.parse(input) 85 assert text == input 86 assert len(frgs) == 1 87 88 frg = frgs[0] 89 assert isinstance(frg, f.TagFragment) 90 assert frg.start == 9 and frg.end == 17 91 assert frg.tag == "testing" 92 93def test_mention(parser: MarkdownParser): 94 input = "@zen@merping.synth.download" 95 text, frgs = parser.parse(input) 96 assert text == input 97 assert len(frgs) == 1 98 99 frg = frgs[0] 100 assert isinstance(frg, f.MentionFragment) 101 assert frg.start == 0 and frg.end == 27 102 assert frg.uri == "zen@merping.synth.download" 103 104def test_mention_emojis(parser: MarkdownParser): 105 input = f"{EMOJI} @zen@merping.synth.download" 106 text, frgs = parser.parse(input) 107 assert text == input 108 assert len(frgs) == 1 109 110 frg = frgs[0] 111 assert isinstance(frg, f.MentionFragment) 112 assert frg.start == 9 and frg.end == 36 113 assert frg.uri == "zen@merping.synth.download" 114 115def test_mixed(parser: MarkdownParser): 116 input = "#testing_tag @zen@merping.synth.download [hello](https://zenfyr.dev/) hii! https://example.com" 117 text, frgs = parser.parse(input) 118 119 expected_text = "#testing_tag @zen@merping.synth.download hello hii! https://example.com" 120 assert text == expected_text 121 assert len(frgs) == 4 122 123 assert isinstance(frgs[0], f.TagFragment) 124 assert frgs[0].start == 0 and frgs[0].end == 12 125 assert frgs[0].tag == "testing_tag" 126 127 assert isinstance(frgs[1], f.MentionFragment) 128 assert frgs[1].start == 13 and frgs[1].end == 40 129 assert frgs[1].uri == "zen@merping.synth.download" 130 131 assert isinstance(frgs[2], f.LinkFragment) 132 assert frgs[2].start == 41 and frgs[2].end == 46 133 assert frgs[2].url == "https://zenfyr.dev/" 134 135 assert isinstance(frgs[3], f.LinkFragment) 136 assert frgs[3].start == 52 and frgs[3].end == 71 137 assert frgs[3].url == "https://example.com" 138 139def test_mixed_html(parser: MarkdownParser): 140 input = f"<p>#testing_tag @zen@merping.synth.download</p> {EMOJI} <a href=\"https://zenfyr.dev/\"><b>hello</b></a> hii! https://example.com" 141 text, frgs = parser.parse(input) 142 143 expected_text = f"#testing_tag @zen@merping.synth.download\n\n {EMOJI} **hello** hii! https://example.com" 144 assert text == expected_text 145 assert len(frgs) == 4 146 147 assert isinstance(frgs[0], f.TagFragment) 148 assert frgs[0].start == 0 and frgs[0].end == 12 149 assert frgs[0].tag == "testing_tag" 150 151 assert isinstance(frgs[1], f.MentionFragment) 152 assert frgs[1].start == 13 and frgs[1].end == 40 153 assert frgs[1].uri == "zen@merping.synth.download" 154 155 assert isinstance(frgs[2], f.LinkFragment) 156 assert frgs[2].start == 52 and frgs[2].end == 61 157 assert frgs[2].url == "https://zenfyr.dev/" 158 159 assert isinstance(frgs[3], f.LinkFragment) 160 assert frgs[3].start == 67 and frgs[3].end == 86 161 assert frgs[3].url == "https://example.com"