sapling/tests/progresstest.py
Mark Thomas 449b58b48d progress: implement formatting of bytes values
Summary:
Add the ability to set a `formatfunc` on a progres bar, which formats the
numbers used.  Use `util.bytecount` as a format function in the places
where we have progress bars in numbers of bytes.

Reviewed By: quark-zju

Differential Revision: D7355232

fbshipit-source-id: 117c7035d46d47259cdfd70b80438cc6f4615977
2018-04-13 21:51:38 -07:00

90 lines
2.7 KiB
Python

from __future__ import absolute_import
import time
from mercurial import (
progress,
registrar,
util,
)
cmdtable = {}
command = registrar.command(cmdtable)
class faketime(object):
def __init__(self):
self.now = 0
def time(self):
return self.now
def increment(self):
now = self.now
self.now += 1
return now
_faketime = faketime()
time.time = _faketime.time
unicodeloopitems = [
u'\u3042\u3044'.encode('utf-8'), # 2 x 2 = 4 columns
u'\u3042\u3044\u3046'.encode('utf-8'), # 2 x 3 = 6 columns
u'\u3042\u3044\u3046\u3048'.encode('utf-8'), # 2 x 4 = 8 columns
]
@command('progresstest',
[('', 'nested', False, 'show nested results'),
('', 'unicode', False, 'use unicode topics and items'),
('', 'output', False, 'output text on each iteration')],
'hg progresstest loops total', norepo=True)
def progresstest(ui, loops, total, **opts):
loops = int(loops)
total = int(total)
if total == -1:
total = None
nested = opts.get('nested', None)
useunicode = opts.get('unicode', False)
if useunicode:
topic = u'\u3042\u3044\u3046\u3048'.encode('utf-8')
else:
topic = 'progress test'
with progress.bar(ui, topic, 'cycles', total) as prog:
for i in range(loops + 1):
if useunicode:
prog.value = (i, unicodeloopitems[i % len(unicodeloopitems)])
else:
prog.value = (i, 'loop %s' % i)
progress._engine.pump(_faketime.increment())
if nested:
nestedtotal = 5 if i % 6 == 5 else 2
with progress.bar(ui, 'nested progress',
total=nestedtotal) as nestedprog:
for j in range(nestedtotal + 1):
nestedprog.value = (j, 'nest %s' % j)
progress._engine.pump(_faketime.increment())
@command('bytesprogresstest', norepo=True)
def bytesprogresstest(ui):
values = [0, 10, 250, 999, 1000, 1024, 22000, 1048576,
1474560, 123456789, 555555555, 1000000000, 1111111111]
with progress.bar(ui, 'bytes progress test', 'bytes', max(values),
formatfunc=util.bytecount) as prog:
for value in values:
prog.value = (value, '%s bytes' % value)
progress._engine.pump(_faketime.increment())
def uisetup(ui):
class syncengine(progress._engine.__class__):
def _activate(self):
pass
def _deactivate(self):
pass
def pump(self, now):
self._recalculatedisplay(now)
self._updateestimation(now)
self._show(now)
progress._engine.__class__ = syncengine