martin f. krafft | f37f068 | 2013-06-14 16:36:20 +0200 | [diff] [blame] | 1 | # |
| 2 | # -*- coding: utf-8 -*- |
| 3 | # |
| 4 | # This file is part of reclass (http://github.com/madduck/reclass) |
| 5 | # |
| 6 | # Copyright © 2007–13 martin f. krafft <madduck@madduck.net> |
| 7 | # Released under the terms of the Artistic Licence 2.0 |
| 8 | # |
| 9 | from test_update import TestDictUpdate |
| 10 | from mergers.dict import DictRecursiveUpdate |
| 11 | |
| 12 | class TestDictRecursiveUpdate(TestDictUpdate): |
| 13 | |
| 14 | def setUp(self): |
| 15 | self.merger = DictRecursiveUpdate() |
| 16 | |
| 17 | def test_simple_recursive_dict_update(self): |
| 18 | first = {'one':{1:1,2:3,3:2}} |
| 19 | second = {'one':{2:2,3:3,4:4}} |
| 20 | ret = self.merger.merge(first, second) |
| 21 | assert len(ret) == 1 |
| 22 | for k,v in ret['one'].iteritems(): |
| 23 | assert k == v |
| 24 | |
| 25 | def test_complex_recursive_dict_update(self): |
| 26 | first = {'one': 1, |
| 27 | 'two': {'a':92,'b':94}, |
| 28 | 'three': {'third':0.33,'two thirds':0.67}, |
| 29 | 'four': {1:{1:1},2:{2:2},3:{3:4}} |
| 30 | } |
| 31 | second = {'five': 5, |
| 32 | 'one': 1, |
| 33 | 'two': {'b':93,'c':94}, |
| 34 | 'four': {4:{4:4}, 3:{3:3}}, |
| 35 | } |
| 36 | ret = self.merger.merge(first, second) |
| 37 | assert ret['one'] == 1 |
| 38 | assert len(ret['two']) == 3 |
| 39 | assert ret['two']['b'] == 93 |
| 40 | assert len(ret['three']) == 2 |
| 41 | assert len(ret['four']) == 4 |
| 42 | for i in range(1,4): |
| 43 | assert len(ret['four'][i]) == 1 |
| 44 | for k,v in ret['four'][i].iteritems(): |
| 45 | assert k == v |