regrtest.py
字号:
# being imported. For the benefit of tests that can't run # that way (like test_threaded_import), explicitly invoke # their test_main() function (if it exists). indirect_test = getattr(the_module, "test_main", None) if indirect_test is not None: indirect_test() finally: sys.stdout = save_stdout except (ImportError, test_support.TestSkipped), msg: if not quiet: print test, "skipped --", msg sys.stdout.flush() return -1 except KeyboardInterrupt: raise except test_support.TestFailed, msg: print "test", test, "failed --", msg sys.stdout.flush() return 0 except: type, value = sys.exc_info()[:2] print "test", test, "crashed --", str(type) + ":", value sys.stdout.flush() if verbose: traceback.print_exc(file=sys.stdout) sys.stdout.flush() return 0 else: if not cfp: return 1 output = cfp.getvalue() if generate: if output == test + "\n": if os.path.exists(outputfile): # Write it since it already exists (and the contents # may have changed), but let the user know it isn't # needed: print "output file", outputfile, \ "is no longer needed; consider removing it" else: # We don't need it, so don't create it. return 1 fp = open(outputfile, "w") fp.write(output) fp.close() return 1 if os.path.exists(outputfile): fp = open(outputfile, "r") expected = fp.read() fp.close() else: expected = test + "\n" if output == expected: return 1 print "test", test, "produced unexpected output:" sys.stdout.flush() reportdiff(expected, output) sys.stdout.flush() return 0def reportdiff(expected, output): import difflib print "*" * 70 a = expected.splitlines(1) b = output.splitlines(1) sm = difflib.SequenceMatcher(a=a, b=b) tuples = sm.get_opcodes() def pair(x0, x1): # x0:x1 are 0-based slice indices; convert to 1-based line indices. x0 += 1 if x0 >= x1: return "line " + str(x0) else: return "lines %d-%d" % (x0, x1) for op, a0, a1, b0, b1 in tuples: if op == 'equal': pass elif op == 'delete': print "***", pair(a0, a1), "of expected output missing:" for line in a[a0:a1]: print "-", line, elif op == 'replace': print "*** mismatch between", pair(a0, a1), "of expected", \ "output and", pair(b0, b1), "of actual output:" for line in difflib.ndiff(a[a0:a1], b[b0:b1]): print line, elif op == 'insert': print "***", pair(b0, b1), "of actual output doesn't appear", \ "in expected output after line", str(a1)+":" for line in b[b0:b1]: print "+", line, else: print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) print "*" * 70def findtestdir(): if __name__ == '__main__': file = sys.argv[0] else: file = __file__ testdir = os.path.dirname(file) or os.curdir return testdirdef count(n, word): if n == 1: return "%d %s" % (n, word) else: return "%d %ss" % (n, word)def printlist(x, width=70, indent=4): """Print the elements of a sequence to stdout. Optional arg width (default 70) is the maximum line length. Optional arg indent (default 4) is the number of blanks with which to begin each line. """ line = ' ' * indent for one in map(str, x): w = len(line) + len(one) if line[-1:] == ' ': pad = '' else: pad = ' ' w += 1 if w > width: print line line = ' ' * indent + one else: line += pad + one if len(line) > indent: print lineclass _Set: def __init__(self, seq=[]): data = self.data = {} for x in seq: data[x] = 1 def __len__(self): return len(self.data) def __sub__(self, other): "Return set of all elements in self not in other." result = _Set() data = result.data = self.data.copy() for x in other.data: if x in data: del data[x] return result def __iter__(self): return iter(self.data) def tolist(self, sorted=1): "Return _Set elements as a list." data = self.data.keys() if sorted: data.sort() return data_expectations = { 'win32': """ test_al test_cd test_cl test_commands test_crypt test_curses test_dbm test_dl test_email_codecs test_fcntl test_fork1 test_gdbm test_gl test_grp test_imgfile test_largefile test_linuxaudiodev test_mhlib test_nis test_openpty test_poll test_pty test_pwd test_signal test_socket_ssl test_socketserver test_sunaudiodev test_timing """, 'linux2': """ test_al test_cd test_cl test_curses test_dl test_email_codecs test_gl test_imgfile test_largefile test_nis test_ntpath test_socket_ssl test_socketserver test_sunaudiodev test_unicode_file test_winreg test_winsound """, 'mac': """ test_al test_bsddb test_cd test_cl test_commands test_crypt test_curses test_dbm test_dl test_email_codecs test_fcntl test_fork1 test_gl test_grp test_imgfile test_largefile test_linuxaudiodev test_locale test_mmap test_nis test_ntpath test_openpty test_poll test_popen2 test_pty test_pwd test_signal test_socket_ssl test_socketserver test_sunaudiodev test_sundry test_timing test_unicode_file test_winreg test_winsound """, 'unixware7': """ test_al test_bsddb test_cd test_cl test_dl test_email_codecs test_gl test_imgfile test_largefile test_linuxaudiodev test_minidom test_nis test_ntpath test_openpty test_pyexpat test_sax test_socketserver test_sunaudiodev test_sundry test_unicode_file test_winreg test_winsound """, 'openunix8': """ test_al test_bsddb test_cd test_cl test_dl test_email_codecs test_gl test_imgfile test_largefile test_linuxaudiodev test_minidom test_nis test_ntpath test_openpty test_pyexpat test_sax test_socketserver test_sunaudiodev test_sundry test_unicode_file test_winreg test_winsound """, 'sco_sv3': """ test_al test_asynchat test_bsddb test_cd test_cl test_dl test_email_codecs test_fork1 test_gettext test_gl test_imgfile test_largefile test_linuxaudiodev test_locale test_minidom test_nis test_ntpath test_openpty test_pyexpat test_queue test_sax test_socketserver test_sunaudiodev test_sundry test_thread test_threaded_import test_threadedtempfile test_threading test_unicode_file test_winreg test_winsound """, 'riscos': """ test_al test_asynchat test_bsddb test_cd test_cl test_commands test_crypt test_dbm test_dl test_email_codecs test_fcntl test_fork1 test_gdbm test_gl test_grp test_imgfile test_largefile test_linuxaudiodev test_locale test_mmap test_nis test_ntpath test_openpty test_poll test_popen2 test_pty test_pwd test_socket_ssl test_socketserver test_strop test_sunaudiodev test_sundry test_thread test_threaded_import test_threadedtempfile test_threading test_timing test_unicode_file test_winreg test_winsound """, 'darwin': """ test_al test_cd test_cl test_curses test_dl test_email_codecs test_gdbm test_gl test_imgfile test_largefile test_locale test_linuxaudiodev test_minidom test_nis test_ntpath test_poll test_socket_ssl test_socketserver test_sunaudiodev test_unicode_file test_winreg test_winsound """, 'sunos5': """ test_al test_bsddb test_cd test_cl test_curses test_dbm test_email_codecs test_gdbm test_gl test_gzip test_imgfile test_linuxaudiodev test_mpz test_openpty test_socketserver test_zipfile test_zlib """, 'hp-ux11': """ test_al test_bsddb test_cd test_cl test_curses test_dl test_gdbm test_gl test_gzip test_imgfile test_largefile test_linuxaudiodev test_locale test_minidom test_nis test_ntpath test_openpty test_pyexpat test_sax test_socketserver test_sunaudiodev test_zipfile test_zlib """, 'freebsd4': """ test_al test_cd test_cl test_curses test_email_codecs test_gdbm test_gl test_imgfile test_linuxaudiodev test_locale test_minidom test_nis test_pyexpat test_sax test_socket_ssl test_socketserver test_sunaudiodev test_unicode_file test_winreg test_winsound """,}class _ExpectedSkips: def __init__(self): self.valid = 0 if _expectations.has_key(sys.platform): s = _expectations[sys.platform] self.expected = _Set(s.split()) self.valid = 1 def isvalid(self): "Return true iff _ExpectedSkips knows about the current platform." return self.valid def getexpected(self): """Return set of test names we expect to skip on current platform. self.isvalid() must be true. """ assert self.isvalid() return self.expectedif __name__ == '__main__': sys.exit(main())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -