commit 37bcf5392ae0de634c72234b4d67eb866f87b98b Author: Kornel Benko <kor...@lyx.org> Date: Fri Aug 4 11:56:19 2017 +0200
keytests: Allow for checking multiple log files Handle name may be arbitrary string mathing '[A-Za-z0-9]*'. This is then used by appending to the commands for the control file. For instance select 'Alpha' as handle for the control file 'abc' 'COAlpha: abc' ==> open 'abc' for write 'CCAlpha:' ==> close 'abc' --- development/autotests/keytest.py | 87 ++++++++++++++++++++------------------ 1 files changed, 46 insertions(+), 41 deletions(-) diff --git a/development/autotests/keytest.py b/development/autotests/keytest.py index f1c80c2..02c1d5f 100755 --- a/development/autotests/keytest.py +++ b/development/autotests/keytest.py @@ -167,16 +167,18 @@ class CommandSourceFromFile(CommandSource): class ControlFile: def __init__(self): - self.control = re.compile(r'^(C[ONPpRrC]):\s*(.*)$') + self.control = re.compile(r'^(C[ONPpRrC])([A-Za-z0-9]*):\s*(.*)$') self.fileformat = re.compile(r'^((\>\>?)[,\s]\s*)?([^\s]+)\s*$') - self.cntrname = None - self.cntrfile = None - - def open(self, filename): - if not self.cntrfile is None: - self.cntrfile.close() - self.cntrfile = None - self.cntrname = None + self.cntrfile = dict() + # Map keytest marker to pattern-file-marker for searchPatterns.pl + self.convertSearchMark = { 'CN': 'Comment: ', + 'CP': 'Simple: ', 'Cp': 'ErrSimple: ', + 'CR': 'Regex: ', 'Cr': 'ErrRegex: '} + + def __open(self, handle, filename): + if handle in self.cntrfile: + self.cntrfile[handle].close() + del self.cntrfile[handle] m = self.fileformat.match(filename) if m: type = m.group(2) @@ -187,48 +189,48 @@ class ControlFile: append = False else: append = False - self.cntrname = filename if append: - self.cntrfile = open(filename, 'a') + self.cntrfile[handle] = open(filename, 'a') else: - self.cntrfile = open(filename, 'w') + self.cntrfile[handle] = open(filename, 'w') - def close(self): - if not self.cntrfile is None: - self.cntrfile.close() - self.cntrfile = None - self.cntrname = None - # make the method below 'private' - def __addline(self, pat): - self.cntrfile.writelines(pat + "\n") + def closeall(self): + handles = self.cntrfile.keys() + for handle in handles: + self.__close(handle) + + def __close(self, handle): + if handle in self.cntrfile: + name = self.cntrfile[handle].name + self.cntrfile[handle].close() + del self.cntrfile[handle] + print("Closed ctrl " + handle + " (" + name + ")") - def getfname(self): - return self.cntrname + # make the method below 'private' + def __addline(self, handle, pat): + self.cntrfile[handle].writelines(pat + "\n") def dispatch(self, c): m = self.control.match(c) if not m: return False command = m.group(1) - text = m.group(2) + handle = m.group(2) + if handle is None: + handle = "" + text = m.group(3) if command == "CO": - self.open(text); + self.__open(handle, text); elif command == "CC": - self.close() + self.__close(handle) else: - if not self.cntrfile is None: - if command == "CN": - self.__addline("Comment: " + text) - elif command == "CP": - self.__addline("Simple: " + text) - elif command == "Cp": - self.__addline("ErrSimple: " + text) - elif command == "CR": - self.__addline("Regex: " + text) - elif command == "Cr": - self.__addline("ErrRegex: " + text) + if handle in self.cntrfile: + if command in self.convertSearchMark: + self.__addline(handle, self.convertSearchMark[command] + text) else: die(1,"Error, Unrecognised Command '" + command + "'") + elif handle != "": + die(1, "Ctrl-file " + handle + " not in use") return True @@ -553,6 +555,8 @@ lyx_other_window_name = None screenshot_out = os.environ.get('SCREENSHOT_OUT') lyx_userdir = os.environ.get('LYX_USERDIR') lyx_userdir_ver = os.environ.get('LYX_USERDIR_23x') +if lyx_userdir is None: + lyx_userdir = lyx_userdir_ver max_loops = os.environ.get('MAX_LOOPS') if max_loops is None: @@ -588,7 +592,8 @@ qt_frontend = os.environ.get('QT_FRONTEND') if qt_frontend is None: qt_frontend = 'QT4' if qt_frontend == 'QT5': - controlkey_delay = 0.01 + # Some tests sometimes failed with value 0.01 on Qt5.8 + controlkey_delay = 0.02 else: controlkey_delay = 0.4 @@ -736,7 +741,7 @@ while not failed: failed = failed or (result != 0) print("result=" + str(result) + ", failed=" + str(failed)) elif c[0:15] == 'TestEndWithKill': - marked.close() + marked.closeall() cmd = c[16:].rstrip() if lyx_dead(lyx_pid): print("LyX instance not found because of crash or assert !\n") @@ -760,7 +765,7 @@ while not failed: #lyx_other_window_name = None if lyx_dead(lyx_pid): print("LyX instance not found because of crash or assert !\n") - marked.close() + marked.closeall() failed = True else: print(" ------------ Forcing quit of lyx instance: " + str(lyx_pid) + " ------------") @@ -770,7 +775,7 @@ while not failed: # and so the function lyx-quit should work sendKeystring("\Cq", lyx_pid) marked.dispatch('CP: action=lyx-quit') - marked.close() + marked.dispatch('CC:') time.sleep(0.5) dead_expected = True is_sleeping = wait_until_lyx_sleeping(lyx_pid) @@ -832,7 +837,7 @@ while not failed: print('Could not determine PACKAGE name needed for translations\n') failed = True else: - lyx_name = PACKAGE + lyx_name = PACKAGE intr_system("mkdir -p " + locale_dir + "/" + ccode + "/LC_MESSAGES") intr_system("rm -f " + locale_dir + "/" + ccode + "/LC_MESSAGES/" + lyx_name + ".mo") if PO_BUILD_DIR is None: