optional markup escaping in expand()
[uzbl-mobile] / tests / test-expand.c
1 /* -*- c-basic-offset: 4; -*- */
2 #define _POSIX_SOURCE
3
4 #include <gtk/gtk.h>
5 #include <gdk/gdkx.h>
6 #include <gdk/gdkkeysyms.h>
7 #include <sys/socket.h>
8 #include <sys/stat.h>
9 #include <sys/types.h>
10 #include <sys/un.h>
11 #include <sys/utsname.h>
12 #include <sys/time.h>
13 #include <webkit/webkit.h>
14 #include <libsoup/soup.h>
15 #include <JavaScriptCore/JavaScript.h>
16
17 #include <stdio.h>
18 #include <string.h>
19 #include <unistd.h>
20 #include <stdlib.h>
21 #include <errno.h>
22 #include <fcntl.h>
23 #include <signal.h>
24
25 #include <uzbl.h>
26 #include <config.h>
27
28 extern Uzbl uzbl;
29
30 extern gchar* expand(char*, guint, gboolean);
31 extern gchar* expand_template(const char*, gboolean);
32 extern void make_var_to_name_hash(void);
33
34 void
35 test_URI (void) {
36     uzbl.state.uri = g_strdup("http://www.uzbl.org/");
37     g_assert_cmpstr(expand_template("URI", FALSE), ==, uzbl.state.uri);
38     g_free(uzbl.state.uri);
39 }
40
41 void
42 test_LOAD_PROGRESS (void) {
43     uzbl.gui.sbar.load_progress = 50;
44     g_assert_cmpstr(expand_template("LOAD_PROGRESS", FALSE), ==, "50");
45 }
46
47 void
48 test_LOAD_PROGRESSBAR (void) {
49     uzbl.gui.sbar.load_progress = 75;
50     uzbl.gui.sbar.progress_w = 4;
51
52     uzbl.gui.sbar.progress_s = "*";
53     uzbl.gui.sbar.progress_u = "-";
54
55     g_assert_cmpstr(expand_template("LOAD_PROGRESSBAR", FALSE), ==, "***-");
56 }
57
58 void
59 test_TITLE (void) {
60     uzbl.gui.main_title = "Lorem Ipsum";
61     g_assert_cmpstr(expand_template("TITLE", FALSE), ==, "Lorem Ipsum");
62 }
63
64 void
65 test_SELECTED_URI (void) {
66     uzbl.state.selected_url = "http://example.org/";
67     g_assert_cmpstr(expand_template("SELECTED_URI", FALSE), ==, "http://example.org/");
68 }
69
70 void
71 test_NAME (void) {
72     uzbl.state.instance_name = "12345";
73     g_assert_cmpstr(expand_template("NAME", FALSE), ==, "12345");
74 }
75
76 void
77 test_KEYCMD (void) {
78     uzbl.state.keycmd = g_string_new("gg winslow");
79     g_assert_cmpstr(expand_template("KEYCMD", FALSE), ==, "gg winslow");
80     g_string_free(uzbl.state.keycmd, TRUE);
81 }
82
83 void
84 test_MODE (void) {
85     uzbl.behave.cmd_indicator = "C";
86     uzbl.behave.insert_indicator = "I";
87
88     uzbl.behave.insert_mode = 0;
89     g_assert_cmpstr(expand_template("MODE", FALSE), ==, "C");
90
91     uzbl.behave.insert_mode = 1;
92     g_assert_cmpstr(expand_template("MODE", FALSE), ==, "I");
93 }
94
95 void
96 test_MSG (void) {
97     uzbl.gui.sbar.msg = "Hello from frosty Edmonton!";
98     g_assert_cmpstr(expand_template("MSG", FALSE), ==, "Hello from frosty Edmonton!");
99 }
100
101 void
102 test_WEBKIT_VERSION (void) {
103     GString* expected = g_string_new("");
104     g_string_append(expected, itos(WEBKIT_MAJOR_VERSION));
105     g_string_append(expected, " ");
106     g_string_append(expected, itos(WEBKIT_MINOR_VERSION));
107     g_string_append(expected, " ");
108     g_string_append(expected, itos(WEBKIT_MICRO_VERSION));
109
110     g_assert_cmpstr(expand("@WEBKIT_MAJOR @WEBKIT_MINOR @WEBKIT_MICRO", 0, FALSE), ==, g_string_free(expected, FALSE));
111 }
112
113 void
114 test_UNAMEINFO (void) {
115     GString* expected = g_string_new("");
116
117     g_string_append(expected, uzbl.state.unameinfo.sysname);
118     g_string_append(expected, " ");
119     g_string_append(expected, uzbl.state.unameinfo.nodename);
120     g_string_append(expected, " ");
121     g_string_append(expected, uzbl.state.unameinfo.release);
122     g_string_append(expected, " ");
123     g_string_append(expected, uzbl.state.unameinfo.version);
124     g_string_append(expected, " ");
125     g_string_append(expected, uzbl.state.unameinfo.machine);
126
127     g_assert_cmpstr(expand("@SYSNAME @NODENAME @KERNREL @KERNVER @ARCH_SYSTEM", 0, FALSE), ==, g_string_free(expected, FALSE));
128 }
129
130 void
131 test_ARCH_UZBL (void) {
132     g_assert_cmpstr(expand("@ARCH_UZBL", 0, FALSE), ==, ARCH);
133 }
134
135 void
136 test_COMMIT (void) {
137     g_assert_cmpstr(expand("@COMMIT", 0, FALSE), ==, COMMIT);
138 }
139
140 void
141 test_cmd_useragent_simple (void) {
142     GString* expected = g_string_new("Uzbl (Webkit ");
143     g_string_append(expected, itos(WEBKIT_MAJOR_VERSION));
144     g_string_append(expected, ".");
145     g_string_append(expected, itos(WEBKIT_MINOR_VERSION));
146     g_string_append(expected, ".");
147     g_string_append(expected, itos(WEBKIT_MICRO_VERSION));
148     g_string_append(expected, ")");
149
150     set_var_value("useragent", "Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO)");
151     g_assert_cmpstr(uzbl.net.useragent, ==, g_string_free(expected, FALSE));
152 }
153
154 void
155 test_cmd_useragent_full (void) {
156     GString* expected = g_string_new("Uzbl (Webkit ");
157     g_string_append(expected, itos(WEBKIT_MAJOR_VERSION));
158     g_string_append(expected, ".");
159     g_string_append(expected, itos(WEBKIT_MINOR_VERSION));
160     g_string_append(expected, ".");
161     g_string_append(expected, itos(WEBKIT_MICRO_VERSION));
162     g_string_append(expected, ") (");
163
164     g_string_append(expected, uzbl.state.unameinfo.sysname);
165     g_string_append(expected, " ");
166     g_string_append(expected, uzbl.state.unameinfo.nodename);
167     g_string_append(expected, " ");
168     g_string_append(expected, uzbl.state.unameinfo.release);
169     g_string_append(expected, " ");
170     g_string_append(expected, uzbl.state.unameinfo.version);
171     g_string_append(expected, " ");
172     g_string_append(expected, uzbl.state.unameinfo.machine);
173     g_string_append(expected, " [");
174     g_string_append(expected, ARCH);
175     g_string_append(expected, "]) (Commit ");
176     g_string_append(expected, COMMIT);
177     g_string_append(expected, ")");
178
179     set_var_value("useragent", "Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) (@SYSNAME @NODENAME @KERNREL @KERNVER @ARCH_SYSTEM [@ARCH_UZBL]) (Commit @COMMIT)");
180     g_assert_cmpstr(uzbl.net.useragent, ==, g_string_free(expected, FALSE));
181 }
182
183 void
184 test_escape_markup (void) {
185     /* simple expansion */
186     uzbl.state.uri = g_strdup("<&>");
187     g_assert_cmpstr(expand("@uri", 0, FALSE), ==, uzbl.state.uri);
188     g_assert_cmpstr(expand("@uri", 0, TRUE), ==, "&lt;&amp;&gt;");
189
190     /* shell expansion */
191     g_assert_cmpstr(expand("@(echo -n '<&>')@", 0, FALSE), ==, "<&>");
192     g_assert_cmpstr(expand("@(echo -n '<&>')@", 0, TRUE), ==, "&lt;&amp;&gt;");
193
194     /* javascript expansion */
195     g_assert_cmpstr(expand("@<'<&>'>@", 0, FALSE), ==, "<&>");
196     g_assert_cmpstr(expand("@<'<&>'>@", 0, TRUE), ==, "&lt;&amp;&gt;");
197
198     g_free(uzbl.state.uri);
199 }
200
201 int
202 main (int argc, char *argv[]) {
203     g_type_init();
204     g_test_init(&argc, &argv, NULL);
205
206     g_test_add_func("/test-expand/URI", test_URI);
207     g_test_add_func("/test-expand/LOAD_PROGRESS", test_LOAD_PROGRESS);
208     g_test_add_func("/test-expand/LOAD_PROGRESSBAR", test_LOAD_PROGRESSBAR);
209     g_test_add_func("/test-expand/TITLE", test_TITLE);
210     g_test_add_func("/test-expand/SELECTED_URI", test_SELECTED_URI);
211     g_test_add_func("/test-expand/NAME", test_NAME);
212     g_test_add_func("/test-expand/KEYCMD", test_KEYCMD);
213     g_test_add_func("/test-expand/MODE", test_MODE);
214     g_test_add_func("/test-expand/MSG", test_MSG);
215     g_test_add_func("/test-expand/WEBKIT_VERSION", test_WEBKIT_VERSION);
216     g_test_add_func("/test-expand/UNAMEINFO", test_UNAMEINFO);
217     g_test_add_func("/test-expand/ARCH_UZBL", test_ARCH_UZBL);
218     /* this only exists on _GNU_SOURCE i guess */
219     /* g_test_add_func("/test-expand/DOMAINNAME", test_DOMAINNAME); */
220     g_test_add_func("/test-expand/COMMIT", test_COMMIT);
221
222     g_test_add_func("/test-expand/cmd_useragent_simple", test_cmd_useragent_simple);
223     g_test_add_func("/test-expand/cmd_useragent_full", test_cmd_useragent_full);
224
225     g_test_add_func("/test-expand/escape_markup", test_escape_markup);
226
227     gtk_init(&argc, &argv);
228     if (!g_thread_supported ())
229         g_thread_init (NULL);
230
231     uzbl.net.soup_session = webkit_get_default_session();
232
233     if(uname(&uzbl.state.unameinfo) == -1)
234       g_printerr("Can't retrieve unameinfo. This test might fail.\n");
235
236     setup_scanner();
237     make_var_to_name_hash();
238
239     uzbl.gui.scrolled_win = create_browser();
240
241     return g_test_run();
242 }
243
244 /* vi: set et ts=4: */