annotate tests/test_fetch_command.py @ 23:1f8854804795

Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
author Augie Fackler <durin42@gmail.com>
date Wed, 08 Oct 2008 20:37:01 -0500
parents 95d0109e495e
children 99f8e4b535e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
1 import os
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
2 import shutil
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
3 import tempfile
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
4 import unittest
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
5
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
6 from mercurial import hg
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
7 from mercurial import ui
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
8 from mercurial import node
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
9
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
10 import fetch_command
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents: 15
diff changeset
11 import test_util
14
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
12
18
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
13
14
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
14 class TestBasicRepoLayout(unittest.TestCase):
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
15 def setUp(self):
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
16 self.oldwd = os.getcwd()
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
17 self.tmpdir = tempfile.mkdtemp('svnwrap_test')
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
18 self.repo_path = '%s/testrepo' % self.tmpdir
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
19 self.wc_path = '%s/testrepo_wc' % self.tmpdir
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
20
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
21 def tearDown(self):
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
22 shutil.rmtree(self.tmpdir)
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
23 os.chdir(self.oldwd)
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
24
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
25 def _load_fixture_and_fetch(self, fixture_name):
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
26 return test_util.load_fixture_and_fetch(fixture_name, self.repo_path,
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
27 self.wc_path)
14
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
28
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
29 def test_fresh_fetch_single_rev(self):
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
30 repo = self._load_fixture_and_fetch('single_rev.svndump')
21
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
31 self.assertEqual(node.hex(repo['tip'].node()),
14
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
32 'a47d0ce778660a91c31bf2c21c448e9ee296ac90')
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
33 self.assertEqual(repo['tip'], repo[0])
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
34
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
35 def test_fresh_fetch_two_revs(self):
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
36 repo = self._load_fixture_and_fetch('two_revs.svndump')
14
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
37 # TODO there must be a better way than repo[0] for this check
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
38 self.assertEqual(node.hex(repo[0].node()),
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
39 'a47d0ce778660a91c31bf2c21c448e9ee296ac90')
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
40 self.assertEqual(node.hex(repo['tip'].node()),
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
41 'bf3767835b3b32ecc775a298c2fa27134dd91c11')
d78dbf88c13d Started a meaningful test suite.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
42 self.assertEqual(repo['tip'], repo[1])
15
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
43
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
44 def test_branches(self):
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
45 repo = self._load_fixture_and_fetch('simple_branch.svndump')
15
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
46 # TODO there must be a better way than repo[0] for this check
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
47 self.assertEqual(node.hex(repo[0].node()),
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
48 'a47d0ce778660a91c31bf2c21c448e9ee296ac90')
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
49 self.assertEqual(node.hex(repo['tip'].node()),
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
50 '9dfb0a19494f45c36e22f3c6d1b21d80638a7f6e')
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
51 self.assertEqual(len(repo['tip'].parents()), 1)
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
52 self.assertEqual(repo['tip'].parents()[0], repo['default'])
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
53 self.assertEqual(len(repo.heads()), 1)
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
54
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
55 def test_two_branches_with_heads(self):
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
56 repo = self._load_fixture_and_fetch('two_heads.svndump')
15
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
57 # TODO there must be a better way than repo[0] for this check
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
58 self.assertEqual(node.hex(repo[0].node()),
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
59 'a47d0ce778660a91c31bf2c21c448e9ee296ac90')
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
60 self.assertEqual(node.hex(repo['tip'].node()),
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
61 'a595c77cfcaa3d1ba9e04b2c55c68bc6bf2b0fbf')
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
62 self.assertEqual(node.hex(repo['the_branch'].node()),
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
63 '8ccaba5f0eae124487e413abd904a013f7f6fdeb')
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
64 self.assertEqual(node.hex(repo['the_branch'].parents()[0].node()),
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
65 '9dfb0a19494f45c36e22f3c6d1b21d80638a7f6e')
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
66 self.assertEqual(len(repo['tip'].parents()), 1)
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
67 self.assertEqual(repo['tip'], repo['default'])
db32dee803a8 Add some basic tests of branching.
Augie Fackler <durin42@gmail.com>
parents: 14
diff changeset
68 self.assertEqual(len(repo.heads()), 2)
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents: 15
diff changeset
69
21
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
70 def test_many_special_cases_replay(self):
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
71 repo = self._load_fixture_and_fetch('many_special_cases.svndump')
21
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
72 # TODO there must be a better way than repo[0] for this check
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
73 self._many_special_cases_checks(repo)
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
74
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
75
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
76 def test_many_special_cases_diff(self):
22
95d0109e495e Refactor tests so I can reuse code more.
Augie Fackler <durin42@gmail.com>
parents: 21
diff changeset
77 repo = self._load_fixture_and_fetch('many_special_cases.svndump')
21
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
78 # TODO there must be a better way than repo[0] for this check
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
79 self._many_special_cases_checks(repo)
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
80
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
81 def _many_special_cases_checks(self, repo):
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
82 self.assertEqual(node.hex(repo[0].node()),
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
83 'a47d0ce778660a91c31bf2c21c448e9ee296ac90')
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
84 self.assertEqual(node.hex(repo['tip'].node()),
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
85 'a7742757189db8aea5f4c6721cbbfb1a09f00ddf')
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
86 self.assertEqual(node.hex(repo['the_branch'].node()),
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
87 '8ccaba5f0eae124487e413abd904a013f7f6fdeb')
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
88 self.assertEqual(node.hex(repo['the_branch'].parents()[0].node()),
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
89 '9dfb0a19494f45c36e22f3c6d1b21d80638a7f6e')
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
90 self.assertEqual(len(repo['tip'].parents()), 1)
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
91 self.assertEqual(repo['tip'], repo['default'])
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
92 self.assertEqual(len(repo.heads()), 2)
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
93
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
94
18
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
95 class TestStupidPull(unittest.TestCase):
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
96 def setUp(self):
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
97 self.oldwd = os.getcwd()
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
98 self.tmpdir = tempfile.mkdtemp('svnwrap_test')
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
99 self.repo_path = '%s/testrepo' % self.tmpdir
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
100 self.wc_path = '%s/testrepo_wc' % self.tmpdir
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
101
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
102 def tearDown(self):
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
103 shutil.rmtree(self.tmpdir)
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
104 os.chdir(self.oldwd)
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
105
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
106 def test_stupid(self):
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
107 test_util.load_svndump_fixture(self.repo_path, 'two_heads.svndump')
21
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
108 fetch_command.fetch_revisions(ui.ui(),
8626f3d2e50b Add a small stack of tests that exercise some of the interesting special cases.
Augie Fackler <durin42@gmail.com>
parents: 18
diff changeset
109 svn_url='file://%s' % self.repo_path,
18
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
110 hg_repo_path=self.wc_path,
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
111 stupid=True)
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
112 repo = hg.repository(ui.ui(), self.wc_path)
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
113 # TODO there must be a better way than repo[0] for this check
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
114 self.assertEqual(node.hex(repo[0].node()),
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
115 'a47d0ce778660a91c31bf2c21c448e9ee296ac90')
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
116 self.assertEqual(node.hex(repo['tip'].node()),
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
117 'a595c77cfcaa3d1ba9e04b2c55c68bc6bf2b0fbf')
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
118 self.assertEqual(node.hex(repo['the_branch'].node()),
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
119 '8ccaba5f0eae124487e413abd904a013f7f6fdeb')
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
120 self.assertEqual(node.hex(repo['the_branch'].parents()[0].node()),
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
121 '9dfb0a19494f45c36e22f3c6d1b21d80638a7f6e')
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
122 self.assertEqual(len(repo['tip'].parents()), 1)
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
123 self.assertEqual(repo['tip'], repo['default'])
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
124 self.assertEqual(len(repo.heads()), 2)
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
125
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents: 15
diff changeset
126 def suite():
18
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
127 all = [unittest.TestLoader().loadTestsFromTestCase(TestBasicRepoLayout),
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
128 unittest.TestLoader().loadTestsFromTestCase(TestStupidPull),
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
129 ]
f4c751037a4a Add a quick test for diff-based pull.
Augie Fackler <durin42@gmail.com>
parents: 16
diff changeset
130 return unittest.TestSuite(all)