dcbe7e3bd741e5e0b512c7287e7cf2ff75aabcb9
[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 void make_var_to_name_hash(void);
32
33 void
34 test_uri (void) {
35     g_assert_cmpstr(expand("@uri", 0, FALSE), ==, "");
36
37     uzbl.state.uri = g_strdup("http://www.uzbl.org/");
38     g_assert_cmpstr(expand("@uri", 0, FALSE), ==, uzbl.state.uri);
39     g_free(uzbl.state.uri);
40 }
41
42 void
43 test_LOAD_PROGRESS (void) {
44     uzbl.gui.sbar.load_progress = 50;
45     g_assert_cmpstr(expand("@LOAD_PROGRESS", 0, FALSE), ==, "50");
46 }
47
48 void
49 test_LOAD_PROGRESSBAR (void) {
50     uzbl.gui.sbar.progress_w = 4;
51     progress_change_cb(NULL, 75, NULL);
52
53     g_assert_cmpstr(expand("@LOAD_PROGRESSBAR", 0, FALSE), ==, "===ยท");
54 }
55
56 void
57 test_TITLE (void) {
58     uzbl.gui.main_title = "Lorem Ipsum";
59     g_assert_cmpstr(expand("@TITLE", 0, FALSE), ==, "Lorem Ipsum");
60 }
61
62 void
63 test_SELECTED_URI (void) {
64     uzbl.state.selected_url = "http://example.org/";
65     g_assert_cmpstr(expand("@SELECTED_URI", 0, FALSE), ==, "http://example.org/");
66 }
67
68 void
69 test_NAME (void) {
70     uzbl.state.instance_name = "testing";
71     g_assert_cmpstr(expand("@NAME", 0, FALSE), ==, "testing");
72 }
73
74 void
75 test_KEYCMD (void) {
76     uzbl.state.keycmd = g_string_new("gg winslow");
77     g_assert_cmpstr(expand("@KEYCMD", 0, FALSE), ==, "gg winslow");
78     g_string_free(uzbl.state.keycmd, TRUE);
79 }
80
81 void
82 test_MODE (void) {
83     set_insert_mode(FALSE);
84     g_assert_cmpstr(expand("@MODE", 0, FALSE), ==, "C");
85
86     set_insert_mode(TRUE);
87     g_assert_cmpstr(expand("@MODE", 0, FALSE), ==, "I");
88 }
89
90 void
91 test_MSG (void) {
92     uzbl.gui.sbar.msg = "Hello from frosty Edmonton!";
93     g_assert_cmpstr(expand("@MSG", 0, FALSE), ==, "Hello from frosty Edmonton!");
94 }
95
96 void
97 test_WEBKIT_VERSION (void) {
98     GString* expected = g_string_new("");
99     g_string_append(expected, itos(WEBKIT_MAJOR_VERSION));
100     g_string_append(expected, " ");
101     g_string_append(expected, itos(WEBKIT_MINOR_VERSION));
102     g_string_append(expected, " ");
103     g_string_append(expected, itos(WEBKIT_MICRO_VERSION));
104
105     g_assert_cmpstr(expand("@WEBKIT_MAJOR @WEBKIT_MINOR @WEBKIT_MICRO", 0, FALSE), ==, g_string_free(expected, FALSE));
106 }
107
108 void
109 test_ARCH_UZBL (void) {
110     g_assert_cmpstr(expand("@ARCH_UZBL", 0, FALSE), ==, ARCH);
111 }
112
113 void
114 test_COMMIT (void) {
115     g_assert_cmpstr(expand("@COMMIT", 0, FALSE), ==, COMMIT);
116 }
117
118 void
119 test_cmd_useragent_simple (void) {
120     GString* expected = g_string_new("Uzbl (Webkit ");
121     g_string_append(expected, itos(WEBKIT_MAJOR_VERSION));
122     g_string_append(expected, ".");
123     g_string_append(expected, itos(WEBKIT_MINOR_VERSION));
124     g_string_append(expected, ".");
125     g_string_append(expected, itos(WEBKIT_MICRO_VERSION));
126     g_string_append(expected, ")");
127
128     set_var_value("useragent", "Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO)");
129     g_assert_cmpstr(uzbl.net.useragent, ==, g_string_free(expected, FALSE));
130 }
131
132 void
133 test_cmd_useragent_full (void) {
134     GString* expected = g_string_new("Uzbl (Webkit ");
135     g_string_append(expected, itos(WEBKIT_MAJOR_VERSION));
136     g_string_append(expected, ".");
137     g_string_append(expected, itos(WEBKIT_MINOR_VERSION));
138     g_string_append(expected, ".");
139     g_string_append(expected, itos(WEBKIT_MICRO_VERSION));
140     g_string_append(expected, ") (");
141
142     struct utsname unameinfo;
143     if(uname(&unameinfo) == -1)
144       g_printerr("Can't retrieve unameinfo. This test might fail.\n");
145
146     g_string_append(expected, unameinfo.sysname);
147     g_string_append(expected, " ");
148     g_string_append(expected, unameinfo.nodename);
149     g_string_append(expected, " ");
150     g_string_append(expected, unameinfo.release);
151     g_string_append(expected, " ");
152     g_string_append(expected, unameinfo.version);
153     g_string_append(expected, " ");
154     g_string_append(expected, unameinfo.machine);
155     g_string_append(expected, " [");
156     g_string_append(expected, ARCH);
157     g_string_append(expected, "]) (Commit ");
158     g_string_append(expected, COMMIT);
159     g_string_append(expected, ")");
160
161     set_var_value("useragent", "Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) (@(uname -s)@ @(uname -n)@ @(uname -r)@ @(uname -v)@ @(uname -m)@ [@ARCH_UZBL]) (Commit @COMMIT)");
162     g_assert_cmpstr(uzbl.net.useragent, ==, g_string_free(expected, FALSE));
163 }
164
165 void
166 test_escape_markup (void) {
167     /* simple expansion */
168     uzbl.state.uri = g_strdup("<&>");
169     g_assert_cmpstr(expand("@uri", 0, FALSE), ==, uzbl.state.uri);
170     g_assert_cmpstr(expand("@uri", 0, TRUE), ==, "&lt;&amp;&gt;");
171
172     /* shell expansion */
173     g_assert_cmpstr(expand("@(echo -n '<&>')@", 0, FALSE), ==, "<&>");
174     g_assert_cmpstr(expand("@(echo -n '<&>')@", 0, TRUE), ==, "&lt;&amp;&gt;");
175
176     /* javascript expansion */
177     g_assert_cmpstr(expand("@<'<&>'>@", 0, FALSE), ==, "<&>");
178     g_assert_cmpstr(expand("@<'<&>'>@", 0, TRUE), ==, "&lt;&amp;&gt;");
179
180     g_free(uzbl.state.uri);
181 }
182
183 void
184 test_escape_expansion (void) {
185     /* \@ -> @ */
186     g_assert_cmpstr(expand("\\@uri", 0, FALSE), ==, "@uri");
187
188     /* \\\@ -> \@ */
189     g_assert_cmpstr(expand("\\\\\\@uri", 0, FALSE), ==, "\\@uri");
190
191     /* \@(...)\@ -> @(...)@ */
192     g_assert_cmpstr(expand("\\@(echo hi)\\@", 0, FALSE), ==, "@(echo hi)@");
193
194     /* \@<...>\@ -> @<...>@ */
195     g_assert_cmpstr(expand("\\@<\"hi\">\\@", 0, FALSE), ==, "@<\"hi\">@");
196 }
197
198 void
199 test_nested (void) {
200     uzbl.gui.sbar.msg = "xxx";
201     g_assert_cmpstr(expand("@<\"..@MSG..\">@", 0, FALSE), ==, "..xxx..");
202     g_assert_cmpstr(expand("@<\"..\\@MSG..\">@", 0, FALSE), ==, "..@MSG..");
203
204     g_assert_cmpstr(expand("@(echo ..@MSG..)@", 0, FALSE), ==, "..xxx..");
205     g_assert_cmpstr(expand("@(echo ..\\@MSG..)@", 0, FALSE), ==, "..@MSG..");
206 }
207
208 int
209 main (int argc, char *argv[]) {
210     g_type_init();
211     g_test_init(&argc, &argv, NULL);
212
213     g_test_add_func("/test-expand/@uri", test_uri);
214     g_test_add_func("/test-expand/@LOAD_PROGRESS", test_LOAD_PROGRESS);
215     g_test_add_func("/test-expand/@LOAD_PROGRESSBAR", test_LOAD_PROGRESSBAR);
216     g_test_add_func("/test-expand/@TITLE", test_TITLE);
217     g_test_add_func("/test-expand/@SELECTED_URI", test_SELECTED_URI);
218     g_test_add_func("/test-expand/@NAME", test_NAME);
219 //    g_test_add_func("/test-expand/@KEYCMD", test_KEYCMD);
220     g_test_add_func("/test-expand/@MODE", test_MODE);
221     g_test_add_func("/test-expand/@MSG", test_MSG);
222     g_test_add_func("/test-expand/@WEBKIT_*", test_WEBKIT_VERSION);
223     g_test_add_func("/test-expand/@ARCH_UZBL", test_ARCH_UZBL);
224     g_test_add_func("/test-expand/@COMMIT", test_COMMIT);
225
226     g_test_add_func("/test-expand/cmd_useragent_simple", test_cmd_useragent_simple);
227     g_test_add_func("/test-expand/cmd_useragent_full", test_cmd_useragent_full);
228
229     g_test_add_func("/test-expand/escape_markup", test_escape_markup);
230     g_test_add_func("/test-expand/escape_expansion", test_escape_expansion);
231     g_test_add_func("/test-expand/nested", test_nested);
232
233     initialize(argc, argv);
234
235     return g_test_run();
236 }
237
238 /* vi: set et ts=4: */