test_hotshot.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 118 行

PY
118
字号
import hotshotimport hotshot.logimport osimport pprintimport unittestimport test_supportfrom hotshot.log import ENTER, EXIT, LINEdef shortfilename(fn):    # We use a really shortened filename since an exact match is made,    # and the source may be either a Python source file or a    # pre-compiled bytecode file.    if fn:        return os.path.splitext(os.path.basename(fn))[0]    else:        return fnclass UnlinkingLogReader(hotshot.log.LogReader):    """Extend the LogReader so the log file is unlinked when we're    done with it."""    def __init__(self, logfn):        self.__logfn = logfn        hotshot.log.LogReader.__init__(self, logfn)    def next(self, index=None):        try:            return hotshot.log.LogReader.next(self)        except (IndexError, StopIteration):            os.unlink(self.__logfn)            raiseclass HotShotTestCase(unittest.TestCase):    def new_profiler(self, lineevents=0, linetimings=1):        self.logfn = test_support.TESTFN        return hotshot.Profile(self.logfn, lineevents, linetimings)    def get_logreader(self):        return UnlinkingLogReader(self.logfn)    def get_events_wotime(self):        L = []        for event in self.get_logreader():            what, (filename, lineno, funcname), tdelta = event            L.append((what, (shortfilename(filename), lineno, funcname)))        return L    def check_events(self, expected):        events = self.get_events_wotime()        if not __debug__:            # Running under -O, so we don't get LINE events            expected = [ev for ev in expected if ev[0] != LINE]        if events != expected:            self.fail(                "events did not match expectation; got:\n%s\nexpected:\n%s"                % (pprint.pformat(events), pprint.pformat(expected)))    def run_test(self, callable, events, profiler=None):        if profiler is None:            profiler = self.new_profiler()        profiler.runcall(callable)        profiler.close()        self.check_events(events)    def test_addinfo(self):        def f(p):            p.addinfo("test-key", "test-value")        profiler = self.new_profiler()        profiler.runcall(f, profiler)        profiler.close()        log = self.get_logreader()        info = log._info        list(log)        self.failUnless(info["test-key"] == ["test-value"])    def test_line_numbers(self):        def f():            y = 2            x = 1        def g():            f()        f_lineno = f.func_code.co_firstlineno        g_lineno = g.func_code.co_firstlineno        events = [(ENTER, ("test_hotshot", g_lineno, "g")),                  (LINE,  ("test_hotshot", g_lineno, "g")),                  (LINE,  ("test_hotshot", g_lineno+1, "g")),                  (ENTER, ("test_hotshot", f_lineno, "f")),                  (LINE,  ("test_hotshot", f_lineno, "f")),                  (LINE,  ("test_hotshot", f_lineno+1, "f")),                  (LINE,  ("test_hotshot", f_lineno+2, "f")),                  (EXIT,  ("test_hotshot", f_lineno, "f")),                  (EXIT,  ("test_hotshot", g_lineno, "g")),                  ]        self.run_test(g, events, self.new_profiler(lineevents=1))    def test_start_stop(self):        # Make sure we don't return NULL in the start() and stop()        # methods when there isn't an error.  Bug in 2.2 noted by        # Anthony Baxter.        profiler = self.new_profiler()        profiler.start()        profiler.stop()        profiler.close()        os.unlink(self.logfn)def test_main():    test_support.run_unittest(HotShotTestCase)if __name__ == "__main__":    test_main()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?