EFL 1.7 svn doobies
[profile/ivi/efreet.git] / src / tests / ef_locale.c
1 #include "Efreet.h"
2 #include "efreet_private.h"
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <string.h>
6
7 int
8 ef_cb_locale(void)
9 {
10     int ret = 1, i;
11     struct
12     {
13         char *lc_message;
14         char *lang;
15         char *country;
16         char *modifier;
17     } langs[] = {
18         /* these are ordered such that when we move from LANG to LC_MESSAGES
19          * the LANG env will still be effect. Same with moving from
20          * LC_MESSAGES to LANG */
21         {"LANG=", NULL, NULL, NULL},
22         {"LANG=en", "en", NULL, NULL},
23         {"LANG=en@Latn", "en", NULL, "Latn"},
24         {"LANG=en_US", "en", "US", NULL},
25         {"LANG=en_US@Latn", "en", "US", "Latn"},
26         {"LANG=en_US.blah@Latn", "en", "US", "Latn"},
27         {"LC_MESSAGES=", "en", "US", "Latn"}, /* This will fallback to LANG */
28         {"LC_MESSAGES=fr", "fr", NULL, NULL},
29         {"LC_MESSAGES=fr@Blah", "fr", NULL, "Blah"},
30         {"LC_MESSAGES=fr_FR", "fr", "FR", NULL},
31         {"LC_MESSAGES=fr_FR@Blah", "fr", "FR", "Blah"},
32         {"LC_MESSAGES=fr_FR.Foo@Blah", "fr", "FR", "Blah"},
33         {"LC_ALL=", "fr", "FR", "Blah"}, /* this will fallback to LC_MESSAGES */
34         {"LC_ALL=sr", "sr", NULL, NULL},
35         {"LC_ALL=sr@Ret", "sr", NULL, "Ret"},
36         {"LC_ALL=sr_YU", "sr", "YU", NULL},
37         {"LC_ALL=sr_YU@Ret", "sr", "YU", "Ret"},
38         {"LC_ALL=sr_YU.ssh@Ret", "sr", "YU", "Ret"},
39         {NULL, NULL, NULL, NULL}
40     };
41
42     /* reset everything to blank */
43     putenv("LC_ALL=");
44     putenv("LC_MESSAGES=");
45     putenv("LANG=");
46
47     for (i = 0; langs[i].lc_message; i++)
48     {
49         const char *tmp;
50
51         putenv(langs[i].lc_message);
52
53         tmp = efreet_lang_get();
54         if ((langs[i].lang && (!tmp || strcmp(tmp, langs[i].lang)))
55                 || (!langs[i].lang && tmp))
56         {
57             printf("efreet_lang_get() is wrong (%s) with %s\n",
58                                             tmp, langs[i].lang);
59             ret = 0;
60         }
61
62         tmp = efreet_lang_country_get();
63         if ((langs[i].country && (!tmp || strcmp(tmp, langs[i].country)))
64                 || (!langs[i].country && tmp))
65         {
66             printf("efreet_lang_country_get() is wrong (%s) with %s\n",
67                                                 tmp, langs[i].lang);
68             ret = 0;
69         }
70
71         tmp = efreet_lang_modifier_get();
72         if ((langs[i].modifier && (!tmp || strcmp(tmp, langs[i].modifier)))
73                 || (!langs[i].modifier && tmp))
74         {
75             printf("efreet_lang_modifier_get() is wrong with %s with %s\n",
76                                                 tmp, langs[i].lang);
77             ret = 0;
78         }
79
80         efreet_shutdown();
81         efreet_init();
82     }
83
84     return ret;
85 }