Gabriela Gibson wrote on Mon, Apr 01, 2013 at 22:36:57 +0100: > [[[ > > Disable ANSI color for dumb terminals, fix logic bug where > dimensions of (0,0) was treated as a positive result, > re-factored _run_tests to remove repeated calculation of > line_length. > > * build/run_tests.py > (_get_term_width): Add test condition. > (TestHarness): Add new variable. > (_run_test): Add new parameter, remove function call. > > ]]] > >
> Index: build/run_tests.py > =================================================================== > --- build/run_tests.py (revision 1463012) > +++ build/run_tests.py (working copy) > @@ -100,6 +100,11 @@ def _get_term_width(): > os.close(fd) > except: > pass > + ## Some terminals (eg emacs *shell*, emacs *compilation*) > + ## seem to return (0,0) from ioctl_GWINSZ, so let's deal > + ## with that case... > + if cr == (0, 0): > + cr = None I'm not sure how to interpret a return value of (0,0) that's not accompanied by an error flag (C errno!=0, or a Python exception). Is that normal behaviour, a bug we should be working around in our code, or an indication of a bug in our logic in the preceding lines? i.e., if (0,0) means "_get_term_width() was going 35mph in a school zone at the time of the call to fcntl.ioctl()", we should fix that. But if (0,0) is just a terminal emulator bug, or expected behaviour, then +1 to commit. > if not cr: > try: > cr = (os.environ['LINES'], os.environ['COLUMNS']) > @@ -178,7 +183,8 @@ class TestHarness: > self.log = None > self.ssl_cert = ssl_cert > self.http_proxy = http_proxy > - if not sys.stdout.isatty() or sys.platform == 'win32': > + if not sys.stdout.isatty() or sys.platform == 'win32' or \ > + os.getenv("TERM") == "dumb": > TextColors.disable() > > def run(self, list): > @@ -186,8 +192,9 @@ class TestHarness: > there is a log file. Return zero iff all test programs passed.''' > self._open_log('w') > failed = 0 > + line_length = _get_term_width() > for cnt, prog in enumerate(list): > - failed = self._run_test(prog, cnt, len(list)) or failed > + failed = self._run_test(prog, cnt, len(list), line_length) or failed > This change will actually change the output if you resize the terminal window while running tests interactively (at least in terminal emulators that support the ioctl_GWINSZ approach). I'm not objected to it, but it's not clear to me what it gains either (shaves 100 syscalls from a 'make check' run?). > if self.log is None: > return failed > @@ -550,7 +557,7 @@ class TestHarness: > > return failed > > - def _run_test(self, prog, test_nr, total_tests): > + def _run_test(self, prog, test_nr, total_tests, line_length): > "Run a single test. Return the test's exit code." > > if self.log: > @@ -587,7 +594,6 @@ class TestHarness: > > progabs = os.path.abspath(os.path.join(self.srcdir, prog)) > old_cwd = os.getcwd() > - line_length = _get_term_width() > dots_needed = line_length \ > - len(test_info) \ > - len('success')