NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

logtest.py (4260B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\logtest.py
      2 import sys
      3 import time
      4 import cherrypy
      5 try:
      6     import msvcrt
      7 
      8     def getchar():
      9         return msvcrt.getch()
     10 
     11 
     12 except ImportError:
     13     import tty, termios
     14 
     15     def getchar():
     16         fd = sys.stdin.fileno()
     17         old_settings = termios.tcgetattr(fd)
     18         try:
     19             tty.setraw(sys.stdin.fileno())
     20             ch = sys.stdin.read(1)
     21         finally:
     22             termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
     23 
     24         return ch
     25 
     26 
     27 class LogCase(object):
     28     logfile = None
     29     lastmarker = None
     30     markerPrefix = 'test suite marker: '
     31 
     32     def _handleLogError(self, msg, data, marker, pattern):
     33         print ''
     34         print '    ERROR: %s' % msg
     35         if not self.interactive:
     36             raise self.failureException(msg)
     37         p = '    Show: [L]og [M]arker [P]attern; [I]gnore, [R]aise, or sys.e[X]it >> '
     38         print p,
     39         sys.stdout.flush()
     40         while True:
     41             i = getchar().upper()
     42             if i not in 'MPLIRX':
     43                 continue
     44             print i.upper()
     45             if i == 'L':
     46                 for x, line in enumerate(data):
     47                     if (x + 1) % self.console_height == 0:
     48                         print '<-- More -->\r',
     49                         m = getchar().lower()
     50                         print '            \r',
     51                         if m == 'q':
     52                             break
     53                     print line.rstrip()
     54 
     55             elif i == 'M':
     56                 print repr(marker or self.lastmarker)
     57             elif i == 'P':
     58                 print repr(pattern)
     59             else:
     60                 if i == 'I':
     61                     return
     62                 if i == 'R':
     63                     raise self.failureException(msg)
     64                 elif i == 'X':
     65                     self.exit()
     66             print p,
     67 
     68     def exit(self):
     69         sys.exit()
     70 
     71     def emptyLog(self):
     72         open(self.logfile, 'wb').write('')
     73 
     74     def markLog(self, key = None):
     75         if key is None:
     76             key = str(time.time())
     77         self.lastmarker = key
     78         open(self.logfile, 'ab+').write('%s%s\n' % (self.markerPrefix, key))
     79 
     80     def _read_marked_region(self, marker = None):
     81         logfile = self.logfile
     82         marker = marker or self.lastmarker
     83         if marker is None:
     84             return open(logfile, 'rb').readlines()
     85         data = []
     86         in_region = False
     87         for line in open(logfile, 'rb'):
     88             if in_region:
     89                 if line.startswith(self.markerPrefix) and marker not in line:
     90                     break
     91                 else:
     92                     data.append(line)
     93             elif marker in line:
     94                 in_region = True
     95 
     96         return data
     97 
     98     def assertInLog(self, line, marker = None):
     99         data = self._read_marked_region(marker)
    100         for logline in data:
    101             if line in logline:
    102                 return
    103 
    104         msg = '%r not found in log' % line
    105         self._handleLogError(msg, data, marker, line)
    106 
    107     def assertNotInLog(self, line, marker = None):
    108         data = self._read_marked_region(marker)
    109         for logline in data:
    110             if line in logline:
    111                 msg = '%r found in log' % line
    112                 self._handleLogError(msg, data, marker, line)
    113 
    114     def assertLog(self, sliceargs, lines, marker = None):
    115         data = self._read_marked_region(marker)
    116         if isinstance(sliceargs, int):
    117             if isinstance(lines, (tuple, list)):
    118                 lines = lines[0]
    119             if lines not in data[sliceargs]:
    120                 msg = '%r not found on log line %r' % (lines, sliceargs)
    121                 self._handleLogError(msg, [data[sliceargs]], marker, lines)
    122         else:
    123             if isinstance(lines, tuple):
    124                 lines = list(lines)
    125             elif isinstance(lines, basestring):
    126                 raise TypeError("The 'lines' arg must be a list when 'sliceargs' is a tuple.")
    127             start, stop = sliceargs
    128             for line, logline in zip(lines, data[start:stop]):
    129                 if line not in logline:
    130                     msg = '%r not found in log' % line
    131                     self._handleLogError(msg, data[start:stop], marker, line)