summaryrefslogtreecommitdiff
path: root/tests/test-wireproto.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-wireproto.py')
-rw-r--r--tests/test-wireproto.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/test-wireproto.py b/tests/test-wireproto.py
new file mode 100644
index 0000000..82f7f0b
--- /dev/null
+++ b/tests/test-wireproto.py
@@ -0,0 +1,45 @@
+from mercurial import wireproto
+
+class proto(object):
+ def __init__(self, args):
+ self.args = args
+ def getargs(self, spec):
+ args = self.args
+ args.setdefault('*', {})
+ names = spec.split()
+ return [args[n] for n in names]
+
+class clientpeer(wireproto.wirepeer):
+ def __init__(self, serverrepo):
+ self.serverrepo = serverrepo
+ def _call(self, cmd, **args):
+ return wireproto.dispatch(self.serverrepo, proto(args), cmd)
+
+ @wireproto.batchable
+ def greet(self, name):
+ f = wireproto.future()
+ yield wireproto.todict(name=mangle(name)), f
+ yield unmangle(f.value)
+
+class serverrepo(object):
+ def greet(self, name):
+ return "Hello, " + name
+
+def mangle(s):
+ return ''.join(chr(ord(c) + 1) for c in s)
+def unmangle(s):
+ return ''.join(chr(ord(c) - 1) for c in s)
+
+def greet(repo, proto, name):
+ return mangle(repo.greet(unmangle(name)))
+
+wireproto.commands['greet'] = (greet, 'name',)
+
+srv = serverrepo()
+clt = clientpeer(srv)
+
+print clt.greet("Foobar")
+b = clt.batch()
+fs = [b.greet(s) for s in ["Fo, =;o", "Bar"]]
+b.submit()
+print [f.value for f in fs]