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)
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)
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)