In System.Windows.Forms:
[mono-project.git] / eglib / test / string-util.c
blob10e0ea0ce9570835d4e6891cab10429c9198fe23
1 #include <glib.h>
2 #include <string.h>
3 #include <stdio.h>
4 #include "test.h"
6 /* This test is just to be used with valgrind */
7 RESULT
8 test_strfreev ()
10 gchar **array = g_new (gchar *, 4);
11 array [0] = g_strdup ("one");
12 array [1] = g_strdup ("two");
13 array [2] = g_strdup ("three");
14 array [3] = NULL;
16 g_strfreev (array);
17 g_strfreev (NULL);
19 return OK;
22 RESULT
23 test_concat ()
25 gchar *x = g_strconcat ("Hello", ", ", "world", NULL);
26 if (strcmp (x, "Hello, world") != 0)
27 return FAILED("concat failed, got: %s", x);
28 g_free (x);
29 return OK;
32 RESULT
33 test_split ()
35 const gchar *to_split = "Hello world, how are we doing today?";
36 gint i;
37 gchar **v;
39 v= g_strsplit(to_split, " ", 0);
41 if(v == NULL) {
42 return FAILED("split failed, got NULL vector (1)");
45 for(i = 0; v[i] != NULL; i++);
46 if(i != 7) {
47 return FAILED("split failed, expected 7 tokens, got %d", i);
50 g_strfreev(v);
52 v = g_strsplit(to_split, ":", -1);
53 if(v == NULL) {
54 return FAILED("split failed, got NULL vector (2)");
57 for(i = 0; v[i] != NULL; i++);
58 if(i != 1) {
59 return FAILED("split failed, expected 1 token, got %d", i);
62 if(strcmp(v[0], to_split) != 0) {
63 return FAILED("expected vector[0] to be '%s' but it was '%s'",
64 to_split, v[0]);
66 g_strfreev(v);
68 v = g_strsplit ("", ":", 0);
69 if (v == NULL)
70 return FAILED ("g_strsplit returned NULL");
71 g_strfreev (v);
73 v = g_strsplit ("/home/miguel/dingus", "/", 0);
74 if (v [0][0] != 0)
75 return FAILED ("Got a non-empty first element");
76 g_strfreev (v);
78 v = g_strsplit ("appdomain1, Version=0.0.0.0, Culture=neutral", ",", 4);
79 if (strcmp (v [0], "appdomain1") != 0)
80 return FAILED ("Invalid value");
82 if (strcmp (v [1], " Version=0.0.0.0") != 0)
83 return FAILED ("Invalid value");
85 if (strcmp (v [2], " Culture=neutral") != 0)
86 return FAILED ("Invalid value");
88 if (v [3] != NULL)
89 return FAILED ("Expected only 3 elements");
91 g_strfreev (v);
93 return OK;
96 RESULT
97 test_strreverse ()
99 gchar *a = g_strdup ("onetwothree");
100 gchar *a_target = "eerhtowteno";
101 gchar *b = g_strdup ("onetwothre");
102 gchar *b_target = "erhtowteno";
104 g_strreverse (a);
105 if (strcmp (a, a_target)) {
106 g_free (b);
107 g_free (a);
108 return FAILED("strreverse failed. Expecting: '%s' and got '%s'\n", a, a_target);
111 g_strreverse (b);
112 if (strcmp (b, b_target)) {
113 g_free (b);
114 g_free (a);
115 return FAILED("strreverse failed. Expecting: '%s' and got '%s'\n", b, b_target);
117 g_free (b);
118 g_free (a);
119 return OK;
122 RESULT
123 test_strjoin ()
125 char *s;
127 s = g_strjoin (NULL, "a", "b", NULL);
128 if (strcmp (s, "ab") != 0)
129 return FAILED ("Join of two strings with no separator fails");
130 g_free (s);
132 s = g_strjoin ("", "a", "b", NULL);
133 if (strcmp (s, "ab") != 0)
134 return FAILED ("Join of two strings with empty separator fails");
135 g_free (s);
137 s = g_strjoin ("-", "a", "b", NULL);
138 if (strcmp (s, "a-b") != 0)
139 return FAILED ("Join of two strings with separator fails");
140 g_free (s);
142 s = g_strjoin ("-", "aaaa", "bbbb", "cccc", "dddd", NULL);
143 if (strcmp (s, "aaaa-bbbb-cccc-dddd") != 0)
144 return FAILED ("Join of multiple strings fails");
145 g_free (s);
147 s = g_strjoin ("-", NULL);
148 if (s == NULL || (strcmp (s, "") != 0))
149 return FAILED ("Failed to join empty arguments");
150 g_free (s);
152 return OK;
155 RESULT
156 test_strchug ()
158 char *str = g_strdup (" \t\n hola");
160 g_strchug (str);
161 if (strcmp ("hola", str)) {
162 fprintf (stderr, "%s\n", str);
163 g_free (str);
164 return FAILED ("Failed.");
166 g_free (str);
167 return OK;
170 RESULT
171 test_strchomp ()
173 char *str = g_strdup ("hola \t");
175 g_strchomp (str);
176 if (strcmp ("hola", str)) {
177 fprintf (stderr, "%s\n", str);
178 g_free (str);
179 return FAILED ("Failed.");
181 g_free (str);
182 return OK;
185 RESULT
186 test_strstrip ()
188 char *str = g_strdup (" \t hola ");
190 g_strstrip (str);
191 if (strcmp ("hola", str)) {
192 fprintf (stderr, "%s\n", str);
193 g_free (str);
194 return FAILED ("Failed.");
196 g_free (str);
197 return OK;
200 #define urit(so,j) do { s = g_filename_to_uri (so, NULL, NULL); if (strcmp (s, j) != 0) return FAILED("Got %s expected %s", s, j); g_free (s); } while (0);
202 #define errit(so) do { s = g_filename_to_uri (so, NULL, NULL); if (s != NULL) return FAILED ("got %s, expected NULL", s); } while (0);
204 RESULT
205 test_filename_to_uri ()
207 char *s;
209 urit ("/a", "file:///a");
210 urit ("/home/miguel", "file:///home/miguel");
211 urit ("/home/mig uel", "file:///home/mig%20uel");
212 urit ("/\303\241", "file:///%C3%A1");
213 urit ("/\303\241/octal", "file:///%C3%A1/octal");
214 urit ("/%", "file:///%25");
215 urit ("/\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040", "file:///%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20");
216 urit ("/!$&'()*+,-./", "file:///!$&'()*+,-./");
217 urit ("/\042\043\045", "file:///%22%23%25");
218 urit ("/0123456789:=", "file:///0123456789:=");
219 urit ("/\073\074\076\077", "file:///%3B%3C%3E%3F");
220 urit ("/\133\134\135\136_\140\173\174\175", "file:///%5B%5C%5D%5E_%60%7B%7C%7D");
221 urit ("/\173\174\175\176\177\200", "file:///%7B%7C%7D~%7F%80");
222 urit ("/@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "file:///@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
223 errit ("a");
224 errit ("./hola");
226 return OK;
229 #define fileit(so,j) do { s = g_filename_from_uri (so, NULL, NULL); if (strcmp (s, j) != 0) return FAILED("Got %s expected %s", s, j); g_free (s); } while (0);
231 #define ferrit(so) do { s = g_filename_from_uri (so, NULL, NULL); if (s != NULL) return FAILED ("got %s, expected NULL", s); } while (0);
233 RESULT
234 test_filename_from_uri ()
236 char *s;
238 fileit ("file:///a", "/a");
239 fileit ("file:///%41", "/A");
240 fileit ("file:///home/miguel", "/home/miguel");
241 fileit ("file:///home/mig%20uel", "/home/mig uel");
242 ferrit ("/a");
243 ferrit ("a");
244 ferrit ("file://a");
245 ferrit ("file:a");
246 ferrit ("file:///%");
247 ferrit ("file:///%0");
248 ferrit ("file:///%jj");
250 return OK;
253 RESULT
254 test_ascii_xdigit_value ()
256 int i;
258 i = g_ascii_xdigit_value ('9' + 1);
259 if (i != -1)
260 return FAILED ("'9' + 1");
261 i = g_ascii_xdigit_value ('0' - 1);
262 if (i != -1)
263 return FAILED ("'0' - 1");
264 i = g_ascii_xdigit_value ('a' - 1);
265 if (i != -1)
266 return FAILED ("'a' - 1");
267 i = g_ascii_xdigit_value ('f' + 1);
268 if (i != -1)
269 return FAILED ("'f' + 1");
270 i = g_ascii_xdigit_value ('A' - 1);
271 if (i != -1)
272 return FAILED ("'A' - 1");
273 i = g_ascii_xdigit_value ('F' + 1);
274 if (i != -1)
275 return FAILED ("'F' + 1");
277 for (i = '0'; i < '9'; i++) {
278 int c = g_ascii_xdigit_value (i);
279 if (c != (i - '0'))
280 return FAILED ("Digits %c -> %d", i, c);
282 for (i = 'a'; i < 'f'; i++) {
283 int c = g_ascii_xdigit_value (i);
284 if (c != (i - 'a' + 10))
285 return FAILED ("Lower %c -> %d", i, c);
287 for (i = 'A'; i < 'F'; i++) {
288 int c = g_ascii_xdigit_value (i);
289 if (c != (i - 'A' + 10))
290 return FAILED ("Upper %c -> %d", i, c);
292 return OK;
295 RESULT
296 test_strdelimit ()
298 gchar *str;
300 str = g_strdup (G_STR_DELIMITERS);
301 str = g_strdelimit (str, NULL, 'a');
302 if (0 != strcmp ("aaaaaaa", str))
303 return FAILED ("All delimiters: '%s'", str);
304 g_free (str);
305 str = g_strdup ("hola");
306 str = g_strdelimit (str, "ha", '+');
307 if (0 != strcmp ("+ol+", str))
308 return FAILED ("2 delimiters: '%s'", str);
309 g_free (str);
310 return OK;
313 #define TEXT "0123456789"
315 RESULT
316 test_strlcpy ()
318 const gchar *src = "onetwothree";
319 gchar *dest;
320 int i;
322 dest = g_malloc (strlen (src) + 1);
323 memset (dest, 0, strlen (src) + 1);
324 i = g_strlcpy (dest, src, -1);
325 if (i != strlen (src))
326 return FAILED ("Test1 got %d", i);
328 if (0 != strcmp (dest, src))
329 return FAILED ("Src and dest not equal");
331 i = g_strlcpy (dest, src, 3);
332 if (i != strlen (src))
333 return FAILED ("Test1 got %d", i);
334 if (0 != strcmp (dest, "on"))
335 return FAILED ("Test2");
337 i = g_strlcpy (dest, src, 1);
338 if (i != strlen (src))
339 return FAILED ("Test3 got %d", i);
340 if (*dest != '\0')
341 return FAILED ("Test4");
343 i = g_strlcpy (dest, src, 12345);
344 if (i != strlen (src))
345 return FAILED ("Test4 got %d", i);
346 if (0 != strcmp (dest, src))
347 return FAILED ("Src and dest not equal 2");
348 g_free (dest);
350 /* This is a test for g_filename_from_utf8, even if it does not look like it */
351 dest = g_filename_from_utf8 (TEXT, strlen (TEXT), NULL, NULL, NULL);
352 if (0 != strcmp (dest, TEXT))
353 return FAILED ("problem [%s] and [%s]", dest, TEXT);
354 g_free (dest);
356 return OK;
359 RESULT
360 test_strescape ()
362 gchar *str;
364 str = g_strescape ("abc", NULL);
365 if (strcmp ("abc", str))
366 return FAILED ("#1");
367 str = g_strescape ("\t\b\f\n\r\\\"abc", NULL);
368 if (strcmp ("\\t\\b\\f\\n\\r\\\\\\\"abc", str))
369 return FAILED ("#2 %s", str);
370 str = g_strescape ("\001abc", NULL);
371 if (strcmp ("\\001abc", str))
372 return FAILED ("#3 %s", str);
373 str = g_strescape ("\001abc", "\001");
374 if (strcmp ("\001abc", str))
375 return FAILED ("#3 %s", str);
376 return OK;
379 RESULT
380 test_ascii_strncasecmp ()
382 int n;
384 n = g_ascii_strncasecmp ("123", "123", 1);
385 if (n != 0)
386 return FAILED ("Should have been 0");
388 n = g_ascii_strncasecmp ("423", "123", 1);
389 if (n != 3)
390 return FAILED ("Should have been 3, got %d", n);
392 n = g_ascii_strncasecmp ("123", "423", 1);
393 if (n != -3)
394 return FAILED ("Should have been -3, got %d", n);
396 n = g_ascii_strncasecmp ("1", "1", 10);
397 if (n != 0)
398 return FAILED ("Should have been 0, got %d", n);
399 return OK;
402 static Test strutil_tests [] = {
403 {"g_strfreev", test_strfreev},
404 {"g_strconcat", test_concat},
405 {"g_strsplit", test_split},
406 {"g_strreverse", test_strreverse},
407 {"g_strjoin", test_strjoin},
408 {"g_strchug", test_strchug},
409 {"g_strchomp", test_strchomp},
410 {"g_strstrip", test_strstrip},
411 {"g_filename_to_uri", test_filename_to_uri},
412 {"g_filename_from_uri", test_filename_from_uri},
413 {"g_ascii_xdigit_value", test_ascii_xdigit_value},
414 {"g_strdelimit", test_strdelimit},
415 {"g_strlcpy", test_strlcpy},
416 {"g_strescape", test_strescape},
417 {"g_ascii_strncasecmp", test_ascii_strncasecmp },
418 {NULL, NULL}
421 DEFINE_TEST_GROUP_INIT(strutil_tests_init, strutil_tests)