New test.
[mono.git] / eglib / test / string-util.c
1 #include <glib.h>
2 #include <string.h>
3 #include <stdio.h>
4 #include "test.h"
5
6 /* This test is just to be used with valgrind */
7 RESULT
8 test_strfreev ()
9 {
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;
15         
16         g_strfreev (array);
17         g_strfreev (NULL);
18
19         return OK;
20 }
21
22 RESULT
23 test_concat ()
24 {
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;
30 }
31
32 RESULT
33 test_split ()
34 {
35         const gchar *to_split = "Hello world, how are we doing today?";
36         gint i;
37         gchar **v;
38         
39         v= g_strsplit(to_split, " ", 0);
40         
41         if(v == NULL) {
42                 return FAILED("split failed, got NULL vector (1)");
43         }
44         
45         for(i = 0; v[i] != NULL; i++);
46         if(i != 7) {
47                 return FAILED("split failed, expected 7 tokens, got %d", i);
48         }
49         
50         g_strfreev(v);
51
52         v = g_strsplit(to_split, ":", -1);
53         if(v == NULL) {
54                 return FAILED("split failed, got NULL vector (2)");
55         }
56
57         for(i = 0; v[i] != NULL; i++);
58         if(i != 1) {
59                 return FAILED("split failed, expected 1 token, got %d", i);
60         }
61
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]);
65         }
66         g_strfreev(v);
67         
68         return OK;
69 }
70
71 RESULT
72 test_strreverse ()
73 {
74         gchar *a = g_strdup ("onetwothree");
75         gchar *a_target = "eerhtowteno";
76         gchar *b = g_strdup ("onetwothre");
77         gchar *b_target = "erhtowteno";
78
79         g_strreverse (a);
80         if (strcmp (a, a_target)) {
81                 g_free (b);
82                 g_free (a);
83                 return FAILED("strreverse failed. Expecting: '%s' and got '%s'\n", a, a_target);
84         }
85
86         g_strreverse (b);
87         if (strcmp (b, b_target)) {
88                 g_free (b);
89                 g_free (a);
90                 return FAILED("strreverse failed. Expecting: '%s' and got '%s'\n", b, b_target);
91         }
92         g_free (b);
93         g_free (a);
94         return OK;
95 }
96
97 RESULT
98 test_strjoin ()
99 {
100         char *s;
101         
102         s = g_strjoin (NULL, "a", "b", NULL);
103         if (strcmp (s, "ab") != 0)
104                 return FAILED ("Join of two strings with no separator fails");
105         g_free (s);
106
107         s = g_strjoin ("", "a", "b", NULL);
108         if (strcmp (s, "ab") != 0)
109                 return FAILED ("Join of two strings with empty separator fails");
110         g_free (s);
111
112         s = g_strjoin ("-", "a", "b", NULL);
113         if (strcmp (s, "a-b") != 0)
114                 return FAILED ("Join of two strings with separator fails");
115         g_free (s);
116
117         s = g_strjoin ("-", "aaaa", "bbbb", "cccc", "dddd", NULL);
118         if (strcmp (s, "aaaa-bbbb-cccc-dddd") != 0)
119                 return FAILED ("Join of multiple strings fails");
120         g_free (s);
121
122         s = g_strjoin ("-", NULL);
123         if (s == NULL || (strcmp (s, "") != 0))
124                 return FAILED ("Failed to join empty arguments");
125         g_free (s);
126
127         return OK;
128 }
129
130 RESULT
131 test_strchug ()
132 {
133         char *str = g_strdup (" \t\n hola");
134
135         g_strchug (str);
136         if (strcmp ("hola", str)) {
137                 fprintf (stderr, "%s\n", str);
138                 g_free (str);
139                 return FAILED ("Failed.");
140         }
141         g_free (str);
142         return OK;
143 }
144
145 RESULT
146 test_strchomp ()
147 {
148         char *str = g_strdup ("hola  \t");
149
150         g_strchomp (str);
151         if (strcmp ("hola", str)) {
152                 fprintf (stderr, "%s\n", str);
153                 g_free (str);
154                 return FAILED ("Failed.");
155         }
156         g_free (str);
157         return OK;
158 }
159
160 RESULT
161 test_strstrip ()
162 {
163         char *str = g_strdup (" \t hola   ");
164
165         g_strstrip (str);
166         if (strcmp ("hola", str)) {
167                 fprintf (stderr, "%s\n", str);
168                 g_free (str);
169                 return FAILED ("Failed.");
170         }
171         g_free (str);
172         return OK;
173 }
174
175 #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);
176
177 #define errit(so) do { s = g_filename_to_uri (so, NULL, NULL); if (s != NULL) return FAILED ("got %s, expected NULL", s); } while (0);
178
179 RESULT
180 test_filename_to_uri ()
181 {
182         char *s;
183
184         urit ("/a", "file:///a");
185         urit ("/home/miguel", "file:///home/miguel");
186         urit ("/home/mig uel", "file:///home/mig%20uel");
187         urit ("/\303\241", "file:///%C3%A1");
188         urit ("/\303\241/octal", "file:///%C3%A1/octal");
189         urit ("/%", "file:///%25");
190         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");
191         urit ("/!$&'()*+,-./", "file:///!$&'()*+,-./");
192         urit ("/\042\043\045", "file:///%22%23%25");
193         urit ("/0123456789:=", "file:///0123456789:=");
194         urit ("/\073\074\076\077", "file:///%3B%3C%3E%3F");
195         urit ("/\133\134\135\136_\140\173\174\175", "file:///%5B%5C%5D%5E_%60%7B%7C%7D");
196         urit ("/\173\174\175\176\177\200", "file:///%7B%7C%7D~%7F%80");
197         urit ("/@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "file:///@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
198         errit ("a");
199         errit ("./hola");
200         
201         return OK;
202 }
203
204 #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);
205
206 #define ferrit(so) do { s = g_filename_from_uri (so, NULL, NULL); if (s != NULL) return FAILED ("got %s, expected NULL", s); } while (0);
207
208 RESULT
209 test_filename_from_uri ()
210 {
211         char *s;
212
213         fileit ("file:///a", "/a");
214         fileit ("file:///%41", "/A");
215         fileit ("file:///home/miguel", "/home/miguel");
216         fileit ("file:///home/mig%20uel", "/home/mig uel");
217         ferrit ("/a");
218         ferrit ("a");
219         ferrit ("file://a");
220         ferrit ("file:a");
221         ferrit ("file:///%");
222         ferrit ("file:///%0");
223         ferrit ("file:///%jj");
224         
225         return OK;
226 }
227
228 static Test strutil_tests [] = {
229         {"g_strfreev", test_strfreev},
230         {"g_strconcat", test_concat},
231         {"g_strsplit", test_split},
232         {"g_strreverse", test_strreverse},
233         {"g_strjoin", test_strjoin},
234         {"g_strchug", test_strchug},
235         {"g_strchomp", test_strchomp},
236         {"g_strstrip", test_strstrip},
237         {"g_filename_to_uri", test_filename_to_uri},
238         {"g_filename_from_uri", test_filename_from_uri},
239         {NULL, NULL}
240 };
241
242 DEFINE_TEST_GROUP_INIT(strutil_tests_init, strutil_tests)
243