| Total Complexity | 12 |
| Total Lines | 72 |
| Duplicated Lines | 27.78 % |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | # |
||
| 73 | class Test_20_make(unittest.TestCase): |
||
| 74 | |||
| 75 | def test_00_null(self): |
||
| 76 | md0 = TT.make() |
||
| 77 | |||
| 78 | # check if md0 is an object of base and default class: |
||
| 79 | self.assertTrue(isinstance(md0, MD.UpdateWithReplaceDict)) |
||
| 80 | self.assertTrue(isinstance(md0, MD.UpdateWithMergeDict)) |
||
| 81 | self.assertTrue(not md0) |
||
| 82 | |||
| 83 | View Code Duplication | def test_10_default(self): |
|
|
|
|||
| 84 | md0 = TT.make(_CNF_0) |
||
| 85 | |||
| 86 | self.assertTrue(isinstance(md0, MD.UpdateWithReplaceDict)) |
||
| 87 | self.assertTrue(isinstance(md0, MD.UpdateWithMergeDict)) |
||
| 88 | self.assertTrue(isinstance(md0["b"], MD.UpdateWithReplaceDict)) |
||
| 89 | self.assertTrue(isinstance(md0["b"], MD.UpdateWithMergeDict)) |
||
| 90 | for k in "name a c e f".split(): |
||
| 91 | self.assertTrue(md0[k] == _CNF_0[k], |
||
| 92 | "%r vs. %r" % (md0[k], _CNF_0[k])) |
||
| 93 | |||
| 94 | def test_20_merge(self): |
||
| 95 | md1 = TT.make(_CNF_0, merge=MG.MS_REPLACE) |
||
| 96 | md2 = TT.make(_CNF_0, merge=MG.MS_NO_REPLACE) |
||
| 97 | md3 = TT.make(_CNF_0, merge=MG.MS_DICTS_AND_LISTS) |
||
| 98 | |||
| 99 | self.assertTrue(isinstance(md1, MD.UpdateWithReplaceDict)) |
||
| 100 | self.assertTrue(isinstance(md2, MD.UpdateWoReplaceDict)) |
||
| 101 | self.assertTrue(isinstance(md3, MD.UpdateWithMergeListsDict)) |
||
| 102 | |||
| 103 | for idx, mdn in enumerate((md1, md2, md3)): |
||
| 104 | self.assertTrue(isinstance(mdn["b"], type(mdn)), |
||
| 105 | "#%d %r (%r)" % (idx, mdn["b"], type(mdn["b"]))) |
||
| 106 | for k in "name a c e f".split(): |
||
| 107 | self.assertTrue(mdn[k] == _CNF_0[k], |
||
| 108 | "%r vs. %r" % (mdn[k], _CNF_0[k])) |
||
| 109 | |||
| 110 | raised = False |
||
| 111 | md4 = None |
||
| 112 | try: |
||
| 113 | md4 = TT.make(_CNF_0, merge="invalid_merge") |
||
| 114 | except ValueError: |
||
| 115 | raised = True |
||
| 116 | self.assertTrue(raised, "md4 = %r" % type(md4)) |
||
| 117 | |||
| 118 | View Code Duplication | def test_30_ordered(self): |
|
| 119 | md0 = TT.make(_CNF_0, ordered=True) |
||
| 120 | |||
| 121 | self.assertTrue(isinstance(md0, MD.UpdateWithReplaceDict)) |
||
| 122 | self.assertTrue(isinstance(md0, MD.UpdateWithMergeOrderedDict)) |
||
| 123 | self.assertTrue(isinstance(md0["b"], MD.UpdateWithReplaceDict)) |
||
| 124 | self.assertTrue(isinstance(md0["b"], MD.UpdateWithMergeOrderedDict)) |
||
| 125 | for k in "name a c e f".split(): |
||
| 126 | self.assertTrue(md0[k] == _CNF_0[k], |
||
| 127 | "%r vs. %r" % (md0[k], _CNF_0[k])) |
||
| 128 | |||
| 129 | def test_40_namedtuple(self): |
||
| 130 | _point = collections.namedtuple("Point", "x y") |
||
| 131 | _triangle = collections.namedtuple("Triangle", "p0 p1 p2") |
||
| 132 | obj = _triangle(_point(0, 0), _point(1, 0), _point(0, 1)) |
||
| 133 | md0 = TT.make(obj) |
||
| 134 | |||
| 135 | self.assertTrue(isinstance(md0, MD.UpdateWithMergeOrderedDict)) |
||
| 136 | self.assertTrue(isinstance(md0["p0"], MD.UpdateWithMergeOrderedDict)) |
||
| 137 | |||
| 138 | for k in "p0 p1 p2".split(): |
||
| 139 | self.assertEqual(md0[MG.NTPL_CLS_KEY], "Triangle") |
||
| 140 | for k2 in "x y".split(): |
||
| 141 | self.assertEqual(md0[k][MG.NTPL_CLS_KEY], "Point") |
||
| 142 | ref = getattr(getattr(obj, k), k2) |
||
| 143 | self.assertTrue(md0[k][k2] == ref, |
||
| 144 | "%r vs. %r" % (md0[k][k2], ref)) |
||
| 145 | |||
| 175 |