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

Source Code for Module moap.test.test_vcs_git

  1  # -*- Mode: Python; test-case-name: moap.test.test_vcs_git -*- 
  2  # vi:si:et:sw=4:sts=4:ts=4 
  3   
  4  import os 
  5  import commands 
  6  import tempfile 
  7   
  8  from moap.vcs import git 
  9   
 10  from moap.test import common 
 11   
12 -class GitTestCase(common.TestCase):
13 if os.system('git --version > /dev/null 2>&1') != 0: 14 skip = "No 'git' binary, skipping test." 15
16 - def setUp(self):
17 self.repository = tempfile.mkdtemp(prefix="moap.test.repo.") 18 self.oldPath = os.getcwd() 19 os.chdir(self.repository) 20 os.system('git init > /dev/null') 21 # we actually need to have something in there before we can clone 22 h = open('README', 'w') 23 h.write('README') 24 h.close() 25 26 os.system('git add README > /dev/null') 27 os.system('git commit -a -m "readme" > /dev/null') 28 29 os.chdir(self.oldPath) 30 self.checkout = tempfile.mkdtemp(prefix="moap.test.checkout.") 31 os.rmdir(self.checkout) 32 cmd = 'git clone %s %s > /dev/null' % (self.repository, self.checkout) 33 (status, output) = commands.getstatusoutput(cmd) 34 print output 35 self.failIf(status, "Non-null status %r" % status)
36
37 - def tearDown(self):
38 os.chdir(self.oldPath) 39 os.system('rm -rf %s' % self.checkout) 40 os.system('rm -rf %s' % self.repository)
41
42 -class TestDetect(GitTestCase):
43 - def testDetectRepository(self):
44 # the repository is equal to a checkout 45 self.failUnless(git.detect(self.repository))
46
47 - def testDetectCheckout(self):
48 # should succeed 49 self.failUnless(git.detect(self.checkout))
50
51 - def testHalfCheckout(self):
52 # should fail 53 checkout = tempfile.mkdtemp(prefix="moap.test.") 54 os.mkdir(os.path.join(checkout, '.git')) 55 self.failIf(git.detect(checkout)) 56 os.system('rm -rf %s' % checkout)
57
58 -class TestCommit(GitTestCase):
59 - def testQuotedCommit(self):
60 filename = os.path.join(self.checkout, 'one_line_file.txt') 61 open(filename, 'w').write('This is one line file.\n') 62 os.chdir(self.checkout) 63 cmd = 'git add one_line_file.txt' 64 (status, output) = commands.getstatusoutput(cmd) 65 self.failIf(status, "Non-null status %r, output %r" % (status, output)) 66 67 v = git.VCSClass(self.checkout) 68 self.failUnless(v) 69 v.commit(['one_line_file.txt', ], "I contain quotes like ' and \"")
70
71 -class TestTree(GitTestCase):
72 - def testGit(self):
73 v = git.VCSClass(self.checkout) 74 self.failUnless(v) 75 76 paths = ['test/test1.py', 'test/test2.py', 'test/test3/test4.py', 77 'test5.py', 'test6/', 'test/test7/'] 78 tree = v.createTree(paths) 79 keys = tree.keys() 80 keys.sort() 81 self.assertEquals(keys, ['', 'test', 'test/test3']) 82 self.failUnless('test1.py' in tree['test']) 83 self.failUnless('test2.py' in tree['test']) 84 self.failUnless('test7' in tree['test']) 85 self.failUnless('test4.py' in tree['test/test3']) 86 self.failUnless('test5.py' in tree[''], tree['']) 87 self.failUnless('test6' in tree[''], tree[''])
88
89 -class TestIgnore(GitTestCase):
90 - def testGetUnignored(self):
91 v = git.VCSClass(self.checkout) 92 self.failUnless(v) 93 94 self.assertEquals(v.getUnknown(v.path), []) 95 96 path = os.path.join(self.checkout, 'test') 97 handle = open(path, 'w') 98 handle.write('test') 99 handle.close() 100 101 self.assertEquals(v.getUnknown(v.path), ['test']) 102 103 v.ignore(['test', ]) 104 105 self.assertEquals(v.getUnknown(v.path), [])
106