Mercurial > hg
annotate tests/test-bad-extension.t @ 32383:f928d53b687c stable
dispatch: setup color before pager for correct console information on windows
Before this patch, "hg CMD --pager on" on Windows shows output
unintentionally decorated with ANSI color escape sequences, if color
mode is "auto". This issue occurs in steps below.
1. dispatch() invokes ui.pager() at detection of "--pager on"
2. stdout of hg process is redirected into stdin of pager process
3. "ui.formatted" = True, because isatty(stdout) is so before (2)
4. color module is loaded for colorization
5. color.w32effects = None, because GetConsoleScreenBufferInfo()
fails on stdout redirected at (2)
6. "ansi" color mode is chosen, because of "not w32effects"
7. output is colorized in "ansi" mode because of "ui.formatted" = True
Even if "ansi" color mode is chosen, ordinarily redirected stdout
makes ui.formatted() return False, and colorization is avoided. But in
this issue case, "ui.formatted" = True at (3) forces output to be
colorized.
For correct console information on win32, it is needed to ensure that
color module is loaded before redirection of stdout for pagination.
BTW, if any of enabled extensions has "colortable" attribute, this
issue is avoided even before this patch, because color module is
imported as a part of loading such extension, and extension loading
occurs before setting up pager. For example, mq and keyword have
"colortable".
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Tue, 23 May 2017 03:29:23 +0900 |
parents | 84f9eb9758c0 |
children | 46ba2cdda476 |
rev | line source |
---|---|
31957
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
1 ensure that failing ui.atexit handlers report sensibly |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
2 |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
3 $ cat > $TESTTMP/bailatexit.py <<EOF |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
4 > from mercurial import util |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
5 > def bail(): |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
6 > raise RuntimeError('ui.atexit handler exception') |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
7 > |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
8 > def extsetup(ui): |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
9 > ui.atexit(bail) |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
10 > EOF |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
11 $ hg -q --config extensions.bailatexit=$TESTTMP/bailatexit.py \ |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
12 > help help |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
13 hg help [-ecks] [TOPIC] |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
14 |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
15 show help for a given topic or a help overview |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
16 error in exit handlers: |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
17 Traceback (most recent call last): |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
18 File "*/mercurial/dispatch.py", line *, in _runexithandlers (glob) |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
19 func(*args, **kwargs) |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
20 File "$TESTTMP/bailatexit.py", line *, in bail (glob) |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
21 raise RuntimeError('ui.atexit handler exception') |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
22 RuntimeError: ui.atexit handler exception |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
23 [255] |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
24 |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
25 $ rm $TESTTMP/bailatexit.py |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
26 |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
27 another bad extension |
84f9eb9758c0
atexit: test failing handlers
Bryan O'Sullivan <bryano@fb.com>
parents:
30027
diff
changeset
|
28 |
11858
934c7e91c126
tests: unify test-bad-extension
Martin Geisler <mg@lazybytes.net>
parents:
6204
diff
changeset
|
29 $ echo 'raise Exception("bit bucket overflow")' > badext.py |
28083
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
30 $ abspathexc=`pwd`/badext.py |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
31 |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
32 $ cat >baddocext.py <<EOF |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
33 > """ |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
34 > baddocext is bad |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
35 > """ |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
36 > EOF |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
37 $ abspathdoc=`pwd`/baddocext.py |
3014
01454af644b8
load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
38 |
23172
e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
14286
diff
changeset
|
39 $ cat <<EOF >> $HGRCPATH |
e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
14286
diff
changeset
|
40 > [extensions] |
e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
14286
diff
changeset
|
41 > gpg = |
e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
14286
diff
changeset
|
42 > hgext.gpg = |
28083
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
43 > badext = $abspathexc |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
44 > baddocext = $abspathdoc |
23172
e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
14286
diff
changeset
|
45 > badext2 = |
e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents:
14286
diff
changeset
|
46 > EOF |
3014
01454af644b8
load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
47 |
26239
f39953663cc9
test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents:
25364
diff
changeset
|
48 $ hg -q help help 2>&1 |grep extension |
12640
6cc4b14fb76b
tests: remove redundant globs
Mads Kiilerich <mads@kiilerich.com>
parents:
12376
diff
changeset
|
49 *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow |
12375
02990e22150b
tests: require regexes in unified tests to be marked with " (re)"
Brodie Rao <brodie@bitheap.org>
parents:
11858
diff
changeset
|
50 *** failed to import extension badext2: No module named badext2 |
25364
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
51 |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
52 show traceback |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
53 |
26239
f39953663cc9
test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents:
25364
diff
changeset
|
54 $ hg -q help help --traceback 2>&1 | egrep ' extension|^Exception|Traceback|ImportError' |
25364
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
55 *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
56 Traceback (most recent call last): |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
57 Exception: bit bucket overflow |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
58 *** failed to import extension badext2: No module named badext2 |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
59 Traceback (most recent call last): |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
60 ImportError: No module named badext2 |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
61 |
28155
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
62 names of extensions failed to load can be accessed via extensions.notloaded() |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
63 |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
64 $ cat <<EOF > showbadexts.py |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
65 > from mercurial import cmdutil, commands, extensions |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
66 > cmdtable = {} |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
67 > command = cmdutil.command(cmdtable) |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
68 > @command('showbadexts', norepo=True) |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
69 > def showbadexts(ui, *pats, **opts): |
28338
9974b8236cac
tests: Solaris grep doesn't add a trailing newline when it's missing
Danek Duvall <danek.duvall@oracle.com>
parents:
28155
diff
changeset
|
70 > ui.write('BADEXTS: %s\n' % ' '.join(sorted(extensions.notloaded()))) |
28155
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
71 > EOF |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
72 $ hg --config extensions.badexts=showbadexts.py showbadexts 2>&1 | grep '^BADEXTS' |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
73 BADEXTS: badext badext2 |
7f430b2ac7fd
extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents:
28083
diff
changeset
|
74 |
25364
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
75 show traceback for ImportError of hgext.name if debug is set |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
76 (note that --debug option isn't applied yet when loading extensions) |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
77 |
26239
f39953663cc9
test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents:
25364
diff
changeset
|
78 $ (hg -q help help --traceback --config ui.debug=True 2>&1) \ |
f39953663cc9
test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents:
25364
diff
changeset
|
79 > | grep -v '^ ' \ |
f39953663cc9
test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents:
25364
diff
changeset
|
80 > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|not import' |
25364
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
81 *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
82 Traceback (most recent call last): |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
83 Exception: bit bucket overflow |
30027
ebe488e04ca3
extensions: fix a debug message when searching for extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28737
diff
changeset
|
84 could not import hgext.badext2 (No module named *badext2): trying hgext3rd.badext2 (glob) |
25364
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
85 Traceback (most recent call last): |
27538
50ad3f25fb4c
test-bad-extension: account for PyPy/CPython error difference
Bryan O'Sullivan <bos@serpentine.com>
parents:
26239
diff
changeset
|
86 ImportError: No module named *badext2 (glob) |
28737
a3a01194a337
pypy: fix overspecific test checks
Maciej Fijalkowski <fijall@gmail.com>
parents:
28541
diff
changeset
|
87 could not import hgext3rd.badext2 (No module named *badext2): trying badext2 (glob) |
28541
4b81487a01d4
extensions: also search for extension in the 'hgext3rd' package
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28338
diff
changeset
|
88 Traceback (most recent call last): |
28737
a3a01194a337
pypy: fix overspecific test checks
Maciej Fijalkowski <fijall@gmail.com>
parents:
28541
diff
changeset
|
89 ImportError: No module named *badext2 (glob) |
25364
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
90 *** failed to import extension badext2: No module named badext2 |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
91 Traceback (most recent call last): |
de23a552fc23
extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents:
23172
diff
changeset
|
92 ImportError: No module named badext2 |
28083
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
93 |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
94 confirm that there's no crash when an extension's documentation is bad |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
95 |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
96 $ hg help --keyword baddocext |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
97 *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
98 *** failed to import extension badext2: No module named badext2 |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
99 Topics: |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
100 |
550097d01ca3
tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents:
27538
diff
changeset
|
101 extensions Using Additional Features |