source: tailor/vcpx/tests/svn.py @ 900

Revision 900, 9.3 KB checked in by lele@…, 8 years ago (diff)

Cosmetic

Line 
1# -*- mode: python; coding: utf-8 -*-
2# :Progetto: vcpx -- svn specific tests
3# :Creato:   gio 11 nov 2004 19:09:06 CET
4# :Autore:   Lele Gaifax <lele@nautilus.homeip.net>
5# :Licenza:  GNU General Public License
6#
7
8from unittest import TestCase
9from datetime import datetime
10from StringIO import StringIO
11from vcpx.svn import changesets_from_svnlog
12
13class SvnLogParser(TestCase):
14    """Ensure the svn log parser does its job"""
15
16    def getSvnLog(self, testname):
17        from os.path import join, split
18
19        logname = join(split(__file__)[0], 'data', testname)+'.log'
20        return file(logname)
21
22    def testRenameBehaviour(self):
23        """Verify svn log parser behaves correctly on renames"""
24
25        log = self.getSvnLog('svn-simple_rename_test')
26        csets = changesets_from_svnlog(log, 'file:///tmp/t/repo', '/trunk')
27        self.assertEqual(len(csets), 2)
28
29        cset = csets[0]
30        self.assertEqual(cset.author, 'lele')
31        self.assertEqual(cset.date, datetime(2004,11,12,15,05,37,134366))
32        self.assertEqual(cset.log, 'create tree')
33        self.assertEqual(len(cset.entries), 2)
34
35        entry = cset.entries[0]
36        self.assertEqual(entry.name, 'dir')
37        self.assertEqual(entry.action_kind, entry.ADDED)
38
39        entry = cset.entries[1]
40        self.assertEqual(entry.name, 'dir/a.txt')
41        self.assertEqual(entry.action_kind, entry.ADDED)
42
43        cset = csets[1]
44        self.assertEqual(cset.author, 'lele')
45        self.assertEqual(cset.date, datetime(2004,11,12,15,06,04,193650))
46        self.assertEqual(cset.log, 'rename dir')
47        self.assertEqual(len(cset.entries), 1)
48
49        entry = cset.entries[0]
50        self.assertEqual(entry.name, 'new')
51        self.assertEqual(entry.action_kind, entry.RENAMED)
52        self.assertEqual(entry.old_name, 'dir')
53
54    def testRenameOutBehaviour(self):
55        """Verify svn log parser behaves correctly on renames out of scope"""
56
57        log = self.getSvnLog('svn-rename_out_test')
58        csets = changesets_from_svnlog(log, 'http://srv/svn/Shtoom', '/trunk')
59        self.assertEqual(len(csets), 1)
60
61        cset = csets[0]
62        self.assertEqual(cset.author, 'anthony')
63        self.assertEqual(cset.date, datetime(2004,11,9,6,54,20,709243))
64        self.assertEqual(cset.log, 'Moving to a /sandbox')
65        self.assertEqual(len(cset.entries), 1)
66
67        entry = cset.entries[0]
68        self.assertEqual(entry.name, 'shtoom/tmp')
69        self.assertEqual(entry.action_kind, entry.DELETED)
70
71    def testCopyAndRename(self):
72        """Verify svn log parser behaves correctly on copies"""
73
74        log = self.getSvnLog('svn-copy_and_rename_test')
75        csets = changesets_from_svnlog(log, 'file:///tmp/rep', '/test')
76        self.assertEqual(len(csets), 4)
77
78        cset = csets[1]
79        self.assertEqual(cset.author, 'lele')
80        self.assertEqual(cset.date, datetime(2005,1,8, 17,36,55,174757))
81        self.assertEqual(cset.log, 'Copy')
82        self.assertEqual(len(cset.entries), 1)
83
84        entry = cset.entries[0]
85        self.assertEqual(entry.name, 'file2.txt')
86        self.assertEqual(entry.action_kind, entry.ADDED)
87        self.assertEqual(entry.old_name, 'file1.txt')
88
89        cset = csets[2]
90        self.assertEqual(cset.date, datetime(2005,1,8, 17,42,41,347315))
91        self.assertEqual(cset.log, 'Remove')
92        self.assertEqual(len(cset.entries), 1)
93
94        entry = cset.entries[0]
95        self.assertEqual(entry.name, 'file1.txt')
96        self.assertEqual(entry.action_kind, entry.DELETED)
97
98        cset = csets[3]
99        self.assertEqual(cset.date, datetime(2005,1,8, 17,43,9,909127))
100        self.assertEqual(cset.log, 'Move')
101        self.assertEqual(len(cset.entries), 1)
102
103        entry = cset.entries[0]
104        self.assertEqual(entry.name, 'file1.txt')
105        self.assertEqual(entry.action_kind, entry.RENAMED)
106        self.assertEqual(entry.old_name, 'file2.txt')
107
108    def testREvent(self):
109        """Verify how tailor handle svn "R" event"""
110
111        log = self.getSvnLog('svn-svn_r_event_test')
112        csets = changesets_from_svnlog(log, 'file:///tmp/rep', '/trunk')
113        self.assertEqual(len(csets), 2)
114
115        cset = csets[1]
116        self.assertEqual(cset.author, 'cmlenz')
117        self.assertEqual(cset.date, datetime(2005,3,21, 8,34,02,522947))
118        self.assertEqual(len(cset.entries), 7)
119
120        entry = cset.entries[0]
121        self.assertEqual(entry.name, 'scripts/trac-admin')
122        self.assertEqual(entry.action_kind, entry.ADDED)
123
124        entry = cset.entries[1]
125        self.assertEqual(entry.name, 'setup.py')
126        self.assertEqual(entry.action_kind, entry.UPDATED)
127
128        entry = cset.entries[2]
129        self.assertEqual(entry.name, 'trac/scripts')
130        self.assertEqual(entry.action_kind, entry.ADDED)
131
132        entry = cset.entries[3]
133        self.assertEqual(entry.name, 'trac/scripts/__init__.py')
134        self.assertEqual(entry.action_kind, entry.ADDED)
135
136        entry = cset.entries[4]
137        self.assertEqual(entry.name, 'trac/scripts/admin.py')
138        self.assertEqual(entry.action_kind, entry.RENAMED)
139        self.assertEqual(entry.old_name, 'scripts/trac-admin')
140
141        entry = cset.entries[5]
142        self.assertEqual(entry.name, 'trac/tests/environment.py')
143        self.assertEqual(entry.action_kind, entry.UPDATED)
144
145    def testTrackingRoot(self):
146        """Verify we are able to track the root of the repository"""
147
148        log = self.getSvnLog('svn-svn_repos_root_test')
149        csets = changesets_from_svnlog(log, 'svn+ssh://caia/tmp/svn', '/')
150        self.assertEqual(len(csets), 4)
151
152        cset = csets[1]
153        self.assertEqual(len(cset.entries), 3)
154
155        entry = cset.entries[0]
156        self.assertEqual(entry.name, 'branches/branch-a')
157        self.assertEqual(entry.action_kind, entry.ADDED)
158
159        entry = cset.entries[1]
160        self.assertEqual(entry.name, 'branches/branch-a/a.txt')
161        self.assertEqual(entry.action_kind, entry.ADDED)
162
163        entry = cset.entries[2]
164        self.assertEqual(entry.name, 'branches/branch-a/b.txt')
165        self.assertEqual(entry.action_kind, entry.ADDED)
166
167    def testPydistStrangeCase(self):
168        """Verify we are able to groke with svn 'R' strangeness"""
169
170        log = self.getSvnLog('svn-pydist_strange_case')
171        csets = changesets_from_svnlog(log, 'http://srv/svn', '/py/dist')
172
173        self.assertEqual(len(csets), 1)
174
175        cset = csets[0]
176        self.assertEqual(len(cset.entries), 3)
177
178        entry = cset.entries[0]
179        self.assertEqual(entry.name, 'py/documentation/example')
180        self.assertEqual(entry.action_kind, entry.RENAMED)
181        self.assertEqual(entry.old_name, 'example')
182
183        entry = cset.entries[1]
184        self.assertEqual(entry.name, 'py/documentation/example/test')
185        self.assertEqual(entry.action_kind, entry.ADDED)
186
187        entry = cset.entries[2]
188        self.assertEqual(entry.name, 'py/documentation/test.txt')
189        self.assertEqual(entry.action_kind, entry.UPDATED)
190
191    def testUnicode(self):
192        """Verify svn parser returns unicode strings"""
193
194        log = self.getSvnLog('svn-encoding_test')
195        csets = changesets_from_svnlog(log, 'http://srv/plone/CMFPlone',
196                                       '/branches/2.1')
197
198        self.assertEqual(len(csets), 1)
199
200        log = csets[0].log
201        self.assertEqual(type(log), type(u'€'))
202        self.assertEqual(len(log), 91)
203        self.assertRaises(UnicodeEncodeError, log.encode, 'iso-8859-1')
204        self.assertEqual(len(log.encode('ascii', 'ignore')), 90)
205
206    def testCopyAndReplace(self):
207        """Verify the svn parser handle copy+replace"""
208
209        log = self.getSvnLog('svn-copy_and_replace_test')
210        csets = changesets_from_svnlog(log, 'http://srv/repos/trac', '/trunk')
211
212        self.assertEqual(len(csets), 1)
213
214        cset = csets[0]
215        self.assertEqual(len(cset.entries), 7)
216
217        entry = cset.entries[0]
218        self.assertEqual(entry.name, 'scripts/trac-admin')
219        self.assertEqual(entry.action_kind, entry.ADDED)
220
221        entry = cset.entries[1]
222        self.assertEqual(entry.name, 'setup.py')
223        self.assertEqual(entry.action_kind, entry.UPDATED)
224
225        entry = cset.entries[2]
226        self.assertEqual(entry.name, 'trac/scripts')
227        self.assertEqual(entry.action_kind, entry.ADDED)
228
229        entry = cset.entries[3]
230        self.assertEqual(entry.name, 'trac/scripts/__init__.py')
231        self.assertEqual(entry.action_kind, entry.ADDED)
232
233        entry = cset.entries[4]
234        self.assertEqual(entry.name, 'trac/scripts/admin.py')
235        self.assertEqual(entry.action_kind, entry.RENAMED)
236        self.assertEqual(entry.old_name, 'scripts/trac-admin')
237
238    def testCopyFromAndRemove(self):
239        """Verify the svn parser handle copyfrom+remove"""
240
241        log = self.getSvnLog('svn-copyfrom_and_remove_test')
242        csets = changesets_from_svnlog(log, 'http://srv/samba',
243                                       '/branches/SAMBA_4_0')
244
245        self.assertEqual(len(csets), 1)
246
247        cset = csets[0]
248        self.assertEqual(len(cset.entries), 3)
249
250        entry = cset.entries[0]
251        self.assertEqual(entry.name, 'source/nsswitch')
252        self.assertEqual(entry.action_kind, entry.ADDED)
253
254        entry = cset.entries[1]
255        self.assertEqual(entry.name, 'source/nsswitch/config.m4')
256        self.assertEqual(entry.action_kind, entry.ADDED)
257
258        entry = cset.entries[2]
259        self.assertEqual(entry.name, 'source/nsswitch/wb_common.c')
260        self.assertEqual(entry.action_kind, entry.ADDED)
Note: See TracBrowser for help on using the repository browser.