Changeset: 9ca37fbd8e3d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9ca37fbd8e3d
Modified Files:
testing/Mtest.py.in
Branch: Jul2017
Log Message:
Colorize output, even on Windows.
On anything older than Windows 10, it can't be done by using escape
sequences (and I haven't tested Windows 10), but using console
attributes should work anywhere.
diffs (122 lines):
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -45,15 +45,65 @@ start_time = time.time()
# whether output goes to a tty
isatty = os.isatty(sys.stdout.fileno())
-if os.name != 'nt' and isatty:
- # color output a little
- RED = '\033[1;31m'
- GREEN = '\033[0;32m'
- PURPLE = '\033[1;35m' # actually magenta
- BLACK = '\033[0;0m'
-else:
- # no coloring if not to a tty
- RED = GREEN = PURPLE = BLACK = ''
+# default is no color (these three functions may get redefined)
+def prred(str, write = sys.stdout.write):
+ write(str)
+def prgreen(str, write = sys.stdout.write):
+ write(str)
+def prpurple(str, write = sys.stdout.write):
+ write(str)
+if isatty:
+ if os.name != 'nt':
+ # color output a little
+ RED = '\033[1;31m'
+ GREEN = '\033[0;32m'
+ PURPLE = '\033[1;35m' # actually magenta
+ BLACK = '\033[0;0m'
+ def prred(str, write = sys.stdout.write):
+ write(RED)
+ write(str)
+ write(BLACK)
+ def prgreen(str, write = sys.stdout.write):
+ write(GREEN)
+ write(str)
+ write(BLACK)
+ def prpurple(str, write = sys.stdout.write):
+ write(PURPLE)
+ write(str)
+ write(BLACK)
+ else:
+ try:
+ import ctypes
+ except ImportError:
+ pass
+ else:
+ STD_OUTPUT_HANDLE = -11
+ try:
+ handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
+ except AttributeError:
+ pass
+ else:
+ def get_csbi_attributes(handle):
+ # Based on IPython's winconsole.py, written by Alexander
Belchenko
+ csbi = ctypes.create_string_buffer(22)
+ res =
ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
+ assert res
+ (bufx, bufy, curx, cury, wattr,
+ left, top, right, bottom, maxx, maxy) =
struct.unpack("hhhhHhhhhhh", csbi.raw)
+ return wattr
+ reset = get_csbi_attributes(handle)
+ def prred(str, write = sys.stdout.write, scta =
ctypes.windll.kernel32.SetConsoleTextAttribute):
+ scta(handle, 0x4)
+ write(str)
+ scta(handle, reset)
+ def prgreen(str, write = sys.stdout.write, scta =
ctypes.windll.kernel32.SetConsoleTextAttribute):
+ scta(handle, 0x2)
+ write(str)
+ scta(handle, reset)
+ def prpurple(str, write = sys.stdout.write, scta =
ctypes.windll.kernel32.SetConsoleTextAttribute):
+ scta(handle, 0x5)
+ write(str)
+ scta(handle, reset)
if os.path.exists('/usr/bin/coredumpctl'):
# probably Linux if /usr/bin/coredumpctl exists
@@ -2443,31 +2493,31 @@ def RunTest(env, TST, BusyPorts, COND, o
if not verbose and not quiet:
if tres == 'socket':
- STDOUT.write("%sSOCKET%s" % (PURPLE, BLACK))
+ prpurple('SOCKET')
elif tres == 'timeout':
- STDOUT.write("%sTIMEOUT%s" % (PURPLE, BLACK))
+ prpurple('TIMEOUT')
elif tres == 'recursion':
- STDOUT.write("%sRECURSION%s" % (PURPLE, BLACK))
+ prpurple('RECURSION')
elif tres == 'segfault':
- STDOUT.write("%sCRASHED%s" % (PURPLE, BLACK))
+ prpurple('CRASHED')
elif tres == 'abort':
- STDOUT.write('%sABORTED%s' % (PURPLE, BLACK))
+ prpurple('ABORTED')
elif tres == 'signal':
- STDOUT.write('%sSIGNALED%s' % (PURPLE, BLACK))
+ prpurple('SIGNALED')
else:
if FailedOut == F_OK:
- STDOUT.write('%sOK%s ' % (GREEN, BLACK))
+ prgreen('OK ')
elif FailedOut == F_WARN:
- STDOUT.write('%sminor%s' % (GREEN, BLACK))
+ prgreen('minor')
else:
- STDOUT.write('%sMAJOR%s' % (RED, BLACK))
+ prred('MAJOR')
STDOUT.write(' ')
if FailedErr == F_OK:
- STDOUT.write('%sOK%s' % (GREEN, BLACK))
+ prgreen('OK')
elif FailedErr == F_WARN:
- STDOUT.write('%sminor%s' % (GREEN, BLACK))
+ prgreen('minor')
else:
- STDOUT.write('%sMAJOR%s' % (RED, BLACK))
+ prred('MAJOR')
STDOUT.write('\n')
return TX,FailedOut,FailedErr,elem,reason,links
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list