1 #include "../src/markup.c"
2 #include "greatest.h"
3
test_markup_strip(void)4 TEST test_markup_strip(void)
5 {
6 char *ptr;
7
8 ASSERT_STR_EQ(""", (ptr=markup_strip(g_strdup("""))));
9 g_free(ptr);
10 ASSERT_STR_EQ("'", (ptr=markup_strip(g_strdup("'"))));
11 g_free(ptr);
12 ASSERT_STR_EQ("<", (ptr=markup_strip(g_strdup("&lt;"))));
13 g_free(ptr);
14 ASSERT_STR_EQ(">", (ptr=markup_strip(g_strdup("&gt;"))));
15 g_free(ptr);
16 ASSERT_STR_EQ("&", (ptr=markup_strip(g_strdup("&amp;"))));
17 g_free(ptr);
18 ASSERT_STR_EQ(">A ", (ptr=markup_strip(g_strdup(">A <img> <string"))));
19 g_free(ptr);
20
21 PASS();
22 }
23
test_markup_transform(void)24 TEST test_markup_transform(void)
25 {
26 char *ptr;
27
28 settings.ignore_newline = false;
29 ASSERT_STR_EQ("<i>foo</i><br>bar\nbaz", (ptr=markup_transform(g_strdup("<i>foo</i><br>bar\nbaz"), MARKUP_NO)));
30 g_free(ptr);
31 ASSERT_STR_EQ("foo\nbar\nbaz", (ptr=markup_transform(g_strdup("<i>foo</i><br>bar\nbaz"), MARKUP_STRIP)));
32 g_free(ptr);
33 ASSERT_STR_EQ("<i>foo</i>\nbar\nbaz", (ptr=markup_transform(g_strdup("<i>foo</i><br>bar\nbaz"), MARKUP_FULL)));
34 g_free(ptr);
35
36 settings.ignore_newline = true;
37 ASSERT_STR_EQ("<i>foo</i><br>bar baz", (ptr=markup_transform(g_strdup("<i>foo</i><br>bar\nbaz"), MARKUP_NO)));
38 g_free(ptr);
39 ASSERT_STR_EQ("foo bar baz", (ptr=markup_transform(g_strdup("<i>foo</i><br>bar\nbaz"), MARKUP_STRIP)));
40 g_free(ptr);
41 ASSERT_STR_EQ("<i>foo</i> bar baz", (ptr=markup_transform(g_strdup("<i>foo</i><br>bar\nbaz"), MARKUP_FULL)));
42 g_free(ptr);
43
44 // Test replacement of img and a tags, not renderable by pango
45 ASSERT_STR_EQ("foo bar bar baz", (ptr=markup_transform(g_strdup("<img alt=\"foo bar\"><br>bar\nbaz"), MARKUP_FULL)));
46 g_free(ptr);
47 ASSERT_STR_EQ("test ", (ptr=markup_transform(g_strdup("test <img alt=\"foo bar\""), MARKUP_FULL)));
48 g_free(ptr);
49 ASSERT_STR_EQ("test [image] image", (ptr=markup_transform(g_strdup("test <img src=\"nothing.jpg\"> image"), MARKUP_FULL)));
50 g_free(ptr);
51 ASSERT_STR_EQ("bar baz", (ptr=markup_transform(g_strdup("<a href=\"asdf\">bar</a> baz"), MARKUP_FULL)));
52 g_free(ptr);
53
54 ASSERT_STR_EQ("Ψ", (ptr=markup_transform(g_strdup("Ψ"), MARKUP_FULL)));
55 free(ptr);
56 ASSERT_STR_EQ("Ψ Ψ", (ptr=markup_transform(g_strdup("Ψ Ψ"), MARKUP_FULL)));
57 free(ptr);
58 ASSERT_STR_EQ("> <", (ptr=markup_transform(g_strdup("> <"), MARKUP_FULL)));
59 free(ptr);
60 ASSERT_STR_EQ("&invalid; &#abc; &#xG;", (ptr=markup_transform(g_strdup("&invalid; &#abc; &#xG;"), MARKUP_FULL)));
61 free(ptr);
62 ASSERT_STR_EQ("&; &#; &#x;", (ptr=markup_transform(g_strdup("&; &#; &#x;"), MARKUP_FULL)));
63 free(ptr);
64
65 PASS();
66 }
67
helper_markup_strip_a(const char * in,const char * exp,const char * urls)68 TEST helper_markup_strip_a (const char *in, const char *exp, const char *urls)
69 {
70 // out_urls is a return parameter and the content should be ignored
71 char *out_urls = (char *)0x04; //Chosen by a fair dice roll
72 char *out = g_strdup(in);
73 char *msg = g_strconcat("url: ", in, NULL);
74
75 markup_strip_a(&out, &out_urls);
76
77 ASSERT_STR_EQm(msg, exp, out);
78
79 if (urls) {
80 ASSERT_STR_EQm(msg, urls, out_urls);
81 } else {
82 ASSERT_EQm(msg, urls, out_urls);
83 }
84
85 g_free(out_urls);
86 g_free(out);
87 g_free(msg);
88
89 PASS();
90 }
91
test_markup_strip_a(void)92 TEST test_markup_strip_a(void)
93 {
94 RUN_TESTp(helper_markup_strip_a, "<a href=\"https://url.com\">valid</a> link", "valid link", "[valid] https://url.com");
95 RUN_TESTp(helper_markup_strip_a, "<a href=\"\">valid</a> link", "valid link", "[valid] ");
96 RUN_TESTp(helper_markup_strip_a, "<a>valid</a> link", "valid link", NULL);
97 RUN_TESTp(helper_markup_strip_a, "<a href=\"https://url.com\">valid link", "valid link", "[valid link] https://url.com");
98
99 RUN_TESTp(helper_markup_strip_a, "<a href=\"https://url.com\" invalid</a> link", " link", NULL);
100 RUN_TESTp(helper_markup_strip_a, "<a invalid</a> link", " link", NULL);
101
102 PASS();
103 }
104
helper_markup_strip_img(const char * in,const char * exp,const char * urls)105 TEST helper_markup_strip_img (const char *in, const char *exp, const char *urls)
106 {
107 // out_urls is a return parameter and the content should be ignored
108 char *out_urls = (char *)0x04; //Chosen by a fair dice roll
109 char *out = g_strdup(in);
110 char *msg = g_strconcat("url: ", in, NULL);
111
112 markup_strip_img(&out, &out_urls);
113
114 ASSERT_STR_EQm(msg, exp, out);
115
116 if (urls) {
117 ASSERT_STR_EQm(msg, urls, out_urls);
118 } else {
119 ASSERT_EQm(msg, urls, out_urls);
120 }
121
122 g_free(out_urls);
123 g_free(out);
124 g_free(msg);
125
126 PASS();
127 }
128
test_markup_strip_img(void)129 TEST test_markup_strip_img(void)
130 {
131 RUN_TESTp(helper_markup_strip_img, "v <img> img", "v [image] img", NULL);
132 RUN_TESTp(helper_markup_strip_img, "v <img alt=\"valid\" alt=\"invalid\"> img", "v valid img", NULL);
133 RUN_TESTp(helper_markup_strip_img, "v <img src=\"url.com\"> img", "v [image] img", "[image] url.com");
134
135 RUN_TESTp(helper_markup_strip_img, "v <img alt=\"valid\" src=\"url.com\"> img", "v valid img", "[valid] url.com");
136 RUN_TESTp(helper_markup_strip_img, "v <img src=\"url.com\" alt=\"valid\"> img", "v valid img", "[valid] url.com");
137 RUN_TESTp(helper_markup_strip_img, "v <img src=\"url.com\" alt=\"valid\" alt=\"i\"> img", "v valid img", "[valid] url.com");
138
139 RUN_TESTp(helper_markup_strip_img, "i <img alt=\"invalid src=\"https://url.com\"> img", "i [image] img", "[image] https://url.com");
140 RUN_TESTp(helper_markup_strip_img, "i <img alt=\"broken\" src=\"https://url.com > img", "i broken img", NULL);
141 RUN_TESTp(helper_markup_strip_img, "i <img alt=\"invalid src=\"https://url.com > img", "i [image] img", NULL);
142
143 RUN_TESTp(helper_markup_strip_img, "i <img src=\"url.com alt=\"broken\"> img", "i broken img", NULL);
144 RUN_TESTp(helper_markup_strip_img, "i <img src=\"url.com\" alt=\"invalid > img", "i [image] img", "[image] url.com");
145 RUN_TESTp(helper_markup_strip_img, "i <img src=\"url.com alt=\"invalid > img", "i [image] img", NULL);
146
147 RUN_TESTp(helper_markup_strip_img, "i <img src=\"url.com\" alt=\"invalid\" img", "i ", NULL);
148
149 PASS();
150 }
151
SUITE(suite_markup)152 SUITE(suite_markup)
153 {
154 RUN_TEST(test_markup_strip);
155 RUN_TEST(test_markup_strip_a);
156 RUN_TEST(test_markup_strip_img);
157 RUN_TEST(test_markup_transform);
158 }
159
160 /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */
161