comparison tests/test_externals.py @ 304:ce676eff002b

First merge, totally untested.
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Fri, 01 May 2009 10:28:59 +0200
parents ba8e91a7c077
children 963d27a0b1c2
comparison
equal deleted inserted replaced
303:f423a8780832 304:ce676eff002b
1 import unittest 1 import os, unittest
2
3 from mercurial import commands
2 4
3 import svnexternals 5 import svnexternals
4 import test_util 6 import test_util
5
6 7
7 class TestFetchExternals(test_util.TestBase): 8 class TestFetchExternals(test_util.TestBase):
8 def test_externalsfile(self): 9 def test_externalsfile(self):
9 f = svnexternals.externalsfile() 10 f = svnexternals.externalsfile()
10 f['t1'] = 'dir1 -r10 svn://foobar' 11 f['t1'] = 'dir1 -r10 svn://foobar'
11 f['t 2'] = 'dir2 -r10 svn://foobar' 12 f['t 2'] = 'dir2 -r10 svn://foobar'
12 f['t3'] = ['dir31 -r10 svn://foobar', 'dir32 -r10 svn://foobar'] 13 f['t3'] = ['dir31 -r10 svn://foobar', 'dir32 -r10 svn://foobar']
13 14
14 refext = """\ 15 refext = """[t 2]
15 [t 2]
16 dir2 -r10 svn://foobar 16 dir2 -r10 svn://foobar
17 [t1] 17 [t1]
18 dir1 -r10 svn://foobar 18 dir1 -r10 svn://foobar
19 [t3] 19 [t3]
20 dir31 -r10 svn://foobar 20 dir31 -r10 svn://foobar
27 f2.read(value) 27 f2.read(value)
28 self.assertEqual(sorted(f), sorted(f2)) 28 self.assertEqual(sorted(f), sorted(f2))
29 for t in f: 29 for t in f:
30 self.assertEqual(f[t], f2[t]) 30 self.assertEqual(f[t], f2[t])
31 31
32 def test_parsedefinitions(self):
33 # Taken from svn book
34 samples = [
35 ('third-party/sounds http://svn.example.com/repos/sounds',
36 ('third-party/sounds', None, 'http://svn.example.com/repos/sounds')),
37 ('third-party/skins -r148 http://svn.example.com/skinproj',
38 ('third-party/skins', '148', 'http://svn.example.com/skinproj')),
39 ('third-party/skins -r 148 http://svn.example.com/skinproj',
40 ('third-party/skins', '148', 'http://svn.example.com/skinproj')),
41 ('http://svn.example.com/repos/sounds third-party/sounds',
42 ('third-party/sounds', None, 'http://svn.example.com/repos/sounds')),
43 ('-r148 http://svn.example.com/skinproj third-party/skins',
44 ('third-party/skins', '148', 'http://svn.example.com/skinproj')),
45 ('-r 148 http://svn.example.com/skinproj third-party/skins',
46 ('third-party/skins', '148', 'http://svn.example.com/skinproj')),
47 ('http://svn.example.com/skin-maker@21 third-party/skins/toolkit',
48 ('third-party/skins/toolkit', '21', 'http://svn.example.com/skin-maker')),
49 ]
50
51 for line, expected in samples:
52 self.assertEqual(expected, svnexternals.parsedefinition(line))
53
32 def test_externals(self, stupid=False): 54 def test_externals(self, stupid=False):
33 repo = self._load_fixture_and_fetch('externals.svndump', stupid=stupid) 55 repo = self._load_fixture_and_fetch('externals.svndump', stupid=stupid)
34 56
35 ref0 = """\ 57 ref0 = """[.]
36 [.]
37 ^/externals/project1 deps/project1 58 ^/externals/project1 deps/project1
38 """ 59 """
39 self.assertEqual(ref0, repo[0]['.hgsvnexternals'].data()) 60 self.assertEqual(ref0, repo[0]['.hgsvnexternals'].data())
40 ref1 = """\ 61 ref1 = """[.]
41 [.]
42 ^/externals/project1 deps/project1 62 ^/externals/project1 deps/project1
43 ^/externals/project2 deps/project2 63 ^/externals/project2 deps/project2
44 """ 64 """
45 self.assertEqual(ref1, repo[1]['.hgsvnexternals'].data()) 65 self.assertEqual(ref1, repo[1]['.hgsvnexternals'].data())
46 66
47 ref2 = """\ 67 ref2 = """[.]
48 [.]
49 ^/externals/project2 deps/project2 68 ^/externals/project2 deps/project2
50 [subdir] 69 [subdir]
51 ^/externals/project1 deps/project1 70 ^/externals/project1 deps/project1
52 [subdir2] 71 [subdir2]
53 ^/externals/project1 deps/project1 72 ^/externals/project1 deps/project1
54 """ 73 """
55 self.assertEqual(ref2, repo[2]['.hgsvnexternals'].data()) 74 actual = repo[2]['.hgsvnexternals'].data()
75 self.assertEqual(ref2, actual)
56 76
57 ref3 = """\ 77 ref3 = """[.]
58 [.]
59 ^/externals/project2 deps/project2 78 ^/externals/project2 deps/project2
60 [subdir] 79 [subdir]
61 ^/externals/project1 deps/project1 80 ^/externals/project1 deps/project1
62 """ 81 """
63 self.assertEqual(ref3, repo[3]['.hgsvnexternals'].data()) 82 self.assertEqual(ref3, repo[3]['.hgsvnexternals'].data())
64 83
65 ref4 = """\ 84 ref4 = """[subdir]
66 [subdir]
67 ^/externals/project1 deps/project1 85 ^/externals/project1 deps/project1
68 """ 86 """
69 self.assertEqual(ref4, repo[4]['.hgsvnexternals'].data()) 87 self.assertEqual(ref4, repo[4]['.hgsvnexternals'].data())
70 88
71 ref5 = """\ 89 ref5 = """[.]
72 [.]
73 ^/externals/project2 deps/project2 90 ^/externals/project2 deps/project2
74 [subdir2] 91 [subdir2]
75 ^/externals/project1 deps/project1 92 ^/externals/project1 deps/project1
76 """ 93 """
77 self.assertEqual(ref5, repo[5]['.hgsvnexternals'].data()) 94 self.assertEqual(ref5, repo[5]['.hgsvnexternals'].data())
78 95
79 ref6 = """\ 96 ref6 = """[.]
80 [.]
81 ^/externals/project2 deps/project2 97 ^/externals/project2 deps/project2
82 """ 98 """
83 self.assertEqual(ref6, repo[6]['.hgsvnexternals'].data()) 99 self.assertEqual(ref6, repo[6]['.hgsvnexternals'].data())
84 100
85 def test_externals_stupid(self): 101 def test_externals_stupid(self):
86 self.test_externals(True) 102 self.test_externals(True)
87 103
104 def test_updateexternals(self):
105 def checkdeps(deps, nodeps, repo, rev=None):
106 svnexternals.updateexternals(ui, [rev], repo)
107 for d in deps:
108 p = os.path.join(repo.root, d)
109 self.assertTrue(os.path.isdir(p),
110 'missing: %s@%r' % (d, rev))
111 for d in nodeps:
112 p = os.path.join(repo.root, d)
113 self.assertTrue(not os.path.isdir(p),
114 'unexpected: %s@%r' % (d, rev))
115
116 ui = test_util.ui.ui()
117 repo = self._load_fixture_and_fetch('externals.svndump', stupid=0)
118 commands.update(ui, repo)
119 checkdeps(['deps/project1'], [], repo, 0)
120 checkdeps(['deps/project1', 'deps/project2'], [], repo, 1)
121 checkdeps(['subdir/deps/project1', 'subdir2/deps/project1',
122 'deps/project2'],
123 ['deps/project1'], repo, 2)
124 checkdeps(['subdir/deps/project1', 'deps/project2'],
125 ['subdir2/deps/project1'], repo, 3)
126 checkdeps(['subdir/deps/project1'], ['deps/project2'], repo, 4)
88 127
89 class TestPushExternals(test_util.TestBase): 128 class TestPushExternals(test_util.TestBase):
90 def setUp(self): 129 def setUp(self):
91 test_util.TestBase.setUp(self) 130 test_util.TestBase.setUp(self)
92 test_util.load_fixture_and_fetch('pushexternals.svndump', 131 test_util.load_fixture_and_fetch('pushexternals.svndump',
94 self.wc_path) 133 self.wc_path)
95 134
96 def test_push_externals(self, stupid=False): 135 def test_push_externals(self, stupid=False):
97 # Add a new reference on an existing and non-existing directory 136 # Add a new reference on an existing and non-existing directory
98 changes = [ 137 changes = [
99 ('.hgsvnexternals', '.hgsvnexternals', 138 ('.hgsvnexternals', '.hgsvnexternals',
100 """\ 139 """[dir]
101 [dir]
102 ../externals/project2 deps/project2 140 ../externals/project2 deps/project2
103 [subdir1] 141 [subdir1]
104 ../externals/project1 deps/project1 142 ../externals/project1 deps/project1
105 [subdir2] 143 [subdir2]
106 ../externals/project2 deps/project2 144 ../externals/project2 deps/project2
113 self.assertchanges(changes, self.repo['tip']) 151 self.assertchanges(changes, self.repo['tip'])
114 152
115 # Remove all references from one directory, add a new one 153 # Remove all references from one directory, add a new one
116 # to the other (test multiline entries) 154 # to the other (test multiline entries)
117 changes = [ 155 changes = [
118 ('.hgsvnexternals', '.hgsvnexternals', 156 ('.hgsvnexternals', '.hgsvnexternals',
119 """\ 157 """[subdir1]
120 [subdir1]
121 ../externals/project1 deps/project1 158 ../externals/project1 deps/project1
122 ../externals/project2 deps/project2 159 ../externals/project2 deps/project2
123 """), 160 """),
124 # This removal used to trigger the parent directory removal 161 # This removal used to trigger the parent directory removal
125 ('subdir1/a', None, None), 162 ('subdir1/a', None, None),