EFL 1.7 svn doobies
[profile/ivi/efreet.git] / src / tests / ef_data_dirs.c
1 #include "Efreet.h"
2 #include <Ecore_File.h>
3 #include <stdio.h>
4 #include <string.h>
5 #include <stdlib.h>
6
7 int
8 ef_cb_efreet_data_home(void)
9 {
10     const char *tmp;
11     int ret = 1;
12
13     efreet_shutdown();
14     setenv("XDG_DATA_HOME", "/var/tmp", 1);
15     efreet_init();
16
17     tmp = efreet_data_home_get();
18     if (strcmp(tmp, "/var/tmp"))
19     {
20         printf("efreet_data_home_get() returned incorrect "
21                 "value (%s) on XDG_DATA_HOME=/var/tmp\n", tmp);
22         ret = 0;
23     }
24
25     /* reset efreet here so we can set a new home dir */
26     efreet_shutdown();
27     unsetenv("XDG_DATA_HOME");
28     setenv("HOME", "/home/tmp", 1);
29     efreet_init();
30
31     tmp = efreet_data_home_get();
32     if (strcmp(tmp, "/home/tmp/.local/share"))
33     {
34         printf("efreet_data_home_get() returned incorrect "
35                 "value (%s) on blank XDG_DATA_HOME\n", tmp);
36         ret = 0;
37     }
38
39     /* reset efreet here so we can set a new home dir */
40     efreet_shutdown();
41     unsetenv("XDG_DATA_HOME");
42     unsetenv("HOME");
43 #ifdef _WIN32
44     unsetenv("USERPROFILE");
45 #endif
46     efreet_init();
47
48     tmp = efreet_data_home_get();
49     if (strcmp(tmp, "/tmp/.local/share"))
50     {
51         printf("efreet_data_home_get() returned incorrect "
52                 "value (%s) on blank XDG_DATA_HOME and blank HOME\n", tmp);
53         ret = 0;
54     }
55
56     return ret;
57 }
58
59 int
60 ef_cb_efreet_config_home(void)
61 {
62     const char *tmp;
63     int ret = 1;
64
65     efreet_shutdown();
66     setenv("XDG_CONFIG_HOME", "/var/tmp", 1);
67     efreet_init();
68
69     tmp = efreet_config_home_get();
70     if (strcmp(tmp, "/var/tmp"))
71     {
72         printf("efreet_config_home_get() returned incorrect "
73                 "value (%s) on XDG_CONFIG_HOME=/var/tmp\n", tmp);
74         ret = 0;
75     }
76
77     /* reset efreet here so we can set a new home dir */
78     efreet_shutdown();
79     unsetenv("XDG_CONFIG_HOME");
80     setenv("HOME", "/home/tmp", 1);
81     efreet_init();
82
83     tmp = efreet_config_home_get();
84     if (strcmp(tmp, "/home/tmp/.config"))
85     {
86         printf("efreet_config_home_get() returned incorrect "
87                 "value (%s) on blank XDG_CONFIG_HOME\n", tmp);
88         ret = 0;
89     }
90
91     /* reset efreet here so we can set a new home dir */
92     efreet_shutdown();
93     unsetenv("XDG_CONFIG_HOME");
94     unsetenv("HOME");
95 #ifdef _WIN32
96     unsetenv("USERPROFILE");
97 #endif
98     efreet_init();
99
100     tmp = efreet_config_home_get();
101     if (strcmp(tmp, "/tmp/.config"))
102     {
103         printf("efreet_config_home_get() returned incorrect "
104                 "value (%s) on blank XDG_CONFIG_HOME and blank HOME\n", tmp);
105         ret = 0;
106     }
107
108     return ret;
109 }
110
111 int
112 ef_cb_efreet_cache_home(void)
113 {
114     const char *tmp;
115     int ret = 1;
116
117     efreet_shutdown();
118     setenv("XDG_CACHE_HOME", "/var/tmp", 1);
119     efreet_init();
120
121     tmp = efreet_cache_home_get();
122     if (strcmp(tmp, "/var/tmp"))
123     {
124         printf("efreet_cache_home_get() returned incorrect "
125                 "value (%s) on XDG_CACHE_HOME=/var/tmp\n", tmp);
126         ret = 0;
127     }
128
129     /* reset efreet here so we can set a new home dir */
130     efreet_shutdown();
131     unsetenv("XDG_CACHE_HOME");
132     setenv("HOME", "/home/tmp", 1);
133     efreet_init();
134
135     tmp = efreet_cache_home_get();
136     if (strcmp(tmp, "/home/tmp/.cache"))
137     {
138         printf("efreet_cache_home_get() returned incorrect "
139                 "value (%s) on blank XDG_CACHE_HOME\n", tmp);
140         ret = 0;
141     }
142
143     /* reset efreet here so we can set a new home dir */
144     efreet_shutdown();
145     unsetenv("XDG_CACHE_HOME");
146     unsetenv("HOME");
147 #ifdef _WIN32
148     unsetenv("USERPROFILE");
149 #endif
150     efreet_init();
151
152     tmp = efreet_cache_home_get();
153     if (strcmp(tmp, "/tmp/.cache"))
154     {
155         printf("efreet_cache_home_get() returned incorrect "
156                 "value (%s) on blank XDG_CACHE_HOME and blank HOME\n", tmp);
157         ret = 0;
158     }
159
160     return ret;
161 }
162
163 int
164 ef_cb_efreet_data_dirs(void)
165 {
166     Eina_List *tmp, *l;
167     int ret = 1;
168     unsigned int i;
169     unsigned int ok;
170     char dirs[128], *val;
171     char *vals[] = {"/var/tmp/a", "/tmp/b", "/usr/local/share", "/etc", NULL};
172     char *def_vals[] = {PACKAGE_DATA_DIR, "/usr/share", "/usr/local/share", NULL};
173
174     dirs[0] = '\0';
175     for (i = 0; vals[i]; i++)
176     {
177         if (i > 0) strcat(dirs, ":");
178         strcat(dirs, vals[i]);
179     }
180
181     efreet_shutdown();
182     setenv("XDG_DATA_DIRS", dirs, 1);
183     efreet_init();
184
185     ok = 0;
186     tmp = efreet_data_dirs_get();
187     for (i = 0; vals[i]; i++)
188     {
189         char *found;
190
191         found = eina_list_search_unsorted(tmp, EINA_COMPARE_CB(strcmp), vals[i]);
192         if (!ecore_file_exists(vals[i]) && found)
193         {
194             printf("efreet_data_dirs_get() includes non-existing dir (%s) when "
195                    "%s set\n", vals[i], dirs);
196             ret = 0;
197             continue;
198         }
199         if (ecore_file_exists(vals[i]) && !found)
200         {
201             printf("efreet_data_dirs_get() is missing dir (%s) when "
202                    "%s set\n", vals[i], dirs);
203             ret = 0;
204             continue;
205         }
206         if (ecore_file_exists(vals[i]) && found)
207             ok++;
208     }
209     if (eina_list_count(tmp) != ok)
210     {
211         printf("efreet_data_dirs_get() returned more values then it "
212                "should have given %s as input\n", dirs);
213         ret = 0;
214     }
215
216     efreet_shutdown();
217     unsetenv("XDG_DATA_DIRS");
218     efreet_init();
219
220     i = 0;
221     tmp = efreet_data_dirs_get();
222     if (eina_list_count(tmp) != 3)
223     {
224         printf("efreet_data_dirs_get() nodes is differnet from expected default\n");
225         ret = 0;
226     }
227
228     EINA_LIST_FOREACH(tmp, l, val)
229     {
230         if (!def_vals[i])
231         {
232             printf("efreet_data_dirs_get() returned more values then it "
233                     "should have given %s as input\n", dirs);
234             ret = 0;
235             break;
236         }
237
238         if (strcmp(val, def_vals[i]))
239         {
240             printf("efreet_data_dirs_get() returned incorrect value (%s) when "
241                     "XDG_DATA_DIRS= is set %s\n", val, def_vals[i]);
242             ret = 0;
243         }
244
245         i++;
246     }
247     return ret;
248 }
249
250 int
251 ef_cb_efreet_config_dirs(void)
252 {
253     Eina_List *tmp, *l;
254     int ret = 1;
255     unsigned int i;
256     unsigned int ok;
257     char dirs[128], *val;
258     char *vals[] = {"/var/tmp/a", "/tmp/b", "/usr/local/share", "/etc", NULL};
259     char *def_vals[] = {"/etc/xdg", NULL};
260
261     dirs[0] = '\0';
262
263     for (i = 0; vals[i]; i++)
264     {
265         if (i > 0) strcat(dirs, ":");
266         strcat(dirs, vals[i]);
267     }
268
269     efreet_shutdown();
270     setenv("XDG_CONFIG_DIRS", dirs, 1);
271     efreet_init();
272
273     ok = 0;
274     tmp = efreet_config_dirs_get();
275     for (i = 0; vals[i]; i++)
276     {
277         char *found;
278
279         found = eina_list_search_unsorted(tmp, EINA_COMPARE_CB(strcmp), vals[i]);
280         if (!ecore_file_exists(vals[i]) && found)
281         {
282             printf("efreet_data_dirs_get() includes non-existing dir (%s) when "
283                    "%s set\n", vals[i], dirs);
284             ret = 0;
285             continue;
286         }
287         if (ecore_file_exists(vals[i]) && !found)
288         {
289             printf("efreet_data_dirs_get() is missing dir (%s) when "
290                    "%s set\n", vals[i], dirs);
291             ret = 0;
292             continue;
293         }
294         if (ecore_file_exists(vals[i]) && found)
295             ok++;
296     }
297     if (eina_list_count(tmp) != ok)
298     {
299         printf("efreet_data_dirs_get() returned more values then it "
300                "should have given %s as input\n", dirs);
301         ret = 0;
302     }
303
304     efreet_shutdown();
305     unsetenv("XDG_CONFIG_DIRS");
306     efreet_init();
307
308     i = 0;
309     tmp = efreet_config_dirs_get();
310     EINA_LIST_FOREACH(tmp, l, val)
311     {
312         if (!def_vals[i])
313         {
314             printf("efreet_config_dirs_get() returned more values then it "
315                     "should have given %s as input\n", dirs);
316             ret = 0;
317             break;
318         }
319
320         if (strcmp(val, def_vals[i]))
321         {
322             printf("efreet_config_dirs_get() returned incorrect value (%s) when "
323                     "XDG_CONFIG_DIRS= is set\n", val);
324             ret = 0;
325         }
326
327         i++;
328     }
329     return ret;
330 }