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("<"))));
13         g_free(ptr);
14         ASSERT_STR_EQ(">", (ptr=markup_strip(g_strdup(">"))));
15         g_free(ptr);
16         ASSERT_STR_EQ("&", (ptr=markup_strip(g_strdup("&"))));
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("&lt;i&gt;foo&lt;/i&gt;&lt;br&gt;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("&lt;i&gt;foo&lt;/i&gt;&lt;br&gt;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("&#936;", (ptr=markup_transform(g_strdup("&#936;"), MARKUP_FULL)));
55         free(ptr);
56         ASSERT_STR_EQ("&#x3a8; &#x3A8;", (ptr=markup_transform(g_strdup("&#x3a8; &#x3A8;"), MARKUP_FULL)));
57         free(ptr);
58         ASSERT_STR_EQ("&gt; &lt;", (ptr=markup_transform(g_strdup("&gt; &lt;"), MARKUP_FULL)));
59         free(ptr);
60         ASSERT_STR_EQ("&amp;invalid; &amp;#abc; &amp;#xG;", (ptr=markup_transform(g_strdup("&invalid; &#abc; &#xG;"), MARKUP_FULL)));
61         free(ptr);
62         ASSERT_STR_EQ("&amp;; &amp;#; &amp;#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