瀏覽代碼

22 unit tests

Matthew Wang 11 年之前
父節點
當前提交
1d69bb2125
共有 1 個檔案被更改,包括 163 行新增5 行删除
  1. 163
    5
      tests/test_cdiff.py

+ 163
- 5
tests/test_cdiff.py 查看文件

@@ -7,15 +7,173 @@ import sys
7 7
 if sys.hexversion < 0x02050000:
8 8
     raise SystemExit("*** Requires python >= 2.5.0")
9 9
 
10
-sys.path.insert(0, '..')
11
-
12 10
 import unittest
11
+
12
+sys.path.insert(0, '')
13 13
 import cdiff
14 14
 
15
-class TestCdiff(unittest.TestCase):
16 15
 
17
-    def test_foo(self):
18
-        self.assertTrue(1)
16
+class Sequential(object):
17
+    """A non-seekable iterator, mock of file object"""
18
+
19
+    def __init__(self, items):
20
+        self._items = items
21
+        self._index = 0
22
+
23
+    def __iter__(self):
24
+        while True:
25
+            try:
26
+                item = self._items[self._index]
27
+            except IndexError:
28
+                raise StopIteration
29
+            yield item
30
+            self._index += 1
31
+
32
+    def readline(self):
33
+        try:
34
+            item = self._items[self._index]
35
+        except IndexError:
36
+            return ''
37
+        self._index += 1
38
+        return item
39
+
40
+
41
+class TestPatchStream(unittest.TestCase):
42
+
43
+    def test_is_empty(self):
44
+        stream = cdiff.PatchStream(Sequential([]))
45
+        self.assertTrue(stream.is_empty())
46
+
47
+        stream = cdiff.PatchStream(Sequential(['hello', 'world']))
48
+        self.assertFalse(stream.is_empty())
49
+
50
+    def test_read_stream_header(self):
51
+        stream = cdiff.PatchStream(Sequential([]))
52
+        self.assertEqual(
53
+                stream.read_stream_header(1),
54
+                [])
55
+
56
+        items = ['hello', 'world', 'again']
57
+
58
+        stream = cdiff.PatchStream(Sequential(items))
59
+        self.assertEqual(stream.read_stream_header(2), items[:2])
60
+
61
+        stream = cdiff.PatchStream(Sequential(items))
62
+        self.assertEqual(stream.read_stream_header(4), items[:])
63
+
64
+    def test_iter_after_read_stream_header(self):
65
+        items = ['hello', 'world', 'again', 'and', 'again']
66
+        stream = cdiff.PatchStream(Sequential(items))
67
+
68
+        out = []
69
+        _ = stream.read_stream_header(2)
70
+        for item in stream:
71
+            out.append(item)
72
+        self.assertEqual(out, items)
73
+
74
+
75
+class TestHunk(unittest.TestCase):
76
+
77
+    def test_mdiff(self):
78
+        pass
79
+
80
+    def test_get_old_text(self):
81
+        pass
82
+
83
+    def test_get_new_text(self):
84
+        pass
85
+
86
+
87
+class TestDiff(unittest.TestCase):
88
+
89
+    def test_markup_mix(self):
90
+        pass
91
+
92
+    def test_markup_traditional(self):
93
+        pass
94
+
95
+    def test_markup_side_by_side(self):
96
+        pass
97
+
98
+
99
+class TestUdiff(unittest.TestCase):
100
+
101
+    diff = cdiff.Udiff(None, None, None, None)
102
+
103
+    def test_is_hunk_meta_normal(self):
104
+        self.assertTrue(self.diff.is_hunk_meta('@@ -1 +1 @@'))
105
+        self.assertTrue(self.diff.is_hunk_meta('@@ -3,7 +3,6 @@'))
106
+        self.assertTrue(self.diff.is_hunk_meta('@@ -3,7 +3,6 @@ class Foo'))
107
+        self.assertTrue(self.diff.is_hunk_meta('@@ -3,7 +3,6 @@ class Foo\n'))
108
+        self.assertTrue(self.diff.is_hunk_meta('@@ -3,7 +3,6 @@ class Foo\r\n'))
109
+
110
+    def test_is_hunk_meta_svn_prop(self):
111
+        self.assertTrue(self.diff.is_hunk_meta('## -0,0 +1 ##'))
112
+        self.assertTrue(self.diff.is_hunk_meta('## -0,0 +1 ##\n'))
113
+        self.assertTrue(self.diff.is_hunk_meta('## -0,0 +1 ##\r\n'))
114
+
115
+    def test_is_hunk_meta_neg(self):
116
+        self.assertFalse(self.diff.is_hunk_meta('@@ -1 + @@'))
117
+        self.assertFalse(self.diff.is_hunk_meta('@@ -this is not a hunk meta'))
118
+        self.assertFalse(self.diff.is_hunk_meta('## -this is not either'))
119
+
120
+    def test_parse_hunk_meta_normal(self):
121
+        self.assertEqual(
122
+                self.diff.parse_hunk_meta('@@ -3,7 +3,6 @@'),
123
+                ((3, 7), (3, 6)))
124
+
125
+    def test_parse_hunk_meta_missing(self):
126
+        self.assertEqual(
127
+                self.diff.parse_hunk_meta('@@ -3 +3,6 @@'),
128
+                ((3, 0), (3, 6)))
129
+        self.assertEqual(
130
+                self.diff.parse_hunk_meta('@@ -3,7 +3 @@'),
131
+                ((3, 7), (3, 0)))
132
+        self.assertEqual(
133
+                self.diff.parse_hunk_meta('@@ -3 +3 @@'),
134
+                ((3, 0), (3, 0)))
135
+
136
+    def test_parse_hunk_meta_svn_prop(self):
137
+        self.assertEqual(
138
+                self.diff.parse_hunk_meta('## -0,0 +1 ##'),
139
+                ((0, 0), (1, 0)))
140
+
141
+    def test_is_old(self):
142
+        self.assertTrue(self.diff.is_old('-hello world'))
143
+        self.assertTrue(self.diff.is_old('----'))           # yaml
144
+
145
+    def test_is_old_neg(self):
146
+        self.assertFalse(self.diff.is_old('--- considered as old path'))
147
+        self.assertFalse(self.diff.is_old('-------------')) # svn log --diff
148
+
149
+    def test_is_new(self):
150
+        self.assertTrue(self.diff.is_new('+hello world'))
151
+        self.assertTrue(self.diff.is_new('++++hello world'))
152
+
153
+    def test_is_new_neg(self):
154
+        self.assertFalse(self.diff.is_new('+++ considered as new path'))
155
+
156
+
157
+class TestDiffParser(unittest.TestCase):
158
+
159
+    def test_type_detect(self):
160
+        items = ['spam\n', '--- README\n', '+++ README\n', '@@ -3,7 +3,6 @@\n']
161
+        stream = cdiff.PatchStream(Sequential(items))
162
+        parser = cdiff.DiffParser(stream)
163
+        self.assertEqual(parser._type, 'udiff')
164
+
165
+    def test_type_detect_neg(self):
166
+        items = ['spam\n', '--- README\n', '+++ README\n', 'spam\n']
167
+        stream = cdiff.PatchStream(Sequential(items))
168
+        try:
169
+            parser = cdiff.DiffParser(stream)
170
+        except:
171
+            e = sys.exc_info()[1]
172
+            self.assertTrue(isinstance(e, RuntimeError))
173
+
174
+    def test_parser(self):
175
+        pass
176
+
19 177
 
20 178
 if __name__ == '__main__':
21 179
     unittest.main()