예제 #1
0
 def test_cocoa_get(self):
     r = objc.lookUpClass('NSObject').alloc().init()
     self.assertEqual(KeyValueCoding.getKey(r, 'description'), r.description())
     self.assertEqual(KeyValueCoding.getKeyPath(r, 'description'), r.description())
     self.assertEqual(KeyValueCoding.getKeyPath(r, 'description.length'), len(r.description()))
     self.assertRaises(KeyError, KeyValueCoding.getKey, r, 'nosuchattr')
     self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'description.nosuchattr')
예제 #2
0
    def test_count(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
                { 'a' : 1 },
                { 'a' : 2, 'b': 4 },
                { 'a' : 3, 'b': 2 },
                { 'a' : 4 },
        ]
        self.assertEqual(arrayOperators.count(values, 'a'), len(values))
        self.assertEqual(arrayOperators.count(values, 'b'), len(values))
        self.assertEqual(arrayOperators.count(values, ()), len(values))
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@count'), len(values))
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@count.a'), len(values))
예제 #3
0
    def test_sum(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
                { 'a' : 1 },
                { 'a' : 2, 'b': 4 },
                { 'a' : 3, 'b': 2 },
                { 'a' : 4 },
        ]
        self.assertEqual(arrayOperators.sum(values, 'a'), 10)
        self.assertEqual(arrayOperators.sum(values, 'b'), 6)
        self.assertEqual(arrayOperators.sum(values, 'c'), 0)
        self.assertEqual(arrayOperators.sum([], 'b'), 0)
        self.assertRaises(KeyError, arrayOperators.sum, [], ())

        self.assertEqual(KeyValueCoding.getKeyPath(values, '@sum.a'), 10)
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@sum.b'), 6)
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@sum.c'), 0)
예제 #4
0
    def test_avg(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
                { 'a' : 1 },
                { 'a' : 2, 'b': 4 },
                { 'a' : 3, 'b': 2 },
                { 'a' : 4 },
        ]
        self.assertEqual(arrayOperators.avg(values, 'a'), 2.5)
        self.assertEqual(arrayOperators.avg(values, 'b'), 1.5)
        self.assertEqual(arrayOperators.avg(values, 'c'), 0)
        self.assertEqual(arrayOperators.avg([], 'b'), 0)
        self.assertRaises(KeyError, arrayOperators.avg, [], ())

        self.assertEqual(KeyValueCoding.getKeyPath(values, '@avg.a'), 2.5)
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@avg.b'), 1.5)
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@avg.c'), 0)
예제 #5
0
    def testMixedGraph2(self):
        arr = objc.lookUpClass('NSMutableArray').alloc().init()
        d1 = objc.lookUpClass('NSMutableDictionary').alloc().init()
        d2 = objc.lookUpClass('NSMutableDictionary').alloc().init()
        d3 = {}
        
        root = objc.lookUpClass('NSMutableDictionary').dictionaryWithDictionary_({ 'a': arr, 'd': d2 })

        arr.addObject_(d1)
        arr.addObject_(d3)
        d1['k'] = 1
        d3['k'] = 2

        KeyValueCoding.setKeyPath(root, 'd.a', 'the letter A')
        self.assertEqual(d2, {'a': 'the letter A', })

        self.assertEqual(KeyValueCoding.getKeyPath(root, 'd.a'), 'the letter A')
        self.assertEqual(KeyValueCoding.getKeyPath(arr, 'k'), [1, 2])
        self.assertEqual(KeyValueCoding.getKeyPath(root, 'a.k'), [1, 2])
예제 #6
0
    def test_distinctUnionOfObjects(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        class Int (object):
            def __init__(self, value):
                self._value = value

            def __repr__(self):
                return 'Int(%r)'%(self._value)

            def __eq__(self, other):
                if isinstance(other, int):
                    return self._value == other

                elif isinstance(other, Int):
                    return self._value == other._value

                else:
                    return False

            def __hash__(self): raise TypeError

        values = [
                { 'a' : { 'b': 1 } },
                { 'a' : { 'b': Int(1) } },
                { 'a' : { 'b': 2 } },
                { 'a' : { 'b': Int(3) } },
                { 'a' : { 'b': Int(3) } },
        ]
        
        self.assertEqual(arrayOperators.distinctUnionOfObjects(values, ('a', 'b')), [1, 2, 3 ])
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@distinctUnionOfObjects.a.b'), [1, 2, 3 ])

        values.append({'a': {}})
        self.assertRaises(KeyError, arrayOperators.distinctUnionOfObjects, values, ('a', 'b'))
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, values, '@distinctUnionOfObjects.a.b')

        class Rec (object):
            def __init__(self, b):
                self.b = b

            def __eq__(self, other):
                return type(self) == type(other) and self.b == other.b

            def __hash__(self): raise TypeError

        values = [
                { 'a' : Rec(1) },
                { 'a' : Rec(1) },
                { 'a' : Rec(2) },
                { 'a' : Rec(3) },
        ]
        self.assertEqual(arrayOperators.distinctUnionOfObjects(values, ('a', 'b')), [1, 2, 3 ])
예제 #7
0
    def test_attr_get(self):
        class Record (object):
            __slots__ = ('slot1', '__dict__')
            def __init__(self, **kwds):
                for k, v in kwds.items():
                    setattr(self, k, v)

            @property
            def prop1(self):
                return 'a property'

        r = Record(slot1=42, attr1='a')

        self.assertEqual(KeyValueCoding.getKey(r, 'slot1'), 42)
        self.assertEqual(KeyValueCoding.getKey(r, 'attr1'), 'a')
        self.assertEqual(KeyValueCoding.getKey(r, 'prop1'), 'a property')
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'slot1'), 42)
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1'), 'a')
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'prop1'), 'a property')

        r = Record(attr1=Record(attr2='b', attr3=[Record(a=1), Record(a=2, b='b')]))
        self.assertRaises(KeyError, KeyValueCoding.getKey, r, 'slot1')
        self.assertRaises(KeyError, KeyValueCoding.getKey, r, 'attr99')
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'slot1')
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'attr99')

        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1.attr2'), 'b')
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1.attr3.a'), [1, 2])
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1.attr3.b'), [null, 'b'])
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'attr3')
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'attr1.attr9')
예제 #8
0
    def test_max(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
                { 'a' : 1 },
                { 'a' : 2, 'b': 5 },
                { 'a' : 3, 'b': 2 },
                { 'a' : 4 },
        ]
        self.assertEqual(arrayOperators.max(values, 'a'), 4)
        self.assertEqual(arrayOperators.max(values, 'b'), 5)
        self.assertRaises(KeyError, arrayOperators.max, values, ())
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@max.a'), 4)
예제 #9
0
    def test_unionOfObjects(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
                { 'a' : { 'b': 1 } },
                { 'a' : { 'b': 1 } },
                { 'a' : { 'b': 2 } },
                { 'a' : { 'b': 3 } },
        ]
        
        self.assertEqual(arrayOperators.unionOfObjects(values, ('a', 'b')), [1, 1, 2, 3 ])
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@unionOfObjects.a.b'), [1, 1, 2, 3])

        values.append({'a': {}})
        self.assertRaises(KeyError, arrayOperators.unionOfObjects, values, ('a', 'b'))
예제 #10
0
    def test_unionOfObjects(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
                { 'a' : { 'b': 1 } },
                { 'a' : { 'b': 1 } },
                { 'a' : { 'b': 2 } },
                { 'a' : { 'b': 3 } },
        ]

        self.assertEqual(arrayOperators.unionOfObjects(values, ('a', 'b')), [1, 1, 2, 3 ])
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@unionOfObjects.a.b'), [1, 1, 2, 3])

        values.append({'a': {}})
        self.assertRaises(KeyError, arrayOperators.unionOfObjects, values, ('a', 'b'))
예제 #11
0
    def testMixedGraph2(self):
        arr = objc.lookUpClass("NSMutableArray").alloc().init()
        d1 = objc.lookUpClass("NSMutableDictionary").alloc().init()
        d2 = objc.lookUpClass("NSMutableDictionary").alloc().init()
        d3 = {}

        root = objc.lookUpClass(
            "NSMutableDictionary").dictionaryWithDictionary_({
                "a": arr,
                "d": d2
            })

        arr.addObject_(d1)
        arr.addObject_(d3)
        d1["k"] = 1
        d3["k"] = 2

        KeyValueCoding.setKeyPath(root, "d.a", "the letter A")
        self.assertEqual(d2, {"a": "the letter A"})

        self.assertEqual(KeyValueCoding.getKeyPath(root, "d.a"),
                         "the letter A")
        self.assertEqual(KeyValueCoding.getKeyPath(arr, "k"), [1, 2])
        self.assertEqual(KeyValueCoding.getKeyPath(root, "a.k"), [1, 2])
예제 #12
0
    def test_min(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        values = [
            {
                'a': 1
            },
            {
                'a': 2,
                'b': 5
            },
            {
                'a': 3,
                'b': 2
            },
            {
                'a': 4
            },
        ]
        self.assertEqual(arrayOperators.min(values, 'a'), 1)
        self.assertEqual(arrayOperators.min(values, 'b'), 2)
        self.assertRaises(KeyError, arrayOperators.min, values, ())
        self.assertEqual(KeyValueCoding.getKeyPath(values, '@min.a'), 1)
예제 #13
0
    def test_attr_get(self):
        class Record(object):
            __slots__ = ('slot1', '__dict__')

            def __init__(self, **kwds):
                for k, v in kwds.items():
                    setattr(self, k, v)

            @property
            def prop1(self):
                return 'a property'

        r = Record(slot1=42, attr1='a')

        self.assertEqual(KeyValueCoding.getKey(r, 'slot1'), 42)
        self.assertEqual(KeyValueCoding.getKey(r, 'attr1'), 'a')
        self.assertEqual(KeyValueCoding.getKey(r, 'prop1'), 'a property')
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'slot1'), 42)
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1'), 'a')
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'prop1'), 'a property')

        r = Record(
            attr1=Record(attr2='b', attr3=[Record(
                a=1), Record(a=2, b='b')]))
        self.assertRaises(KeyError, KeyValueCoding.getKey, r, 'slot1')
        self.assertRaises(KeyError, KeyValueCoding.getKey, r, 'attr99')
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'slot1')
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'attr99')

        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1.attr2'), 'b')
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1.attr3.a'), [1, 2])
        self.assertEqual(KeyValueCoding.getKeyPath(r, 'attr1.attr3.b'),
                         [null, 'b'])
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, 'attr3')
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r,
                          'attr1.attr9')
예제 #14
0
    def test_attr_get(self):
        class Record(object):
            __slots__ = ("slot1", "__dict__")

            def __init__(self, **kwds):
                for k, v in kwds.items():
                    setattr(self, k, v)

            @property
            def prop1(self):
                return "a property"

        r = Record(slot1=42, attr1="a")

        self.assertEqual(KeyValueCoding.getKey(r, "slot1"), 42)
        self.assertEqual(KeyValueCoding.getKey(r, "attr1"), "a")
        self.assertEqual(KeyValueCoding.getKey(r, "prop1"), "a property")
        self.assertEqual(KeyValueCoding.getKeyPath(r, "slot1"), 42)
        self.assertEqual(KeyValueCoding.getKeyPath(r, "attr1"), "a")
        self.assertEqual(KeyValueCoding.getKeyPath(r, "prop1"), "a property")

        r = Record(
            attr1=Record(attr2="b", attr3=[Record(
                a=1), Record(a=2, b="b")]))
        self.assertRaises(KeyError, KeyValueCoding.getKey, r, "slot1")
        self.assertRaises(KeyError, KeyValueCoding.getKey, r, "attr99")
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, "slot1")
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, "attr99")

        self.assertEqual(KeyValueCoding.getKeyPath(r, "attr1.attr2"), "b")
        self.assertEqual(KeyValueCoding.getKeyPath(r, "attr1.attr3.a"), [1, 2])
        self.assertEqual(KeyValueCoding.getKeyPath(r, "attr1.attr3.b"),
                         [null, "b"])
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r, "attr3")
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, r,
                          "attr1.attr9")
예제 #15
0
    def test_unionOfArrays(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        class Rec(object):
            def __init__(self, **kwds):
                for k, v in kwds.items():
                    setattr(self, k, v)

            def __eq__(self, other):
                return type(self) is type(
                    other) and self.__dict__ == other.__dict__

            def __hash__(self):
                raise TypeError

        class Str(object):
            def __init__(self, value):
                self._value = value

            def __repr__(self):
                return "Str(%r)" % (self._value)

            def __eq__(self, other):
                if isinstance(other, str):
                    return self._value == other

                elif isinstance(other, Str):
                    return self._value == other._value

                else:
                    return False

            def __hash__(self):
                raise TypeError

        transactions = [
            [
                {
                    "payee": "Green Power",
                    "amount": 120.0
                },
                {
                    "payee": "Green Power",
                    "amount": 150.0
                },
                {
                    "payee": Str("Green Power"),
                    "amount": 170.0
                },
                Rec(payee="Car Loan", amount=250.0),
                {
                    "payee": "Car Loan",
                    "amount": 250.0
                },
                {
                    "payee": "Car Loan",
                    "amount": 250.0
                },
                {
                    "payee": Str("General Cable"),
                    "amount": 120.0
                },
                {
                    "payee": "General Cable",
                    "amount": 155.0
                },
                Rec(payee="General Cable", amount=120.0),
                {
                    "payee": "Mortgage",
                    "amount": 1250.0
                },
                {
                    "payee": "Mortgage",
                    "amount": 1250.0
                },
                {
                    "payee": "Mortgage",
                    "amount": 1250.0
                },
                {
                    "payee": "Animal Hospital",
                    "amount": 600.0
                },
            ],
            [
                {
                    "payee": "General Cable - Cottage",
                    "amount": 120.0
                },
                {
                    "payee": "General Cable - Cottage",
                    "amount": 155.0
                },
                Rec(payee="General Cable - Cottage", amount=120.0),
                {
                    "payee": "Second Mortgage",
                    "amount": 1250.0
                },
                {
                    "payee": "Second Mortgage",
                    "amount": 1250.0
                },
                {
                    "payee": Str("Second Mortgage"),
                    "amount": 1250.0
                },
                {
                    "payee": "Hobby Shop",
                    "amount": 600.0
                },
            ],
        ]

        self.assertEqual(
            arrayOperators.distinctUnionOfArrays(transactions, ("payee", )),
            [
                "Green Power",
                "Car Loan",
                "General Cable",
                "Mortgage",
                "Animal Hospital",
                "General Cable - Cottage",
                "Second Mortgage",
                "Hobby Shop",
            ],
        )
        self.assertEqual(
            KeyValueCoding.getKeyPath(transactions,
                                      "@distinctUnionOfArrays.payee"),
            [
                "Green Power",
                "Car Loan",
                "General Cable",
                "Mortgage",
                "Animal Hospital",
                "General Cable - Cottage",
                "Second Mortgage",
                "Hobby Shop",
            ],
        )
        self.assertEqual(
            arrayOperators.unionOfArrays(transactions, ("payee", )),
            [
                "Green Power",
                "Green Power",
                "Green Power",
                "Car Loan",
                "Car Loan",
                "Car Loan",
                "General Cable",
                "General Cable",
                "General Cable",
                "Mortgage",
                "Mortgage",
                "Mortgage",
                "Animal Hospital",
                "General Cable - Cottage",
                "General Cable - Cottage",
                "General Cable - Cottage",
                "Second Mortgage",
                "Second Mortgage",
                "Second Mortgage",
                "Hobby Shop",
            ],
        )
        self.assertEqual(
            KeyValueCoding.getKeyPath(transactions, "@unionOfArrays.payee"),
            [
                "Green Power",
                "Green Power",
                "Green Power",
                "Car Loan",
                "Car Loan",
                "Car Loan",
                "General Cable",
                "General Cable",
                "General Cable",
                "Mortgage",
                "Mortgage",
                "Mortgage",
                "Animal Hospital",
                "General Cable - Cottage",
                "General Cable - Cottage",
                "General Cable - Cottage",
                "Second Mortgage",
                "Second Mortgage",
                "Second Mortgage",
                "Hobby Shop",
            ],
        )

        self.assertRaises(KeyError, arrayOperators.unionOfArrays, transactions,
                          "date")
        self.assertRaises(KeyError, arrayOperators.distinctUnionOfArrays,
                          transactions, "date")
예제 #16
0
    def test_distinctUnionOfObjects(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        class Int(object):
            def __init__(self, value):
                self._value = value

            def __repr__(self):
                return "Int(%r)" % (self._value)

            def __eq__(self, other):
                if isinstance(other, int):
                    return self._value == other

                elif isinstance(other, Int):
                    return self._value == other._value

                else:
                    return False

            def __hash__(self):
                raise TypeError

        values = [
            {
                "a": {
                    "b": 1
                }
            },
            {
                "a": {
                    "b": Int(1)
                }
            },
            {
                "a": {
                    "b": 2
                }
            },
            {
                "a": {
                    "b": Int(3)
                }
            },
            {
                "a": {
                    "b": Int(3)
                }
            },
        ]

        self.assertEqual(
            arrayOperators.distinctUnionOfObjects(values, ("a", "b")),
            [1, 2, 3])
        self.assertEqual(
            KeyValueCoding.getKeyPath(values, "@distinctUnionOfObjects.a.b"),
            [1, 2, 3])

        values.append({"a": {}})
        self.assertRaises(KeyError, arrayOperators.distinctUnionOfObjects,
                          values, ("a", "b"))
        self.assertRaises(KeyError, KeyValueCoding.getKeyPath, values,
                          "@distinctUnionOfObjects.a.b")

        class Rec(object):
            def __init__(self, b):
                self.b = b

            def __eq__(self, other):
                return type(self) == type(other) and self.b == other.b

            def __hash__(self):
                raise TypeError

        values = [{"a": Rec(1)}, {"a": Rec(1)}, {"a": Rec(2)}, {"a": Rec(3)}]
        self.assertEqual(
            arrayOperators.distinctUnionOfObjects(values, ("a", "b")),
            [1, 2, 3])
예제 #17
0
    def test_unionOfArrays(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        class Rec(object):
            def __init__(self, **kwds):
                for k, v in kwds.items():
                    setattr(self, k, v)

            def __eq__(self, other):
                return type(self) is type(
                    other) and self.__dict__ == other.__dict__

            def __hash__(self):
                raise TypeError

        class Str(object):
            def __init__(self, value):
                self._value = value

            def __repr__(self):
                return 'Str(%r)' % (self._value)

            def __eq__(self, other):
                if isinstance(other, str):
                    return self._value == other

                elif isinstance(other, Str):
                    return self._value == other._value

                else:
                    return False

            def __cmp__(self, other):
                if isinstance(other, str):
                    return cmp(self._value, other)

                elif isinstance(other, Str):
                    return cmp(self._value, other._value)

                else:
                    return NotImplementedError

            def __hash__(self):
                raise TypeError

        transactions = [[
            dict(payee='Green Power', amount=120.0),
            dict(payee='Green Power', amount=150.0),
            dict(payee=Str('Green Power'), amount=170.0),
            Rec(payee='Car Loan', amount=250.0),
            dict(payee='Car Loan', amount=250.0),
            dict(payee='Car Loan', amount=250.0),
            dict(payee=Str('General Cable'), amount=120.0),
            dict(payee='General Cable', amount=155.0),
            Rec(payee='General Cable', amount=120.0),
            dict(payee='Mortgage', amount=1250.0),
            dict(payee='Mortgage', amount=1250.0),
            dict(payee='Mortgage', amount=1250.0),
            dict(payee='Animal Hospital', amount=600.0),
        ],
                        [
                            dict(payee='General Cable - Cottage',
                                 amount=120.0),
                            dict(payee='General Cable - Cottage',
                                 amount=155.0),
                            Rec(payee='General Cable - Cottage', amount=120.0),
                            dict(payee='Second Mortgage', amount=1250.0),
                            dict(payee='Second Mortgage', amount=1250.0),
                            dict(payee=Str('Second Mortgage'), amount=1250.0),
                            dict(payee='Hobby Shop', amount=600.0),
                        ]]

        self.assertEqual(
            arrayOperators.distinctUnionOfArrays(transactions, ('payee', )), [
                'Green Power', 'Car Loan', 'General Cable', 'Mortgage',
                'Animal Hospital', 'General Cable - Cottage',
                'Second Mortgage', 'Hobby Shop'
            ])
        self.assertEqual(
            KeyValueCoding.getKeyPath(transactions,
                                      '@distinctUnionOfArrays.payee'),
            [
                'Green Power', 'Car Loan', 'General Cable', 'Mortgage',
                'Animal Hospital', 'General Cable - Cottage',
                'Second Mortgage', 'Hobby Shop'
            ])
        self.assertEqual(
            arrayOperators.unionOfArrays(transactions, ('payee', )), [
                'Green Power', 'Green Power', 'Green Power', 'Car Loan',
                'Car Loan', 'Car Loan', 'General Cable', 'General Cable',
                'General Cable', 'Mortgage', 'Mortgage', 'Mortgage',
                'Animal Hospital', 'General Cable - Cottage',
                'General Cable - Cottage', 'General Cable - Cottage',
                'Second Mortgage', 'Second Mortgage', 'Second Mortgage',
                'Hobby Shop'
            ])
        self.assertEqual(
            KeyValueCoding.getKeyPath(transactions, '@unionOfArrays.payee'), [
                'Green Power', 'Green Power', 'Green Power', 'Car Loan',
                'Car Loan', 'Car Loan', 'General Cable', 'General Cable',
                'General Cable', 'Mortgage', 'Mortgage', 'Mortgage',
                'Animal Hospital', 'General Cable - Cottage',
                'General Cable - Cottage', 'General Cable - Cottage',
                'Second Mortgage', 'Second Mortgage', 'Second Mortgage',
                'Hobby Shop'
            ])

        self.assertRaises(KeyError, arrayOperators.unionOfArrays, transactions,
                          'date')
        self.assertRaises(KeyError, arrayOperators.distinctUnionOfArrays,
                          transactions, 'date')
예제 #18
0
    def test_unionOfArrays(self):
        arrayOperators = KeyValueCoding._ArrayOperators

        class Rec (object):
            def __init__(self, **kwds):
                for k, v in kwds.items():
                    setattr(self, k, v)

            def __eq__(self, other):
                return type(self) is type(other) and self.__dict__ == other.__dict__

            def __hash__(self): raise TypeError

        class Str (object):
            def __init__(self, value):
                self._value = value

            def __repr__(self):
                return 'Str(%r)'%(self._value)

            def __eq__(self, other):
                if isinstance(other, str):
                    return self._value == other

                elif isinstance(other, Str):
                    return self._value == other._value

                else:
                    return False

            def __cmp__(self, other):
                if isinstance(other, str):
                    return cmp(self._value, other)

                elif isinstance(other, Str):
                    return cmp(self._value, other._value)

                else:
                    return NotImplementedError

            def __hash__(self): raise TypeError

        transactions = [
            [
                dict(payee='Green Power', amount=120.0),
                dict(payee='Green Power', amount=150.0),
                dict(payee=Str('Green Power'), amount=170.0),
                Rec(payee='Car Loan', amount=250.0),
                dict(payee='Car Loan', amount=250.0),
                dict(payee='Car Loan', amount=250.0),
                dict(payee=Str('General Cable'), amount=120.0),
                dict(payee='General Cable', amount=155.0),
                Rec(payee='General Cable', amount=120.0),
                dict(payee='Mortgage', amount=1250.0),
                dict(payee='Mortgage', amount=1250.0),
                dict(payee='Mortgage', amount=1250.0),
                dict(payee='Animal Hospital', amount=600.0),
            ],
            [
                dict(payee='General Cable - Cottage',   amount=120.0),
                dict(payee='General Cable - Cottage',   amount=155.0),
                Rec(payee='General Cable - Cottage',   amount=120.0),
                dict(payee='Second Mortgage',   amount=1250.0),
                dict(payee='Second Mortgage',   amount=1250.0),
                dict(payee=Str('Second Mortgage'),   amount=1250.0),
                dict(payee='Hobby Shop',   amount=600.0),
            ]
        ]

        self.assertEqual(arrayOperators.distinctUnionOfArrays(transactions, ('payee',)), ['Green Power', 'Car Loan', 'General Cable', 'Mortgage', 'Animal Hospital', 'General Cable - Cottage', 'Second Mortgage', 'Hobby Shop'])
        self.assertEqual(KeyValueCoding.getKeyPath(transactions, '@distinctUnionOfArrays.payee'), ['Green Power', 'Car Loan', 'General Cable', 'Mortgage', 'Animal Hospital', 'General Cable - Cottage', 'Second Mortgage', 'Hobby Shop'])
        self.assertEqual(arrayOperators.unionOfArrays(transactions, ('payee',)), [
            'Green Power', 
            'Green Power', 
            'Green Power', 
            'Car Loan', 
            'Car Loan', 
            'Car Loan', 
            'General Cable', 
            'General Cable', 
            'General Cable', 
            'Mortgage', 
            'Mortgage', 
            'Mortgage', 
            'Animal Hospital', 
            'General Cable - Cottage', 
            'General Cable - Cottage', 
            'General Cable - Cottage', 
            'Second Mortgage', 
            'Second Mortgage', 
            'Second Mortgage', 
            'Hobby Shop'
        ])
        self.assertEqual(KeyValueCoding.getKeyPath(transactions, '@unionOfArrays.payee'), [
            'Green Power', 
            'Green Power', 
            'Green Power', 
            'Car Loan', 
            'Car Loan', 
            'Car Loan', 
            'General Cable', 
            'General Cable', 
            'General Cable', 
            'Mortgage', 
            'Mortgage', 
            'Mortgage', 
            'Animal Hospital', 
            'General Cable - Cottage', 
            'General Cable - Cottage', 
            'General Cable - Cottage', 
            'Second Mortgage', 
            'Second Mortgage', 
            'Second Mortgage', 
            'Hobby Shop'
        ])

        self.assertRaises(KeyError, arrayOperators.unionOfArrays, transactions, 'date')
        self.assertRaises(KeyError, arrayOperators.distinctUnionOfArrays, transactions, 'date')
예제 #19
0
 def test_none_get(self):
     self.assertEqual(KeyValueCoding.getKey(None, "a"), None)
     self.assertEqual(KeyValueCoding.getKeyPath(None, "a"), None)
예제 #20
0
 def test_none_get(self):
     self.assertEqual(KeyValueCoding.getKey(None, 'a'), None)
     self.assertEqual(KeyValueCoding.getKeyPath(None, 'a'), None)