tests/test-ui-color.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 28 Mar 2015 00:47:58 -0700
changeset 24505 031947baf4d0
parent 19322 ff1586a3adc5
child 28682 2e5be704bc96
permissions -rw-r--r--
run-tests: collect aggregate code coverage Before this patch, every Python process during a code coverage run was writing coverage data to the same file. I'm not sure if the coverage package even tries to obtain a lock on the file. But what I do know is there was some last write wins leading to loss of code coverage data, at least with -j > 1. This patch changes the code coverage mechanism to be multiple process safe. The mechanism for initializing code coverage via sitecustomize.py has been tweaked so each Python process will produce a separate coverage data file on disk. Unless two processes generate the same random value, there are no race conditions writing to the same file. At the end of the test run, we combine all written files into an aggregate report. On my machine, running the full test suite produces a little over 20,000 coverage files consuming ~350 MB. As you can imagine, it takes several seconds to load and merge these coverage files. But when it is done, you have an accurate picture of the aggregate code coverage for the entire test suite, which is ~60% line coverage.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19322
ff1586a3adc5 cleanup: remove unused imports
Simon Heimberg <simohe@besonet.ch>
parents: 17956
diff changeset
     1
import os
11732
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
     2
from hgext import color
14516
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
     3
from mercurial import dispatch, ui
11732
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
     4
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
     5
# ensure errors aren't buffered
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
     6
testui = color.colorui()
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
     7
testui.pushbuffer()
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 14614
diff changeset
     8
testui.write(('buffered\n'))
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 14614
diff changeset
     9
testui.warn(('warning\n'))
11732
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
    10
testui.write_err('error\n')
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents:
diff changeset
    11
print repr(testui.popbuffer())
14516
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    12
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    13
# test dispatch.dispatch with the same ui object
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    14
hgrc = open(os.environ["HGRCPATH"], 'w')
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    15
hgrc.write('[extensions]\n')
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    16
hgrc.write('color=\n')
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    17
hgrc.close()
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    18
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    19
ui_ = ui.ui()
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    20
ui_.setconfig('ui', 'formatted', 'True')
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    21
14614
afccc64eea73 ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents: 14516
diff changeset
    22
# we're not interested in the output, so write that to devnull
afccc64eea73 ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents: 14516
diff changeset
    23
ui_.fout = open(os.devnull, 'w')
afccc64eea73 ui: use I/O descriptors internally
Idan Kamara <idankk86@gmail.com>
parents: 14516
diff changeset
    24
14516
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    25
# call some arbitrary command just so we go through
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    26
# color's wrapped _runcommand twice.
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    27
def runcmd():
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    28
    dispatch.dispatch(dispatch.request(['version', '-q'], ui_))
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    29
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    30
runcmd()
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    31
print "colored? " + str(issubclass(ui_.__class__, color.colorui))
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    32
runcmd()
842a9179132c color: check if ui is already a subclass of colorui before wrapping it
Idan Kamara <idankk86@gmail.com>
parents: 12865
diff changeset
    33
print "colored? " + str(issubclass(ui_.__class__, color.colorui))