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