comparison tests/comprehensive/test_rebuildmeta.py @ 1057:cd256960b622

comprehensive tests: consolidate stupidity into test_util In other words, remove explicit 'stupid' arguments, set the 'stupid_mode_tests' class variable, and have the metaclass generate non-replay tests.
author Dan Villiom Podlaski Christiansen <dan@cabo.dk>
date Wed, 07 Aug 2013 23:31:57 +0200
parents 903c9c9dfe6a
children cd0d14e25757
comparison
equal deleted inserted replaced
1056:0932bb4d8870 1057:cd256960b622
28 ('unrelatedbranch.svndump', True, False), 28 ('unrelatedbranch.svndump', True, False),
29 ] 29 ]
30 30
31 31
32 32
33 def _do_case(self, name, stupid, single): 33 def _do_case(self, name, single):
34 subdir = test_util.subdir.get(name, '') 34 subdir = test_util.subdir.get(name, '')
35 layout = 'auto' 35 layout = 'auto'
36 if single: 36 if single:
37 layout = 'single' 37 layout = 'single'
38 repo, repo_path = self.load_and_fetch(name, subdir=subdir, stupid=stupid, 38 repo, repo_path = self.load_and_fetch(name, subdir=subdir, layout=layout)
39 layout=layout)
40 assert test_util.repolen(self.repo) > 0 39 assert test_util.repolen(self.repo) > 0
41 wc2_path = self.wc_path + '_clone' 40 wc2_path = self.wc_path + '_clone'
42 u = ui.ui() 41 u = ui.ui()
43 src, dest = test_util.hgclone(u, self.wc_path, wc2_path, update=False) 42 src, dest = test_util.hgclone(u, self.wc_path, wc2_path, update=False)
44 src = test_util.getlocalpeer(src) 43 src = test_util.getlocalpeer(src)
58 subdir), ]) 57 subdir), ])
59 finally: 58 finally:
60 # remove the wrapper 59 # remove the wrapper
61 context.changectx.children = origchildren 60 context.changectx.children = origchildren
62 61
63 self._run_assertions(name, stupid, single, src, dest, u) 62 self._run_assertions(name, single, src, dest, u)
64 63
65 wc3_path = self.wc_path + '_partial' 64 wc3_path = self.wc_path + '_partial'
66 src, dest = test_util.hgclone(u, 65 src, dest = test_util.hgclone(u,
67 self.wc_path, 66 self.wc_path,
68 wc3_path, 67 wc3_path,
92 subdir), ]) 91 subdir), ])
93 finally: 92 finally:
94 # remove the wrapper 93 # remove the wrapper
95 context.changectx.children = origchildren 94 context.changectx.children = origchildren
96 95
97 self._run_assertions(name, stupid, single, srcrepo, dest, u) 96 self._run_assertions(name, single, srcrepo, dest, u)
98 97
99 98
100 def _run_assertions(self, name, stupid, single, src, dest, u): 99 def _run_assertions(self, name, single, src, dest, u):
101 100
102 self.assertTrue(os.path.isdir(os.path.join(src.path, 'svn')), 101 self.assertTrue(os.path.isdir(os.path.join(src.path, 'svn')),
103 'no .hg/svn directory in the source!') 102 'no .hg/svn directory in the source!')
104 self.assertTrue(os.path.isdir(os.path.join(dest.path, 'svn')), 103 self.assertTrue(os.path.isdir(os.path.join(dest.path, 'svn')),
105 'no .hg/svn directory in the destination!') 104 'no .hg/svn directory in the destination!')
110 self.assertTrue(os.path.isfile(stf), '%r is missing!' % stf) 109 self.assertTrue(os.path.isfile(stf), '%r is missing!' % stf)
111 dtf = os.path.join(dest.path, 'svn', tf) 110 dtf = os.path.join(dest.path, 'svn', tf)
112 self.assertTrue(os.path.isfile(dtf), '%r is missing!' % tf) 111 self.assertTrue(os.path.isfile(dtf), '%r is missing!' % tf)
113 old, new = open(stf).read(), open(dtf).read() 112 old, new = open(stf).read(), open(dtf).read()
114 if tf == 'lastpulled' and (name, 113 if tf == 'lastpulled' and (name,
115 stupid, single) in expect_youngest_skew: 114 self.stupid, single) in expect_youngest_skew:
116 self.assertNotEqual(old, new, 115 self.assertNotEqual(old, new,
117 'rebuildmeta unexpected match on youngest rev!') 116 'rebuildmeta unexpected match on youngest rev!')
118 continue 117 continue
119 self.assertMultiLineEqual(old, new, tf + ' differs') 118 self.assertMultiLineEqual(old, new, tf + ' differs')
120 self.assertEqual(src.branchtags(), dest.branchtags()) 119 self.assertEqual(src.branchtags(), dest.branchtags())
135 revkeys), reverse=True)[0][0] 134 revkeys), reverse=True)[0][0]
136 self.assertEqual(pr, destinfo[1]) 135 self.assertEqual(pr, destinfo[1])
137 self.assertEqual(srcinfo[2], destinfo[2]) 136 self.assertEqual(srcinfo[2], destinfo[2])
138 137
139 138
140 def buildmethod(case, name, stupid, single): 139 def buildmethod(case, name, single):
141 m = lambda self: self._do_case(case, stupid, single) 140 m = lambda self: self._do_case(case, single)
142 m.__name__ = name 141 m.__name__ = name
143 m.__doc__ = ('Test rebuildmeta on %s with %s replay. (%s)' % 142 m.__doc__ = ('Test rebuildmeta on %s (%s)' %
144 (case, 143 (case, (single and 'single') or 'standard'))
145 (stupid and 'stupid') or 'real',
146 (single and 'single') or 'standard',
147 )
148 )
149 return m 144 return m
150 145
151 146
152 skip = set([ 147 skip = set([
153 'project_root_not_repo_root.svndump', 148 'project_root_not_repo_root.svndump',
154 'corrupt.svndump', 149 'corrupt.svndump',
155 ]) 150 ])
156 151
157 attrs = {'_do_case': _do_case, 152 attrs = {'_do_case': _do_case,
158 '_run_assertions': _run_assertions, 153 '_run_assertions': _run_assertions,
154 'stupid_mode_tests': True,
159 } 155 }
160 for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]: 156 for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]:
161 # this fixture results in an empty repository, don't use it 157 # this fixture results in an empty repository, don't use it
162 if case in skip: 158 if case in skip:
163 continue 159 continue
164 bname = 'test_' + case[:-len('.svndump')] 160 bname = 'test_' + case[:-len('.svndump')]
165 attrs[bname] = buildmethod(case, bname, False, False) 161 attrs[bname] = buildmethod(case, bname, False)
166 name = bname + '_stupid'
167 attrs[name] = buildmethod(case, name, True, False)
168 name = bname + '_single' 162 name = bname + '_single'
169 attrs[name] = buildmethod(case, name, False, True) 163 attrs[name] = buildmethod(case, name, True)
170 164
171 RebuildMetaTests = type('RebuildMetaTests', (test_util.TestBase,), attrs) 165 RebuildMetaTests = type('RebuildMetaTests', (test_util.TestBase,), attrs)