]> git.lyx.org Git - lyx.git/blobdiff - development/autotests/keytest.py
PrefLanguageUi.ui: this string was forgotten in r39449
[lyx.git] / development / autotests / keytest.py
index 748e833c96436b8ed173297c0647fa0340bfe3d4..1753f1460b16b3bda05ab7d231dc3edceb65b8d5 100755 (executable)
@@ -20,7 +20,7 @@ print 'Beginning keytest.py'
 
 FNULL = open('/dev/null', 'w')
 
-DELAY = '59'
+key_delay = ''
 
 class CommandSource:
 
@@ -149,8 +149,6 @@ class CommandSourceFromFile(CommandSource):
         line = self.lines[self.i].rstrip('\n')
         self.count = self.count + 1
         self.i = self.i + 1
-        #print '\nLine read: <<' + line + '>>\n'
-        sys.stdout.write('r')
         return line
 
 def lyx_exists():
@@ -171,10 +169,13 @@ def lyx_sleeping():
 
 
 # Interruptible os.system()
-def intr_system(cmd):
+def intr_system(cmd, ignore_err = False):
+    print "Executing " + cmd + "\n"
     ret = os.system(cmd)
     if os.WIFSIGNALED(ret):
         raise KeyboardInterrupt
+    if ret != 0 and not ignore_err:
+        raise BaseException("command failed.")
     return ret
 
 
@@ -188,7 +189,6 @@ def sendKeystring(keystr, LYX_PID):
     before_secs = time.time()
     while lyx_exists() and not lyx_sleeping():
         time.sleep(0.02)
-        sys.stdout.write('.')
         sys.stdout.flush()
         if time.time() - before_secs > 180:
             print 'Killing due to freeze (KILL_FREEZE)'
@@ -200,20 +200,22 @@ def sendKeystring(keystr, LYX_PID):
     if not screenshot_out is None:
         while lyx_exists() and not lyx_sleeping():
             time.sleep(0.02)
-            sys.stdout.write('.')
             sys.stdout.flush()
         print 'Making Screenshot: ' + screenshot_out + ' OF ' + infilename
         time.sleep(0.2)
         intr_system('import -window root '+screenshot_out+str(x.count)+".png")
         time.sleep(0.1)
     sys.stdout.flush()
-    if (subprocess.call(
-            [xvkbd_exe, "-no_root", "-xsendevent", "-window", lyx_window_name, "-delay", DELAY, "-text", keystr],
-            stdout=FNULL,stderr=FNULL
-            ) == 0):
-        sys.stdout.write('*')
+    actual_delay = key_delay
+    if actual_delay == '':
+        actual_delay = def_delay
+    if not xvkbd_hacked:
+        subprocess.call([xvkbd_exe, "-xsendevent", "-window", lyx_window_name,
+                         "-delay", actual_delay, "-text", keystr], stdout = FNULL, stderr = FNULL)
     else:
-        sys.stdout.write('X')
+        subprocess.call([xvkbd_exe, "-no_root", "-wait_idle", lyx_pid,
+                         "-xsendevent", "-window", lyx_window_name,
+                         "-delay", actual_delay, "-text", keystr], stdout = FNULL, stderr = FNULL)
 
 def system_retry(num_retry, cmd):
     i = 0
@@ -256,6 +258,16 @@ xvkbd_exe = os.environ.get('XVKBD_EXE')
 if xvkbd_exe is None:
     xvkbd_exe = "xvkbd"
 
+xvkbd_hacked = os.environ.get('XVKBD_HACKED') != None
+
+locale_dir = os.environ.get('LOCALE_DIR')
+if locale_dir is None:
+    locale_dir = '.'
+
+def_delay = os.environ.get('XVKBD_DELAY')
+if def_delay is None:
+    def_delay = '100'
+
 file_new_command = os.environ.get('FILE_NEW_COMMAND')
 if file_new_command is None:
     file_new_command = "\Afn"
@@ -303,15 +315,15 @@ while not failed:
     outfile.writelines(c + '\n')
     outfile.flush()
     if c[0] == '#':
-        print "\nIgnoring comment line: " + c
+        print "Ignoring comment line: " + c
     elif c[0:9] == 'TestBegin':
         print "\n"
         lyx_pid=os.popen("pidof lyx").read()
         if lyx_pid != "":
             print "Found running instance(s) of LyX: " + lyx_pid + ": killing them all\n"
-            intr_system("killall lyx")
+            intr_system("killall lyx", True)
             time.sleep(0.5)
-            intr_system("killall -KILL lyx")
+            intr_system("killall -KILL lyx", True)
         time.sleep(0.2)
         print "Starting LyX . . ."
         if lyx_userdir is None:
@@ -330,11 +342,10 @@ while not failed:
         print 'lyx_pid: ' + lyx_pid + '\n'
         print 'lyx_win: ' + lyx_window_name + '\n'
     elif c[0:5] == 'Sleep':
-        print "\nSleeping for " + c[6:] + "\n"
+        print "Sleeping for " + c[6:] + "\n"
         time.sleep(float(c[6:]))
     elif c[0:4] == 'Exec':
         cmd = c[5:].rstrip()
-        print "\nExecuting " + cmd + "\n"
         intr_system(cmd)
     elif c == 'Loop':
         outfile.close()
@@ -351,33 +362,60 @@ while not failed:
             print 'No path /proc/' + lyx_pid + '/status, exiting'
             os._exit(1)
     elif c[0:4] == 'KD: ':
-        DELAY = c[4:].rstrip('\n')
-        print 'Setting DELAY to ' + DELAY + '.'
+        key_delay = c[4:].rstrip('\n')
+        print 'Setting DELAY to ' + key_delay + '.\n'
     elif c == 'Loop':
         RaiseWindow()
         sendKeystring(ResetCommand, lyx_pid)
     elif c[0:6] == 'Assert':
         cmd = c[7:].rstrip()
-        print "\nExecuting " + cmd
+        print "Executing " + cmd
         result = intr_system(cmd)
         failed = failed or (result != 0)
         print "result=" + str(result) + ", failed=" + str(failed)
     elif c[0:7] == 'TestEnd':
         time.sleep(0.5)
-        print "\nTerminating lyx instance: " + str(lyx_pid) + "\n"
-        intr_system("kill -9 " + str(lyx_pid) + "\n");
-        while lyx_exists():
-            print "Waiting for lyx to die...\n"
-            time.sleep(0.5)
+        if not lyx_exists():
+            print "LyX instance not found because of crash or assert !\n"
+            failed = true
+        else:
+            print "Terminating lyx instance: " + str(lyx_pid) + "\n"
+            intr_system("kill -9 " + str(lyx_pid), True);
+            while lyx_exists():
+                print "Waiting for lyx to die...\n"
+                time.sleep(0.5)
         cmd = c[8:].rstrip()
-        print "\nExecuting " + cmd
+        print "Executing " + cmd
         result = intr_system(cmd)
         failed = failed or (result != 0)
         print "result=" + str(result) + ", failed=" + str(failed)
     elif c[0:4] == 'Lang':
         lang = c[5:].rstrip()
-        print "\nSetting LANG=" + lang
+        print "Setting LANG=" + lang + "\n"
         os.environ['LANG'] = lang
+# If it doesn't exist, create a link <locale_dir>/<country-code>/LC_MESSAGES/lyx<version-suffix>.mo
+# pointing to the corresponding .gmo file. Needed to let lyx find the right translation files.
+# See http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg165613.html
+        idx = lang.rfind(".")
+        if idx != -1:
+            ccode = lang[0:idx]
+        else:
+            ccode = lang
+        idx = lang.find("_")
+        if idx != -1:
+            short_code = lang[0:idx]
+        else:
+            short_code = ccode
+        lyx_dir = os.popen("dirname \"" + lyx_exe + "\"").read().rstrip()
+        print "Executing: grep 'PACKAGE =' " + lyx_dir + "/Makefile | sed -e 's/PACKAGE = \(.*\)/\\1/'"
+        lyx_name = os.popen("grep 'PACKAGE =' " + lyx_dir + "/Makefile | sed -e 's/PACKAGE = \(.*\)/\\1/'").read().rstrip()
+        intr_system("mkdir -p " + locale_dir + "/" + ccode + "/LC_MESSAGES")
+        if lyx_dir[0:3] == "../":
+            rel_dir = "../../" + lyx_dir
+        else:
+            rel_dir = lyx_dir
+        intr_system("rm -f " + locale_dir + "/" + ccode + "/LC_MESSAGES/" + lyx_name + ".mo")
+        intr_system("ln -s " + rel_dir + "/../po/" + short_code + ".gmo " + locale_dir + "/" + ccode + "/LC_MESSAGES/" + lyx_name + ".mo")
     else:
         print "Unrecognised Command '" + c + "'\n"
         failed = True