comparison tests/test-check-interfaces.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents d459cd8ea42d
children c86256bd4eb8
comparison
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
1 # Test that certain objects conform to well-defined interfaces. 1 # Test that certain objects conform to well-defined interfaces.
2 2
3 from __future__ import absolute_import, print_function 3 from __future__ import absolute_import, print_function
4 4
5 from mercurial import encoding 5 from mercurial import encoding
6
6 encoding.environ[b'HGREALINTERFACES'] = b'1' 7 encoding.environ[b'HGREALINTERFACES'] = b'1'
7 8
8 import os 9 import os
9 import subprocess 10 import subprocess
10 import sys 11 import sys
11 12
12 # Only run if tests are run in a repo 13 # Only run if tests are run in a repo
13 if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], 14 if subprocess.call(
14 'test-repo']): 15 ['python', '%s/hghave' % os.environ['TESTDIR'], 'test-repo']
16 ):
15 sys.exit(80) 17 sys.exit(80)
16 18
17 from mercurial.interfaces import ( 19 from mercurial.interfaces import (
18 dirstate as intdirstate, 20 dirstate as intdirstate,
19 repository, 21 repository,
20 ) 22 )
21 from mercurial.thirdparty.zope import ( 23 from mercurial.thirdparty.zope import interface as zi
22 interface as zi, 24 from mercurial.thirdparty.zope.interface import verify as ziverify
23 )
24 from mercurial.thirdparty.zope.interface import (
25 verify as ziverify,
26 )
27 from mercurial import ( 25 from mercurial import (
28 bundlerepo, 26 bundlerepo,
29 dirstate, 27 dirstate,
30 filelog, 28 filelog,
31 httppeer, 29 httppeer,
47 testdir = os.path.dirname(__file__) 45 testdir = os.path.dirname(__file__)
48 rootdir = pycompat.fsencode(os.path.normpath(os.path.join(testdir, '..'))) 46 rootdir = pycompat.fsencode(os.path.normpath(os.path.join(testdir, '..')))
49 47
50 sys.path[0:0] = [testdir] 48 sys.path[0:0] = [testdir]
51 import simplestorerepo 49 import simplestorerepo
50
52 del sys.path[0] 51 del sys.path[0]
52
53 53
54 def checkzobject(o, allowextra=False): 54 def checkzobject(o, allowextra=False):
55 """Verify an object with a zope interface.""" 55 """Verify an object with a zope interface."""
56 ifaces = zi.providedBy(o) 56 ifaces = zi.providedBy(o)
57 if not ifaces: 57 if not ifaces:
73 allowed |= set(iface.names(all=True)) 73 allowed |= set(iface.names(all=True))
74 74
75 public = {a for a in dir(o) if not a.startswith('_')} 75 public = {a for a in dir(o) if not a.startswith('_')}
76 76
77 for attr in sorted(public - allowed): 77 for attr in sorted(public - allowed):
78 print('public attribute not declared in interfaces: %s.%s' % ( 78 print(
79 o.__class__.__name__, attr)) 79 'public attribute not declared in interfaces: %s.%s'
80 % (o.__class__.__name__, attr)
81 )
82
80 83
81 # Facilitates testing localpeer. 84 # Facilitates testing localpeer.
82 class dummyrepo(object): 85 class dummyrepo(object):
83 def __init__(self): 86 def __init__(self):
84 self.ui = uimod.ui() 87 self.ui = uimod.ui()
88
85 def filtered(self, name): 89 def filtered(self, name):
86 pass 90 pass
91
87 def _restrictcapabilities(self, caps): 92 def _restrictcapabilities(self, caps):
88 pass 93 pass
94
89 95
90 class dummyopener(object): 96 class dummyopener(object):
91 handlers = [] 97 handlers = []
98
92 99
93 # Facilitates testing sshpeer without requiring a server. 100 # Facilitates testing sshpeer without requiring a server.
94 class badpeer(httppeer.httppeer): 101 class badpeer(httppeer.httppeer):
95 def __init__(self): 102 def __init__(self):
96 super(badpeer, self).__init__(None, None, None, dummyopener(), None, 103 super(badpeer, self).__init__(
97 None) 104 None, None, None, dummyopener(), None, None
105 )
98 self.badattribute = True 106 self.badattribute = True
99 107
100 def badmethod(self): 108 def badmethod(self):
101 pass 109 pass
110
102 111
103 class dummypipe(object): 112 class dummypipe(object):
104 def close(self): 113 def close(self):
105 pass 114 pass
115
106 116
107 def main(): 117 def main():
108 ui = uimod.ui() 118 ui = uimod.ui()
109 # Needed so we can open a local repo with obsstore without a warning. 119 # Needed so we can open a local repo with obsstore without a warning.
110 ui.setconfig(b'experimental', b'evolution.createmarkers', True) 120 ui.setconfig(b'experimental', b'evolution.createmarkers', True)
115 checkzobject(httppeer.httppeer(None, None, None, dummyopener(), None, None)) 125 checkzobject(httppeer.httppeer(None, None, None, dummyopener(), None, None))
116 126
117 ziverify.verifyClass(repository.ipeerv2, httppeer.httpv2peer) 127 ziverify.verifyClass(repository.ipeerv2, httppeer.httpv2peer)
118 checkzobject(httppeer.httpv2peer(None, b'', b'', None, None, None)) 128 checkzobject(httppeer.httpv2peer(None, b'', b'', None, None, None))
119 129
120 ziverify.verifyClass(repository.ipeerbase, 130 ziverify.verifyClass(repository.ipeerbase, localrepo.localpeer)
121 localrepo.localpeer)
122 checkzobject(localrepo.localpeer(dummyrepo())) 131 checkzobject(localrepo.localpeer(dummyrepo()))
123 132
124 ziverify.verifyClass(repository.ipeercommandexecutor, 133 ziverify.verifyClass(
125 localrepo.localcommandexecutor) 134 repository.ipeercommandexecutor, localrepo.localcommandexecutor
135 )
126 checkzobject(localrepo.localcommandexecutor(None)) 136 checkzobject(localrepo.localcommandexecutor(None))
127 137
128 ziverify.verifyClass(repository.ipeercommandexecutor, 138 ziverify.verifyClass(
129 wireprotov1peer.peerexecutor) 139 repository.ipeercommandexecutor, wireprotov1peer.peerexecutor
140 )
130 checkzobject(wireprotov1peer.peerexecutor(None)) 141 checkzobject(wireprotov1peer.peerexecutor(None))
131 142
132 ziverify.verifyClass(repository.ipeerbase, sshpeer.sshv1peer) 143 ziverify.verifyClass(repository.ipeerbase, sshpeer.sshv1peer)
133 checkzobject(sshpeer.sshv1peer(ui, b'ssh://localhost/foo', b'', dummypipe(), 144 checkzobject(
134 dummypipe(), None, None)) 145 sshpeer.sshv1peer(
146 ui,
147 b'ssh://localhost/foo',
148 b'',
149 dummypipe(),
150 dummypipe(),
151 None,
152 None,
153 )
154 )
135 155
136 ziverify.verifyClass(repository.ipeerbase, sshpeer.sshv2peer) 156 ziverify.verifyClass(repository.ipeerbase, sshpeer.sshv2peer)
137 checkzobject(sshpeer.sshv2peer(ui, b'ssh://localhost/foo', b'', dummypipe(), 157 checkzobject(
138 dummypipe(), None, None)) 158 sshpeer.sshv2peer(
159 ui,
160 b'ssh://localhost/foo',
161 b'',
162 dummypipe(),
163 dummypipe(),
164 None,
165 None,
166 )
167 )
139 168
140 ziverify.verifyClass(repository.ipeerbase, bundlerepo.bundlepeer) 169 ziverify.verifyClass(repository.ipeerbase, bundlerepo.bundlepeer)
141 checkzobject(bundlerepo.bundlepeer(dummyrepo())) 170 checkzobject(bundlerepo.bundlepeer(dummyrepo()))
142 171
143 ziverify.verifyClass(repository.ipeerbase, statichttprepo.statichttppeer) 172 ziverify.verifyClass(repository.ipeerbase, statichttprepo.statichttppeer)
144 checkzobject(statichttprepo.statichttppeer(dummyrepo())) 173 checkzobject(statichttprepo.statichttppeer(dummyrepo()))
145 174
146 ziverify.verifyClass(repository.ipeerbase, unionrepo.unionpeer) 175 ziverify.verifyClass(repository.ipeerbase, unionrepo.unionpeer)
147 checkzobject(unionrepo.unionpeer(dummyrepo())) 176 checkzobject(unionrepo.unionpeer(dummyrepo()))
148 177
149 ziverify.verifyClass(repository.ilocalrepositorymain, 178 ziverify.verifyClass(
150 localrepo.localrepository) 179 repository.ilocalrepositorymain, localrepo.localrepository
151 ziverify.verifyClass(repository.ilocalrepositoryfilestorage, 180 )
152 localrepo.revlogfilestorage) 181 ziverify.verifyClass(
182 repository.ilocalrepositoryfilestorage, localrepo.revlogfilestorage
183 )
153 repo = localrepo.makelocalrepository(ui, rootdir) 184 repo = localrepo.makelocalrepository(ui, rootdir)
154 checkzobject(repo) 185 checkzobject(repo)
155 186
156 ziverify.verifyClass(wireprototypes.baseprotocolhandler, 187 ziverify.verifyClass(
157 wireprotoserver.sshv1protocolhandler) 188 wireprototypes.baseprotocolhandler, wireprotoserver.sshv1protocolhandler
158 ziverify.verifyClass(wireprototypes.baseprotocolhandler, 189 )
159 wireprotoserver.sshv2protocolhandler) 190 ziverify.verifyClass(
160 ziverify.verifyClass(wireprototypes.baseprotocolhandler, 191 wireprototypes.baseprotocolhandler, wireprotoserver.sshv2protocolhandler
161 wireprotoserver.httpv1protocolhandler) 192 )
162 ziverify.verifyClass(wireprototypes.baseprotocolhandler, 193 ziverify.verifyClass(
163 wireprotov2server.httpv2protocolhandler) 194 wireprototypes.baseprotocolhandler,
195 wireprotoserver.httpv1protocolhandler,
196 )
197 ziverify.verifyClass(
198 wireprototypes.baseprotocolhandler,
199 wireprotov2server.httpv2protocolhandler,
200 )
164 201
165 sshv1 = wireprotoserver.sshv1protocolhandler(None, None, None) 202 sshv1 = wireprotoserver.sshv1protocolhandler(None, None, None)
166 checkzobject(sshv1) 203 checkzobject(sshv1)
167 sshv2 = wireprotoserver.sshv2protocolhandler(None, None, None) 204 sshv2 = wireprotoserver.sshv2protocolhandler(None, None, None)
168 checkzobject(sshv2) 205 checkzobject(sshv2)
172 httpv2 = wireprotov2server.httpv2protocolhandler(None, None) 209 httpv2 = wireprotov2server.httpv2protocolhandler(None, None)
173 checkzobject(httpv2) 210 checkzobject(httpv2)
174 211
175 ziverify.verifyClass(repository.ifilestorage, filelog.filelog) 212 ziverify.verifyClass(repository.ifilestorage, filelog.filelog)
176 ziverify.verifyClass(repository.imanifestdict, manifest.manifestdict) 213 ziverify.verifyClass(repository.imanifestdict, manifest.manifestdict)
177 ziverify.verifyClass(repository.imanifestrevisionstored, 214 ziverify.verifyClass(
178 manifest.manifestctx) 215 repository.imanifestrevisionstored, manifest.manifestctx
179 ziverify.verifyClass(repository.imanifestrevisionwritable, 216 )
180 manifest.memmanifestctx) 217 ziverify.verifyClass(
181 ziverify.verifyClass(repository.imanifestrevisionstored, 218 repository.imanifestrevisionwritable, manifest.memmanifestctx
182 manifest.treemanifestctx) 219 )
183 ziverify.verifyClass(repository.imanifestrevisionwritable, 220 ziverify.verifyClass(
184 manifest.memtreemanifestctx) 221 repository.imanifestrevisionstored, manifest.treemanifestctx
222 )
223 ziverify.verifyClass(
224 repository.imanifestrevisionwritable, manifest.memtreemanifestctx
225 )
185 ziverify.verifyClass(repository.imanifestlog, manifest.manifestlog) 226 ziverify.verifyClass(repository.imanifestlog, manifest.manifestlog)
186 ziverify.verifyClass(repository.imanifeststorage, manifest.manifestrevlog) 227 ziverify.verifyClass(repository.imanifeststorage, manifest.manifestrevlog)
187 228
188 ziverify.verifyClass(repository.irevisiondelta, 229 ziverify.verifyClass(
189 simplestorerepo.simplestorerevisiondelta) 230 repository.irevisiondelta, simplestorerepo.simplestorerevisiondelta
231 )
190 ziverify.verifyClass(repository.ifilestorage, simplestorerepo.filestorage) 232 ziverify.verifyClass(repository.ifilestorage, simplestorerepo.filestorage)
191 ziverify.verifyClass(repository.iverifyproblem, 233 ziverify.verifyClass(
192 simplestorerepo.simplefilestoreproblem) 234 repository.iverifyproblem, simplestorerepo.simplefilestoreproblem
235 )
193 236
194 ziverify.verifyClass(intdirstate.idirstate, dirstate.dirstate) 237 ziverify.verifyClass(intdirstate.idirstate, dirstate.dirstate)
195 238
196 vfs = vfsmod.vfs(b'.') 239 vfs = vfsmod.vfs(b'.')
197 fl = filelog.filelog(vfs, b'dummy.i') 240 fl = filelog.filelog(vfs, b'dummy.i')
198 checkzobject(fl, allowextra=True) 241 checkzobject(fl, allowextra=True)
199 242
200 # Conforms to imanifestlog. 243 # Conforms to imanifestlog.
201 ml = manifest.manifestlog(vfs, repo, manifest.manifestrevlog(repo.svfs), 244 ml = manifest.manifestlog(
202 repo.narrowmatch()) 245 vfs, repo, manifest.manifestrevlog(repo.svfs), repo.narrowmatch()
246 )
203 checkzobject(ml) 247 checkzobject(ml)
204 checkzobject(repo.manifestlog) 248 checkzobject(repo.manifestlog)
205 249
206 # Conforms to imanifestrevision. 250 # Conforms to imanifestrevision.
207 mctx = ml[repo[0].manifestnode()] 251 mctx = ml[repo[0].manifestnode()]
215 checkzobject(mctx.read()) 259 checkzobject(mctx.read())
216 260
217 mrl = manifest.manifestrevlog(vfs) 261 mrl = manifest.manifestrevlog(vfs)
218 checkzobject(mrl) 262 checkzobject(mrl)
219 263
220 ziverify.verifyClass(repository.irevisiondelta, 264 ziverify.verifyClass(repository.irevisiondelta, revlog.revlogrevisiondelta)
221 revlog.revlogrevisiondelta)
222 265
223 rd = revlog.revlogrevisiondelta( 266 rd = revlog.revlogrevisiondelta(
224 node=b'', 267 node=b'',
225 p1node=b'', 268 p1node=b'',
226 p2node=b'', 269 p2node=b'',
227 basenode=b'', 270 basenode=b'',
228 linknode=b'', 271 linknode=b'',
229 flags=b'', 272 flags=b'',
230 baserevisionsize=None, 273 baserevisionsize=None,
231 revision=b'', 274 revision=b'',
232 delta=None) 275 delta=None,
276 )
233 checkzobject(rd) 277 checkzobject(rd)
234 278
235 ziverify.verifyClass(repository.iverifyproblem, 279 ziverify.verifyClass(repository.iverifyproblem, revlog.revlogproblem)
236 revlog.revlogproblem)
237 checkzobject(revlog.revlogproblem()) 280 checkzobject(revlog.revlogproblem())
238 281
282
239 main() 283 main()