1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4
5class TestSet (TestCase):
6    def testTypes(self):
7        self.assertIsCFType(CFSetRef)
8
9    def testTypeID(self):
10        self.assertIsInstance(CFSetGetTypeID(), (int, long))
11    def testCreation(self):
12        st = CFSetCreate(None, [u"a", u"b", u"c"], 3, kCFTypeSetCallBacks)
13        self.assertIsInstance(st, CFSetRef)
14        self.assertIsInstance(st, objc.lookUpClass('NSSet'))
15        st = CFSetCreate(None, [u"a", u"b", u"c"], 3, kCFTypeSetCallBacks)
16        self.assertIsInstance(st, CFSetRef)
17        st = CFSetCreateMutable(None, 0, kCFTypeSetCallBacks)
18        self.assertIsInstance(st, CFSetRef)
19        cp = CFSetCreateMutableCopy(None, 0, st)
20        self.assertIsInstance(st, CFSetRef)
21        cp = CFSetCreateCopy(None, st)
22        self.assertIsInstance(st, CFSetRef)
23    def testInspection(self):
24        st = CFSetCreate(None, [u"a", u"b", u"c"], 3, kCFTypeSetCallBacks)
25        self.assertIsInstance(st, CFSetRef)
26        self.assertIsInstance(st, objc.lookUpClass('NSSet'))
27        v = CFSetGetCount(st)
28        self.assertEqual(v , 3)
29        self.assertArgHasType(CFSetGetCountOfValue, 1, b'@')
30        v = CFSetGetCountOfValue(st, u'd')
31        self.assertEqual(v , 0)
32        v = CFSetGetCountOfValue(st, u'b')
33        self.assertEqual(v , 1)
34        self.assertArgHasType(CFSetContainsValue, 1, b'@')
35        v = CFSetContainsValue(st, u'd')
36        self.assertIs(v, False)
37        v = CFSetContainsValue(st, u'b')
38        self.assertIs(v, True)
39        self.assertResultHasType(CFSetGetValue, b'@')
40        self.assertArgHasType(CFSetGetValue, 1, b'@')
41        v = CFSetGetValue(st, u'd')
42        self.assertIs(v, None)
43        v = CFSetGetValue(st, u'b')
44        self.assertEqual(v , u'b')
45        self.assertResultIsBOOL(CFSetGetValueIfPresent)
46        self.assertArgHasType(CFSetGetValueIfPresent, 1, b'@')
47        self.assertArgHasType(CFSetGetValueIfPresent, 2, b'o^@')
48        present, value = CFSetGetValueIfPresent(st, u'c', None)
49        self.assertIs(present, True)
50        self.assertEqual(value , u'c')
51        values = CFSetGetValues(st, None)
52        values = list(values)
53        values.sort()
54        self.assertEqual(values , [u'a', u'b', u'c'])
55    def testApplying(self):
56        st = CFSetCreate(None, [u"a", u"b", u"c"], 3, kCFTypeSetCallBacks)
57        self.assertIsInstance(st, CFSetRef)
58        self.assertIsInstance(st, objc.lookUpClass('NSSet'))
59        context = []
60        def callback(value, context):
61            context.append(value)
62
63        self.assertArgIsFunction(CFSetApplyFunction, 1, b'v@@', False)
64        self.assertArgHasType(CFSetApplyFunction, 2, b'@')
65        CFSetApplyFunction(st, callback, context)
66        self.assertEqual(len(context) , 3)
67        context.sort()
68        self.assertEqual(context , [u'a', u'b', u'c'])
69
70    def testMutation(self):
71        st = CFSetCreate(None, [u"a", u"b", u"c"], 3, kCFTypeSetCallBacks)
72        self.assertIsInstance(st, CFSetRef)
73        self.assertIsInstance(st, objc.lookUpClass('NSSet'))
74        st = CFSetCreateMutableCopy(None, 0, st)
75        self.assertIsInstance(st, CFSetRef)
76        self.assertEqual(CFSetGetCount(st) , 3)
77        self.assertArgHasType(CFSetSetValue, 1, b'@')
78        CFSetSetValue(st, 'c')
79        self.assertEqual(CFSetGetCount(st) , 3)
80        CFSetSetValue(st, 'd')
81        self.assertEqual(CFSetGetCount(st) , 4)
82        self.assertArgHasType(CFSetRemoveValue, 1, b'@')
83        CFSetRemoveValue(st, 'c')
84        self.assertEqual(CFSetGetCount(st) , 3)
85        CFSetRemoveAllValues(st)
86        self.assertEqual(CFSetGetCount(st) , 0)
87        self.assertArgHasType(CFSetAddValue, 1, b'@')
88        CFSetAddValue(st, 'd')
89
90        self.assertArgHasType(CFSetReplaceValue, 1, b'@')
91        CFSetReplaceValue(st, 'd')
92
93
94if __name__ == "__main__":
95    main()
96