1"""
2test.test_dictview from python2.7 adapted
3for testing NSMutableDictionary
4"""
5from PyObjCTools.TestSupport import *
6
7import objc
8NSDictionary = objc.lookUpClass('NSDictionary')
9NSMutableDictionary = objc.lookUpClass('NSMutableDictionary')
10
11
12import unittest
13
14class DictSetTest(TestCase):
15
16    def test_constructors_not_callable(self): pass
17
18    def test_dict_keys(self):
19        d = NSMutableDictionary({1: 10, "a": "ABC"})
20        keys = d.viewkeys()
21        self.assertEqual(len(keys), 2)
22        self.assertEqual(set(keys), set([1, "a"]))
23        self.assertEqual(keys, set([1, "a"]))
24        self.assertNotEqual(keys, set([1, "a", "b"]))
25        self.assertNotEqual(keys, set([1, "b"]))
26        self.assertNotEqual(keys, set([1]))
27        self.assertNotEqual(keys, 42)
28        self.assertIn(1, keys)
29        self.assertIn("a", keys)
30        self.assertNotIn(10, keys)
31        self.assertNotIn("Z", keys)
32        self.assertEqual(d.viewkeys(), d.viewkeys())
33        e = NSMutableDictionary({1: 11, "a": "def"})
34        self.assertEqual(d.viewkeys(), e.viewkeys())
35        del e["a"]
36        self.assertNotEqual(d.viewkeys(), e.viewkeys())
37
38    def test_dict_items(self):
39        d = NSMutableDictionary({1: 10, "a": "ABC"})
40        items = d.viewitems()
41        self.assertEqual(len(items), 2)
42        self.assertEqual(set(items), set([(1, 10), ("a", "ABC")]))
43        self.assertEqual(items, set([(1, 10), ("a", "ABC")]))
44        self.assertNotEqual(items, set([(1, 10), ("a", "ABC"), "junk"]))
45        self.assertNotEqual(items, set([(1, 10), ("a", "def")]))
46        self.assertNotEqual(items, set([(1, 10)]))
47        self.assertNotEqual(items, 42)
48        self.assertIn((1, 10), items)
49        self.assertIn(("a", "ABC"), items)
50        self.assertNotIn((1, 11), items)
51        self.assertNotIn(1, items)
52        self.assertNotIn((), items)
53        self.assertNotIn((1,), items)
54        self.assertNotIn((1, 2, 3), items)
55        self.assertEqual(d.viewitems(), d.viewitems())
56        e = d.mutableCopy()
57        self.assertEqual(d.viewitems(), e.viewitems())
58        e["a"] = "def"
59        self.assertNotEqual(d.viewitems(), e.viewitems())
60
61    def test_dict_mixed_keys_items(self):
62        d = NSMutableDictionary({(1, 1): 11, (2, 2): 22})
63        e = NSMutableDictionary({1: 1, 2: 2})
64        self.assertEqual(d.viewkeys(), e.viewitems())
65        self.assertNotEqual(d.viewitems(), e.viewkeys())
66
67    def test_dict_values(self):
68        d = NSMutableDictionary({1: 10, "a": "ABC"})
69        values = d.viewvalues()
70        self.assertEqual(set(values), set([10, "ABC"]))
71        self.assertEqual(len(values), 2)
72
73    def test_dict_repr(self): pass
74
75    def test_keys_set_operations(self):
76        d1 = NSMutableDictionary({u'a': 1, u'b': 2})
77        d2 = NSMutableDictionary({u'b': 3, u'c': 2})
78        d3 = NSMutableDictionary({u'd': 4, u'e': 5})
79        self.assertEqual(d1.viewkeys() & d1.viewkeys(), set((u'a', u'b')))
80        self.assertEqual(d1.viewkeys() & d2.viewkeys(), set((u'b')))
81        self.assertEqual(d1.viewkeys() & d3.viewkeys(), set())
82        self.assertEqual(d1.viewkeys() & set(d1.viewkeys()), set((u'a', u'b')))
83        self.assertEqual(d1.viewkeys() & set(d2.viewkeys()), set((u'b')))
84        self.assertEqual(d1.viewkeys() & set(d3.viewkeys()), set())
85
86        self.assertEqual(d1.viewkeys() | d1.viewkeys(), set((u'a', u'b')))
87        self.assertEqual(d1.viewkeys() | d2.viewkeys(), set((u'a', u'b', u'c')))
88        self.assertEqual(d1.viewkeys() | d3.viewkeys(), set((u'a', u'b', u'd', u'e')))
89        self.assertEqual(d1.viewkeys() | set(d1.viewkeys()), set((u'a', u'b')))
90        self.assertEqual(d1.viewkeys() | set(d2.viewkeys()), set((u'a', u'b', u'c')))
91        self.assertEqual(d1.viewkeys() | set(d3.viewkeys()),
92                         set((u'a', u'b', u'd', u'e')))
93
94        self.assertEqual(d1.viewkeys() ^ d1.viewkeys(), set())
95        self.assertEqual(d1.viewkeys() ^ d2.viewkeys(), set((u'a', u'c')))
96        self.assertEqual(d1.viewkeys() ^ d3.viewkeys(), set((u'a', u'b', u'd', u'e')))
97        self.assertEqual(d1.viewkeys() ^ set(d1.viewkeys()), set())
98        self.assertEqual(d1.viewkeys() ^ set(d2.viewkeys()), set((u'a', u'c')))
99        self.assertEqual(d1.viewkeys() ^ set(d3.viewkeys()),
100                         set((u'a', u'b', u'd', u'e')))
101
102    def test_items_set_operations(self):
103        d1 = NSMutableDictionary({u'a': 1, u'b': 2})
104        d2 = NSMutableDictionary({u'a': 2, u'b': 2})
105        d3 = NSMutableDictionary({u'd': 4, u'e': 5})
106        self.assertEqual(
107            d1.viewitems() & d1.viewitems(), set(((u'a', 1), (u'b', 2))))
108        self.assertEqual(d1.viewitems() & d2.viewitems(), set(((u'b', 2),)))
109        self.assertEqual(d1.viewitems() & d3.viewitems(), set())
110        self.assertEqual(d1.viewitems() & set(d1.viewitems()),
111                         set(((u'a', 1), (u'b', 2))))
112        self.assertEqual(d1.viewitems() & set(d2.viewitems()), set(((u'b', 2),)))
113        self.assertEqual(d1.viewitems() & set(d3.viewitems()), set())
114
115        self.assertEqual(d1.viewitems() | d1.viewitems(),
116                         set(((u'a', 1), (u'b', 2))))
117        self.assertEqual(d1.viewitems() | d2.viewitems(),
118                         set(((u'a', 1), (u'a', 2), (u'b', 2))))
119        self.assertEqual(d1.viewitems() | d3.viewitems(),
120                         set(((u'a', 1), (u'b', 2), (u'd', 4), (u'e', 5))))
121        self.assertEqual(d1.viewitems() | set(d1.viewitems()),
122                         set(((u'a', 1), (u'b', 2))))
123        self.assertEqual(d1.viewitems() | set(d2.viewitems()),
124                         set(((u'a', 1), (u'a', 2), (u'b', 2))))
125        self.assertEqual(d1.viewitems() | set(d3.viewitems()),
126                         set(((u'a', 1), (u'b', 2), (u'd', 4), (u'e', 5))))
127
128        self.assertEqual(d1.viewitems() ^ d1.viewitems(), set())
129        self.assertEqual(d1.viewitems() ^ d2.viewitems(),
130                         set(((u'a', 1), (u'a', 2))))
131        self.assertEqual(d1.viewitems() ^ d3.viewitems(),
132                         set(((u'a', 1), (u'b', 2), (u'd', 4), (u'e', 5))))
133
134
135
136
137if __name__ == "__main__":
138    main()
139