Issues (30)

tests/test_diff.py (2 issues)

1
import unittest, os
2
from mock import Mock, patch, call
3
from tests.ditest import DependencyInjectionTestBase
4
5
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):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
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):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
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
140
141
142