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