cleaned ICU case folding/mapping tests
[pazpar2-moved-to-github.git] / src / test_icu_I18N.c
1 /* $Id: test_icu_I18N.c,v 1.4 2007-05-01 08:10:26 marc Exp $
2    Copyright (c) 2006-2007, Index Data.
3
4 This file is part of Pazpar2.
5
6 Pazpar2 is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Pazpar2; see the file LICENSE.  If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.
20  */
21
22 // DO NOT EDIT THIS FILE IF YOUR EDITOR DOES NOT SUPPORT UTF-8
23  
24
25 #if HAVE_CONFIG_H
26 #include "cconfig.h"
27 #endif
28
29 #define USE_TIMING 0
30 #if USE_TIMING
31 #include <yaz/timing.h>
32 #endif
33
34 #include <yaz/test.h>
35
36
37
38 #ifdef HAVE_ICU
39 #include "icu_I18N.h"
40 #include "string.h"
41
42
43 // DO NOT EDIT THIS FILE IF YOUR EDITOR DOES NOT SUPPORT UTF-8
44
45 int test_icu_casemap(const char * locale, char action,
46                      const char * src8, const char * check8)
47 {
48     NMEM nmem = nmem_create();    
49     size_t buf_cap = 128;
50     char buf[buf_cap];
51     const char * dest8 = 0;
52     size_t dest8_len = 0;
53     //size_t src8_len = strlen(src8);
54     int sucess = 0;
55
56     //printf("original string:   '%s' (%d)\n", src8, (int) src8_len);
57
58     //these shall succeed
59     dest8 = icu_casemap(nmem, buf, buf_cap, &dest8_len,
60                         src8, locale, action);
61
62
63     //printf("icu_casemap '%s:%c' '%s' (%d)\n", 
64     //       locale, action, dest8, (int) dest8_len);
65
66     if (dest8 
67         && (dest8_len == strlen(check8))
68         && !strcmp(check8, dest8))
69         sucess = dest8_len;
70
71     nmem_destroy(nmem);
72
73     return sucess;
74 }
75
76 // DO NOT EDIT THIS FILE IF YOUR EDITOR DOES NOT SUPPORT UTF-8
77
78 void test_icu_I18N_casemap(int argc, char **argv)
79 {
80
81     // Locale 'en'
82
83     // sucessful tests
84     YAZ_CHECK(test_icu_casemap("en", 'l',
85                                "A ReD fOx hunTS sQUirriLs", 
86                                "a red fox hunts squirrils"));
87     
88     YAZ_CHECK(test_icu_casemap("en", 'u',
89                                "A ReD fOx hunTS sQUirriLs", 
90                                "A RED FOX HUNTS SQUIRRILS"));
91     
92     YAZ_CHECK(test_icu_casemap("en", 'f',
93                                "A ReD fOx hunTS sQUirriLs", 
94                                "a red fox hunts squirrils"));
95     
96     // this one fails and needs more investigation ..
97     YAZ_CHECK(0 == test_icu_casemap("en", 't',
98                                "A ReD fOx hunTS sQUirriLs", 
99                                "A Red Fox Hunts Squirrils"));
100
101
102     // Locale 'da'
103
104     // sucess expected    
105     YAZ_CHECK(test_icu_casemap("da", 'l',
106                                "åh ÆbLE, øs fLØde i Åen efter bLåBærGRødeN", 
107                                "åh æble, øs fløde i åen efter blåbærgrøden"));
108
109     YAZ_CHECK(test_icu_casemap("da", 'u',
110                                "åh ÆbLE, øs fLØde i Åen efter bLåBærGRødeN", 
111                                "ÅH ÆBLE, ØS FLØDE I ÅEN EFTER BLÅBÆRGRØDEN"));
112
113     YAZ_CHECK(test_icu_casemap("da", 'f',
114                                "åh ÆbLE, øs fLØde i Åen efter bLåBærGRødeN", 
115                                "åh æble, øs fløde i åen efter blåbærgrøden"));
116
117     YAZ_CHECK(test_icu_casemap("da", 't',
118                                "åh ÆbLE, øs fLØde i Åen efter bLåBærGRødeN", 
119                                "Åh Æble, Øs Fløde I Åen Efter Blåbærgrøden"));
120
121     // Locale 'de'
122
123     // sucess expected    
124     YAZ_CHECK(test_icu_casemap("de", 'l',
125                           "zWÖlf ärgerliche Würste rollen ÜBer die StRAße",
126                           "zwölf ärgerliche würste rollen über die straße"));
127
128     YAZ_CHECK(test_icu_casemap("de", 'u',
129                            "zWÖlf ärgerliche Würste rollen ÜBer die StRAße",
130                            "ZWÖLF ÄRGERLICHE WÜRSTE ROLLEN ÜBER DIE STRASSE"));
131
132     YAZ_CHECK(test_icu_casemap("de", 'f',
133                            "zWÖlf ärgerliche Würste rollen ÜBer die StRAße",
134                            "zwölf ärgerliche würste rollen über die strasse"));
135
136     YAZ_CHECK(test_icu_casemap("de", 't',
137                            "zWÖlf ärgerliche Würste rollen ÜBer die StRAße",
138                            "Zwölf Ärgerliche Würste Rollen Über Die Straße"));
139
140 }
141
142
143 void test_icu_I18N_casemap_failures(int argc, char **argv)
144 {
145
146     size_t buf_cap = 128;
147     char buf[buf_cap];
148     size_t dest8_len = 0;
149     NMEM nmem = nmem_create();
150     char * dest8 = 0;
151
152     const char * src8 =  "A ReD fOx hunTS sQUirriLs";
153     //size_t src8_len = strlen(src8);
154     
155     //printf("original string:   '%s' (%d)\n", src8, (int) src8_len);
156
157     // some calling error needs investigation
158     dest8 = icu_casemap(nmem, buf, buf_cap, &dest8_len,
159                         src8, "en", 't');
160     YAZ_CHECK(0 == dest8_len);
161     //printf("icu_casemap 'en:t' '%s' (%d)\n", dest8, (int) dest8_len);
162
163
164     // attention: does not fail even if no locale 'xy_zz' defined
165     // it seems to default to english locale
166     dest8 = icu_casemap(nmem, buf, buf_cap, &dest8_len,
167                         src8, "zz_abc", 'l');
168     YAZ_CHECK(dest8_len);
169     //printf("icu_casemap 'zz:l' '%s' (%d)\n", dest8, (int) dest8_len);
170
171
172     // shall fail - no buf buffer defined
173     dest8 = icu_casemap(nmem, 0, buf_cap, &dest8_len,
174                         src8, "en", 'l');
175     YAZ_CHECK(0 == dest8_len);
176     //printf("icu_casemap 'en:l' '%s' (%d)\n", dest8, (int) dest8_len);
177
178     // shall fail - no buf_cap  defined
179     dest8 = icu_casemap(nmem, buf, 0, &dest8_len,
180                         src8, "en", 'l');
181     YAZ_CHECK(0 == dest8_len);
182     //printf("icu_casemap 'en:l' '%s' (%d)\n", dest8, (int) dest8_len);
183
184     // shall fail - no action 'x' defined
185     dest8 = icu_casemap(nmem, buf, buf_cap, &dest8_len,
186                         src8, "en", 'x');
187     YAZ_CHECK(0 == dest8_len);
188     //printf("icu_casemap 'en:x' '%s' (%d)\n", dest8, (int) dest8_len);
189
190     nmem_destroy(nmem);
191 }
192
193 #endif    
194
195 // DO NOT EDIT THIS FILE IF YOUR EDITOR DOES NOT SUPPORT UTF-8
196
197 int main(int argc, char **argv)
198 {
199
200     YAZ_CHECK_INIT(argc, argv); 
201     YAZ_CHECK_LOG();
202
203 #ifdef HAVE_ICU
204
205     test_icu_I18N_casemap_failures(argc, argv);
206     test_icu_I18N_casemap(argc, argv);
207  
208 #else
209
210     printf("ICU unit tests omitted.\n"
211            "Please install libicu36-dev and icu-doc or similar\n");
212     YAZ_CHECK(0 == 0);
213
214 #endif    
215    
216     YAZ_CHECK_TERM;
217 }
218
219
220
221
222 /*
223  * Local variables:
224  * c-basic-offset: 4
225  * indent-tabs-mode: nil
226  * End:
227  * vim: shiftwidth=4 tabstop=8 expandtab
228  */