Package moap :: Package test :: Module test_vcs_svn
[hide private]
[frames] | no frames]

Source Code for Module moap.test.test_vcs_svn

  1  # -*- Mode: Python; test-case-name: moap.test.test_vcs_svn -*- 
  2  # vi:si:et:sw=4:sts=4:ts=4 
  3   
  4  import common 
  5   
  6  import os 
  7  import commands 
  8  import tempfile 
  9   
 10  from moap.util import log 
 11  from moap.vcs import svn 
 12   
13 -class SVNTestCase(common.SVNTestCase):
14 if os.system('svn --version > /dev/null 2>&1') != 0: 15 skip = "No 'svn' binary, skipping test." 16
17 - def setUp(self):
18 self.repository = self.createRepository() 19 self.livedir = self.createLive() 20 cmd = 'svn checkout file://%s %s' % (self.repository, self.livedir) 21 (status, output) = commands.getstatusoutput(cmd) 22 self.failIf(status)
23
24 - def tearDown(self):
25 os.system('rm -rf %s' % self.livedir) 26 os.system('rm -rf %s' % self.repository)
27
28 -class TestDetect(SVNTestCase):
29 - def testDetectRepository(self):
30 # should fail 31 self.failIf(svn.detect(self.repository))
32
33 - def testDetectCheckout(self):
34 # should succeed 35 self.failUnless(svn.detect(self.livedir))
36
37 - def testHalfCheckout(self):
38 # should fail 39 checkout = tempfile.mkdtemp(prefix="moap.test.") 40 os.mkdir(os.path.join(checkout, '.svn')) 41 self.failIf(svn.detect(checkout)) 42 os.system('rm -rf %s' % checkout)
43
44 -class TestTree(SVNTestCase):
45 - def testSVN(self):
46 v = svn.VCSClass(self.livedir) 47 self.failUnless(v) 48 49 paths = ['test/test1.py', 'test/test2.py', 'test/test3/test4.py', 50 'test5.py', 'test6/', 'test/test7/'] 51 tree = v.createTree(paths) 52 keys = tree.keys() 53 keys.sort() 54 self.assertEquals(keys, ['', 'test', 'test/test3']) 55 self.failUnless('test1.py' in tree['test']) 56 self.failUnless('test2.py' in tree['test']) 57 self.failUnless('test7' in tree['test']) 58 self.failUnless('test4.py' in tree['test/test3']) 59 self.failUnless('test5.py' in tree[''], tree['']) 60 self.failUnless('test6' in tree[''], tree[''])
61
62 -class TestIgnore(SVNTestCase):
63 - def testGetUnignored(self):
64 v = svn.VCSClass(self.livedir) 65 self.failUnless(v) 66 67 self.assertEquals(v.getUnknown(v.path), []) 68 69 path = self.liveWriteFile('test', 'test') 70 71 self.assertEquals(v.getUnknown(v.path), ['test']) 72 73 v.ignore([path, ]) 74 75 self.assertEquals(v.getUnknown(v.path), [])
76
77 -class TestDiff(SVNTestCase):
78 - def testNoDiff(self):
79 v = svn.VCSClass(self.livedir) 80 self.failUnless(v) 81 82 self.assertEquals(v.diff(self.livedir), "")
83
84 - def testNewFileDiff(self):
85 v = svn.VCSClass(self.livedir) 86 self.failUnless(v) 87 88 # create a file 89 path = self.liveWriteFile('test', "test\n") 90 91 # add it without committing 92 os.system('svn add %s' % path) 93 94 # make sure we have the proper number of lines; 95 # Index, =, -, +, location, actual change 96 # there should be no empty line 97 diff = v.diff(self.livedir) 98 lines = diff.split('\n') 99 self.assertEquals(len(lines), 6) 100 self.failIfEquals(diff[-1], '\n')
101 102
103 - def testGetChanges(self):
104 v = svn.VCSClass(self.livedir) 105 self.failUnless(v) 106 107 file = os.path.join(os.path.dirname(__file__), 'diff', 108 'svn_add_one_line.diff') 109 d = open(file).read() 110 c = v.getChanges(None, d) 111 # one line added in moap/vcs/svn.py at 105 112 self.assertEquals(len(c.keys()), 1) 113 self.failUnless(c.has_key('moap/vcs/svn.py')) 114 self.assertEquals(c['moap/vcs/svn.py'], [(105, 0, 105, 1)])
115
116 - def testGetChangesMultiple(self):
117 v = svn.VCSClass(self.livedir) 118 self.failUnless(v) 119 120 file = os.path.join(os.path.dirname(__file__), 'diff', 121 'svn_multiple.diff') 122 d = open(file).read() 123 c = v.getChanges(None, d) 124 125 # three files changed 126 self.assertEquals(len(c.keys()), 3) 127 128 self.failUnless(c.has_key('moap/vcs/vcs.py')) 129 self.assertEquals(c['moap/vcs/vcs.py'], [ 130 (8, 0, 8, 1), 131 (114, 0, 115, 42), 132 ])
133 151
152 - def testAddFirstLast(self):
153 v = svn.VCSClass(self.livedir) 154 self.failUnless(v) 155 156 file = os.path.join(os.path.dirname(__file__), 'diff', 157 'svn_add_first_last_line.diff') 158 d = open(file).read() 159 c = v.getChanges(None, d) 160 161 # one file changed 162 self.assertEquals(len(c.keys()), 1) 163 164 self.failUnless(c.has_key('moap/vcs/svn.py')) 165 self.assertEquals(c['moap/vcs/svn.py'], [ 166 (1, 0, 1, 1), 167 (117, 0, 118, 1), 168 ])
169
171 # property changes used to break the diff; see #252 172 # only breaks when there's a second file after a first file's 173 # property changes 174 v = svn.VCSClass(self.livedir) 175 self.failUnless(v) 176 177 # create a file 178 path = self.liveWriteFile('test', "test\n") 179 path2 = self.liveWriteFile('test2', "test\n") 180 181 # add it 182 os.system('svn add %s' % path) 183 os.system('svn add %s' % path2) 184 os.system('svn commit -m "test" %s' % self.livedir) 185 186 # change the files 187 self.liveWriteFile('test', "test change\n") 188 self.liveWriteFile('test2', "test 2 change\n") 189 190 # change property on it 191 os.system('svn ps property value %s' % path) 192 193 # now get changes 194 c = v.getChanges(self.livedir) 195 self.assertEquals(c[path], [ 196 (1, 1, 1, 1), 197 ]) 198 self.assertEquals(c[path2], [ 199 (1, 1, 1, 1), 200 ])
201
202 -class TestChangeProperties(SVNTestCase):
203 - def testGetPropertyChanges(self):
204 v = svn.VCSClass(self.livedir) 205 self.failUnless(v) 206 207 # create a file 208 path = self.liveWriteFile('test', "test\n") 209 path2 = self.liveWriteFile('test2', "test\n") 210 211 # add it 212 os.system('svn add %s' % path) 213 os.system('svn add %s' % path2) 214 os.system('svn commit -m "test" %s' % self.livedir) 215 216 # change property on it 217 os.system('svn ps svn:property value %s' % path) 218 os.system('svn ps svn:property value %s' % path2) 219 os.system('svn ps svn:property2 value %s' % path2) 220 221 # now get changes 222 c = v.getPropertyChanges(self.livedir) 223 self.assertEquals(c, { 224 path: ['svn:property', ], 225 path2: ['svn:property', 'svn:property2'], 226 })
227
228 -class TestAddDelete(SVNTestCase):
229 - def testGetAddedDeleted(self):
230 v = svn.VCSClass(self.livedir) 231 self.failUnless(v) 232 233 # create a file 234 path = self.liveWriteFile('test', "test\n") 235 236 # add it without committing 237 os.system('svn add %s' % path) 238 239 paths = v.getAdded(self.livedir) 240 self.assertEquals(paths, ['test', ]) 241 242 # now commit 243 os.system('svn commit -m "test" %s' % self.livedir) 244 245 paths = v.getAdded(self.livedir) 246 self.failIf(paths) 247 248 # now delete 249 os.system('svn delete %s' % path) 250 paths = v.getDeleted(self.livedir) 251 self.assertEquals(paths, ['test', ]) 252 paths = v.getAdded(self.livedir) 253 self.failIf(paths) 254 255 # now commit 256 os.system('svn commit -m "test" %s' % self.livedir) 257 258 paths = v.getAdded(self.livedir) 259 self.failIf(paths) 260 paths = v.getDeleted(self.livedir) 261 self.failIf(paths)
262
263 -class TestBackupRestore(SVNTestCase):
264 - def setUp(self):
265 SVNTestCase.setUp(self) 266 self.vcs = svn.VCSClass(self.livedir) 267 self.failUnless(self.vcs)
268
269 - def assertBackupRestore(self):
270 # do a backup and restore and check 271 fd, archive = tempfile.mkstemp(suffix='.tar.gz', prefix="moap.test.") 272 os.close(fd) 273 274 # backup does a test restore 275 log.debug('test', 'backing up archive %s', archive) 276 self.vcs.backup(archive) 277 278 os.unlink(archive)
279
280 - def testBackupRestore(self):
281 v = svn.VCSClass(self.livedir) 282 self.failUnless(v) 283 284 # create a file 285 path = self.liveWriteFile('test', "test\n") 286 287 self.assertBackupRestore() 288 289 # add it without committing 290 os.system('svn add %s' % path) 291 # FIXME: doesn't work yet; the fact that it was added is not recorded 292 # in the archive 293 # self.assertBackupRestore() 294 295 # now commit 296 os.system('svn commit -m "test" %s' % self.livedir) 297 self.assertBackupRestore() 298 299 # now delete 300 os.system('svn delete %s' % path) 301 # FIXME: doesn't work yet; the fact that it was deleted is not recorded 302 # in the archive 303 # self.assertBackupRestore() 304 305 # now commit 306 os.system('svn commit -m "test" %s' % self.livedir) 307 self.assertBackupRestore() 308 309 # FIXME: do more 310 return 311 312 paths = v.getAdded(self.livedir) 313 self.failIf(paths) 314 315 316 paths = v.getAdded(self.livedir) 317 self.failIf(paths) 318 paths = v.getDeleted(self.livedir) 319 self.failIf(paths)
320