1from PyObjCTools.TestSupport import *
2import array
3from CoreFoundation import *
4import CoreFoundation
5from Foundation import NSCFString
6
7
8class TestString (TestCase):
9    def testType(self):
10        self.failUnless(CFStringRef is NSCFString)
11
12    def testTypeID(self):
13        v = CFStringGetTypeID()
14        self.failUnless(isinstance(v, (int, long)))
15
16    def testNoPascalStrings(self):
17        self.failIf(hasattr(CoreFoundation, 'CFStringCreateWithPascalString'))
18        self.failIf(hasattr(CoreFoundation, 'CFStringCreateWithPascalStringNoCopy'))
19        self.failIf(hasattr(CoreFoundation, 'CFStringGetPascalString'))
20        self.failIf(hasattr(CoreFoundation, 'CFStringGetPascalStringPtr'))
21        self.failIf(hasattr(CoreFoundation, 'CFStringAppendPascalString'))
22
23    def testCreation(self):
24        s = CFStringCreateWithCString(None, "hello world", kCFStringEncodingASCII)
25        self.failUnless(isinstance(s, objc.pyobjc_unicode))
26        self.failUnless(isinstance(s, unicode))
27        self.assertEquals(s, u"hello world")
28
29        s = CFStringCreateWithBytes(None, "hello world", 5, kCFStringEncodingASCII, False)
30        self.failUnless(isinstance(s, objc.pyobjc_unicode))
31        self.failUnless(isinstance(s, unicode))
32        self.assertEquals(s, u"hello")
33
34        s = CFStringCreateWithCharacters(None, u"HELLO", 5)
35        self.failUnless(isinstance(s, objc.pyobjc_unicode))
36        self.failUnless(isinstance(s, unicode))
37        self.assertEquals(s, u"HELLO")
38
39        # NOTE: the deallocator must be kCFAllocatorNull
40        s = CFStringCreateWithCStringNoCopy(None, "hello world",
41                kCFStringEncodingASCII, kCFAllocatorNull)
42        self.failUnless(isinstance(s, objc.pyobjc_unicode))
43        self.failUnless(isinstance(s, unicode))
44        self.assertEquals(s, u"hello world")
45
46
47        s = CFStringCreateWithBytesNoCopy(None, "hello world", 5, kCFStringEncodingASCII, False, kCFAllocatorNull)
48        self.failUnless(isinstance(s, objc.pyobjc_unicode))
49        self.failUnless(isinstance(s, unicode))
50        self.assertEquals(s, u"hello")
51
52        s = CFStringCreateWithCharactersNoCopy(None, u"HELLO", 5, kCFAllocatorNull)
53        self.failUnless(isinstance(s, objc.pyobjc_unicode))
54        self.failUnless(isinstance(s, unicode))
55        self.assertEquals(s, u"HELLO")
56
57        del s
58
59        s = CFStringCreateWithSubstring(None,
60                u"Hello world", CFRange(2, 4))
61        self.failUnless(isinstance(s, objc.pyobjc_unicode))
62        self.assertEquals(s, u"Hello world"[2:6])
63
64        s = CFStringCreateCopy(None, u"foo the bar")
65        self.failUnless(isinstance(s, objc.pyobjc_unicode))
66        self.assertEquals(s, u"foo the bar")
67
68        s = CFStringCreateWithFormat(None, None, "hello %s = %d",
69                "foo", 52)
70        self.failUnless(isinstance(s, objc.pyobjc_unicode))
71        self.assertEquals(s, u"hello foo = 52")
72
73        self.failIf(hasattr(CoreFoundation,
74            "CFStringCreateWithFormatAndArguments"))
75
76    def testCreateMutable(self):
77        s = CFStringCreateMutable(None, 0)
78        self.failUnless(isinstance(s, objc.pyobjc_unicode))
79        self.assertEquals(s, u"")
80
81        s = CFStringCreateMutableCopy(None, 0, u"foobar")
82        self.failUnless(isinstance(s, objc.pyobjc_unicode))
83        self.assertEquals(s, u"foobar")
84
85        b = array.array('u', u"hello world")
86        s = CFStringCreateMutableWithExternalCharactersNoCopy(
87                None, b, len(b), len(b), kCFAllocatorNull)
88        self.failUnless(isinstance(s, objc.pyobjc_unicode))
89        self.assertEquals(s, u"hello world")
90
91        b[0] = u'H'
92
93
94        # The objc_unicode proxy is immutable
95        self.assertEquals(s, u"hello world")
96
97        # The changed string can be accessed directly though:
98        s = s.nsstring()
99        self.assertEquals(s, u"Hello world")
100
101        b2 = array.array('u', u" " * 40)
102        CFStringSetExternalCharactersNoCopy(s, b2, len(s), 40)
103        self.assertEquals(s, ' ' * len(b))
104        b2[0] = u'X'
105        self.assertEquals(s, 'X' + (' ' * (len(b)-1)))
106
107    def testFunctions(self):
108        v = CFStringGetLength(u"bla bla")
109        self.assertEquals(v, 7)
110
111        v = CFStringGetCharacterAtIndex(u"zing", 2)
112        self.failUnless(isinstance(v, unicode))
113        self.failIf(isinstance(v, objc.pyobjc_unicode))
114        self.assertEquals(v, u'n')
115
116        v = CFStringGetCharacters(u"foo", CFRange(0, 3), None)
117        self.failUnless(isinstance(v, unicode))
118        self.failIf(isinstance(v, objc.pyobjc_unicode))
119        self.assertEquals(v, u'foo')
120
121        ok, buf = CFStringGetCString(u"sing along", None, 100, kCFStringEncodingUTF8)
122        self.failUnless(ok)
123
124        # Annoyingly metadata cannot represent the exact interface
125        if '\0' in buf:
126            buf = buf[:buf.index('\0')]
127        self.assertEquals(buf, 'sing along')
128        self.failUnless(isinstance(buf, str))
129
130        s = CFStringGetCStringPtr(u"apenootjes", kCFStringEncodingASCII)
131        if s is not objc.NULL:
132            self.assertEquals(s, "apenootjes")
133            self.failUnless(isinstance(s, str))
134
135        s = CFStringGetCharactersPtr(u"apenootjes")
136        if s is not objc.NULL:
137            self.assertEquals(s, "apenootjes")
138            self.failUnless(isinstance(s, unicode))
139
140        idx, buf, used = CFStringGetBytes(u"apenootjes",
141                CFRange(1, 4), kCFStringEncodingASCII,
142                chr(0), True, None, 50, None)
143        self.assertEquals(idx, 4)
144        self.failUnless(isinstance(buf, str))
145        self.assertEquals(buf, 'peno')
146        self.assertEquals(used, 4)
147
148        s = CFStringCreateFromExternalRepresentation(None,
149                buffer('hello world'), kCFStringEncodingUTF8)
150        self.failUnless(isinstance(s, objc.pyobjc_unicode))
151        self.assertEquals(s, u"hello world")
152
153        data = CFStringCreateExternalRepresentation(None, s,
154                kCFStringEncodingUTF16BE, chr(0))
155        self.failUnless(isinstance(data, CFDataRef))
156        val = CFDataGetBytes(data, (0, CFDataGetLength(data)), None)
157        self.assertEquals(val,
158                '\0h\0e\0l\0l\0o\0 \0w\0o\0r\0l\0d')
159
160        v = CFStringGetSmallestEncoding(s)
161        self.failUnless(isinstance(v, (int, long)))
162        v = CFStringGetFastestEncoding(s)
163        self.failUnless(isinstance(v, (int, long)))
164        v = CFStringGetSystemEncoding()
165        self.failUnless(isinstance(v, (int, long)))
166        v = CFStringGetMaximumSizeForEncoding(100, kCFStringEncodingUTF8)
167        self.failUnless(isinstance(v, (int, long)))
168
169        ok, buf = CFStringGetFileSystemRepresentation(u"/path/to/nowhere.txt",
170                None, 100)
171        self.failUnless(ok)
172        if '\0' in buf:
173            buf = buf[:buf.index('\0')]
174        self.assertEquals(buf, '/path/to/nowhere.txt')
175        self.failUnless(isinstance(buf, str))
176
177        idx = CFStringGetMaximumSizeOfFileSystemRepresentation(u"/tmp")
178        self.failUnless(isinstance(idx, (int, long)))
179
180        s = CFStringCreateWithFileSystemRepresentation(None, "/tmp")
181        self.failUnless(isinstance(s, objc.pyobjc_unicode))
182        self.assertEquals(s, u"/tmp")
183        self.assertRaises((TypeError, ValueError),
184                CFStringCreateWithFileSystemRepresentation, None, u"/tmp")
185
186
187        r = CFStringCompareWithOptionsAndLocale(
188                u"aas", u"noot",
189                CFRange(0, 3),
190                kCFCompareBackwards, CFLocaleCopyCurrent())
191        self.assertEquals(r, kCFCompareLessThan)
192
193        r = CFStringCompareWithOptions(u"aap", u"noot", CFRange(0, 3), 0)
194        self.assertEquals(r, kCFCompareLessThan)
195
196        r = CFStringCompare(u"aap", u"AAP", kCFCompareCaseInsensitive)
197        self.assertEquals(r, kCFCompareEqualTo)
198
199        found, rng = CFStringFindWithOptionsAndLocale(
200                u"the longer string", u"longer",
201                CFRange(0, 17), 0, CFLocaleCopyCurrent(), None)
202        self.failUnless(found is True)
203        self.failUnless(isinstance(rng, CFRange))
204        self.assertEquals(rng, CFRange(4, 6))
205
206        found, rng = CFStringFindWithOptions(
207                u"the longer string", u"longer",
208                CFRange(0, 17), 0, None)
209        self.failUnless(found is True)
210        self.failUnless(isinstance(rng, CFRange))
211        self.assertEquals(rng, CFRange(4, 6))
212
213        arr = CFStringCreateArrayWithFindResults(
214                None, u"word a world a world",
215                u"world", CFRange(0, 20), 0)
216        self.failUnless(isinstance(arr, CFArrayRef))
217        self.assertEquals(len(arr), 2)
218
219        rng = CFStringFind("hello world", "world", 0)
220        self.assertEquals(rng, CFRange(6, 5))
221
222        ok = CFStringHasPrefix(u"hello", u"he")
223        self.failUnless(ok is True)
224        ok = CFStringHasPrefix(u"hello", u"ge")
225        self.failUnless(ok is False)
226
227        ok = CFStringHasSuffix(u"hello", "lo")
228        self.failUnless(ok is True)
229
230        rng = CFStringGetRangeOfComposedCharactersAtIndex(
231                u"hello world", 5)
232        self.failUnless(isinstance(rng, CFRange))
233
234        found, rng = CFStringFindCharacterFromSet("hello  world",
235                CFCharacterSetGetPredefined(kCFCharacterSetWhitespace),
236                CFRange(0, 12), 0, None)
237        self.failUnless(found is True)
238        self.failUnless(isinstance(rng, CFRange))
239
240        lineBeginIndex, lineEndIndex, contentsEndIndex = CFStringGetLineBounds(
241                u"hello\n\nworld", CFRange(0, 12), None, None, None)
242        self.assertEquals(lineBeginIndex, 0)
243        self.assertEquals(lineEndIndex, 12)
244        self.assertEquals(contentsEndIndex, 12)
245
246        paraBeginIndex, paraEndIndex, contentsEndIndex = CFStringGetParagraphBounds(
247                u"hello\n\nworld", CFRange(0, 12), None, None, None)
248        self.assertEquals(paraBeginIndex, 0)
249        self.assertEquals(paraEndIndex, 12)
250        self.assertEquals(contentsEndIndex, 12)
251
252        result = CFStringCreateByCombiningStrings(None,
253                [u"hello", u"world"], "//")
254        self.assertEquals(result, u"hello//world")
255
256        result = CFStringCreateArrayBySeparatingStrings(None,
257                "hello world", " ")
258        self.assertEquals(result, ["hello", "world"])
259
260        v = CFStringGetIntValue(u"1000")
261        self.assertEquals(v, 1000)
262
263        v = CFStringGetDoubleValue(u"1000")
264        self.assertEquals(v, 1000.0)
265
266        v = CFStringGetDoubleValue(u"1000.5")
267        self.assertEquals(v, 1000.5)
268
269    def testMutableFunctions(self):
270        s = CFStringCreateMutable(None, 0)
271        # Ensure that we actually see updates:
272        s = s.nsstring()
273
274        CFStringAppendCharacters(s, u"hel", 3)
275        self.assertEquals(s, u"hel")
276
277        CFStringAppendCString(s, "lo world", kCFStringEncodingUTF8)
278        self.assertEquals(s, u"hello world")
279
280        CFStringAppendFormat(s, None, ": %s = %d", "x", 99)
281        self.assertEquals(s, u"hello world: x = 99")
282
283        self.failIf(hasattr(CoreFoundation, 'CFStringAppendFormatAndArguments'))
284
285        CFStringInsert(s, 2, "--")
286        self.assertEquals(s, u"he--llo world: x = 99")
287
288        CFStringDelete(s, CFRange(0, 8))
289        self.assertEquals(s, u"world: x = 99")
290
291        CFStringReplace(s, CFRange(0, 4), "WOR")
292        self.assertEquals(s, u"WORd: x = 99")
293
294        CFStringReplaceAll(s, "WHOOPS")
295        self.assertEquals(s, u"WHOOPS")
296
297        CFStringReplaceAll(s, u"BLAblaBLAblaBLA")
298        self.assertEquals(s, u"BLAblaBLAblaBLA")
299
300        CFStringFindAndReplace(s, "BL", " fo ", CFRange(0, 15), 0)
301        self.assertEquals(s, " fo Abla fo Abla fo A")
302
303        CFStringReplaceAll(s, u"abc")
304        CFStringPad(s, " ", 9, 0)
305        self.assertEquals(s, u"abc      ")
306
307        CFStringReplaceAll(s, u"abc")
308        CFStringPad(s, ". ", 9, 1)
309        self.assertEquals(s, u"abc . . .")
310
311        CFStringReplaceAll(s, u"abcdef")
312        CFStringPad(s, ". ", 3, 0)
313        self.assertEquals(s, u"abc")
314
315        CFStringReplaceAll(s, u"aHelloaaa")
316        CFStringTrim(s, u'a')
317        self.assertEquals(s, u"Hello")
318
319        CFStringReplaceAll(s, u"* * * *abc * ")
320        CFStringTrim(s, u'* ')
321        self.assertEquals(s, u"*abc ")
322
323
324        CFStringReplaceAll(s, u" \tHello world  \t ")
325        CFStringTrimWhitespace(s)
326        self.assertEquals(s, u"Hello world")
327
328
329        CFStringReplaceAll(s, u"AbC")
330        CFStringLowercase(s, CFLocaleCopyCurrent())
331        self.assertEquals(s, u'abc')
332
333        CFStringReplaceAll(s, u"AbC")
334        CFStringUppercase(s, CFLocaleCopyCurrent())
335        self.assertEquals(s, u'ABC')
336
337        CFStringReplaceAll(s, u"hello world")
338        CFStringCapitalize(s, CFLocaleCopyCurrent())
339        self.assertEquals(s, u'Hello World')
340
341        CFStringNormalize(s, kCFStringNormalizationFormKD)
342        self.assertEquals(s, u'Hello World')
343
344        CFStringFold(s, kCFCompareCaseInsensitive, CFLocaleCopyCurrent())
345        self.assertEquals(s, u'hello world')
346
347        CFStringReplaceAll(s, u"A C")
348        ok, rng = CFStringTransform(s, CFRange(0, 3), kCFStringTransformToXMLHex,
349                                        False)
350        self.assertEquals(s, 'A C')
351        self.failUnless(ok is True)
352        self.assertEquals(rng, CFRange(0, 3))
353
354    def testStringEncoding(self):
355        ok = CFStringIsEncodingAvailable(kCFStringEncodingUTF8)
356        self.failUnless(ok is True)
357
358        encodings = CFStringGetListOfAvailableEncodings()
359        self.failUnless(isinstance(encodings, objc.varlist))
360        for e in encodings:
361            if e == kCFStringEncodingInvalidId:
362                break
363            self.failUnless(isinstance(e, (int, long)))
364
365        s = CFStringGetNameOfEncoding(kCFStringEncodingUTF8)
366        self.assertEquals(s, 'Unicode (UTF-8)')
367
368        v = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8)
369        self.failUnless(isinstance(v, (int, long)))
370
371        t = CFStringConvertNSStringEncodingToEncoding(v)
372        self.assertEquals(t, kCFStringEncodingUTF8)
373
374        v = CFStringConvertEncodingToWindowsCodepage(kCFStringEncodingISOLatin1)
375        self.failUnless(isinstance(v, (int, long)))
376
377        t = CFStringConvertWindowsCodepageToEncoding(v)
378        self.assertEquals(t, kCFStringEncodingISOLatin1)
379
380        v = CFStringConvertEncodingToIANACharSetName(kCFStringEncodingUTF8)
381        self.failUnless(isinstance(v, unicode))
382        self.assertEquals(v, 'UTF-8')
383
384        t = CFStringConvertIANACharSetNameToEncoding(v)
385        self.assertEquals(t, kCFStringEncodingUTF8)
386
387        v = CFStringGetMostCompatibleMacStringEncoding(kCFStringEncodingWindowsLatin1)
388        self.assertEquals(v, kCFStringEncodingMacRoman)
389
390
391
392
393
394
395
396
397
398
399    def testNoInlineBuffer(self):
400        self.failIf(hasattr(CoreFoundation, 'CFStringInlineBuffer'))
401        self.failIf(hasattr(CoreFoundation, 'CFStringInitInlineBuffer'))
402        self.failIf(hasattr(CoreFoundation, 'CFStringGetCharacterFromInlineBuffer'))
403
404
405    def testConstants(self):
406        self.failUnless(kCFStringEncodingInvalidId == 0xffffffff)
407        self.failUnless(kCFStringEncodingMacRoman == 0)
408        self.failUnless(kCFStringEncodingWindowsLatin1 == 0x0500)
409        self.failUnless(kCFStringEncodingISOLatin1 == 0x0201)
410        self.failUnless(kCFStringEncodingNextStepLatin == 0x0B01)
411        self.failUnless(kCFStringEncodingASCII == 0x0600)
412        self.failUnless(kCFStringEncodingUnicode == 0x0100)
413        self.failUnless(kCFStringEncodingUTF8 == 0x08000100)
414        self.failUnless(kCFStringEncodingNonLossyASCII == 0x0BFF)
415        self.failUnless(kCFStringEncodingUTF16 == 0x0100)
416        self.failUnless(kCFStringEncodingUTF16BE == 0x10000100)
417        self.failUnless(kCFStringEncodingUTF16LE == 0x14000100)
418        self.failUnless(kCFStringEncodingUTF32 == 0x0c000100)
419        self.failUnless(kCFStringEncodingUTF32BE == 0x18000100)
420        self.failUnless(kCFStringEncodingUTF32LE == 0x1c000100)
421
422        self.failUnless(kCFCompareCaseInsensitive == 1)
423        self.failUnless(kCFCompareBackwards == 4)
424        self.failUnless(kCFCompareAnchored == 8)
425        self.failUnless(kCFCompareNonliteral == 16)
426        self.failUnless(kCFCompareLocalized == 32)
427        self.failUnless(kCFCompareNumerically == 64)
428        self.failUnless(kCFCompareDiacriticInsensitive == 128)
429        self.failUnless(kCFCompareWidthInsensitive == 256)
430        self.failUnless(kCFCompareForcedOrdering == 512)
431
432        self.failUnless(kCFStringNormalizationFormD == 0)
433        self.failUnless(kCFStringNormalizationFormKD == 1)
434        self.failUnless(kCFStringNormalizationFormC == 2)
435        self.failUnless(kCFStringNormalizationFormKC == 3)
436
437
438        self.failUnless(isinstance(kCFStringTransformStripCombiningMarks, unicode))
439        self.failUnless(isinstance(kCFStringTransformToLatin, unicode))
440        self.failUnless(isinstance(kCFStringTransformFullwidthHalfwidth, unicode))
441        self.failUnless(isinstance(kCFStringTransformLatinKatakana, unicode))
442        self.failUnless(isinstance(kCFStringTransformLatinHiragana, unicode))
443        self.failUnless(isinstance(kCFStringTransformHiraganaKatakana, unicode))
444        self.failUnless(isinstance(kCFStringTransformMandarinLatin, unicode))
445        self.failUnless(isinstance(kCFStringTransformLatinHangul, unicode))
446        self.failUnless(isinstance(kCFStringTransformLatinArabic, unicode))
447        self.failUnless(isinstance(kCFStringTransformLatinHebrew, unicode))
448        self.failUnless(isinstance(kCFStringTransformLatinThai, unicode))
449        self.failUnless(isinstance(kCFStringTransformLatinCyrillic, unicode))
450        self.failUnless(isinstance(kCFStringTransformLatinGreek, unicode))
451        self.failUnless(isinstance(kCFStringTransformToXMLHex, unicode))
452        self.failUnless(isinstance(kCFStringTransformToUnicodeName, unicode))
453        self.failUnless(isinstance(kCFStringTransformStripDiacritics, unicode))
454
455
456    def testNoPrivate(self):
457        self.failIf(hasattr(CoreFoundation, 'CFShow'))
458        self.failIf(hasattr(CoreFoundation, 'CFShowStr'))
459        self.failIf(hasattr(CoreFoundation, '__CFStringMakeConstantString'))
460
461    def testCFSTR(self):
462        v = CFSTR(u"hello")
463        self.failUnless(isinstance(v, unicode))
464
465
466
467class TestStringEncodingExt (TestCase):
468    def testConstants(self):
469        self.failUnless( kCFStringEncodingMacJapanese == 1 )
470        self.failUnless( kCFStringEncodingMacChineseTrad == 2 )
471        self.failUnless( kCFStringEncodingMacKorean == 3 )
472        self.failUnless( kCFStringEncodingMacArabic == 4 )
473        self.failUnless( kCFStringEncodingMacHebrew == 5 )
474        self.failUnless( kCFStringEncodingMacGreek == 6 )
475        self.failUnless( kCFStringEncodingMacCyrillic == 7 )
476        self.failUnless( kCFStringEncodingMacDevanagari == 9 )
477        self.failUnless( kCFStringEncodingMacGurmukhi == 10 )
478        self.failUnless( kCFStringEncodingMacGujarati == 11 )
479        self.failUnless( kCFStringEncodingMacOriya == 12 )
480        self.failUnless( kCFStringEncodingMacBengali == 13 )
481        self.failUnless( kCFStringEncodingMacTamil == 14 )
482        self.failUnless( kCFStringEncodingMacTelugu == 15 )
483        self.failUnless( kCFStringEncodingMacKannada == 16 )
484        self.failUnless( kCFStringEncodingMacMalayalam == 17 )
485        self.failUnless( kCFStringEncodingMacSinhalese == 18 )
486        self.failUnless( kCFStringEncodingMacBurmese == 19 )
487        self.failUnless( kCFStringEncodingMacKhmer == 20 )
488        self.failUnless( kCFStringEncodingMacThai == 21 )
489        self.failUnless( kCFStringEncodingMacLaotian == 22 )
490        self.failUnless( kCFStringEncodingMacGeorgian == 23 )
491        self.failUnless( kCFStringEncodingMacArmenian == 24 )
492        self.failUnless( kCFStringEncodingMacChineseSimp == 25 )
493        self.failUnless( kCFStringEncodingMacTibetan == 26 )
494        self.failUnless( kCFStringEncodingMacMongolian == 27 )
495        self.failUnless( kCFStringEncodingMacEthiopic == 28 )
496        self.failUnless( kCFStringEncodingMacCentralEurRoman == 29 )
497        self.failUnless( kCFStringEncodingMacVietnamese == 30 )
498        self.failUnless( kCFStringEncodingMacExtArabic == 31 )
499        self.failUnless( kCFStringEncodingMacSymbol == 33 )
500        self.failUnless( kCFStringEncodingMacDingbats == 34 )
501        self.failUnless( kCFStringEncodingMacTurkish == 35 )
502        self.failUnless( kCFStringEncodingMacCroatian == 36 )
503        self.failUnless( kCFStringEncodingMacIcelandic == 37 )
504        self.failUnless( kCFStringEncodingMacRomanian == 38 )
505        self.failUnless( kCFStringEncodingMacCeltic == 39 )
506        self.failUnless( kCFStringEncodingMacGaelic == 40, )
507        self.failUnless( kCFStringEncodingMacFarsi == 0x8C )
508        self.failUnless( kCFStringEncodingMacUkrainian == 0x98 )
509        self.failUnless( kCFStringEncodingMacInuit == 0xEC )
510        self.failUnless( kCFStringEncodingMacVT100 == 0xFC )
511        self.failUnless( kCFStringEncodingMacHFS == 0xFF )
512        self.failUnless( kCFStringEncodingISOLatin2 == 0x0202 )
513        self.failUnless( kCFStringEncodingISOLatin3 == 0x0203 )
514        self.failUnless( kCFStringEncodingISOLatin4 == 0x0204 )
515        self.failUnless( kCFStringEncodingISOLatinCyrillic == 0x0205 )
516        self.failUnless( kCFStringEncodingISOLatinArabic == 0x0206 )
517        self.failUnless( kCFStringEncodingISOLatinGreek == 0x0207 )
518        self.failUnless( kCFStringEncodingISOLatinHebrew == 0x0208 )
519        self.failUnless( kCFStringEncodingISOLatin5 == 0x0209 )
520        self.failUnless( kCFStringEncodingISOLatin6 == 0x020A )
521        self.failUnless( kCFStringEncodingISOLatinThai == 0x020B )
522        self.failUnless( kCFStringEncodingISOLatin7 == 0x020D )
523        self.failUnless( kCFStringEncodingISOLatin8 == 0x020E )
524        self.failUnless( kCFStringEncodingISOLatin9 == 0x020F )
525        self.failUnless( kCFStringEncodingISOLatin10 == 0x0210 )
526        self.failUnless( kCFStringEncodingDOSLatinUS == 0x0400 )
527        self.failUnless( kCFStringEncodingDOSGreek == 0x0405 )
528        self.failUnless( kCFStringEncodingDOSBalticRim == 0x0406 )
529        self.failUnless( kCFStringEncodingDOSLatin1 == 0x0410 )
530        self.failUnless( kCFStringEncodingDOSGreek1 == 0x0411 )
531        self.failUnless( kCFStringEncodingDOSLatin2 == 0x0412 )
532        self.failUnless( kCFStringEncodingDOSCyrillic == 0x0413 )
533        self.failUnless( kCFStringEncodingDOSTurkish == 0x0414 )
534        self.failUnless( kCFStringEncodingDOSPortuguese == 0x0415 )
535        self.failUnless( kCFStringEncodingDOSIcelandic == 0x0416 )
536        self.failUnless( kCFStringEncodingDOSHebrew == 0x0417 )
537        self.failUnless( kCFStringEncodingDOSCanadianFrench == 0x0418 )
538        self.failUnless( kCFStringEncodingDOSArabic == 0x0419 )
539        self.failUnless( kCFStringEncodingDOSNordic == 0x041A )
540        self.failUnless( kCFStringEncodingDOSRussian == 0x041B )
541        self.failUnless( kCFStringEncodingDOSGreek2 == 0x041C )
542        self.failUnless( kCFStringEncodingDOSThai == 0x041D )
543        self.failUnless( kCFStringEncodingDOSJapanese == 0x0420 )
544        self.failUnless( kCFStringEncodingDOSChineseSimplif == 0x0421 )
545        self.failUnless( kCFStringEncodingDOSKorean == 0x0422 )
546        self.failUnless( kCFStringEncodingDOSChineseTrad == 0x0423 )
547        self.failUnless( kCFStringEncodingWindowsLatin2 == 0x0501 )
548        self.failUnless( kCFStringEncodingWindowsCyrillic == 0x0502 )
549        self.failUnless( kCFStringEncodingWindowsGreek == 0x0503 )
550        self.failUnless( kCFStringEncodingWindowsLatin5 == 0x0504 )
551        self.failUnless( kCFStringEncodingWindowsHebrew == 0x0505 )
552        self.failUnless( kCFStringEncodingWindowsArabic == 0x0506 )
553        self.failUnless( kCFStringEncodingWindowsBalticRim == 0x0507 )
554        self.failUnless( kCFStringEncodingWindowsVietnamese == 0x0508 )
555        self.failUnless( kCFStringEncodingWindowsKoreanJohab == 0x0510 )
556        self.failUnless( kCFStringEncodingANSEL == 0x0601 )
557        self.failUnless( kCFStringEncodingJIS_X0201_76 == 0x0620 )
558        self.failUnless( kCFStringEncodingJIS_X0208_83 == 0x0621 )
559        self.failUnless( kCFStringEncodingJIS_X0208_90 == 0x0622 )
560        self.failUnless( kCFStringEncodingJIS_X0212_90 == 0x0623 )
561        self.failUnless( kCFStringEncodingJIS_C6226_78 == 0x0624 )
562        self.failUnless( kCFStringEncodingShiftJIS_X0213 == 0x0628 )
563        self.failUnless( kCFStringEncodingShiftJIS_X0213_MenKuTen == 0x0629 )
564        self.failUnless( kCFStringEncodingGB_2312_80 == 0x0630 )
565        self.failUnless( kCFStringEncodingGBK_95 == 0x0631 )
566        self.failUnless( kCFStringEncodingGB_18030_2000 == 0x0632 )
567        self.failUnless( kCFStringEncodingKSC_5601_87 == 0x0640 )
568        self.failUnless( kCFStringEncodingKSC_5601_92_Johab == 0x0641 )
569        self.failUnless( kCFStringEncodingCNS_11643_92_P1 == 0x0651 )
570        self.failUnless( kCFStringEncodingCNS_11643_92_P2 == 0x0652 )
571        self.failUnless( kCFStringEncodingCNS_11643_92_P3 == 0x0653 )
572        self.failUnless( kCFStringEncodingISO_2022_JP == 0x0820 )
573        self.failUnless( kCFStringEncodingISO_2022_JP_2 == 0x0821 )
574        self.failUnless( kCFStringEncodingISO_2022_JP_1 == 0x0822 )
575        self.failUnless( kCFStringEncodingISO_2022_JP_3 == 0x0823 )
576        self.failUnless( kCFStringEncodingISO_2022_CN == 0x0830 )
577        self.failUnless( kCFStringEncodingISO_2022_CN_EXT == 0x0831 )
578        self.failUnless( kCFStringEncodingISO_2022_KR == 0x0840 )
579        self.failUnless( kCFStringEncodingEUC_JP == 0x0920 )
580        self.failUnless( kCFStringEncodingEUC_CN == 0x0930 )
581        self.failUnless( kCFStringEncodingEUC_TW == 0x0931 )
582        self.failUnless( kCFStringEncodingEUC_KR == 0x0940 )
583        self.failUnless( kCFStringEncodingShiftJIS == 0x0A01 )
584        self.failUnless( kCFStringEncodingKOI8_R == 0x0A02 )
585        self.failUnless( kCFStringEncodingBig5 == 0x0A03 )
586        self.failUnless( kCFStringEncodingMacRomanLatin1 == 0x0A04 )
587        self.failUnless( kCFStringEncodingHZ_GB_2312 == 0x0A05 )
588        self.failUnless( kCFStringEncodingBig5_HKSCS_1999 == 0x0A06 )
589        self.failUnless( kCFStringEncodingVISCII == 0x0A07 )
590        self.failUnless( kCFStringEncodingKOI8_U == 0x0A08 )
591        self.failUnless( kCFStringEncodingBig5_E == 0x0A09 )
592        self.failUnless( kCFStringEncodingNextStepJapanese == 0x0B02 )
593        self.failUnless( kCFStringEncodingEBCDIC_US == 0x0C01 )
594        self.failUnless( kCFStringEncodingEBCDIC_CP037 == 0x0C02 )
595        self.failUnless( kCFStringEncodingShiftJIS_X0213_00 == 0x0628 )
596
597if __name__ == "__main__":
598    main()
599