test-progress.t
408 lines
| 17.0 KiB
| text/troff
|
Tads3Lexer
/ tests / test-progress.t
Matt Mackall
|
r12479 | |||
$ cat > loop.py <<EOF | ||||
Augie Fackler
|
r33986 | > import time | ||
Yuya Nishihara
|
r32337 | > from mercurial import commands, registrar | ||
Gregory Szorc
|
r21254 | > | ||
> cmdtable = {} | ||||
Yuya Nishihara
|
r32337 | > command = registrar.command(cmdtable) | ||
Gregory Szorc
|
r21254 | > | ||
Augie Fackler
|
r19619 | > class incrementingtime(object): | ||
> def __init__(self): | ||||
> self._time = 0.0 | ||||
> def __call__(self): | ||||
> self._time += 0.25 | ||||
> return self._time | ||||
> time.time = incrementingtime() | ||||
Matt Mackall
|
r12479 | > | ||
Pulkit Goyal
|
r33097 | > @command(b'loop', | ||
Pulkit Goyal
|
r38087 | > [(b'', b'total', b'', b'override for total'), | ||
> (b'', b'nested', False, b'show nested results'), | ||||
Joerg Sonnenberger
|
r45564 | > (b'', b'parallel', False, b'show parallel sets of results'), | ||
> (b'', b'warn', False, b'show warning if step divisible by 3')], | ||||
Pulkit Goyal
|
r38087 | > b'hg loop LOOPS', | ||
Gregory Szorc
|
r21773 | > norepo=True) | ||
Matt Mackall
|
r12479 | > 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')) | ||||
Augie Fackler
|
r14838 | > nested = False | ||
> if opts.get('nested', None): | ||||
> nested = True | ||||
Matt Mackall
|
r12479 | > loops = abs(loops) | ||
Joerg Sonnenberger
|
r45564 | > showwarn = opts.get('warn', False) | ||
Matt Mackall
|
r12479 | > | ||
Pulkit Goyal
|
r40258 | > progress = ui.makeprogress(topiclabel, unit=b'loopnum', total=total) | ||
> other = ui.makeprogress(b'other', unit=b'othernum', total=total) | ||||
Matt Mackall
|
r12479 | > for i in range(loops): | ||
Martin von Zweigbergk
|
r38430 | > progress.update(i, item=getloopitem(i)) | ||
Augie Fackler
|
r14838 | > if opts.get('parallel'): | ||
Pulkit Goyal
|
r40258 | > other.update(i, item=b'other.%d' % i) | ||
Augie Fackler
|
r14838 | > if nested: | ||
Augie Fackler
|
r19619 | > nested_steps = 2 | ||
> if i and i % 4 == 0: | ||||
> nested_steps = 5 | ||||
Pulkit Goyal
|
r40258 | > nested = ui.makeprogress(b'nested', unit=b'nestnum', | ||
Martin von Zweigbergk
|
r38430 | > total=nested_steps) | ||
Augie Fackler
|
r19619 | > for j in range(nested_steps): | ||
Pulkit Goyal
|
r40258 | > nested.update(j, item=b'nested.%d' % j) | ||
Martin von Zweigbergk
|
r38430 | > nested.complete() | ||
Joerg Sonnenberger
|
r45564 | > if showwarn and i % 3 == 0: | ||
> ui.warn(b'reached step %d\n' %i) | ||||
Martin von Zweigbergk
|
r38430 | > progress.complete() | ||
FUJIWARA Katsunori
|
r21859 | > | ||
Pulkit Goyal
|
r40258 | > topiclabel = b'loop' | ||
FUJIWARA Katsunori
|
r21862 | > def getloopitem(i): | ||
Pulkit Goyal
|
r40258 | > return b'loop.%d' % i | ||
Matt Mackall
|
r12479 | > | ||
> EOF | ||||
Matt Mackall
|
r15372 | $ cp $HGRCPATH $HGRCPATH.orig | ||
Matt Mackall
|
r12479 | $ echo "[extensions]" >> $HGRCPATH | ||
$ echo "progress=" >> $HGRCPATH | ||||
$ echo "loop=`pwd`/loop.py" >> $HGRCPATH | ||||
$ echo "[progress]" >> $HGRCPATH | ||||
Martin Geisler
|
r16675 | $ echo "format = topic bar number" >> $HGRCPATH | ||
Matt Mackall
|
r12479 | $ echo "assume-tty=1" >> $HGRCPATH | ||
Martin Geisler
|
r13142 | $ echo "width=60" >> $HGRCPATH | ||
Matt Mackall
|
r12479 | |||
test default params, display nothing because of delay | ||||
Mads Kiilerich
|
r17743 | $ hg -y loop 3 | ||
Matt Mackall
|
r12479 | $ echo "delay=0" >> $HGRCPATH | ||
$ echo "refresh=0" >> $HGRCPATH | ||||
test with delay=0, refresh=0 | ||||
Mads Kiilerich
|
r17743 | $ hg -y loop 3 | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/3\r (no-eol) (esc) | ||||
loop [===============> ] 1/3\r (no-eol) (esc) | ||||
loop [===============================> ] 2/3\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r25581 | no progress with --quiet | ||
$ hg -y loop 3 --quiet | ||||
Augie Fackler
|
r14838 | |||
Matt Anderson
|
r28171 | test plain mode exception | ||
$ HGPLAINEXCEPT=progress hg -y loop 1 | ||||
\r (no-eol) (esc) | ||||
loop [ ] 0/1\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r14838 | test nested short-lived topics (which shouldn't display with nestdelay): | ||
Mads Kiilerich
|
r17743 | $ hg -y loop 3 --nested | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/3\r (no-eol) (esc) | ||||
loop [===============> ] 1/3\r (no-eol) (esc) | ||||
loop [===============================> ] 2/3\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r14838 | |||
Augie Fackler
|
r19619 | Test nested long-lived topic which has the same name as a short-lived | ||
peer. We shouldn't get stuck showing the short-lived inner steps, and | ||||
should go back to skipping the inner steps when the slow nested step | ||||
finishes. | ||||
$ hg -y loop 7 --nested | ||||
\r (no-eol) (esc) | ||||
loop [ ] 0/7\r (no-eol) (esc) | ||||
loop [=====> ] 1/7\r (no-eol) (esc) | ||||
loop [============> ] 2/7\r (no-eol) (esc) | ||||
loop [===================> ] 3/7\r (no-eol) (esc) | ||||
loop [==========================> ] 4/7\r (no-eol) (esc) | ||||
nested [==========================> ] 3/5\r (no-eol) (esc) | ||||
nested [===================================> ] 4/5\r (no-eol) (esc) | ||||
loop [=================================> ] 5/7\r (no-eol) (esc) | ||||
loop [========================================> ] 6/7\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r14838 | |||
Mads Kiilerich
|
r17743 | $ hg --config progress.changedelay=0 -y loop 3 --nested | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/3\r (no-eol) (esc) | ||||
nested [ ] 0/2\r (no-eol) (esc) | ||||
nested [======================> ] 1/2\r (no-eol) (esc) | ||||
loop [===============> ] 1/3\r (no-eol) (esc) | ||||
nested [ ] 0/2\r (no-eol) (esc) | ||||
nested [======================> ] 1/2\r (no-eol) (esc) | ||||
loop [===============================> ] 2/3\r (no-eol) (esc) | ||||
nested [ ] 0/2\r (no-eol) (esc) | ||||
nested [======================> ] 1/2\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r14838 | |||
test two topics being printed in parallel (as when we're doing a local | ||||
--pull clone, where you get the unbundle and bundle progress at the | ||||
same time): | ||||
Mads Kiilerich
|
r17743 | $ hg loop 3 --parallel | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/3\r (no-eol) (esc) | ||||
loop [===============> ] 1/3\r (no-eol) (esc) | ||||
loop [===============================> ] 2/3\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Mackall
|
r12479 | test refresh is taken in account | ||
Mads Kiilerich
|
r17743 | $ hg -y --config progress.refresh=100 loop 3 | ||
Matt Mackall
|
r12479 | |||
test format options 1 | ||||
Mads Kiilerich
|
r17743 | $ hg -y --config 'progress.format=number topic item+2' loop 2 | ||
\r (no-eol) (esc) | ||||
0/2 loop lo\r (no-eol) (esc) | ||||
1/2 loop lo\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Mackall
|
r12479 | |||
test format options 2 | ||||
Mads Kiilerich
|
r17743 | $ hg -y --config 'progress.format=number item-3 bar' loop 2 | ||
\r (no-eol) (esc) | ||||
0/2 p.0 [ ]\r (no-eol) (esc) | ||||
1/2 p.1 [=======================> ]\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Mackall
|
r12479 | |||
test format options and indeterminate progress | ||||
Mads Kiilerich
|
r17743 | $ hg -y --config 'progress.format=number item bar' loop -- -2 | ||
\r (no-eol) (esc) | ||||
0 loop.0 [ <=> ]\r (no-eol) (esc) | ||||
1 loop.1 [ <=> ]\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Mackall
|
r12479 | |||
make sure things don't fall over if count > total | ||||
Mads Kiilerich
|
r17743 | $ hg -y loop --total 4 6 | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/4\r (no-eol) (esc) | ||||
loop [===========> ] 1/4\r (no-eol) (esc) | ||||
loop [=======================> ] 2/4\r (no-eol) (esc) | ||||
loop [===================================> ] 3/4\r (no-eol) (esc) | ||||
loop [===============================================>] 4/4\r (no-eol) (esc) | ||||
loop [ <=> ] 5/4\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Mackall
|
r12479 | |||
Joerg Sonnenberger
|
r45564 | test interaction with ui.warn | ||
$ hg loop --warn 6 | ||||
\r (no-eol) (esc) | ||||
loop [ ] 0/6\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
reached step 0 | ||||
\r (no-eol) (esc) | ||||
loop [=======> ] 1/6\r (no-eol) (esc) | ||||
loop [===============> ] 2/6\r (no-eol) (esc) | ||||
loop [=======================> ] 3/6\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
reached step 3 | ||||
\r (no-eol) (esc) | ||||
loop [===============================> ] 4/6\r (no-eol) (esc) | ||||
loop [=======================================> ] 5/6\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
test interaction with ui.timestamp-output | ||||
Matt Harbison
|
r46691 | XXX: The timestamp on Windows with py2 hg is in 1970, and py3 hg is now. But | ||
the py2/py3 checks here test the test runner, not the binary. The Windows lines | ||||
can be dropped when switching to py3-only. | ||||
Joerg Sonnenberger
|
r45564 | $ hg loop --warn --config ui.timestamp-output=true 6 | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/6\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Harbison
|
r46691 | [*T*] reached step 0 (glob) (windows !) | ||
\[20[2-9][0-9]-[01][0-9]-[0-3][0-9]T[0-5][0-9]:[0-5][0-9]:[0-5][0-9]\.[0-9][0-9][0-9][0-9][0-9][0-9]\] reached step 0 (re) (no-windows !) | ||||
Joerg Sonnenberger
|
r45564 | \r (no-eol) (esc) | ||
loop [=======> ] 1/6\r (no-eol) (esc) | ||||
loop [===============> ] 2/6\r (no-eol) (esc) | ||||
loop [=======================> ] 3/6\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Harbison
|
r46691 | [*T*] reached step 3 (glob) (windows !) | ||
\[20[2-9][0-9]-[01][0-9]-[0-3][0-9]T[0-5][0-9]:[0-5][0-9]:[0-5][0-9]\.[0-9][0-9][0-9][0-9][0-9][0-9]\] reached step 3 (re) (no-windows !) | ||||
Joerg Sonnenberger
|
r45564 | \r (no-eol) (esc) | ||
loop [===============================> ] 4/6\r (no-eol) (esc) | ||||
loop [=======================================> ] 5/6\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Matt Mackall
|
r12479 | test immediate progress completion | ||
Mads Kiilerich
|
r17743 | $ hg -y loop 0 | ||
Augie Fackler
|
r13145 | |||
test delay time estimates | ||||
Yuya Nishihara
|
r28881 | #if no-chg | ||
Matt Mackall
|
r15372 | $ cp $HGRCPATH.orig $HGRCPATH | ||
$ echo "[extensions]" >> $HGRCPATH | ||||
Jun Wu
|
r34317 | $ echo "mocktime=$TESTDIR/mocktime.py" >> $HGRCPATH | ||
Augie Fackler
|
r13145 | $ echo "progress=" >> $HGRCPATH | ||
$ echo "loop=`pwd`/loop.py" >> $HGRCPATH | ||||
$ echo "[progress]" >> $HGRCPATH | ||||
$ echo "assume-tty=1" >> $HGRCPATH | ||||
$ echo "delay=25" >> $HGRCPATH | ||||
$ echo "width=60" >> $HGRCPATH | ||||
Jun Wu
|
r34317 | $ MOCKTIME=11 hg -y loop 8 | ||
Mads Kiilerich
|
r17743 | \r (no-eol) (esc) | ||
loop [=========> ] 2/8 1m07s\r (no-eol) (esc) | ||||
loop [===============> ] 3/8 56s\r (no-eol) (esc) | ||||
loop [=====================> ] 4/8 45s\r (no-eol) (esc) | ||||
loop [==========================> ] 5/8 34s\r (no-eol) (esc) | ||||
loop [================================> ] 6/8 23s\r (no-eol) (esc) | ||||
loop [=====================================> ] 7/8 12s\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r13145 | |||
Mads Kiilerich
|
r17743 | $ MOCKTIME=10000 hg -y loop 4 | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/4\r (no-eol) (esc) | ||||
loop [=========> ] 1/4 8h21m\r (no-eol) (esc) | ||||
loop [====================> ] 2/4 5h34m\r (no-eol) (esc) | ||||
loop [==============================> ] 3/4 2h47m\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
Augie Fackler
|
r13145 | |||
Mads Kiilerich
|
r17743 | $ MOCKTIME=1000000 hg -y loop 4 | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/4\r (no-eol) (esc) | ||||
loop [=========> ] 1/4 5w00d\r (no-eol) (esc) | ||||
loop [====================> ] 2/4 3w03d\r (no-eol) (esc) | ||||
loop [=============================> ] 3/4 11d14h\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
timeless
|
r13236 | |||
Mads Kiilerich
|
r17743 | $ MOCKTIME=14000000 hg -y loop 4 | ||
\r (no-eol) (esc) | ||||
loop [ ] 0/4\r (no-eol) (esc) | ||||
loop [=========> ] 1/4 1y18w\r (no-eol) (esc) | ||||
loop [===================> ] 2/4 46w03d\r (no-eol) (esc) | ||||
loop [=============================> ] 3/4 23w02d\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
timeless
|
r13236 | |||
Jun Wu
|
r34313 | Non-linear progress: | ||
$ MOCKTIME='20 20 20 20 20 20 20 20 20 20 500 500 500 500 500 20 20 20 20 20' hg -y loop 20 | ||||
\r (no-eol) (esc) | ||||
loop [=> ] 1/20 6m21s\r (no-eol) (esc) | ||||
loop [===> ] 2/20 6m01s\r (no-eol) (esc) | ||||
loop [=====> ] 3/20 5m41s\r (no-eol) (esc) | ||||
loop [=======> ] 4/20 5m21s\r (no-eol) (esc) | ||||
loop [=========> ] 5/20 5m01s\r (no-eol) (esc) | ||||
loop [===========> ] 6/20 4m41s\r (no-eol) (esc) | ||||
loop [=============> ] 7/20 4m21s\r (no-eol) (esc) | ||||
loop [===============> ] 8/20 4m01s\r (no-eol) (esc) | ||||
Jun Wu
|
r34315 | loop [================> ] 9/20 25m40s\r (no-eol) (esc) | ||
loop [===================> ] 10/20 1h06m\r (no-eol) (esc) | ||||
loop [=====================> ] 11/20 1h13m\r (no-eol) (esc) | ||||
loop [=======================> ] 12/20 1h07m\r (no-eol) (esc) | ||||
loop [========================> ] 13/20 58m19s\r (no-eol) (esc) | ||||
loop [===========================> ] 14/20 7m09s\r (no-eol) (esc) | ||||
loop [=============================> ] 15/20 3m38s\r (no-eol) (esc) | ||||
loop [===============================> ] 16/20 2m15s\r (no-eol) (esc) | ||||
loop [=================================> ] 17/20 1m27s\r (no-eol) (esc) | ||||
loop [====================================> ] 18/20 52s\r (no-eol) (esc) | ||||
loop [======================================> ] 19/20 25s\r (no-eol) (esc) | ||||
Jun Wu
|
r34313 | \r (no-eol) (esc) | ||
Augie Fackler
|
r13154 | Time estimates should not fail when there's no end point: | ||
Jun Wu
|
r34317 | $ MOCKTIME=11 hg -y loop -- -4 | ||
Mads Kiilerich
|
r17743 | \r (no-eol) (esc) | ||
Durham Goode
|
r19229 | loop [ <=> ] 2\r (no-eol) (esc) | ||
loop [ <=> ] 3\r (no-eol) (esc) | ||||
Mads Kiilerich
|
r17743 | \r (no-eol) (esc) | ||
FUJIWARA Katsunori
|
r21859 | |||
Yuya Nishihara
|
r28881 | #endif | ||
FUJIWARA Katsunori
|
r21859 | test line trimming by '[progress] width', when progress topic contains | ||
multi-byte characters, of which length of byte sequence and columns in | ||||
display are different from each other. | ||||
$ cp $HGRCPATH.orig $HGRCPATH | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> progress= | ||||
> loop=`pwd`/loop.py | ||||
> [progress] | ||||
> assume-tty = 1 | ||||
> delay = 0 | ||||
> refresh = 0 | ||||
> EOF | ||||
$ rm -f loop.pyc | ||||
$ cat >> loop.py <<EOF | ||||
> # use non-ascii characters as topic label of progress | ||||
> # 2 x 4 = 8 columns, but 3 x 4 = 12 bytes | ||||
> topiclabel = u'\u3042\u3044\u3046\u3048'.encode('utf-8') | ||||
> EOF | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [progress] | ||||
> format = topic number | ||||
> width= 12 | ||||
> EOF | ||||
$ hg --encoding utf-8 -y loop --total 3 3 | ||||
\r (no-eol) (esc) | ||||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 0/3\r (no-eol) (esc) | ||||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 1/3\r (no-eol) (esc) | ||||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 2/3\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
FUJIWARA Katsunori
|
r21860 | |||
test calculation of bar width, when progress topic contains multi-byte | ||||
characters, of which length of byte sequence and columns in display | ||||
are different from each other. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [progress] | ||||
> format = topic bar | ||||
> width= 21 | ||||
> # progwidth should be 9 (= 21 - (8+1) - 3) | ||||
> EOF | ||||
$ hg --encoding utf-8 -y loop --total 3 3 | ||||
\r (no-eol) (esc) | ||||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [ ]\r (no-eol) (esc) | ||||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [==> ]\r (no-eol) (esc) | ||||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [=====> ]\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
FUJIWARA Katsunori
|
r21862 | |||
Mads Kiilerich
|
r23139 | test trimming progress items, when they contain multi-byte characters, | ||
FUJIWARA Katsunori
|
r21862 | of which length of byte sequence and columns in display are different | ||
from each other. | ||||
$ rm -f loop.pyc | ||||
Yuya Nishihara
|
r33626 | $ rm -Rf __pycache__ | ||
FUJIWARA Katsunori
|
r21862 | $ cat >> loop.py <<EOF | ||
> # use non-ascii characters as loop items of progress | ||||
> loopitems = [ | ||||
FUJIWARA Katsunori
|
r21863 | > u'\u3042\u3044'.encode('utf-8'), # 2 x 2 = 4 columns | ||
FUJIWARA Katsunori
|
r21862 | > 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 | ||||
> ] | ||||
> def getloopitem(i): | ||||
> return loopitems[i % len(loopitems)] | ||||
> EOF | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [progress] | ||||
> # trim at tail side | ||||
> format = item+6 | ||||
> EOF | ||||
FUJIWARA Katsunori
|
r21863 | $ hg --encoding utf-8 -y loop --total 3 3 | ||
FUJIWARA Katsunori
|
r21862 | \r (no-eol) (esc) | ||
FUJIWARA Katsunori
|
r21863 | \xe3\x81\x82\xe3\x81\x84 \r (no-eol) (esc) | ||
FUJIWARA Katsunori
|
r21862 | \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) | ||
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [progress] | ||||
> # trim at left side | ||||
> format = item-6 | ||||
> EOF | ||||
FUJIWARA Katsunori
|
r21863 | $ hg --encoding utf-8 -y loop --total 3 3 | ||
FUJIWARA Katsunori
|
r21862 | \r (no-eol) (esc) | ||
FUJIWARA Katsunori
|
r21863 | \xe3\x81\x82\xe3\x81\x84 \r (no-eol) (esc) | ||
FUJIWARA Katsunori
|
r21862 | \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) | ||
\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\r (no-eol) (esc) | ||||
\r (no-eol) (esc) | ||||