def test_patch_2(self):
        a = {'a':{'b':[{'c': [{'d':[{'e': 1, 'f': 2}]}]}]}, 'b': 1}
        b = {'a':{'b':[{'c': [{'d':[{'e': 1}]}]}]}, 'b': 5}
        print " 1 ====================-----"
        print " 1 ---- ", a
        diff1 = dictdiff.diff(a, b)
        print diff1
        dictdiff.patch(a, diff1)
        print " 1 ---- ", a
        print " 1 ====================-----"

        with self.assertRaises(KeyError):
            dictdiff.dot_lookup(a, 'a.b.[0].c.[0].d.[0].f')
        self.assertEqual(a['b'], 5)
    def test_dot_lookup_2(self):
        """
        make sure we cannot modify original object with return result of dot_lookup
        """
        a = {'a': 1}
        res = dictdiff.dot_lookup(a, 'a')
        res = 2
        self.assertEqual(a['a'], 1)

        a = {'a': [1, "h", {'b': 2}]}
        res = dictdiff.dot_lookup(a, 'a')
        res[0] = 2
        self.assertEqual(a['a'][0], 1)

        res = dictdiff.dot_lookup(a, 'a.[2]')
        res['b'] = 3
        self.assertEqual(a['a'][2]['b'], 2)
    def test_dot_lookup_1(self):
        # simple change
        a = {'a':{'b':[{'c': [{'d':[{'e': 1, 'f': 2}]}]}]}, 'b': 1}
        res = dictdiff.dot_lookup(a, 'a')
        print res
        self.assertEqual(type(res), type({}))
        res = dictdiff.dot_lookup(a, 'a.b')
        self.assertEqual(type(res), type([]))

        res = dictdiff.dot_lookup(a, 'a.b.[0].c.[0].d.[0].f')
        print res
        self.assertEqual(res, 2)

        res = dictdiff.dot_lookup(a, 'a.b.[0].c.[0].d.[0]')
        print res
        self.assertEqual(res['e'], 1)
        self.assertEqual(res['f'], 2)
    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)