Beispiel #1
0
    def test_dot_lookup_with_parent_unary_true(self):
        a = {'a': 1}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a')
        self.assertTrue(is_unary)
        # when is_unary is true, modification on res will not be reflected on 
        # original object.
        res = 2
        self.assertEqual(a['a'], 1)
        # but modifications on parent will be re reflected on original object.
        parent['a'] = 2
        self.assertEqual(a['a'], 2)

        a = {'a': 'b'}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a')
        self.assertTrue(is_unary)
        res = 'c'
        self.assertEqual(a['a'], 'b')
        parent['a'] = 'c'
        self.assertEqual(a['a'], 'c')

        a = {'a': True}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a')
        self.assertTrue(is_unary)
        res = False
        self.assertEqual(a['a'], True)
        parent['a'] = False
        self.assertEqual(a['a'], False)

        a = {'a': long(1)}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a')
        self.assertTrue(is_unary)
        res = long(2)
        self.assertEqual(a['a'], long(1))
        parent['a'] = long(2)
        self.assertEqual(a['a'], long(2))

        a = {'a': u'中文'}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a')
        self.assertTrue(is_unary)
        res = False
        self.assertEqual(a['a'], u'中文')
        parent['a'] = False
        self.assertEqual(a['a'], False)
Beispiel #2
0
    def test_dot_lookup_with_parent_unary_false(self):
        a = {'a': [1, "h", {'b': 2}]}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a')
        self.assertFalse(is_unary)
        # when is_unary == false, modifications on res will directly reflected on original
        # object.  but with some exceptions, see below
        # print '---------: ', a
        res[0] = 2
        self.assertEqual(a['a'][0], 2)

        # exceptions:
        #   del(res)     : will not delete on original object
        #   res = None   : will not work

        # print '---------: ', a
        del(res)
        self.assertEqual(a['a'][0], 2)
        # print '---------: ', a

        res = None
        self.assertEqual(a['a'][0], 2)
        # print '---------: ', a

        parent.pop('a')
        self.assertEqual(a, {})
        # print '---------: ', a


        a = {'a': [1, "h", {'b': 2}]}
        # print "parent: %s, res: %s" % (parent, res)
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a.[2]')
        self.assertFalse(is_unary)
        res['b'] = 3
        self.assertEqual(a['a'][2]['b'], 3)

        a = {'a':{'b':[{'c': [{'d':[{'e': 1, 'f': 2}]}]}]}, 'b': 1}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a.b.[0].c.[0].d.[0]')
        self.assertFalse(is_unary)
        print "parent: %s, res: %s" % (parent, res)
        res['f'] = 100
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a.b.[0].c.[0].d.[0].f')
        self.assertEqual(res, 100)
Beispiel #3
0
    def test_dot_lookup_with_dot_key(self):
        a = {'a.b': 1, 'a': {'b': 2}}
        res = dictdiff.dot_lookup(a, 'a\.b')
        self.assertEqual(res, 1)
        res = dictdiff.dot_lookup(a, 'a.b')
        self.assertEqual(res, 2)

        a = {'a.b.c': 1, 'a': {'b':{'c': 2}}}
        res = dictdiff.dot_lookup(a, 'a\.b\.c')
        self.assertEqual(res, 1)
        res = dictdiff.dot_lookup(a, 'a.b.c')
        self.assertEqual(res, 2)

        a = {'a.b.c': 1, 'a': {'b':{'c': 2}}}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a\.b\.c')
        self.assertEqual(res, 1)

        a = {'a.b': {'c': 1}}
        parent, k, res, is_unary = dictdiff.dot_lookup_with_parent(a, 'a\.b.c')
        self.assertEqual(res, 1)
        self.assertEqual(parent['c'], 1)