| Total Complexity | 19 |
| Total Lines | 133 |
| Duplicated Lines | 16.54 % |
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 | import unittest, os |
||
| 6 | class DiffTests(DependencyInjectionTestBase): |
||
| 7 | |||
| 8 | def setUp(self): |
||
| 9 | super(DiffTests, self).setUp() |
||
| 10 | |||
| 11 | def test_areEqual_true_for_same_provenance(self): |
||
| 12 | from niprov.diff import Diff |
||
| 13 | diff = Diff(self.fileWithP({'a':1,'b':2}), |
||
| 14 | self.fileWithP({'a':1,'b':2})) |
||
| 15 | self.assertTrue(diff.areEqual()) |
||
| 16 | |||
| 17 | def test_areEqual_false_for_missing_key(self): |
||
| 18 | from niprov.diff import Diff |
||
| 19 | diff = Diff(self.fileWithP({'a':1,'b':2,'c':3}), |
||
| 20 | self.fileWithP({'a':1,'b':2})) |
||
| 21 | self.assertFalse(diff.areEqual()) |
||
| 22 | diff = Diff(self.fileWithP({'a':1,'b':2}), |
||
| 23 | self.fileWithP({'a':1,'b':2,'d':4})) |
||
| 24 | self.assertFalse(diff.areEqual()) |
||
| 25 | |||
| 26 | def test_areEqual_false_for_different_value(self): |
||
| 27 | from niprov.diff import Diff |
||
| 28 | diff = Diff(self.fileWithP({'a':1}), |
||
| 29 | self.fileWithP({'a':2})) |
||
| 30 | self.assertFalse(diff.areEqual()) |
||
| 31 | |||
| 32 | def test_can_ignore_key(self): |
||
| 33 | from niprov.diff import Diff |
||
| 34 | diff = Diff(self.fileWithP({'a':1}), |
||
| 35 | self.fileWithP({'a':1,'b':3})) |
||
| 36 | self.assertTrue(diff.areEqual(ignore=['b','c'])) |
||
| 37 | diff = Diff(self.fileWithP({'a':1,'b':3}), |
||
| 38 | self.fileWithP({'a':2,'b':3})) |
||
| 39 | self.assertTrue(diff.areEqual(ignore=['a','c'])) |
||
| 40 | |||
| 41 | def test_areEqual_ignores_id_by_default(self): |
||
| 42 | from niprov.diff import Diff |
||
| 43 | diff = Diff(self.fileWithP({'_id':1,'b':3}), |
||
| 44 | self.fileWithP({'_id':2,'b':3})) |
||
| 45 | self.assertTrue(diff.areEqual()) |
||
| 46 | diff = Diff(self.fileWithP({'_id':1,'b':3}), |
||
| 47 | self.fileWithP({'b':3})) |
||
| 48 | self.assertTrue(diff.areEqual()) |
||
| 49 | diff = Diff(self.fileWithP({'_id':1,'b':3}), |
||
| 50 | self.fileWithP({'b':3})) |
||
| 51 | self.assertTrue(diff.areEqual(ignore=['d'])) |
||
| 52 | |||
| 53 | def test_can_select_specific_keys_and_ignore_the_rest(self): |
||
| 54 | from niprov.diff import Diff |
||
| 55 | diff = Diff(self.fileWithP({'a':1,'b':2,'c':3}), |
||
| 56 | self.fileWithP({'a':1,'b':9,'c':3,'d':4})) |
||
| 57 | self.assertTrue(diff.areEqual(select=['a','c'])) |
||
| 58 | self.assertFalse(diff.areEqual(select=['b'])) |
||
| 59 | self.assertFalse(diff.areEqual(select=['d'])) |
||
| 60 | |||
| 61 | def test_assertEqual_throws_for_different_value(self): |
||
| 62 | from niprov.diff import Diff |
||
| 63 | diff = Diff(self.fileWithP({'a':1}), |
||
| 64 | self.fileWithP({'a':2})) |
||
| 65 | with self.assertRaises(AssertionError): |
||
| 66 | diff.assertEqual() |
||
| 67 | |||
| 68 | def test_areEqualProtocol_selects_on_BaseFile_getProtocolFields(self): |
||
| 69 | from niprov.diff import Diff |
||
| 70 | diff = Diff(self.fileWithP({'a':1,'x':7}, protocol=['x']), |
||
| 71 | self.fileWithP({'a':2,'x':7})) |
||
| 72 | self.assertTrue(diff.areEqualProtocol()) |
||
| 73 | diff = Diff(self.fileWithP({'a':1,'x':7}, protocol=['x']), |
||
| 74 | self.fileWithP({'a':2,'x':8})) |
||
| 75 | self.assertFalse(diff.areEqualProtocol()) |
||
| 76 | |||
| 77 | def test_assertEqualProtocol_throws_if_not_areEqualProtocol(self): |
||
| 78 | from niprov.diff import Diff |
||
| 79 | diff = Diff(self.fileWithP({'a':1,'x':7}, protocol=['x']), |
||
| 80 | self.fileWithP({'a':2,'x':8})) |
||
| 81 | with self.assertRaises(AssertionError): |
||
| 82 | diff.assertEqualProtocol() |
||
| 83 | |||
| 84 | View Code Duplication | def test_getDifferenceString(self): |
|
|
|
|||
| 85 | from niprov.diff import Diff |
||
| 86 | n = Diff.NCHARSCOL |
||
| 87 | diff = Diff(self.fileWithP({'a':1}), |
||
| 88 | self.fileWithP({'a':2,'b':3})) |
||
| 89 | diffStr = diff.getDifferenceString() |
||
| 90 | line = ' '.ljust(n)+'afilename'.ljust(n)+' '+'afilename'.ljust(n) |
||
| 91 | self.assertIn(line, diffStr) |
||
| 92 | line = 'a'.ljust(n)+' '+str(1).ljust(n)+' '+str(2).ljust(n) |
||
| 93 | self.assertIn(line, diffStr) |
||
| 94 | line = 'b'.ljust(n)+' '+'n/a'.ljust(n)+' '+str(3).ljust(n) |
||
| 95 | self.assertIn(line, diffStr) |
||
| 96 | |||
| 97 | def test_assertEqual_exception_message_is_getDifferenceString(self): |
||
| 98 | from niprov.diff import Diff |
||
| 99 | n = Diff.NCHARSCOL |
||
| 100 | diff = Diff(self.fileWithP({'a':1}), |
||
| 101 | self.fileWithP({'a':2,'b':2})) |
||
| 102 | exception = None |
||
| 103 | try: |
||
| 104 | diff.assertEqual() |
||
| 105 | except AssertionError as e: |
||
| 106 | exception = e |
||
| 107 | self.assertIsNotNone(exception, 'No AssertionError raised') |
||
| 108 | self.assertEqual(diff.getDifferenceString(), str(e)) |
||
| 109 | |||
| 110 | def test_Diff_to_string_is_(self): |
||
| 111 | from niprov.diff import Diff |
||
| 112 | diff = Diff(self.fileWithP({'a':1}), |
||
| 113 | self.fileWithP({'a':2})) |
||
| 114 | self.assertEqual(diff.getDifferenceString(), str(diff)) |
||
| 115 | |||
| 116 | def test_getSame(self): |
||
| 117 | from niprov.diff import Diff |
||
| 118 | diff = Diff(self.fileWithP({'a':1,'b':2}), |
||
| 119 | self.fileWithP({'a':1,'b':3})) |
||
| 120 | self.assertEqual(diff.getSame(), {'a':'same'}) |
||
| 121 | |||
| 122 | View Code Duplication | def test_getSameString(self): |
|
| 123 | from niprov.diff import Diff |
||
| 124 | n = Diff.NCHARSCOL |
||
| 125 | diff = Diff(self.fileWithP({'a':1}), |
||
| 126 | self.fileWithP({'a':1,'b':3})) |
||
| 127 | diffStr = diff.getSameString() |
||
| 128 | line = ' '.ljust(n)+'afilename'.ljust(n)+' '+'afilename'.ljust(n) |
||
| 129 | self.assertIn(line, diffStr) |
||
| 130 | line = 'a'.ljust(n)+' '+str(1).ljust(n)+' '+str(1).ljust(n) |
||
| 131 | self.assertIn(line, diffStr) |
||
| 132 | |||
| 133 | def fileWithP(self, provenance, protocol=None): |
||
| 134 | mfile = Mock() |
||
| 135 | mfile.location = 'afilename' |
||
| 136 | mfile.getProvenance.return_value = provenance |
||
| 137 | mfile.getProtocolFields.return_value = protocol |
||
| 138 | return mfile |
||
| 139 | |||
| 142 |