mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
tests: duplicate test for pager for old extension and for in-core pager
When the old pager extension is enabled, I think we should try to be as BC as reasonable. To help with that, this patch brings back test-pager.t as of 45ff5bf9e9c2 (pager: add a test of --pager=no functionality, 2017-02-06), but under the name test-pager-legacy.t However, since the behavior has changed in a few cases (notably by no longer respecting pager.attend), the file is modified to work with the current version. We will recover some lost BC in coming patches. Also, to make sure the in-core pager does not depend on the pager extension being enabled, this patch disables the extension in test-pager.t. It turns out that pager.attend-$cmd was only supported when the pager extension was enabled, so the tests are updated to reflect that. We will need to decide what to do with these.
This commit is contained in:
parent
1c399d6b97
commit
ee1e520bcd
234
tests/test-pager-legacy.t
Normal file
234
tests/test-pager-legacy.t
Normal file
@ -0,0 +1,234 @@
|
||||
$ cat >> fakepager.py <<EOF
|
||||
> import sys
|
||||
> for line in sys.stdin:
|
||||
> sys.stdout.write('paged! %r\n' % line)
|
||||
> EOF
|
||||
|
||||
Enable ui.formatted because pager won't fire without it, and set up
|
||||
pager and tell it to use our fake pager that lets us see when the
|
||||
pager was running.
|
||||
$ cat >> $HGRCPATH <<EOF
|
||||
> [ui]
|
||||
> formatted = yes
|
||||
> [extensions]
|
||||
> pager=
|
||||
> [pager]
|
||||
> pager = python $TESTTMP/fakepager.py
|
||||
> EOF
|
||||
|
||||
$ hg init repo
|
||||
$ cd repo
|
||||
$ echo a >> a
|
||||
$ hg add a
|
||||
$ hg ci -m 'add a'
|
||||
$ for x in `python $TESTDIR/seq.py 1 10`; do
|
||||
> echo a $x >> a
|
||||
> hg ci -m "modify a $x"
|
||||
> done
|
||||
|
||||
By default diff and log are paged, but summary is not:
|
||||
|
||||
$ hg diff -c 2 --pager=yes
|
||||
paged! 'diff -r f4be7687d414 -r bce265549556 a\n'
|
||||
paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! '@@ -1,2 +1,3 @@\n'
|
||||
paged! ' a\n'
|
||||
paged! ' a 1\n'
|
||||
paged! '+a 2\n'
|
||||
|
||||
$ hg log --limit 2
|
||||
paged! 'changeset: 10:46106edeeb38\n'
|
||||
paged! 'tag: tip\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 10\n'
|
||||
paged! '\n'
|
||||
paged! 'changeset: 9:6dd8ea7dd621\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 9\n'
|
||||
paged! '\n'
|
||||
|
||||
BROKEN: should not be paged by default
|
||||
$ hg summary
|
||||
paged! 'parent: 10:46106edeeb38 tip\n'
|
||||
paged! ' modify a 10\n'
|
||||
paged! 'branch: default\n'
|
||||
paged! 'commit: (clean)\n'
|
||||
paged! 'update: (current)\n'
|
||||
paged! 'phases: 11 draft\n'
|
||||
|
||||
We can enable the pager on summary:
|
||||
|
||||
$ hg --config pager.attend-summary=yes summary
|
||||
paged! 'parent: 10:46106edeeb38 tip\n'
|
||||
paged! ' modify a 10\n'
|
||||
paged! 'branch: default\n'
|
||||
paged! 'commit: (clean)\n'
|
||||
paged! 'update: (current)\n'
|
||||
paged! 'phases: 11 draft\n'
|
||||
|
||||
$ hg --config pager.attend-diff=no diff -c 2
|
||||
diff -r f4be7687d414 -r bce265549556 a
|
||||
--- a/a Thu Jan 01 00:00:00 1970 +0000
|
||||
+++ b/a Thu Jan 01 00:00:00 1970 +0000
|
||||
@@ -1,2 +1,3 @@
|
||||
a
|
||||
a 1
|
||||
+a 2
|
||||
|
||||
If we completely change the attend list that's respected:
|
||||
BROKEN: diff should not be paged
|
||||
$ hg --config pager.attend=summary diff -c 2
|
||||
paged! 'diff -r f4be7687d414 -r bce265549556 a\n'
|
||||
paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! '@@ -1,2 +1,3 @@\n'
|
||||
paged! ' a\n'
|
||||
paged! ' a 1\n'
|
||||
paged! '+a 2\n'
|
||||
|
||||
If 'log' is in attend, then 'history' should also be paged:
|
||||
$ hg history --limit 2 --config pager.attend=log
|
||||
paged! 'changeset: 10:46106edeeb38\n'
|
||||
paged! 'tag: tip\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 10\n'
|
||||
paged! '\n'
|
||||
paged! 'changeset: 9:6dd8ea7dd621\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 9\n'
|
||||
paged! '\n'
|
||||
|
||||
Possible bug: history is explicitly ignored in pager config, but
|
||||
because log is in the attend list it still gets pager treatment.
|
||||
|
||||
$ hg history --limit 2 --config pager.attend=log \
|
||||
> --config pager.ignore=history
|
||||
paged! 'changeset: 10:46106edeeb38\n'
|
||||
paged! 'tag: tip\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 10\n'
|
||||
paged! '\n'
|
||||
paged! 'changeset: 9:6dd8ea7dd621\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 9\n'
|
||||
paged! '\n'
|
||||
|
||||
Possible bug: history is explicitly marked as attend-history=no, but
|
||||
it doesn't fail to get paged because log is still in the attend list.
|
||||
|
||||
$ hg history --limit 2 --config pager.attend-history=no
|
||||
paged! 'changeset: 10:46106edeeb38\n'
|
||||
paged! 'tag: tip\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 10\n'
|
||||
paged! '\n'
|
||||
paged! 'changeset: 9:6dd8ea7dd621\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 9\n'
|
||||
paged! '\n'
|
||||
|
||||
Possible bug: disabling pager for log but enabling it for history
|
||||
doesn't result in history being paged.
|
||||
|
||||
$ hg history --limit 2 --config pager.attend-log=no \
|
||||
> --config pager.attend-history=yes
|
||||
changeset: 10:46106edeeb38
|
||||
tag: tip
|
||||
user: test
|
||||
date: Thu Jan 01 00:00:00 1970 +0000
|
||||
summary: modify a 10
|
||||
|
||||
changeset: 9:6dd8ea7dd621
|
||||
user: test
|
||||
date: Thu Jan 01 00:00:00 1970 +0000
|
||||
summary: modify a 9
|
||||
|
||||
Pager should not start if stdout is not a tty.
|
||||
|
||||
$ hg log -l1 -q --config ui.formatted=False
|
||||
10:46106edeeb38
|
||||
|
||||
Pager with color enabled allows colors to come through by default,
|
||||
even though stdout is no longer a tty.
|
||||
$ cat >> $HGRCPATH <<EOF
|
||||
> [extensions]
|
||||
> color=
|
||||
> [color]
|
||||
> mode = ansi
|
||||
> EOF
|
||||
$ hg log --limit 3
|
||||
paged! '\x1b[0;33mchangeset: 10:46106edeeb38\x1b[0m\n'
|
||||
paged! 'tag: tip\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 10\n'
|
||||
paged! '\n'
|
||||
paged! '\x1b[0;33mchangeset: 9:6dd8ea7dd621\x1b[0m\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 9\n'
|
||||
paged! '\n'
|
||||
paged! '\x1b[0;33mchangeset: 8:cff05a6312fe\x1b[0m\n'
|
||||
paged! 'user: test\n'
|
||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
|
||||
paged! 'summary: modify a 8\n'
|
||||
paged! '\n'
|
||||
|
||||
Pager works with shell aliases.
|
||||
|
||||
$ cat >> $HGRCPATH <<EOF
|
||||
> [alias]
|
||||
> echoa = !echo a
|
||||
> EOF
|
||||
|
||||
$ hg echoa
|
||||
a
|
||||
$ hg --config pager.attend-echoa=yes echoa
|
||||
paged! 'a\n'
|
||||
|
||||
Pager works with hg aliases including environment variables.
|
||||
|
||||
$ cat >> $HGRCPATH <<'EOF'
|
||||
> [alias]
|
||||
> printa = log -T "$A\n" -r 0
|
||||
> EOF
|
||||
|
||||
$ A=1 hg --config pager.attend-printa=yes printa
|
||||
paged! '1\n'
|
||||
$ A=2 hg --config pager.attend-printa=yes printa
|
||||
paged! '2\n'
|
||||
|
||||
Something that's explicitly attended is still not paginated if the
|
||||
pager is globally set to off using a flag:
|
||||
$ A=2 hg --config pager.attend-printa=yes printa --pager=no
|
||||
2
|
||||
|
||||
Pager should not override the exit code of other commands
|
||||
|
||||
$ cat >> $TESTTMP/fortytwo.py <<'EOF'
|
||||
> from mercurial import cmdutil, commands
|
||||
> cmdtable = {}
|
||||
> command = cmdutil.command(cmdtable)
|
||||
> @command('fortytwo', [], 'fortytwo', norepo=True)
|
||||
> def fortytwo(ui, *opts):
|
||||
> ui.write('42\n')
|
||||
> return 42
|
||||
> EOF
|
||||
|
||||
$ cat >> $HGRCPATH <<'EOF'
|
||||
> [extensions]
|
||||
> fortytwo = $TESTTMP/fortytwo.py
|
||||
> EOF
|
||||
|
||||
$ hg fortytwo --pager=on
|
||||
paged! '42\n'
|
||||
[42]
|
@ -10,8 +10,6 @@ pager was running.
|
||||
$ cat >> $HGRCPATH <<EOF
|
||||
> [ui]
|
||||
> formatted = yes
|
||||
> [extensions]
|
||||
> pager=
|
||||
> [pager]
|
||||
> pager = python $TESTTMP/fakepager.py
|
||||
> EOF
|
||||
@ -55,12 +53,12 @@ By default diff and log are paged, but id is not:
|
||||
|
||||
We can enable the pager on id:
|
||||
|
||||
BROKEN: should be paged
|
||||
$ hg --config pager.attend-id=yes id
|
||||
paged! '46106edeeb38 tip\n'
|
||||
46106edeeb38 tip
|
||||
|
||||
Setting attend-$COMMAND to a false value works, even with pager in
|
||||
core:
|
||||
|
||||
$ hg --config pager.attend-diff=no diff -c 2
|
||||
diff -r f4be7687d414 -r bce265549556 a
|
||||
--- a/a Thu Jan 01 00:00:00 1970 +0000
|
||||
@ -130,8 +128,9 @@ Pager works with shell aliases.
|
||||
|
||||
$ hg echoa
|
||||
a
|
||||
BROKEN: should be paged
|
||||
$ hg --config pager.attend-echoa=yes echoa
|
||||
paged! 'a\n'
|
||||
a
|
||||
|
||||
Pager works with hg aliases including environment variables.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user