Submitter | Matthieu Laneuville |
---|---|
Date | Aug. 11, 2017, 12:25 p.m. |
Message ID | <26bd9bfc7f679dc521b8.1502454312@carbon> |
Download | mbox | patch |
Permalink | /patch/22870/ |
State | Accepted |
Headers | show |
Comments
On Fri, Aug 11, 2017 at 02:25:12PM +0200, mlaneuville@gmail.com wrote: > # HG changeset patch > # User Matthieu Laneuville <matthieu.laneuville@octobus.net> > # Date 1502454109 -7200 > # Fri Aug 11 14:21:49 2017 +0200 > # Node ID 26bd9bfc7f679dc521b8056b48875eee71cd8627 > # Parent 609606d217659e0a6c1cf6f907b6512be5340e57 > run-tests: also color the summary messages (skipped, failed...) queued, thanks
On Fri, 11 Aug 2017 14:25:12 +0200, mlaneuville@gmail.com wrote: > # HG changeset patch > # User Matthieu Laneuville <matthieu.laneuville@octobus.net> > # Date 1502454109 -7200 > # Fri Aug 11 14:21:49 2017 +0200 > # Node ID 26bd9bfc7f679dc521b8056b48875eee71cd8627 > # Parent 609606d217659e0a6c1cf6f907b6512be5340e57 > run-tests: also color the summary messages (skipped, failed...) > > diff -r 609606d21765 -r 26bd9bfc7f67 tests/run-tests.py > --- a/tests/run-tests.py Thu Jul 20 01:30:41 2017 -0700 > +++ b/tests/run-tests.py Fri Aug 11 14:21:49 2017 +0200 > @@ -94,13 +94,48 @@ > try: # is pygments installed > import pygments > import pygments.lexers as lexers > + import pygments.lexer as lexer > import pygments.formatters as formatters > + import pygments.token as token > + import pygments.style as style > pygmentspresent = True > difflexer = lexers.DiffLexer() > terminal256formatter = formatters.Terminal256Formatter() > except ImportError: > pass > > +if pygmentspresent: > + class TestRunnerStyle(style.Style): > + default_style = "" > + skipped = token.string_to_tokentype("Token.Generic.Skipped") > + failed = token.string_to_tokentype("Token.Generic.Failed") > + error = token.string_to_tokentype("Token.Generic.Error") > + skippedname = token.string_to_tokentype("Token.Generic.SName") > + failedname = token.string_to_tokentype("Token.Generic.FName") > + styles = { > + skipped: '#e5e5e5', > + skippedname: '#00ffff', > + failed: '#7f0000', > + failedname: '#ff0000', > + } > + > + class TestRunnerLexer(lexer.RegexLexer): > + tokens = { > + 'root': [ > + (r'^Skipped', token.Generic.Skipped, 'skipped'), > + (r'^Failed ', token.Generic.Failed, 'failed'), > + (r'^ERROR: ', token.Generic.Failed, 'failed'), > + ], > + 'skipped': [ > + (r'[\w-]+\.t', token.Generic.SName), > + (r':.*', token.Generic.Skipped), > + ], > + 'failed': [ > + (r'[\w-]+\.t', token.Generic.FName), > + (r'(:| ).*', token.Generic.Failed), > + ] > + } > + > if sys.version_info > (3, 5, 0): > PYTHON3 = True > xrange = range # we use xrange in one place, and we'd rather not use range > @@ -1586,7 +1621,14 @@ > self.stream.write('t') > else: > if not self._options.nodiff: > - self.stream.write('\nERROR: %s output changed\n' % test) > + formatted = '\nERROR: %s output changed\n' % test > + if self.color: > + formatted = pygments.highlight( > + formatted, > + TestRunnerLexer(), > + formatters.Terminal256Formatter( > + style=TestRunnerStyle)) > + self.stream.write(formatted) > self.stream.write('!') > > self.stream.flush() > @@ -1988,9 +2030,23 @@ > > if not self._runner.options.noskips: > for test, msg in result.skipped: > - self.stream.writeln('Skipped %s: %s' % (test.name, msg)) > + formatted = 'Skipped %s: %s' % (test.name, msg) > + if result.color: > + formatted = pygments.highlight( > + formatted, > + TestRunnerLexer(), > + formatters.Terminal256Formatter( > + style=TestRunnerStyle)).strip("\n") > + self.stream.writeln(formatted) > for test, msg in result.failures: > - self.stream.writeln('Failed %s: %s' % (test.name, msg)) > + formatted = 'Failed %s: %s' % (test.name, msg) > + if result.color: > + formatted = pygments.highlight( > + formatted, > + TestRunnerLexer(), > + formatters.Terminal256Formatter( > + style=TestRunnerStyle)).strip("\n") Perhaps these pygments objects should be instantiated only once, because pygments is slow. 20436925e080 Please send a followup.
Patch
diff -r 609606d21765 -r 26bd9bfc7f67 tests/run-tests.py --- a/tests/run-tests.py Thu Jul 20 01:30:41 2017 -0700 +++ b/tests/run-tests.py Fri Aug 11 14:21:49 2017 +0200 @@ -94,13 +94,48 @@ try: # is pygments installed import pygments import pygments.lexers as lexers + import pygments.lexer as lexer import pygments.formatters as formatters + import pygments.token as token + import pygments.style as style pygmentspresent = True difflexer = lexers.DiffLexer() terminal256formatter = formatters.Terminal256Formatter() except ImportError: pass +if pygmentspresent: + class TestRunnerStyle(style.Style): + default_style = "" + skipped = token.string_to_tokentype("Token.Generic.Skipped") + failed = token.string_to_tokentype("Token.Generic.Failed") + error = token.string_to_tokentype("Token.Generic.Error") + skippedname = token.string_to_tokentype("Token.Generic.SName") + failedname = token.string_to_tokentype("Token.Generic.FName") + styles = { + skipped: '#e5e5e5', + skippedname: '#00ffff', + failed: '#7f0000', + failedname: '#ff0000', + } + + class TestRunnerLexer(lexer.RegexLexer): + tokens = { + 'root': [ + (r'^Skipped', token.Generic.Skipped, 'skipped'), + (r'^Failed ', token.Generic.Failed, 'failed'), + (r'^ERROR: ', token.Generic.Failed, 'failed'), + ], + 'skipped': [ + (r'[\w-]+\.t', token.Generic.SName), + (r':.*', token.Generic.Skipped), + ], + 'failed': [ + (r'[\w-]+\.t', token.Generic.FName), + (r'(:| ).*', token.Generic.Failed), + ] + } + if sys.version_info > (3, 5, 0): PYTHON3 = True xrange = range # we use xrange in one place, and we'd rather not use range @@ -1586,7 +1621,14 @@ self.stream.write('t') else: if not self._options.nodiff: - self.stream.write('\nERROR: %s output changed\n' % test) + formatted = '\nERROR: %s output changed\n' % test + if self.color: + formatted = pygments.highlight( + formatted, + TestRunnerLexer(), + formatters.Terminal256Formatter( + style=TestRunnerStyle)) + self.stream.write(formatted) self.stream.write('!') self.stream.flush() @@ -1988,9 +2030,23 @@ if not self._runner.options.noskips: for test, msg in result.skipped: - self.stream.writeln('Skipped %s: %s' % (test.name, msg)) + formatted = 'Skipped %s: %s' % (test.name, msg) + if result.color: + formatted = pygments.highlight( + formatted, + TestRunnerLexer(), + formatters.Terminal256Formatter( + style=TestRunnerStyle)).strip("\n") + self.stream.writeln(formatted) for test, msg in result.failures: - self.stream.writeln('Failed %s: %s' % (test.name, msg)) + formatted = 'Failed %s: %s' % (test.name, msg) + if result.color: + formatted = pygments.highlight( + formatted, + TestRunnerLexer(), + formatters.Terminal256Formatter( + style=TestRunnerStyle)).strip("\n") + self.stream.writeln(formatted) for test, msg in result.errors: self.stream.writeln('Errored %s: %s' % (test.name, msg)) diff -r 609606d21765 -r 26bd9bfc7f67 tests/test-run-tests.t --- a/tests/test-run-tests.t Thu Jul 20 01:30:41 2017 -0700 +++ b/tests/test-run-tests.t Fri Aug 11 14:21:49 2017 +0200 @@ -131,10 +131,9 @@ \x1b[38;5;34m+ bar*baz (glob)\x1b[39m (esc) bar*bad (glob) \x1b[38;5;124m- bar*baz (glob)\x1b[39m (esc) - - ERROR: test-failure.t output changed + \x1b[38;5;88mERROR: \x1b[39m\x1b[38;5;9mtest-failure.t\x1b[39m\x1b[38;5;88m output changed\x1b[39m (esc) ! - Failed test-failure.t: output changed + \x1b[38;5;88mFailed \x1b[39m\x1b[38;5;9mtest-failure.t\x1b[39m\x1b[38;5;88m: output changed\x1b[39m (esc) # Ran 1 tests, 0 skipped, 1 failed. python hash seed: * (glob) [1]