1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4
5class TestStringTokenizer (TestCase):
6    def testTypes(self):
7        self.failUnlessIsCFType(CFStringTokenizerRef)
8
9    def testFunctions(self):
10        s = u"Spring eens over een boom"
11        v = CFStringTokenizerCopyBestStringLanguage(s, (0, len(s)))
12        self.assertEquals(v, 'nl')
13
14        v = CFStringTokenizerGetTypeID()
15        self.failUnless(isinstance(v, (int, long)))
16
17        self.failUnlessResultIsCFRetained(CFStringTokenizerCreate)
18        tok = CFStringTokenizerCreate(
19                None, s, (0, len(s)), kCFStringTokenizerUnitWord,
20                CFLocaleCopyCurrent())
21        self.failUnless(isinstance(tok, CFStringTokenizerRef))
22
23        v = CFStringTokenizerGoToTokenAtIndex(tok, 2)
24        self.assertEquals(v, kCFStringTokenizerTokenNormal)
25
26        v = CFStringTokenizerGetCurrentTokenRange(tok)
27        self.assertEquals(v, CFRange(0, 6))
28
29        v = CFStringTokenizerAdvanceToNextToken(tok)
30        self.assertEquals(v, kCFStringTokenizerTokenNormal)
31
32        v = CFStringTokenizerGetCurrentTokenRange(tok)
33        self.assertEquals(v, CFRange(7, 4))
34
35        self.failUnlessResultIsCFRetained(CFStringTokenizerCopyCurrentTokenAttribute)
36        v = CFStringTokenizerCopyCurrentTokenAttribute(tok, kCFStringTokenizerAttributeLanguage)
37        self.failUnless(v is None)
38
39
40        s = u"A dog jumped over a log. And then some more."
41        CFStringTokenizerSetString(tok, s, (0, len(s)))
42
43        subref = []
44        idx, ranges = CFStringTokenizerGetCurrentSubTokens(tok, None, 20, subref)
45        self.assertEquals(idx, 0)
46        self.assertEquals(ranges, ())
47        self.assertEquals(subref, [])
48
49
50
51    def testConstants(self):
52
53        self.failUnless( kCFStringTokenizerUnitWord                           == 0 )
54        self.failUnless( kCFStringTokenizerUnitSentence                       == 1 )
55        self.failUnless( kCFStringTokenizerUnitParagraph                      == 2 )
56        self.failUnless( kCFStringTokenizerUnitLineBreak                      == 3 )
57        self.failUnless( kCFStringTokenizerUnitWordBoundary                   == 4 )
58        self.failUnless( kCFStringTokenizerAttributeLatinTranscription        == 1L << 16 )
59        self.failUnless( kCFStringTokenizerAttributeLanguage                  == 1L << 17 )
60
61        self.failUnless( kCFStringTokenizerTokenNone                          == 0 )
62        self.failUnless( kCFStringTokenizerTokenNormal                        == 1 )
63        self.failUnless( kCFStringTokenizerTokenHasSubTokensMask              == 1L << 1 )
64        self.failUnless( kCFStringTokenizerTokenHasDerivedSubTokensMask       == 1L << 2 )
65        self.failUnless( kCFStringTokenizerTokenHasHasNumbersMask             == 1L << 3 )
66        self.failUnless( kCFStringTokenizerTokenHasNonLettersMask             == 1L << 4 )
67        self.failUnless( kCFStringTokenizerTokenIsCJWordMask                  == 1L << 5 )
68
69
70if __name__ == "__main__":
71    main()
72