3
;;; Copyright (c) 2003-2009 uim Project http://code.google.com/p/uim/
5
;;; All rights reserved.
7
;;; Redistribution and use in source and binary forms, with or without
8
;;; modification, are permitted provided that the following conditions
10
;;; 1. Redistributions of source code must retain the above copyright
11
;;; notice, this list of conditions and the following disclaimer.
12
;;; 2. Redistributions in binary form must reproduce the above copyright
13
;;; notice, this list of conditions and the following disclaimer in the
14
;;; documentation and/or other materials provided with the distribution.
15
;;; 3. Neither the name of authors nor the names of its contributors
16
;;; may be used to endorse or promote products derived from this software
17
;;; without specific prior written permission.
19
;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
20
;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
;;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE
23
;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
;; These tests are passed at revision 5329 (new repository)
36
(require "test/uim-test-utils")
38
(define-uim-test-case "testcase i18n locale"
41
(assert-equal '("ja" "JP" "EUC-JP")
42
(uim '(locale-new "ja_JP.EUC-JP")))
43
;; codeset can be omitted
44
(assert-equal '("ja" "JP" "")
45
(uim '(locale-new "ja_JP")))
46
;; territory can also be omitted
47
(assert-equal '("ja" "" "")
48
(uim '(locale-new "ja")))
49
;; codeset without territory is a valid format
50
(assert-equal '("ja" "" "EUC-JP")
51
(uim '(locale-new "ja.EUC-JP")))
52
;; #f, "C" and "POSIX" is interpreted as "en" locale
53
(assert-equal '("en" "" "")
54
(uim '(locale-new #f)))
55
(assert-equal '("en" "" "")
56
(uim '(locale-new "C")))
57
(assert-equal '("en" "" "")
58
(uim '(locale-new "POSIX")))
59
;; invalid locale strings are rejected
60
(assert-equal '("" "" "")
61
(uim '(locale-new "d_DE")))
62
(assert-equal '("" "" "")
63
(uim '(locale-new "deu_DE")))
64
(assert-equal '("" "" "")
65
(uim '(locale-new "de_de_DE")))
66
(assert-equal '("" "" "")
67
(uim '(locale-new "de_D")))
68
(assert-equal '("" "" "")
69
(uim '(locale-new "de_DEU")))
70
(assert-equal '("" "" "")
71
(uim '(locale-new "de_de_DEU")))
72
(assert-equal '("" "" "")
73
(uim '(locale-new "_DE")))
74
(assert-equal '("" "" "")
75
(uim '(locale-new "_DE.")))
76
(assert-equal '("" "" "")
77
(uim '(locale-new "_DE.UTF-8")))
78
(assert-equal '("" "" "")
79
(uim '(locale-new "de_.UTF-8")))
80
(assert-equal '("" "" "")
81
(uim '(locale-new "_.UTF-8")))
82
(assert-equal '("" "" "")
83
(uim '(locale-new ".UTF-8"))))
85
;; empty locale is instructs to use the locale of native environment
86
("test locale-new native environment"
87
;; it fallbacks to "en" if neither LC_ALL nor LANG defined
88
(uim '(unsetenv "LC_ALL"))
89
(uim '(unsetenv "LANG"))
90
(assert-equal '("en" "" "")
91
(uim '(locale-new "")))
92
;; it looks both LC_ALL and LANG
93
(uim '(setenv "LC_ALL" "ja_JP.EUC-JP" #t))
94
(uim '(unsetenv "LANG"))
95
(assert-equal '("ja" "JP" "EUC-JP")
96
(uim '(locale-new "")))
97
(uim '(unsetenv "LC_ALL"))
98
(uim '(setenv "LANG" "ja_JP.EUC-JP" #t))
99
(assert-equal '("ja" "JP" "EUC-JP")
100
(uim '(locale-new "")))
101
;; LC_ALL precedes LANG
102
(uim '(setenv "LC_ALL" "de_DE.UTF-8" #t))
103
(uim '(setenv "LANG" "ja_JP.EUC-JP" #t))
104
(assert-equal '("de" "DE" "UTF-8")
105
(uim '(locale-new "")))
106
;; special locale name from the variables
107
(uim '(setenv "LC_ALL" "C" #t))
108
(uim '(unsetenv "LANG"))
109
(assert-equal '("en" "" "")
110
(uim '(locale-new "")))
111
(uim '(setenv "LC_ALL" "POSIX" #t))
112
(uim '(unsetenv "LANG"))
113
(assert-equal '("en" "" "")
114
(uim '(locale-new "")))
115
(uim '(unsetenv "LC_ALL"))
116
(uim '(setenv "LANG" "C" #t))
117
(assert-equal '("en" "" "")
118
(uim '(locale-new "")))
119
(uim '(unsetenv "LC_ALL"))
120
(uim '(setenv "LANG" "POSIX" #t))
121
(assert-equal '("en" "" "")
122
(uim '(locale-new ""))))
124
("test locale-set-lang!"
126
(uim '(locale-set-lang! (locale-new "en") "")))
129
(uim '(locale-set-lang! (locale-new "") "ja")))
131
(uim '(locale-set-lang! (locale-new "") "zh")))
133
(uim '(locale-set-lang! (locale-new "") "de")))
134
;; locale-set-lang! only accepts two-letter language codes
136
(uim '(locale-set-lang! (locale-new "") "jpn")))
138
(uim '(locale-set-lang! (locale-new "") "zh_CN")))
140
(uim '(locale-set-lang! (locale-new "") "d"))))
142
("test locale-set-territory!"
144
(uim '(locale-set-territory! (locale-new "en") "")))
147
(uim '(locale-set-territory! (locale-new "") "JP")))
149
(uim '(locale-set-territory! (locale-new "") "CN")))
151
(uim '(locale-set-territory! (locale-new "") "DE")))
152
;; locale-set-territory! only accepts two-letter country codes
154
(uim '(locale-set-territory! (locale-new "") "Japan")))
156
(uim '(locale-set-territory! (locale-new "") "zh_CN")))
158
(uim '(locale-set-territory! (locale-new "") "ger"))))
160
("test locale-lang-territory-str"
162
(uim '(locale-lang-territory-str (locale-new "invalid_IN."))))
163
(assert-equal "ja_JP"
164
(uim '(locale-lang-territory-str (locale-new "ja_JP.EUC-JP"))))
165
(assert-equal "ja_JP"
166
(uim '(locale-lang-territory-str (locale-new "ja_JP"))))
168
(uim '(locale-lang-territory-str (locale-new "ja"))))
170
(uim '(locale-lang-territory-str (locale-new "ja.EUC-JP"))))
171
(assert-equal "zh_CN"
172
(uim '(locale-lang-territory-str (locale-new "zh_CN.UTF-8"))))
173
(assert-equal "zh_CN"
174
(uim '(locale-lang-territory-str (locale-new "zh_CN"))))
176
(uim '(locale-lang-territory-str (locale-new "zh"))))
178
(uim '(locale-lang-territory-str (locale-new "zh.UTF-8")))))
182
(uim '(locale-str (locale-new "invalid_IN."))))
183
(assert-equal "ja_JP.EUC-JP"
184
(uim '(locale-str (locale-new "ja_JP.EUC-JP"))))
185
(assert-equal "ja_JP"
186
(uim '(locale-str (locale-new "ja_JP"))))
188
(uim '(locale-str (locale-new "ja"))))
189
(assert-equal "ja.EUC-JP"
190
(uim '(locale-str (locale-new "ja.EUC-JP"))))
191
(assert-equal "zh_CN.UTF-8"
192
(uim '(locale-str (locale-new "zh_CN.UTF-8"))))
193
(assert-equal "zh_CN"
194
(uim '(locale-str (locale-new "zh_CN"))))
196
(uim '(locale-str (locale-new "zh"))))
197
(assert-equal "zh.UTF-8"
198
(uim '(locale-str (locale-new "zh.UTF-8")))))
200
("test locale-zh-awared-lang"
202
(uim '(locale-zh-awared-lang (locale-new "invalid_IN."))))
204
(uim '(locale-zh-awared-lang (locale-new "ja_JP.EUC-JP"))))
206
(uim '(locale-zh-awared-lang (locale-new "ja_JP"))))
208
(uim '(locale-zh-awared-lang (locale-new "ja"))))
210
(uim '(locale-zh-awared-lang (locale-new "ja.EUC-JP"))))
212
(uim '(locale-zh-awared-lang (locale-new "en_US.UTF-8"))))
214
(uim '(locale-zh-awared-lang (locale-new "en_US"))))
216
(uim '(locale-zh-awared-lang (locale-new "en"))))
218
(uim '(locale-zh-awared-lang (locale-new "en.UTF-8"))))
219
;; returns "zh_XX" form if lang part is "zh"
220
(assert-equal "zh_CN"
221
(uim '(locale-zh-awared-lang (locale-new "zh_CN.UTF-8"))))
222
(assert-equal "zh_CN"
223
(uim '(locale-zh-awared-lang (locale-new "zh_CN"))))
225
(uim '(locale-zh-awared-lang (locale-new "zh"))))
227
(uim '(locale-zh-awared-lang (locale-new "zh.UTF-8"))))
228
(assert-equal "zh_TW"
229
(uim '(locale-zh-awared-lang (locale-new "zh_TW.UTF-8"))))
230
(assert-equal "zh_TW"
231
(uim '(locale-zh-awared-lang (locale-new "zh_TW"))))
233
(uim '(locale-zh-awared-lang (locale-new "zh"))))
235
(uim '(locale-zh-awared-lang (locale-new "zh.UTF-8"))))
236
(assert-equal "zh_HK"
237
(uim '(locale-zh-awared-lang (locale-new "zh_HK.UTF-8"))))
238
(assert-equal "zh_HK"
239
(uim '(locale-zh-awared-lang (locale-new "zh_HK"))))
241
(uim '(locale-zh-awared-lang (locale-new "zh"))))
243
(uim '(locale-zh-awared-lang (locale-new "zh.UTF-8")))))
245
("test langgroup-covers?"
247
(assert-true (uim-bool '(langgroup-covers? "ja" "ja")))
248
(assert-true (uim-bool '(langgroup-covers? "en" "en")))
249
(assert-true (uim-bool '(langgroup-covers? "de" "de")))
250
(assert-true (uim-bool '(langgroup-covers? "fr" "fr")))
251
(assert-true (uim-bool '(langgroup-covers? "zh" "zh")))
252
(assert-true (uim-bool '(langgroup-covers? "zh_CN" "zh_CN")))
253
(assert-true (uim-bool '(langgroup-covers? "zh_TW" "zh_TW")))
254
(assert-true (uim-bool '(langgroup-covers? "zh_HK" "zh_HK")))
255
(assert-false (uim-bool '(langgroup-covers? "de" "ja")))
256
(assert-false (uim-bool '(langgroup-covers? "de" "en")))
257
(assert-false (uim-bool '(langgroup-covers? "de" "fr")))
258
(assert-false (uim-bool '(langgroup-covers? "de" "zh")))
259
(assert-false (uim-bool '(langgroup-covers? "de" "zh_CN")))
260
(assert-false (uim-bool '(langgroup-covers? "de" "zh_TW")))
261
(assert-false (uim-bool '(langgroup-covers? "de" "zh_HK")))
263
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "ja")))
264
(assert-true (uim-bool '(langgroup-covers? "de:en:fr" "en")))
265
(assert-true (uim-bool '(langgroup-covers? "de:en:fr" "de")))
266
(assert-true (uim-bool '(langgroup-covers? "de:en:fr" "fr")))
267
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "zh")))
268
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "zh_CN")))
269
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "zh_TW")))
270
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "zh_HK")))
271
;; group expression is only allowed for first arg
272
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "de:en")))
273
(assert-false (uim-bool '(langgroup-covers? "de:en:fr" "de:en:fr")))
275
(assert-true (uim-bool '(langgroup-covers? "*" "ja")))
276
(assert-true (uim-bool '(langgroup-covers? "*" "en")))
277
(assert-true (uim-bool '(langgroup-covers? "*" "de")))
278
(assert-true (uim-bool '(langgroup-covers? "*" "fr")))
279
(assert-true (uim-bool '(langgroup-covers? "*" "zh")))
280
(assert-true (uim-bool '(langgroup-covers? "*" "zh_CN")))
281
(assert-true (uim-bool '(langgroup-covers? "*" "zh_TW")))
282
(assert-true (uim-bool '(langgroup-covers? "*" "zh_HK")))
283
;; wildcard is only allowed for first arg
284
(assert-false (uim-bool '(langgroup-covers? "en" "*")))
286
(assert-false (uim-bool '(langgroup-covers? "" "ja")))
287
(assert-false (uim-bool '(langgroup-covers? "" "en")))
288
(assert-false (uim-bool '(langgroup-covers? "" "de")))
289
(assert-false (uim-bool '(langgroup-covers? "" "fr")))
290
(assert-false (uim-bool '(langgroup-covers? "" "zh")))
291
(assert-false (uim-bool '(langgroup-covers? "" "zh_CN")))
292
(assert-false (uim-bool '(langgroup-covers? "" "zh_TW")))
293
(assert-false (uim-bool '(langgroup-covers? "" "zh_HK")))
294
(assert-false (uim-bool '(langgroup-covers? "" "*")))
295
(assert-false (uim-bool '(langgroup-covers? "" "")))
296
;; no special handling for Chinese
297
(assert-false (uim-bool '(langgroup-covers? "zh" "zh_CN")))
298
(assert-false (uim-bool '(langgroup-covers? "zh" "zh_TW")))
299
(assert-false (uim-bool '(langgroup-covers? "zh" "zh_HK")))
300
(assert-false (uim-bool '(langgroup-covers? "zh_CN" "zh")))
301
(assert-false (uim-bool '(langgroup-covers? "zh_TW" "zh")))
302
(assert-false (uim-bool '(langgroup-covers? "zh_HK" "zh")))
303
(assert-false (uim-bool '(langgroup-covers? "zh_CN" "zh_TW")))
304
(assert-false (uim-bool '(langgroup-covers? "zh_CN" "zh_HK")))
305
(assert-false (uim-bool '(langgroup-covers? "zh_HK" "zh_CN")))
306
(assert-false (uim-bool '(langgroup-covers? "zh_HK" "zh_TW")))
307
(assert-true (uim-bool '(langgroup-covers? "zh_TW:zh_HK" "zh_TW")))
308
(assert-true (uim-bool '(langgroup-covers? "zh_TW:zh_HK" "zh_HK")))
309
(assert-false (uim-bool '(langgroup-covers? "zh_TW:zh_HK" "zh_CN")))
310
(assert-false (uim-bool '(langgroup-covers? "zh_TW:zh_HK" "zh")))
311
(assert-false (uim-bool '(langgroup-covers? "zh_CN:zh_TW:zh_HK" "zh")))))
313
(define-uim-test-case "testcase i18n ISO 639-1 language code #1"
316
(sys-putenv "LC_ALL" "C")))
318
("test lang-code->lang-name in en locale"
319
(assert-equal "Japanese"
320
(uim '(lang-code->lang-name "ja")))
321
(assert-equal "English"
322
(uim '(lang-code->lang-name "en")))
323
(assert-equal "Chinese"
324
(uim '(lang-code->lang-name "zh")))))
326
;(define-uim-test-case "testcase i18n ISO 639-1 language code #2"
329
; (sys-putenv "LC_ALL" "ja_JP")))
331
; ("test lang-code->lang-name in ja_JP locale"
332
; (uim '(bind_textdomain_codeset "uim" "UTF-8"))
333
; (assert-equal "日本語"
334
; (uim '(lang-code->lang-name "ja")))
336
; (uim '(lang-code->lang-name "en")))
337
; (assert-equal "中国語"
338
; (uim '(lang-code->lang-name "zh")))))