Mercurial > hg
view tests/test-progress @ 11765:aff419e260f9 stable
templatefilters: make json filter handle multibyte characters correctly
It aims to fix javascript error of hgweb's graph view in Japanese 'cp932'
encoding.
'cp932' contains multibyte characters ending with '\x5c' (backslash),
e.g. '\x94\x5c' for Japanese Kanji 'Noh'.
Due to json filter escapes '\' to '\\', multibyte string ending with
'\x5c' is translated to "xxx\", resulting javascript parse error on
a web browser.
This patch changes json() to pass unicode to jsonescape().
Unicode decoding error handler changed to 'replace' by Patrick Mézard.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 07 Aug 2010 16:27:16 +0900 |
parents | 83af68e38be3 |
children |
line wrap: on
line source
#!/bin/sh cat > loop.py <<EOF from mercurial import commands def loop(ui, loops, **opts): loops = int(loops) total = None if loops >= 0: total = loops if opts.get('total', None): total = int(opts.get('total')) loops = abs(loops) for i in range(loops): ui.progress('loop', i, 'loop.%d' % i, 'loopnum', total) ui.progress('loop', None, 'loop.done', 'loopnum', total) commands.norepo += " loop" cmdtable = { "loop": (loop, [('', 'total', '', 'override for total')], 'hg loop LOOPS'), } EOF cat > filtercr.py <<EOF import sys, re for line in sys.stdin: line = re.sub(r'\r+[^\n]', lambda m: '\n' + m.group()[-1:], line) sys.stdout.write(line) EOF echo "[extensions]" >> $HGRCPATH echo "progress=" >> $HGRCPATH echo "loop=`pwd`/loop.py" >> $HGRCPATH echo "[progress]" >> $HGRCPATH echo "assume-tty=1" >> $HGRCPATH echo '% test default params, display nothing because of delay' hg -y loop 3 2>&1 | python filtercr.py echo "delay=0" >> $HGRCPATH echo "refresh=0" >> $HGRCPATH echo '% test with delay=0, refresh=0' hg -y loop 3 2>&1 | python filtercr.py echo '% test refresh is taken in account' hg -y --config progress.refresh=100 loop 3 2>&1 | python filtercr.py echo '% test format options 1' hg -y --config 'progress.format=number topic item+2' loop 2 2>&1 | python filtercr.py echo '% test format options 2' hg -y --config 'progress.format=number item-3 bar' loop 2 2>&1 | python filtercr.py echo '% test format options and indeterminate progress' hg -y --config 'progress.format=number item bar' loop -- -2 2>&1 | python filtercr.py echo "% make sure things don't fall over if count > total" hg -y loop --total 4 6 2>&1 | python filtercr.py echo '% test immediate progress completion' hg -y loop 0 2>&1 | python filtercr.py