1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4
5class TestCharacterSet (TestCase):
6    def testTypes(self):
7        self.failUnlessIsCFType(CFCharacterSetRef)
8        self.failUnlessIsCFType(CFMutableCharacterSetRef)
9
10    def testTypeId(self):
11        v = CFCharacterSetGetTypeID()
12        self.failUnless(isinstance(v, (int, long)))
13
14    def testCreation(self):
15        set = CFCharacterSetGetPredefined(kCFCharacterSetLetter)
16        self.failUnless(isinstance(set, CFCharacterSetRef))
17
18        set = CFCharacterSetCreateWithCharactersInRange(None, (ord('A'), ord('Z')-ord('A')))
19        self.failUnless(isinstance(set, CFCharacterSetRef))
20
21        set = CFCharacterSetCreateWithCharactersInString(None, u"abcdefABCDEF0123456789")
22        self.failUnless(isinstance(set, CFCharacterSetRef))
23
24        bytes = "0123" * (8192/4)
25        bytes = buffer(bytes)
26        set = CFCharacterSetCreateWithBitmapRepresentation(None, bytes)
27        self.failUnless(isinstance(set, CFCharacterSetRef))
28
29        set = CFCharacterSetCreateInvertedSet(None, set)
30        self.failUnless(isinstance(set, CFCharacterSetRef))
31
32        set = CFCharacterSetCreateMutable(None)
33        self.failUnless(isinstance(set, CFCharacterSetRef))
34
35        set = CFCharacterSetCreateCopy(None, set)
36        self.failUnless(isinstance(set, CFCharacterSetRef))
37
38        set = CFCharacterSetCreateMutableCopy(None, set)
39        self.failUnless(isinstance(set, CFCharacterSetRef))
40
41
42
43    def testInspection(self):
44        letters = CFCharacterSetGetPredefined(kCFCharacterSetLetter)
45        digits = CFCharacterSetGetPredefined(kCFCharacterSetDecimalDigit)
46        set = CFCharacterSetCreateWithCharactersInString(None, u"abcdef")
47
48        self.failUnless(CFCharacterSetIsSupersetOfSet(letters, set))
49        self.failIf(CFCharacterSetIsSupersetOfSet(digits, set))
50
51        self.failUnless(CFCharacterSetHasMemberInPlane(digits, 0))
52        self.failIf(CFCharacterSetHasMemberInPlane(digits, 4))
53
54        self.failUnless(CFCharacterSetIsCharacterMember(letters, u'A'))
55        self.failIf(CFCharacterSetIsCharacterMember(letters, u'9'))
56
57        data = CFCharacterSetCreateBitmapRepresentation(None, set)
58        self.failUnless(isinstance(data, CFDataRef))
59
60
61    def testInspectLongUnicode(self):
62        letters = CFCharacterSetGetPredefined(kCFCharacterSetLetter)
63        digits = CFCharacterSetGetPredefined(kCFCharacterSetDecimalDigit)
64        self.failUnless(CFCharacterSetIsLongCharacterMember(letters, ord(u'A')))
65        self.failIf(CFCharacterSetIsLongCharacterMember(letters, ord(u'9')))
66
67    def testMutation(self):
68        set = CFCharacterSetCreateWithCharactersInString(None, u"abcdef")
69        set = CFCharacterSetCreateMutableCopy(None, set)
70
71        self.failIf(CFCharacterSetIsCharacterMember(set, unichr(4)))
72        CFCharacterSetAddCharactersInRange(set, (1, 10))
73        self.failUnless(CFCharacterSetIsCharacterMember(set, unichr(4)))
74
75        CFCharacterSetRemoveCharactersInRange(set, (4, 2))
76        self.failIf(CFCharacterSetIsCharacterMember(set, unichr(4)))
77
78        self.failIf(CFCharacterSetIsCharacterMember(set, u"5"))
79        CFCharacterSetAddCharactersInString(set, u"012345")
80        self.failUnless(CFCharacterSetIsCharacterMember(set, u"5"))
81
82        self.failUnless(CFCharacterSetIsCharacterMember(set, u"a"))
83        CFCharacterSetRemoveCharactersInString(set, u"ab")
84        self.failIf(CFCharacterSetIsCharacterMember(set, u"a"))
85
86        self.failIf(CFCharacterSetIsCharacterMember(set, u"9"))
87        CFCharacterSetUnion(set, CFCharacterSetGetPredefined(kCFCharacterSetDecimalDigit))
88        self.failUnless(CFCharacterSetIsCharacterMember(set, u"9"))
89
90        CFCharacterSetIntersect(set, CFCharacterSetGetPredefined(kCFCharacterSetLetter))
91        self.failIf(CFCharacterSetIsCharacterMember(set, u"9"))
92
93        CFCharacterSetInvert(set)
94        self.failUnless(CFCharacterSetIsCharacterMember(set, u"9"))
95        self.failIf(CFCharacterSetIsCharacterMember(set, u"e"))
96
97
98    def testConstants(self):
99        self.failUnlessEqual(kCFCharacterSetControl, 1)
100        self.failUnlessEqual(kCFCharacterSetWhitespace, 2)
101        self.failUnlessEqual(kCFCharacterSetWhitespaceAndNewline, 3)
102        self.failUnlessEqual(kCFCharacterSetDecimalDigit, 4)
103        self.failUnlessEqual(kCFCharacterSetLetter, 5)
104        self.failUnlessEqual(kCFCharacterSetLowercaseLetter, 6)
105        self.failUnlessEqual(kCFCharacterSetUppercaseLetter, 7)
106        self.failUnlessEqual(kCFCharacterSetNonBase, 8)
107        self.failUnlessEqual(kCFCharacterSetDecomposable, 9)
108        self.failUnlessEqual(kCFCharacterSetAlphaNumeric, 10)
109        self.failUnlessEqual(kCFCharacterSetPunctuation, 11)
110        self.failUnlessEqual(kCFCharacterSetCapitalizedLetter, 13)
111        self.failUnlessEqual(kCFCharacterSetSymbol, 14)
112        self.failUnlessEqual(kCFCharacterSetIllegal, 12)
113
114    @min_os_level('10.5')
115    def testConstants10_5(self):
116        self.failUnlessEqual(kCFCharacterSetNewline, 15)
117
118
119if __name__ == "__main__":
120    main()
121