def testAddRemove(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')

            o.aSet.add(1)
            self.assertEqual(observer.seen, {'aSet': {1}})
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], set([1]))

            o.aSet.remove(1)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([1]))

            self.assertRaises(KeyError, o.aSet.remove, 2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([]))

            o.aSet.add(1)
            o.aSet.add(2)
            v = o.aSet.pop()
            self.assertTrue(v in (1, 2))
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([v]))

            o.aSet = set()
            self.assertRaises(KeyError, o.aSet.pop)
Ejemplo n.º 2
0
    def testGetSetItem(self):
        # Use __getitem__, __setitem__ interface and check
        # that the correct KVO events get emitted.
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        # FIXME: the call to len shouldn't be necessary
        len(o.array)
        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            self.assertEquals(len(observer.values), 0)

            o.array.append(1)

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertEquals(observer.values[-1][-1]['new'], [1])

            self.assertEquals(o.array[0], 1)
            o.array[0] = 4
            self.assertEquals(o.array[0], 4)
            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertEquals(observer.values[-1][-1]['old'], [1])
            self.assertEquals(observer.values[-1][-1]['new'], [4])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 3
0
    def testAddRemove(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')

            o.aSet.add(1)
            self.assertEqual(observer.seen, {'aSet': {1}})
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], set([1]))

            o.aSet.remove(1)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([1]))

            self.assertRaises(KeyError, o.aSet.remove, 2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([]))

            o.aSet.add(1)
            o.aSet.add(2)
            v = o.aSet.pop()
            self.assertTrue(v in (1, 2))
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([v]))

            o.aSet = set()
            self.assertRaises(KeyError, o.aSet.pop)
Ejemplo n.º 4
0
    def testAddRemove(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, "aSet")

            o.aSet.add(1)
            self.assertEqual(observer.seen, {"aSet": {1}})
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], {1})

            o.aSet.remove(1)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], {1})

            self.assertRaises(KeyError, o.aSet.remove, 2)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], set())

            o.aSet.add(1)
            o.aSet.add(2)
            v = o.aSet.pop()
            self.assertTrue(v in (1, 2))
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], {v})

            o.aSet = set()
            self.assertRaises(KeyError, o.aSet.pop)
Ejemplo n.º 5
0
    def testSymmetricDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet = {1, 2, 3}

            observer.register(o, "aSet")

            self.assertEqual(len(observer.values), 0)
            o.aSet.symmetric_difference_update({1, 4})
            self.assertEqual(o.aSet, {2, 3, 4})

            self.assertEqual(len(observer.values), 2)

            haveAdd = False
            haveRemove = False

            for i in 0, 1:
                if observer.values[i][-1]["kind"] == 3:
                    # Remove
                    self.assertNotIn("new", observer.values[i][-1])
                    self.assertEqual(observer.values[i][-1]["old"], {1})
                    haveRemove = True

                elif observer.values[i][-1]["kind"] == 2:
                    # Remove
                    self.assertNotIn("old", observer.values[i][-1])
                    self.assertEqual(observer.values[i][-1]["new"], {4})
                    haveAdd = True

                else:
                    self.fail("Unexpected update kind")

            if not haveAdd and haveRemove:
                self.fail("Do not have both an add and remove notification")
Ejemplo n.º 6
0
    def testDelSlice(self):
        # As testDelItem, but using slices
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSMutableIndexSet.alloc().init()
            IS.addIndex_(0)
            IS.addIndex_(2)
            self.assertEqual(len(observer.values), 0)

            o.array = l

            self.assertEqual(observer.seen, {'array': l})
            self.assertNotIn('indexes', observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            del o.array[0:4:2]
            self.assertEqual(o.array[0], 2)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(len(o.array), 2)

            self.assertEqual(observer.values[-1][-1]['indexes'], IS)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], [1, 3])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 7
0
    def testDefault(self):
        observer = OCObserve.alloc().init()

        o = TestDictPropertyHelper.alloc().init()
        observer.register(o, 'aDict')
        try:
            self.assertEquals(len(o.aDict), 0)
            self.assertEquals(o.aDict, {})
            self.assertEquals(len(observer.values), 0)

            o.aDict['key'] = 42
            self.assertEquals(len(observer.values), 0)

            observer.register(o, 'aDict.key')

            o.aDict['key'] = 43
            self.assertEquals(len(observer.values), 1)

            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], 42)
            self.assertEquals(observer.values[-1][-1]['new'], 43)

            del o.aDict['key']

            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], 43)
            self.assertEquals(observer.values[-1][-1]['new'], None)

        finally:
            observer.unregister(o, 'aDict')
            observer.unregister(o, 'aDict.key')
Ejemplo n.º 8
0
    def testDefault(self):
        observer = OCObserve.alloc().init()

        o = TestDictPropertyHelper.alloc().init()
        observer.register(o, 'aDict')
        try:
            self.assertEquals(len(o.aDict), 0)
            self.assertEquals(o.aDict, {})
            self.assertEquals(len(observer.values), 0)

            o.aDict['key'] = 42
            self.assertEquals(len(observer.values), 0)

            observer.register(o, 'aDict.key')

            o.aDict['key'] = 43
            self.assertEquals(len(observer.values), 1)

            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], 42)
            self.assertEquals(observer.values[-1][-1]['new'], 43)

            del o.aDict['key']

            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], 43)
            self.assertEquals(observer.values[-1][-1]['new'], None)

        finally:
            observer.unregister(o, 'aDict')
            observer.unregister(o, 'aDict.key')
Ejemplo n.º 9
0
    def testSymmetricDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet = set([1, 2, 3])

            observer.register(o, 'aSet')

            self.assertEqual(len(observer.values), 0)
            o.aSet.symmetric_difference_update(set([1, 4]))
            self.assertEqual(o.aSet, set([2, 3, 4]))

            self.assertEqual(len(observer.values), 2)

            haveAdd = False
            haveRemove = False

            for i in 0, 1:
                if observer.values[i][-1]['kind'] == 3:
                    # Remove
                    self.assertNotIn('new', observer.values[i][-1])
                    self.assertEqual(observer.values[i][-1]['old'], set([1]))
                    haveRemove = True

                elif observer.values[i][-1]['kind'] == 2:
                    # Remove
                    self.assertNotIn('old', observer.values[i][-1])
                    self.assertEqual(observer.values[i][-1]['new'], set([4]))
                    haveAdd = True

                else:
                    self.fail("Unexpected update kind")

            if not haveAdd and haveRemove:
                self.fail("Do not have both an add and remove notification")
Ejemplo n.º 10
0
    def testGetSetItem(self):
        # Use __getitem__, __setitem__ interface and check
        # that the correct KVO events get emitted.
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        # FIXME: the call to len shouldn't be necessary
        len(o.array)
        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            self.assertEquals(len(observer.values), 0)

            o.array.append(1)

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertEquals(observer.values[-1][-1]['new'], [1])


            self.assertEquals(o.array[0], 1)
            o.array[0] = 4
            self.assertEquals(o.array[0], 4)
            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertEquals(observer.values[-1][-1]['old'], [1])
            self.assertEquals(observer.values[-1][-1]['new'], [4])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 11
0
    def testIAdd(self):
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        l2 = ['a', 'b', 'c']
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(o.array[0], 1)

            o.array += l2

            self.assertEquals(len(o.array), 7)
            self.assertEquals(o.array[4], 'a')

            #self.assertEquals(len(observer.values), 3)
            #self.assertEquals(observer.values[-2][-1]['indexes'], NSIndexSet.alloc().initWithIndexesInRange_((4, 3)))
            #self.assertNotIn('old', observer.values[-2][-1])
            #self.assertEquals(observer.values[-2][-1]['new'], ['a', 'b', 'c'])

            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('indexes', observer.values[-1][-1])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 12
0
    def testSetting(self):
        # Set value, check that 
        # (1) value gets copied
        # (2) accessing the property result in proxy
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')
        try:
            self.assertEquals(len(observer.values), 0)
            self.assertEquals(len(o.array), 0)
            self.assertEquals(len(observer.values), 0)
            o.array = l
            self.assertEquals(len(observer.values), 1)


            self.assertEquals(len(o.array), 3)

            # This shouldn't affect the property
            l.append(4)
            self.assertEquals(len(o.array), 3)

            self.assertEquals(len(l), 4)
            o.array.append(5)
            self.assertEquals(len(l), 4)

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 13
0
    def testIMul(self):
        observer = OCObserve.alloc().init()
        l = [1, 2]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(o.array[0], 1)

            o.array *= 3

            self.assertEquals(len(o.array), 6)
            self.assertEquals(o.array[0], 1)
            self.assertEquals(o.array[1], 2)
            self.assertEquals(o.array[2], 1)
            self.assertEquals(o.array[3], 2)
            self.assertEquals(o.array[4], 1)
            self.assertEquals(o.array[5], 2)

            #self.assertEquals(len(observer.values), 3)
            #self.assertEquals(observer.values[-2][-1]['indexes'], NSIndexSet.alloc().initWithIndexesInRange_((2, 4)))
            #self.assertNotIn('old', observer.values[-2][-1])
            #self.assertEquals(observer.values[-2][-1]['new'], [1, 2, 1, 2])

            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('indexes', observer.values[-1][-1])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 14
0
    def testIAdd(self):
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        l2 = ["a", "b", "c"]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertEqual(o.array[0], 1)

            o.array += l2

            self.assertEqual(o.array, l + l2)
            self.assertEqual(len(o.array), 7)
            self.assertEqual(o.array[4], "a")

            self.assertEqual(observer.seen, {"array": l + l2})
            self.assertEqual(observer.values[-2][-1]["indexes"], NSIndexSet.alloc().initWithIndexesInRange_((4, 3)))
            self.assertNotIn("old", observer.values[-2][-1])
            self.assertEqual(observer.values[-2][-1]["new"], l2)

            self.assertNotIn("indexes", observer.values[-1][-1])

            before = observer.values[:]
            v = o.array + l2
            self.assertEqual(observer.values, before)
            self.assertEqual(v, l + l2 + l2)
            self.assertIsInstance(v, list)

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 15
0
    def testIAdd(self):
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        l2 = ['a', 'b', 'c']
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(o.array[0], 1)

            o.array += l2

            self.assertEquals(len(o.array), 7)
            self.assertEquals(o.array[4], 'a')

            #self.assertEquals(len(observer.values), 3)
            #self.assertEquals(observer.values[-2][-1]['indexes'], NSIndexSet.alloc().initWithIndexesInRange_((4, 3)))
            #self.assertNotIn('old', observer.values[-2][-1])
            #self.assertEquals(observer.values[-2][-1]['new'], ['a', 'b', 'c'])

            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('indexes', observer.values[-1][-1])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 16
0
    def testSetting(self):
        # Set value, check that
        # (1) value gets copied
        # (2) accessing the property result in proxy
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')
        try:
            self.assertEquals(len(observer.values), 0)
            self.assertEquals(len(o.array), 0)
            self.assertEquals(len(observer.values), 0)
            o.array = l
            self.assertEquals(len(observer.values), 1)

            self.assertEquals(len(o.array), 3)

            # This shouldn't affect the property
            l.append(4)
            self.assertEquals(len(o.array), 3)

            self.assertEquals(len(l), 4)
            o.array.append(5)
            self.assertEquals(len(l), 4)

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 17
0
    def testIMul(self):
        observer = OCObserve.alloc().init()
        l = [1, 2]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(o.array[0], 1)

            o.array *= 3

            self.assertEquals(len(o.array), 6)
            self.assertEquals(o.array[0], 1)
            self.assertEquals(o.array[1], 2)
            self.assertEquals(o.array[2], 1)
            self.assertEquals(o.array[3], 2)
            self.assertEquals(o.array[4], 1)
            self.assertEquals(o.array[5], 2)

            #self.assertEquals(len(observer.values), 3)
            #self.assertEquals(observer.values[-2][-1]['indexes'], NSIndexSet.alloc().initWithIndexesInRange_((2, 4)))
            #self.assertNotIn('old', observer.values[-2][-1])
            #self.assertEquals(observer.values[-2][-1]['new'], [1, 2, 1, 2])

            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('indexes', observer.values[-1][-1])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 18
0
    def testDelSlice(self):
        # As testDelItem, but using slices
        observer = OCObserve.alloc().init()
        lst = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            IS = NSMutableIndexSet.alloc().init()
            IS.addIndex_(0)
            IS.addIndex_(2)
            self.assertEqual(len(observer.values), 0)

            o.array = lst

            self.assertEqual(observer.seen, {"array": lst})
            self.assertNotIn("indexes", observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            del o.array[0:4:2]
            self.assertEqual(o.array[0], 2)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(len(o.array), 2)

            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], [1, 3])

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 19
0
    def testExtend(self):
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        l2 = ['a', 'b', 'c']
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            o.array = l

            self.assertEqual(observer.seen, {'array': l})
            self.assertEqual(o.array[0], 1)

            o.array.extend(l2)

            self.assertEqual(len(o.array), 7)
            self.assertEqual(o.array[4], 'a')

            self.assertEqual(observer.seen, {'array': l2})
            self.assertEqual(
                observer.values[-1][-1]['indexes'],
                NSIndexSet.alloc().initWithIndexesInRange_((4, 3)))
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], l2)

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 20
0
    def testDelSlice(self):
        # As testDelItem, but using slices
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            IS = NSMutableIndexSet.alloc().init()
            IS.addIndex_(0)
            IS.addIndex_(2)
            self.assertEqual(len(observer.values), 0)

            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertNotIn("indexes", observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            del o.array[0:4:2]
            self.assertEqual(o.array[0], 2)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(len(o.array), 2)

            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], [1, 3])

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 21
0
    def testExtend(self):
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        l2 = ["a", "b", "c"]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertEqual(o.array[0], 1)

            o.array.extend(l2)

            self.assertEqual(len(o.array), 7)
            self.assertEqual(o.array[4], "a")

            self.assertEqual(observer.seen, {"array": l2})
            self.assertEqual(observer.values[-1][-1]["indexes"], NSIndexSet.alloc().initWithIndexesInRange_((4, 3)))
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], l2)

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 22
0
    def testSymmetricDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet = set([1, 2, 3])

            observer.register(o, "aSet")

            self.assertEquals(len(observer.values), 0)
            o.aSet.symmetric_difference_update(set([1, 4]))
            self.assertEquals(o.aSet, set([2, 3, 4]))

            self.assertEquals(len(observer.values), 2)

            haveAdd = False
            haveRemove = False

            for i in 0, 1:
                if observer.values[i][-1]["kind"] == 3:
                    # Remove
                    self.assertNotIn("new", observer.values[i][-1])
                    self.assertEquals(observer.values[i][-1]["old"], set([1]))
                    haveRemove = True

                elif observer.values[i][-1]["kind"] == 2:
                    # Remove
                    self.assertNotIn("old", observer.values[i][-1])
                    self.assertEquals(observer.values[i][-1]["new"], set([4]))
                    haveAdd = True

                else:
                    self.fail("Unexpected update kind")

            if not haveAdd and haveRemove:
                self.fail("Do not have both an add and remove notification")
Ejemplo n.º 23
0
    def testExtend(self):
        observer = OCObserve.alloc().init()
        lst = [1, 2, 3, 4]
        lst2 = ["a", "b", "c"]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            o.array = lst

            self.assertEqual(observer.seen, {"array": lst})
            self.assertEqual(o.array[0], 1)

            o.array.extend(lst2)

            self.assertEqual(len(o.array), 7)
            self.assertEqual(o.array[4], "a")

            self.assertEqual(observer.seen, {"array": lst2})
            self.assertEqual(
                observer.values[-1][-1]["indexes"],
                NSIndexSet.alloc().initWithIndexesInRange_((4, 3)),
            )
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], lst2)

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 24
0
    def testDelSlice(self):
        # As testDelItem, but using slices
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSMutableIndexSet.alloc().init()
            IS.addIndex_(0)
            IS.addIndex_(2)
            self.assertEquals(len(observer.values), 0)

            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertNotIn('indexes', observer.values[-1][-1])

            self.assertEquals(o.array[0], 1)


            del o.array[0:4:2]
            self.assertEquals(o.array[0], 2)
            self.assertEquals(o.array[1], 4)
            self.assertEquals(len(o.array), 2)

            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], [1, 3])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 25
0
    def testGetSetItem(self):
        # Use __getitem__, __setitem__ interface and check
        # that the correct KVO events get emitted.
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        # FIXME: the call to len shouldn't be necessary
        len(o.array)
        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            self.assertEqual(observer.seen, {'array': []})

            o.array.append(1)

            self.assertEqual(observer.seen, {'array': [1]})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS)
            self.assertEqual(observer.values[-1][-1]['new'], [1])

            o.array.append(2)
            o.array.append(3)

            self.assertEqual(o.array[0], 1)
            o.array[0] = 4
            self.assertEqual(o.array[0], 4)
            self.assertEqual(observer.seen, {'array': [4]})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS)
            self.assertEqual(observer.values[-1][-1]['old'], [1])
            self.assertEqual(observer.values[-1][-1]['new'], [4])

            o.array[-1] = 9
            self.assertEqual(o.array[2], 9)
            IS = NSIndexSet.alloc().initWithIndex_(2)
            self.assertEqual(observer.seen, {'array': [9]})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS)
            self.assertEqual(observer.values[-1][-1]['old'], [3])
            self.assertEqual(observer.values[-1][-1]['new'], [9])

            self.assertEqual(o.array[-1], 9)

            try:
                o.array[-20] = 4
            except IndexError:
                pass

            else:
                self.fail("IndexError not raised")

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 26
0
    def testGetSetItem(self):
        # Use __getitem__, __setitem__ interface and check
        # that the correct KVO events get emitted.
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        # FIXME: the call to len shouldn't be necessary
        len(o.array)
        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            self.assertEqual(observer.seen, {"array": []})

            o.array.append(1)

            self.assertEqual(observer.seen, {"array": [1]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertEqual(observer.values[-1][-1]["new"], [1])

            o.array.append(2)
            o.array.append(3)

            self.assertEqual(o.array[0], 1)
            o.array[0] = 4
            self.assertEqual(o.array[0], 4)
            self.assertEqual(observer.seen, {"array": [4]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertEqual(observer.values[-1][-1]["old"], [1])
            self.assertEqual(observer.values[-1][-1]["new"], [4])

            o.array[-1] = 9
            self.assertEqual(o.array[2], 9)
            IS = NSIndexSet.alloc().initWithIndex_(2)
            self.assertEqual(observer.seen, {"array": [9]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertEqual(observer.values[-1][-1]["old"], [3])
            self.assertEqual(observer.values[-1][-1]["new"], [9])

            self.assertEqual(o.array[-1], 9)

            try:
                o.array[-20] = 4
            except IndexError:
                pass

            else:
                self.fail("IndexError not raised")

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 27
0
    def testIMul(self):
        observer = OCObserve.alloc().init()
        lst = [1, 2]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            o.array = lst

            self.assertEqual(observer.seen, {"array": lst})
            self.assertEqual(o.array[0], 1)

            observer.values[:] = []
            o.array *= 3

            self.assertEqual(len(o.array), 6)
            self.assertEqual(o.array[0], 1)
            self.assertEqual(o.array[1], 2)
            self.assertEqual(o.array[2], 1)
            self.assertEqual(o.array[3], 2)
            self.assertEqual(o.array[4], 1)
            self.assertEqual(o.array[5], 2)

            self.assertEqual(observer.seen, {"array": [1, 2, 1, 2, 1, 2]})
            self.assertEqual(
                observer.values[-2][-1]["indexes"],
                NSIndexSet.alloc().initWithIndexesInRange_((2, 4)),
            )
            self.assertNotIn("old", observer.values[-2][-1])
            self.assertEqual(observer.values[-2][-1]["new"], [1, 2, 1, 2])

            self.assertEqual(len(observer.values), 2)
            self.assertNotIn("indexes", observer.values[-1][-1])

            before = observer.values[:]
            n = o.array * 4
            self.assertEqual(observer.values, before)
            self.assertEqual(n, [1, 2] * 3 * 4)
            self.assertIsInstance(n, list)

            try:
                o.array *= "a"
            except TypeError:
                pass

            else:
                self.fail("array * 'a' didn't raise exception")

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 28
0
    def testInplace(self):
        # FIXME: the disabled lines in this test indicate a problem in 
        # either the set_proxy implementation, or my understanding of
        # unordered collection properties.
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            o.aSet.add(1)
            observer.register(o, 'aSet')


            # The inplace operators aren't actually implemented, which means
            # "o.aSet |= value" is actually  "o.aSet = o.aSet | value" and
            # we get the some KVO notificatons as when a new value is set.

            self.assertEqual(o.aSet, {1})
            o.aSet |= set([2,3])
            self.assertEqual(o.aSet, {1,2,3})
            self.assertEqual(o.aSet, set([1,2,3]))
            self.assertEqual(len(observer.values), 2)
            self.assertEqual(observer.values[-1][-1]['kind'], 1)
            #self.assertEqual(observer.values[-1][-1]['old'], set([1]))
            self.assertEqual(observer.values[-1][-1]['new'], set([1,2,3]))

            self.assertEqual(o.aSet, {1,2,3})
            o.aSet &= set([3, 4])
            self.assertEqual(o.aSet, {3})
            self.assertEqual(o.aSet, set([3]))
            self.assertEqual(len(observer.values), 4)
            self.assertEqual(observer.values[-1][-1]['kind'], 1)
            #self.assertEqual(observer.values[-1][-1]['old'], set([1,2,3]))
            #self.assertEqual(observer.values[-1][-1]['new'], set([3]))

            self.assertEqual(o.aSet, {3})
            o.aSet -= {3}
            self.assertEqual(o.aSet, set())
            self.assertEqual(o.aSet, set([]))
            self.assertEqual(len(observer.values), 6)
            self.assertEqual(observer.values[-1][-1]['kind'], 1)
            #self.assertEqual(observer.values[-1][-1]['old'], set([3]))
            #self.assertEqual(observer.values[-1][-1]['new'], set())

            o.aSet = set([1,2,3])
            #self.assertEqual(len(observer.values), 8)

            self.assertEqual(o.aSet, {1,2,3})
            o.aSet ^= set([1, 4])
            self.assertEqual(o.aSet, {2, 3, 4})
            #self.assertEqual(len(observer.values), 9)
            self.assertEqual(observer.values[-1][-1]['kind'], 1)
Ejemplo n.º 29
0
    def testInplace(self):
        # FIXME: the disabled lines in this test indicate a problem in
        # either the set_proxy implementation, or my understanding of
        # unordered collection properties.
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            o.aSet.add(1)
            observer.register(o, "aSet")

            # The inplace operators aren't actually implemented, which means
            # "o.aSet |= value" is actually  "o.aSet = o.aSet | value" and
            # we get the some KVO notificatons as when a new value is set.

            self.assertEqual(o.aSet, {1})
            o.aSet |= set([2, 3])
            self.assertEqual(o.aSet, {1, 2, 3})
            self.assertEqual(o.aSet, set([1, 2, 3]))
            self.assertEqual(len(observer.values), 2)
            self.assertEqual(observer.values[-1][-1]["kind"], 1)
            # self.assertEqual(observer.values[-1][-1]['old'], set([1]))
            self.assertEqual(observer.values[-1][-1]["new"], set([1, 2, 3]))

            self.assertEqual(o.aSet, {1, 2, 3})
            o.aSet &= set([3, 4])
            self.assertEqual(o.aSet, {3})
            self.assertEqual(o.aSet, set([3]))
            self.assertEqual(len(observer.values), 4)
            self.assertEqual(observer.values[-1][-1]["kind"], 1)
            # self.assertEqual(observer.values[-1][-1]['old'], set([1,2,3]))
            # self.assertEqual(observer.values[-1][-1]['new'], set([3]))

            self.assertEqual(o.aSet, {3})
            o.aSet -= {3}
            self.assertEqual(o.aSet, set())
            self.assertEqual(o.aSet, set([]))
            self.assertEqual(len(observer.values), 6)
            self.assertEqual(observer.values[-1][-1]["kind"], 1)
            # self.assertEqual(observer.values[-1][-1]['old'], set([3]))
            # self.assertEqual(observer.values[-1][-1]['new'], set())

            o.aSet = set([1, 2, 3])
            # self.assertEqual(len(observer.values), 8)

            self.assertEqual(o.aSet, {1, 2, 3})
            o.aSet ^= set([1, 4])
            self.assertEqual(o.aSet, {2, 3, 4})
            # self.assertEqual(len(observer.values), 9)
            self.assertEqual(observer.values[-1][-1]["kind"], 1)
Ejemplo n.º 30
0
    def testUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, "aSet")

            o.aSet.update([1, 2, 3])
            self.assertEquals(len(observer.values), 1)
            self.assertEquals(observer.values[-1][-1]["kind"], 2)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["new"], set([1, 2, 3]))

            o.aSet.update(set([3, 4, 5]))
            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]["kind"], 2)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["new"], set([4, 5]))
Ejemplo n.º 31
0
    def testUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')

            o.aSet.update([1,2,3])
            self.assertEquals(len(observer.values), 1)
            self.assertEquals(observer.values[-1][-1]['kind'], 2)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['new'], set([1, 2, 3]))

            o.aSet.update(set([3,4,5]))
            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['kind'], 2)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['new'], set([4, 5]))
Ejemplo n.º 32
0
    def testIMul(self):
        observer = OCObserve.alloc().init()
        l = [1, 2]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertEqual(o.array[0], 1)

            observer.values[:] = []
            o.array *= 3

            self.assertEqual(len(o.array), 6)
            self.assertEqual(o.array[0], 1)
            self.assertEqual(o.array[1], 2)
            self.assertEqual(o.array[2], 1)
            self.assertEqual(o.array[3], 2)
            self.assertEqual(o.array[4], 1)
            self.assertEqual(o.array[5], 2)

            self.assertEqual(observer.seen, {"array": [1, 2, 1, 2, 1, 2]})
            self.assertEqual(observer.values[-2][-1]["indexes"], NSIndexSet.alloc().initWithIndexesInRange_((2, 4)))
            self.assertNotIn("old", observer.values[-2][-1])
            self.assertEqual(observer.values[-2][-1]["new"], [1, 2, 1, 2])

            self.assertEqual(len(observer.values), 2)
            self.assertNotIn("indexes", observer.values[-1][-1])

            before = observer.values[:]
            n = o.array * 4
            self.assertEqual(observer.values, before)
            self.assertEqual(n, [1, 2] * 3 * 4)
            self.assertIsInstance(n, list)

            try:
                o.array *= "a"
            except TypeError:
                pass

            else:
                self.fail("array * 'a' didn't raise exception")

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 33
0
    def testInsert(self):
        # Use insert method and check that the correct
        # KVO events get emitted
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        lst = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        self.assertEqual(o.array, [])

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS1 = NSIndexSet.alloc().initWithIndex_(4)
            self.assertEqual(observer.seen, {"array": []})

            o.array = lst

            self.assertEqual(observer.seen, {"array": lst})
            self.assertNotIn("indexes", observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            o.array.insert(0, "a")
            self.assertEqual(o.array[0], "a")
            self.assertEqual(len(o.array), 4)

            self.assertEqual(observer.seen, {"array": ["a"]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], ["a"])

            o.array.insert(4, "b")
            self.assertEqual(o.array[4], "b")
            self.assertEqual(len(o.array), 5)

            self.assertEqual(observer.seen, {"array": ["b"]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS1)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], ["b"])

            self.assertRaises(TypeError, o.array.insert, slice(0, 2), 4)
            self.assertRaises(TypeError, o.array.insert, "a", 4)
            o.array.insert(0, "a")

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 34
0
    def testInsert(self):
        # Use insert method and check that the correct
        # KVO events get emitted
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        self.assertEqual(o.array, [])

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS1 = NSIndexSet.alloc().initWithIndex_(4)
            self.assertEqual(observer.seen, {'array': []})

            o.array = l

            self.assertEqual(observer.seen, {'array': l})
            self.assertNotIn('indexes', observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            o.array.insert(0, 'a')
            self.assertEqual(o.array[0], 'a')
            self.assertEqual(len(o.array), 4)

            self.assertEqual(observer.seen, {'array': ['a']})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], ['a'])

            o.array.insert(4, 'b')
            self.assertEqual(o.array[4], 'b')
            self.assertEqual(len(o.array), 5)

            self.assertEqual(observer.seen, {'array': ['b']})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS1)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], ['b'])

            self.assertRaises(TypeError, o.array.insert, slice(0, 2), 4)
            self.assertRaises(TypeError, o.array.insert, 'a', 4)
            o.array.insert(0, 'a')

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 35
0
    def testInsert(self):
        # Use insert method and check that the correct
        # KVO events get emitted
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        self.assertEqual(o.array, [])

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS1 = NSIndexSet.alloc().initWithIndex_(4)
            self.assertEqual(observer.seen, {"array": []})

            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertNotIn("indexes", observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            o.array.insert(0, "a")
            self.assertEqual(o.array[0], "a")
            self.assertEqual(len(o.array), 4)

            self.assertEqual(observer.seen, {"array": ["a"]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], ["a"])

            o.array.insert(4, "b")
            self.assertEqual(o.array[4], "b")
            self.assertEqual(len(o.array), 5)

            self.assertEqual(observer.seen, {"array": ["b"]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS1)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], ["b"])

            self.assertRaises(TypeError, o.array.insert, slice(0, 2), 4)
            self.assertRaises(TypeError, o.array.insert, "a", 4)
            o.array.insert(0, "a")

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 36
0
    def testAddDiscard(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, "aSet")

            o.aSet.add(1)
            self.assertEqual(observer.seen, {"aSet": {1}})
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], {1})

            o.aSet.discard(1)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], {1})

            o.aSet.discard(2)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], set())
Ejemplo n.º 37
0
    def testDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet.add(1)
            o.aSet.add(2)
            o.aSet.add(3)

            observer.register(o, "aSet")

            o.aSet.difference_update(set([1, 4]))
            self.assertEquals(o.aSet, set([2, 3]))

            self.assertEquals(len(observer.values), 1)
            self.assertEquals(observer.values[-1][-1]["kind"], 3)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["old"], set([1]))
Ejemplo n.º 38
0
    def testAddDiscard(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')

            o.aSet.add(1)
            self.assertEqual(observer.seen, {'aSet': {1}})
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], set([1]))

            o.aSet.discard(1)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([1]))

            o.aSet.discard(2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([]))
Ejemplo n.º 39
0
    def testDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet.add(1)
            o.aSet.add(2)
            o.aSet.add(3)

            observer.register(o, "aSet")

            o.aSet.difference_update({1, 4})
            self.assertEqual(o.aSet, {2, 3})

            self.assertEqual(len(observer.values), 1)
            self.assertEqual(observer.values[-1][-1]["kind"], 3)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], {1})
Ejemplo n.º 40
0
    def testDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet.add(1)
            o.aSet.add(2)
            o.aSet.add(3)

            observer.register(o, 'aSet')

            o.aSet.difference_update(set([1,4]))
            self.assertEqual(o.aSet, set([2,3]))

            self.assertEqual(len(observer.values), 1)
            self.assertEqual(observer.values[-1][-1]['kind'], 3)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([1]))
Ejemplo n.º 41
0
    def testAddDiscard(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')

            o.aSet.add(1)
            self.assertEqual(observer.seen, {'aSet': {1}})
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], set([1]))

            o.aSet.discard(1)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([1]))

            o.aSet.discard(2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([]))
Ejemplo n.º 42
0
    def testDifferenceUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()

            o.aSet.add(1)
            o.aSet.add(2)
            o.aSet.add(3)

            observer.register(o, 'aSet')

            o.aSet.difference_update(set([1, 4]))
            self.assertEqual(o.aSet, set([2, 3]))

            self.assertEqual(len(observer.values), 1)
            self.assertEqual(observer.values[-1][-1]['kind'], 3)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], set([1]))
Ejemplo n.º 43
0
    def testUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, "aSet")
            self.assertEqual(o.aSet, set())
            self.assertEqual(len(observer.values), 1)

            o.aSet.update([1, 2, 3])
            self.assertEqual(len(observer.values), 2)
            self.assertEqual(observer.values[-1][-1]["kind"], 2)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], {1, 2, 3})

            o.aSet.update({3, 4, 5})
            self.assertEqual(len(observer.values), 3)
            self.assertEqual(observer.values[-1][-1]["kind"], 2)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], {4, 5})
Ejemplo n.º 44
0
    def testUpdate(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')
            self.assertEqual(o.aSet, set())
            self.assertEqual(len(observer.values), 1)

            o.aSet.update([1,2,3])
            self.assertEqual(len(observer.values), 2)
            self.assertEqual(observer.values[-1][-1]['kind'], 2)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], set([1, 2, 3]))

            o.aSet.update(set([3,4,5]))
            self.assertEqual(len(observer.values), 3)
            self.assertEqual(observer.values[-1][-1]['kind'], 2)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], set([4, 5]))
Ejemplo n.º 45
0
    def testGetSetSlice(self):
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            IS = NSIndexSet.alloc().initWithIndexesInRange_((0, 3))
            IS2 = NSIndexSet.alloc().initWithIndexesInRange_((1, 2))
            IS3 = NSMutableIndexSet.alloc().init()
            IS3.addIndex_(0)
            IS3.addIndex_(2)
            self.assertEqual(observer.seen, {})

            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertNotIn("indexes", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["new"], [1, 2, 3])

            o.array[1:3] = [4, 5]
            self.assertEqual(o.array[0], 1)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(o.array[2], 5)
            self.assertEqual(o.array, [1, 4, 5])
            self.assertEqual(observer.seen, {"array": [4, 5]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS2)
            self.assertEqual(observer.values[-1][-1]["old"], [2, 3])
            self.assertEqual(observer.values[-1][-1]["new"], [4, 5])

            self.assertEqual(o.array[0], 1)
            o.array[0:3:2] = [9, 10]
            self.assertEqual(o.array[0], 9)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(o.array[2], 10)
            self.assertEqual(observer.seen, {"array": [9, 10]})
            self.assertEqual(observer.values[-1][-1]["indexes"], IS3)
            self.assertEqual(observer.values[-1][-1]["old"], [1, 5])
            self.assertEqual(observer.values[-1][-1]["new"], [9, 10])

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 46
0
    def testOperators(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            o.aSet = {1,2,3}

            observer.register(o, 'aSet')
            self.assertEqual(observer.seen, {})

            self.assertEqual(o.aSet - {2}, {1,3})
            self.assertEqual(o.aSet, {1,2,3})

            self.assertEqual(o.aSet | {4}, {1,2,3,4})
            self.assertEqual(o.aSet, {1,2,3})

            self.assertEqual(o.aSet & {3,4}, {3})
            self.assertEqual(o.aSet, {1,2,3})

            self.assertEqual(o.aSet ^ {3,4}, {1,2,4})
            self.assertEqual(o.aSet, {1,2,3})
Ejemplo n.º 47
0
    def testAddRemove(self): 
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, 'aSet')

            o.aSet.add(1)
            self.assertEquals(len(observer.values), 1)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['new'], set([1]))

            o.aSet.remove(1)
            self.assertEquals(len(observer.values), 2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], set([1]))

            self.assertRaises(KeyError, o.aSet.remove, 2)
            self.assertEquals(len(observer.values), 3)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], set([]))
Ejemplo n.º 48
0
    def testOperators(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            o.aSet = {1, 2, 3}

            observer.register(o, "aSet")
            self.assertEqual(observer.seen, {})

            self.assertEqual(o.aSet - {2}, {1, 3})
            self.assertEqual(o.aSet, {1, 2, 3})

            self.assertEqual(o.aSet | {4}, {1, 2, 3, 4})
            self.assertEqual(o.aSet, {1, 2, 3})

            self.assertEqual(o.aSet & {3, 4}, {3})
            self.assertEqual(o.aSet, {1, 2, 3})

            self.assertEqual(o.aSet ^ {3, 4}, {1, 2, 4})
            self.assertEqual(o.aSet, {1, 2, 3})
Ejemplo n.º 49
0
    def testGetSetSlice(self):
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSIndexSet.alloc().initWithIndexesInRange_((0, 3))
            IS2 = NSIndexSet.alloc().initWithIndexesInRange_((1, 2))
            IS3 = NSMutableIndexSet.alloc().init()
            IS3.addIndex_(0)
            IS3.addIndex_(2)
            self.assertEqual(observer.seen, {})

            o.array = l

            self.assertEqual(observer.seen, {'array': l})
            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['new'], [1, 2, 3])

            o.array[1:3] = [4, 5]
            self.assertEqual(o.array[0], 1)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(o.array[2], 5)
            self.assertEqual(o.array, [1, 4, 5])
            self.assertEqual(observer.seen, {'array': [4, 5]})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS2)
            self.assertEqual(observer.values[-1][-1]['old'], [2, 3])
            self.assertEqual(observer.values[-1][-1]['new'], [4, 5])

            self.assertEqual(o.array[0], 1)
            o.array[0:3:2] = [9, 10]
            self.assertEqual(o.array[0], 9)
            self.assertEqual(o.array[1], 4)
            self.assertEqual(o.array[2], 10)
            self.assertEqual(observer.seen, {'array': [9, 10]})
            self.assertEqual(observer.values[-1][-1]['indexes'], IS3)
            self.assertEqual(observer.values[-1][-1]['old'], [1, 5])
            self.assertEqual(observer.values[-1][-1]['new'], [9, 10])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 50
0
    def testGetSetSlice(self):
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSIndexSet.alloc().initWithIndexesInRange_((0, 3))
            IS2 = NSIndexSet.alloc().initWithIndexesInRange_((1, 2))
            IS3 = NSMutableIndexSet.alloc().init()
            IS3.addIndex_(0)
            IS3.addIndex_(2)
            self.assertEquals(len(observer.values), 0)

            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['new'], [1, 2, 3])


            self.assertEquals(o.array[0], 1)
            o.array[1:3] = [4, 5]
            self.assertEquals(o.array[1], 4)
            self.assertEquals(o.array[2], 5)
            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS2)
            self.assertEquals(observer.values[-1][-1]['old'], [2, 3])
            self.assertEquals(observer.values[-1][-1]['new'], [4, 5])

            self.assertEquals(o.array[0], 1)
            o.array[0:3:2] = [9, 10]
            self.assertEquals(o.array[0], 9)
            self.assertEquals(o.array[1], 4)
            self.assertEquals(o.array[2], 10)
            self.assertEquals(len(observer.values), 3)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS3)
            self.assertEquals(observer.values[-1][-1]['old'], [1, 5])
            self.assertEquals(observer.values[-1][-1]['new'], [9, 10])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 51
0
    def testAddDiscard(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, "aSet")

            o.aSet.add(1)
            self.assertEquals(len(observer.values), 1)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["new"], set([1]))

            o.aSet.discard(1)
            self.assertEquals(len(observer.values), 2)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["old"], set([1]))

            o.aSet.discard(2)
            self.assertEquals(len(observer.values), 3)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["old"], set([]))
Ejemplo n.º 52
0
    def testAddRemove(self):
        with OCObserve.alloc().init() as observer:
            o = TestSetPropertyHelper.alloc().init()
            observer.register(o, "aSet")

            o.aSet.add(1)
            self.assertEquals(len(observer.values), 1)
            self.assertNotIn("old", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["new"], set([1]))

            o.aSet.remove(1)
            self.assertEquals(len(observer.values), 2)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["old"], set([1]))

            self.assertRaises(KeyError, o.aSet.remove, 2)
            self.assertEquals(len(observer.values), 3)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]["old"], set([]))
Ejemplo n.º 53
0
    def testPop(self):
        # Use pop method and check that the correct
        # KVO events get emitted
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS2 = NSIndexSet.alloc().initWithIndex_(2)
            self.assertEquals(len(observer.values), 0)

            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertNotIn('indexes', observer.values[-1][-1])

            self.assertEquals(o.array[0], 1)


            v = o.array.pop(0)
            self.assertEquals(v, 1)
            self.assertEquals(o.array[0], 2)
            self.assertEquals(len(o.array), 3)

            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], [1])

            v = o.array.pop(2)
            self.assertEquals(v, 4)
            self.assertEquals(len(o.array), 2)

            self.assertEquals(len(observer.values), 3)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['old'], [4])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 54
0
    def testSetting(self):
        # Set value, check that
        # (1) value gets copied
        # (2) accessing the property result in proxy
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')
        try:
            self.assertEqual(observer.seen, {})
            self.assertEqual(len(o.array), 0)
            self.assertEqual(observer.seen, {'array': []})
            o.array = l
            self.assertEqual(observer.seen, {'array': l})

            self.assertEqual(len(o.array), 3)

            # This shouldn't affect the property
            l.append(4)
            self.assertEqual(len(o.array), 3)

            self.assertEqual(len(l), 4)
            o.array.append(5)
            self.assertEqual(len(l), 4)
            self.assertEqual(len(o.array), 4)

        finally:
            observer.unregister(o, 'array')

        l = [1, 2]
        o.array2 = l
        self.assertIsNot(o._array2, l)

        o.array2 = o.array
        self.assertEqual(o.array2, [1, 2, 3, 5])
        o.array2.append(1)
        self.assertEqual(o.array2, [1, 2, 3, 5, 1])
        self.assertEqual(o.array, [1, 2, 3, 5])

        arr = o.array2
        o._array2 = None
        self.assertEqual(arr, [])
Ejemplo n.º 55
0
    def testPop(self):
        # Use pop method and check that the correct
        # KVO events get emitted
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS2 = NSIndexSet.alloc().initWithIndex_(2)
            self.assertEqual(observer.seen, {})

            o.array = l

            self.assertEqual(observer.seen, {'array': l})
            self.assertNotIn('indexes', observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            v = o.array.pop(0)
            self.assertEqual(v, 1)
            self.assertEqual(o.array[0], 2)
            self.assertEqual(len(o.array), 3)

            self.assertEqual(observer.values[-1][-1]['indexes'], IS)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], [1])

            v = o.array.pop(2)
            self.assertEqual(v, 4)
            self.assertEqual(len(o.array), 2)

            self.assertEqual(observer.values[-1][-1]['indexes'], IS2)
            self.assertNotIn('new', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], [4])

            self.assertRaises(TypeError, o.array.pop, slice(0, 2))
            self.assertRaises(TypeError, o.array.pop, 'a')

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 56
0
    def testPop(self):
        # Use pop method and check that the correct
        # KVO events get emitted
        observer = OCObserve.alloc().init()
        l = [1, 2, 3, 4]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS2 = NSIndexSet.alloc().initWithIndex_(2)
            self.assertEqual(observer.seen, {})

            o.array = l

            self.assertEqual(observer.seen, {"array": l})
            self.assertNotIn("indexes", observer.values[-1][-1])

            self.assertEqual(o.array[0], 1)

            v = o.array.pop(0)
            self.assertEqual(v, 1)
            self.assertEqual(o.array[0], 2)
            self.assertEqual(len(o.array), 3)

            self.assertEqual(observer.values[-1][-1]["indexes"], IS)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], [1])

            v = o.array.pop(2)
            self.assertEqual(v, 4)
            self.assertEqual(len(o.array), 2)

            self.assertEqual(observer.values[-1][-1]["indexes"], IS2)
            self.assertNotIn("new", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], [4])

            self.assertRaises(TypeError, o.array.pop, slice(0, 2))
            self.assertRaises(TypeError, o.array.pop, "a")

        finally:
            observer.unregister(o, "array")
Ejemplo n.º 57
0
    def testSetting(self):
        # Set value, check that
        # (1) value gets copied
        # (2) accessing the property result in proxy
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, "array")
        try:
            self.assertEqual(observer.seen, {})
            self.assertEqual(len(o.array), 0)
            self.assertEqual(observer.seen, {"array": []})
            o.array = l
            self.assertEqual(observer.seen, {"array": l})

            self.assertEqual(len(o.array), 3)

            # This shouldn't affect the property
            l.append(4)
            self.assertEqual(len(o.array), 3)

            self.assertEqual(len(l), 4)
            o.array.append(5)
            self.assertEqual(len(l), 4)
            self.assertEqual(len(o.array), 4)

        finally:
            observer.unregister(o, "array")

        l = [1, 2]
        o.array2 = l
        self.assertIsNot(o._array2, l)

        o.array2 = o.array
        self.assertEqual(o.array2, [1, 2, 3, 5])
        o.array2.append(1)
        self.assertEqual(o.array2, [1, 2, 3, 5, 1])
        self.assertEqual(o.array, [1, 2, 3, 5])

        arr = o.array2
        o._array2 = None
        self.assertEqual(arr, [])
Ejemplo n.º 58
0
    def testInsert(self):
        # Use insert method and check that the correct
        # KVO events get emitted
        # Same as testGetSetItem, but using slice
        observer = OCObserve.alloc().init()
        l = [1, 2, 3]
        o = TestArrayPropertyHelper.alloc().init()
        observer.register(o, 'array')

        try:
            IS = NSIndexSet.alloc().initWithIndex_(0)
            IS1 = NSIndexSet.alloc().initWithIndex_(4)
            self.assertEquals(len(observer.values), 0)

            o.array = l

            self.assertEquals(len(observer.values), 1)
            self.assertNotIn('indexes', observer.values[-1][-1])

            self.assertEquals(o.array[0], 1)


            o.array.insert(0, 'a')
            self.assertEquals(o.array[0], 'a')
            self.assertEquals(len(o.array), 4)

            self.assertEquals(len(observer.values), 2)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['new'], ['a'])

            o.array.insert(4, 'b')
            self.assertEquals(o.array[4], 'b')
            self.assertEquals(len(o.array), 5)

            self.assertEquals(len(observer.values), 3)
            self.assertEquals(observer.values[-1][-1]['indexes'], IS1)
            self.assertNotIn('old', observer.values[-1][-1])
            self.assertEquals(observer.values[-1][-1]['new'], ['b'])

        finally:
            observer.unregister(o, 'array')
Ejemplo n.º 59
0
    def testDefault(self):
        observer = OCObserve.alloc().init()

        o = TestDictPropertyHelper.alloc().init()
        observer.register(o, "aDict")

        cleanup = []
        try:
            self.assertEqual(len(o.aDict), 0)
            self.assertEqual(o.aDict, {})

            seen = {v[1]: v[2]["new"] for v in observer.values}
            self.assertEqual(seen, {"aDict": {}})

            o.aDict["key"] = 42
            seen = {v[1]: v[2]["new"] for v in observer.values}
            self.assertEqual(seen, {"aDict": {"key": 42}})

            observer.register(o, "aDict.key")
            cleanup.append(lambda: observer.unregister(o, "aDict.key"))

            o.aDict["key"] = 43
            seen = {v[1]: v[2]["new"] for v in observer.values}
            self.assertEqual(seen, {"aDict": {"key": 43}, "aDict.key": 43})

            self.assertNotIn("indexes", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], 42)
            self.assertEqual(observer.values[-1][-1]["new"], 43)

            del o.aDict["key"]

            seen = {v[1]: v[2]["new"] for v in observer.values}
            self.assertEqual(seen, {"aDict": {}, "aDict.key": None})
            self.assertNotIn("indexes", observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]["old"], 43)
            self.assertEqual(observer.values[-1][-1]["new"], None)

        finally:
            observer.unregister(o, "aDict")
            for func in cleanup[::-1]:
                func()
Ejemplo n.º 60
0
    def testDefault(self):
        observer = OCObserve.alloc().init()

        o = TestDictPropertyHelper.alloc().init()
        observer.register(o, 'aDict')

        cleanup = []
        try:
            self.assertEqual(len(o.aDict), 0)
            self.assertEqual(o.aDict, {})

            seen = { v[1]: v[2]['new'] for v in observer.values }
            self.assertEqual(seen, {'aDict': {}})

            o.aDict['key'] = 42
            seen = { v[1]: v[2]['new'] for v in observer.values }
            self.assertEqual(seen, {'aDict': { 'key': 42}})

            observer.register(o, 'aDict.key')
            cleanup.append(lambda: observer.unregister(o, 'aDict.key'))

            o.aDict['key'] = 43
            seen = { v[1]: v[2]['new'] for v in observer.values }
            self.assertEqual(seen, {'aDict': { 'key': 43}, 'aDict.key': 43})

            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], 42)
            self.assertEqual(observer.values[-1][-1]['new'], 43)

            del o.aDict['key']

            seen = { v[1]: v[2]['new'] for v in observer.values }
            self.assertEqual(seen, {'aDict': {}, 'aDict.key': None})
            self.assertNotIn('indexes', observer.values[-1][-1])
            self.assertEqual(observer.values[-1][-1]['old'], 43)
            self.assertEqual(observer.values[-1][-1]['new'], None)

        finally:
            observer.unregister(o, 'aDict')
            for func in cleanup[::-1]:
                func()