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"