commit 514bcb9d93096ced9f3c00041269dda278241887
Author: Kornel Benko <[email protected]>
Date:   Wed Apr 26 16:03:24 2017 +0200

    Keytests: Make the wrapper sendKeystring() around sendKeystringLocal() be 
recursive
    
    This makes the wrapper working smoothly even for more complicated
    input lines.
    Also we do not need the window- parameter in call to xvkbd.
    Still, there _is_ something fishy. At first run it can happen that
    some keytest fail. But not reproducible at subsequent calls.
    It feels like QT would cache some data and therefore lyx reacts
    later faster.
    This work is a result of collaboration with Tommaso Cucinotta.
---
 development/autotests/keytest.py |   67 ++++++++++++++++++++-----------------
 1 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/development/autotests/keytest.py b/development/autotests/keytest.py
index d2e1a6e..f9e64bd 100755
--- a/development/autotests/keytest.py
+++ b/development/autotests/keytest.py
@@ -241,43 +241,47 @@ def sendKeystringLocal(keystr, LYX_PID):
         xvpar.extend(["-xsendevent"])
     if xvkbd_hacked:
         xvpar.extend(["-wait_idle", lyx_pid])
-    xvpar.extend(["-window", lyx_window_name, "-delay", actual_delay, "-text", 
keystr])
-    
+    #xvpar.extend(["-window", lyx_window_name, "-delay", actual_delay, 
"-text", keystr])
+    xvpar.extend(["-delay", actual_delay, "-text", keystr])
+
     print("Sending \"" + keystr + "\"\n")
     subprocess.call(xvpar, stdout = FNULL, stderr = FNULL)
 
-Axreg = re.compile(r'^(.*)\\Ax([^\\]+)(.*)$')
+Axreg = re.compile(r'^(.*)\\Ax([^\\]*)(.*)$')
 returnreg = re.compile(r'\\\[Return\](.*)$')
 
+# recursive wrapper around sendKeystringLocal()
 def sendKeystring(line, LYX_PID):
     global key_delay
     saved_delay = key_delay
-    while True:
-        m = Axreg.match(line)
-        if m:
-            prefix = m.group(1)
-            if prefix != "":
-                sendKeystringLocal(prefix, LYX_PID)
-            content = m.group(2)
-            rest = m.group(3);
-            m2 = returnreg.match(rest)
-            sendKeystringLocal('\Ax', LYX_PID)
+    m = Axreg.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
+            sendKeystring(prefix, LYX_PID)
+        sendKeystringLocal('\Ax', LYX_PID)
+        time.sleep(0.1)
+        m2 = returnreg.match(rest)
+        if m2:
+            line = m2.group(1)
+            key_delay = "1"
+            sendKeystringLocal(content + '\[Return]', LYX_PID)
+            key_delay = saved_delay
             time.sleep(0.1)
-            if m2:
-                line = m2.group(1)
-                key_delay = "1"
-                sendKeystringLocal(content + '\[Return]', LYX_PID)
-                key_delay = saved_delay
-            else:
-                if content != "":
-                    sendKeystringLocal(content, LYX_PID)
-                key_delay = saved_delay
-                return
-        else:
             if line != "":
                 sendKeystringLocal(line, LYX_PID)
-            key_delay = saved_delay
-            return
+        else:
+            if content != "":
+                sendKeystringLocal(content, LYX_PID)
+            if rest != "":
+                sendKeystringLocal(rest, LYX_PID)
+    else:
+        if line != "":
+            sendKeystringLocal(line, LYX_PID)
+
 
 def system_retry(num_retry, cmd):
     i = 0
@@ -295,7 +299,8 @@ def RaiseWindow():
     #intr_system("echo x-session-manager PID: $X_PID.")
     #intr_system("echo x-session-manager open files: `lsof -p $X_PID | grep 
ICE-unix | wc -l`")
     ####intr_system("wmctrl -l | ( grep '"+lyx_window_name+"' || ( killall lyx 
; sleep 1 ; killall -9 lyx ))")
-    #intr_system("wmctrl -R '"+lyx_window_name+"' ;sleep 0.1")
+    print("lyx_window_name = " + lyx_window_name + "\n")
+    intr_system("wmctrl -R '"+lyx_window_name+"' ;sleep 0.1")
     system_retry(30, "wmctrl -i -a '"+lyx_window_name+"'")
 
 
@@ -428,7 +433,7 @@ while not failed:
             failed = True
         print('lyx_pid: ' + lyx_pid + '\n')
         print('lyx_win: ' + lyx_window_name + '\n')
-        sendKeystring("\C\[Home]", lyx_pid)
+        sendKeystringLocal("\C\[Home]", lyx_pid)
     elif c[0:5] == 'Sleep':
         print("Sleeping for " + c[6:] + " seconds\n")
         time.sleep(float(c[6:]))
@@ -471,11 +476,11 @@ while not failed:
         else:
             print("Forcing quit of lyx instance: " + str(lyx_pid) + "...\n")
             # \Ax Enter command line is sometimes blocked
-           # \[Escape] works after this 
-           sendKeystring("\Ax\[Escape]", lyx_pid)
+           # \[Escape] works after this
+           sendKeystringLocal("\Ax\[Escape]", lyx_pid)
            # now we should be outside any dialog
            # and so the function lyx-quit should work
-            sendKeystring("\Cq", lyx_pid)
+            sendKeystringLocal("\Cq", lyx_pid)
             time.sleep(0.5)
             if lyx_sleeping():
                 # probably waiting for Save/Discard/Abort, we select 'Discard'

Reply via email to