]> git.lyx.org Git - lyx.git/commitdiff
keytests: Add a small delay to each special key
authorKornel Benko <kornel@lyx.org>
Sat, 27 May 2017 09:09:26 +0000 (11:09 +0200)
committerKornel Benko <kornel@lyx.org>
Sat, 27 May 2017 09:18:58 +0000 (11:18 +0200)
keytest.py: This gives the os some time to update the status.
  All keys with modifier and all possible shortcuts are affected.

Shortcut use corrected in findadv-11-in.txt and findadv-17-in.txt

development/autotests/bug-8482-in.txt
development/autotests/findadv-08-in.txt
development/autotests/findadv-11-in.txt
development/autotests/findadv-17-in.txt
development/autotests/keytest.py

index 37bbb5a328b7dfe97df263827130e4a34b428592..ca974fb82c4dd19e52a6c071d0b0e158be546fab 100644 (file)
@@ -4,7 +4,10 @@
 # is cleared after the next test starts.
 
 Lang en_US.utf8
+CO: bug-8482.ctrl
 TestBegin -dbg key test.lyx > bug-8482.loga.txt 2>&1
 KK: \Cm
+CP: Key (queried) [action=math-mode][Ctrl+M]
 KK: \Ai
 TestEnd
+Assert searchPatterns.pl base=bug-8482
index d3921796283cc75ae8f4ce62e4ff3357f550fa20..995ead3fdb6334a6cede11e874287033db4b6512 100644 (file)
@@ -24,13 +24,13 @@ KK: \[Escape]\C\[Home]\C\[F21]
 KK: o
 KK: \C\[F20]
 KK: [\\w]* a
-KD: 100
+#KD: 100
 # select whole words
 KK: \Ae
 # search next
 KK: \Al
 KK: \[Escape]
-KD: 1
+#KD: 1
 Cr: ^.*Putting
 CP: Putting selection at .*idx: 0 par: 1 pos: 26\n with len: 6
 #
index 2dad3a4275341913977029d153ab721f3f7b41d4..3832475f9c9a50f6b3eb45c4011ab031078b2810 100644 (file)
@@ -19,7 +19,7 @@ KK: \[Escape]\C\[Home]
 KK: \CF
 KK: \[Delete]
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \Az\Ag\Ae
 KK: \Cm
 KK: v\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 0\n.*idx: 0 par: 0 pos: 0\n.*idx: 1 par: 0 pos: 0\n with len: 1
index 30d5d3cb9db63e96d795a46eea5ee8ec97e8f448..3bf7a68d63d23ebe87776b804beb1be2fed474be 100644 (file)
@@ -17,7 +17,7 @@ CP: Key (queried) [action=buffer-begin][Ctrl+Home]
 KK: \CF
 KK: \[Delete]
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \Az\Ag\Ae
 KK: \Cm\\beta\\alpha \[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 0\n.*idx: 0 par: 0 pos: 1\n with len: 2
 TestEnd
index c5a84d034c3e00dfa58acbae5f623e41d0cfab85..f1c80c2bd7aa503eafe180c2e3ad3cc40ed869e5 100755 (executable)
@@ -384,73 +384,76 @@ def sendKeystringLocal(keystr, LYX_PID):
     subprocess.call(xvpar, stdout = FNULL, stderr = FNULL)
     sys.stdout.flush()
 
-Axreg = re.compile(r'^(.*)\\Ax([^\\]*)(.*)$')
-returnreg = re.compile(r'(\\\[[A-Z][a-z0-9]+\])(.*)$')
-
-# recursive wrapper around sendKeystringLocal()
-# handling \Ax-entries
-def sendKeystringAx(line, LYX_PID):
-    global key_delay
-    saved_delay = key_delay
-    m = Axreg.match(line)
+def extractmultiple(line, regex):
+    #print("extractmultiple " + line)
+    res = ["", ""]
+    m = regex.match(line)
     if m:
-        prefix = m.group(1)
-        content = m.group(2)
-        rest = m.group(3);
-        if prefix != "":
-            # since (.*) is greedy, check prefix for '\Ax' again
-            sendKeystringAx(prefix, LYX_PID)
-        sendKeystringLocal('\Ax', LYX_PID)
-        time.sleep(0.1)
-        m2 = returnreg.match(rest)
-        if m2:
-            line = m2.group(2)
-            ctrlk = m2.group(1)
-            key_delay = "1"
-            sendKeystringLocal(content + ctrlk, LYX_PID)
-            key_delay = saved_delay
-            time.sleep(controlkey_delay)
-            if line != "":
-                sendKeystringLocal(line, LYX_PID)
+        chr = m.group(1)
+        if m.group(2) == "":
+            res[0] = chr
+            res[1] = ""
         else:
-            if content != "":
-                sendKeystringLocal(content, LYX_PID)
-            if rest != "":
-                sendKeystringLocal(rest, LYX_PID)
+            norm = extractmultiple(m.group(2), regex)
+            res[0] = chr + norm[0]
+            res[1] = norm[1]
     else:
-        if line != "":
-            sendKeystringLocal(line, LYX_PID)
-
-specialkeyreg = re.compile(r'(.+)(\\[AC]([a-zA-Z]|\\\[[A-Z][a-z0-9]+\]).*)$')
-# Split line at start of each meta or controll char
-
-def sendKeystringAC(line, LYX_PID):
-    m = specialkeyreg.match(line)
+        res[0] = ""
+        res[1] = line
+    return res
+
+normal_re = re.compile(r'^([^\\]|\\\\)(.*)$')
+def extractnormal(line):
+    # collect non-special chars from start of line
+    return extractmultiple(line, normal_re)
+
+modifier_re = re.compile(r'^(\\[CAS])(.+)$')
+def extractmodifiers(line):
+    # collect modifiers like '\\A' at start of line
+    return extractmultiple(line, modifier_re)
+
+special_re = re.compile(r'^(\\\[[A-Z][a-z0-9]+\])(.*)$')
+def extractsingle(line):
+    # check for single key following a modifier
+    # either ascii like 'a'
+    # or special like '\[Return]'
+    res = [False, "", ""]
+    m = normal_re.match(line)
     if m:
-        first = m.group(1)
-        second = m.group(2)
-        sendKeystringAC(first, LYX_PID)
-        sendKeystringAC(second, LYX_PID)
+        res[0] = False
+        res[1] = m.group(1)
+        res[2] = m.group(2)
     else:
-        sendKeystringAx(line, LYX_PID)
+        m = special_re.match(line)
+        if m:
+            res[0] = True
+            res[1] = m.group(1)
+            res[2] = m.group(2)
+        else:
+            die(1, "Undecodable key for line \'" + line + "\"")
+    return res
 
-controlkeyreg = re.compile(r'^(.*\\\[[A-Z][a-z0-9]+\])(.*\\\[[A-Z][a-z0-9]+\])(.*)$')
-# Make sure, only one of \[Return], \[Tab], \[Down], \[Home] etc are in one sent line
-# e.g. split the input line on each keysym
-def sendKeystringRT(line, LYX_PID):
-    m = controlkeyreg.match(line)
-    if m:
-        first = m.group(1)
-        second = m.group(2)
-        third = m.group(3)
-        sendKeystringRT(first, LYX_PID)
-        time.sleep(controlkey_delay)
-        sendKeystringRT(second, LYX_PID)
+def sendKeystring(line, LYX_PID):
+    if line == "":
+        return
+    normalchars = extractnormal(line)
+    line = normalchars[1]
+    if normalchars[0] != "":
+        sendKeystringLocal(normalchars[0], LYX_PID)
+    if line == "":
+        return
+    modchars = extractmodifiers(line)
+    line = modchars[1]
+    if line == "":
+        die(1, "Missing modified key")
+    modifiedchar = extractsingle(line)
+    line = modifiedchar[2]
+    special = modchars[0] != "" or modifiedchar[0]
+    sendKeystringLocal(modchars[0] + modifiedchar[1], LYX_PID)
+    if special:
+        # give the os time to update the status info (in /proc)
         time.sleep(controlkey_delay)
-        if third != "":
-            sendKeystringRT(third, LYX_PID)
-    else:
-        sendKeystringAC(line, LYX_PID)
+    sendKeystring(line, LYX_PID)
 
 def system_retry(num_retry, cmd):
     i = 0
@@ -633,7 +636,7 @@ outfile = open(outfilename, 'w')
 if not lyx_pid is None:
     RaiseWindow()
     # Next command is language dependent
-    #sendKeystringRT("\Afn", lyx_pid)
+    #sendKeystring("\Afn", lyx_pid)
 
 write_commands = True
 failed = False
@@ -698,8 +701,7 @@ while not failed:
             print('lyx_pid: ' + lyx_pid)
             print('lyx_win: ' + lyx_window_name)
             dead_expected = False
-            sendKeystringLocal("\C\[Home]", lyx_pid)
-            time.sleep(controlkey_delay)
+            sendKeystring("\C\[Home]", lyx_pid)
     elif c[0:5] == 'Sleep':
         print("Sleeping for " + c[6:] + " seconds")
         time.sleep(float(c[6:]))
@@ -715,7 +717,7 @@ while not failed:
         RaiseWindow()
     elif c[0:4] == 'KK: ':
         if lyx_exists():
-            sendKeystringRT(c[4:], lyx_pid)
+            sendKeystring(c[4:], lyx_pid)
         else:
             ##intr_system('killall lyx; sleep 2 ; killall -9 lyx')
             if lyx_pid is None:
@@ -727,7 +729,7 @@ while not failed:
         print('Setting DELAY to ' + key_delay)
     elif c == 'Loop':
         RaiseWindow()
-        sendKeystringRT(ResetCommand, lyx_pid)
+        sendKeystring(ResetCommand, lyx_pid)
     elif c[0:6] == 'Assert':
         cmd = c[7:].rstrip()
         result = intr_system(cmd, True)
@@ -742,7 +744,7 @@ while not failed:
         else:
             print("    ------------    Forcing kill of lyx instance: " + str(lyx_pid) + "    ------------")
             # This line below is there only to allow lyx to update its log-file
-            sendKeystringLocal("\[Escape]", lyx_pid)
+            sendKeystring("\[Escape]", lyx_pid)
             dead_expected = True
             while not lyx_dead(lyx_pid):
                 intr_system("kill -9 " + str(lyx_pid), True);
@@ -763,11 +765,10 @@ while not failed:
         else:
             print("    ------------    Forcing quit of lyx instance: " + str(lyx_pid) + "    ------------")
             # \[Escape]+ should work as RESET focus to main window
-            sendKeystringAx("\[Escape]\[Escape]\[Escape]\[Escape]", lyx_pid)
-            time.sleep(controlkey_delay)
+            sendKeystring("\[Escape]\[Escape]\[Escape]\[Escape]", lyx_pid)
             # now we should be outside any dialog
             # and so the function lyx-quit should work
-            sendKeystringLocal("\Cq", lyx_pid)
+            sendKeystring("\Cq", lyx_pid)
             marked.dispatch('CP: action=lyx-quit')
             marked.close()
             time.sleep(0.5)
@@ -780,7 +781,7 @@ while not failed:
                 # causing a 'beep'
                 time.sleep(0.5)
                 # probably waiting for Save/Discard/Abort, we select 'Discard'
-                sendKeystringRT("\[Tab]\[Return]", lyx_pid)
+                sendKeystring("\[Tab]\[Return]", lyx_pid)
                 lcount = 0
             else:
                 lcount = 1