diff -r de8cc85b688a -r 65c5f66e9298 tests/ide_tests/sikuliberemiz.py --- a/tests/ide_tests/sikuliberemiz.py Tue Mar 29 08:50:01 2022 +0200 +++ b/tests/ide_tests/sikuliberemiz.py Thu Apr 07 07:40:32 2022 +0200 @@ -3,6 +3,7 @@ import os import sys import subprocess +import traceback from threading import Thread, Event, Lock from time import time as timesec @@ -33,17 +34,17 @@ "Address": ("l",sikuli.Key.CTRL)} # to reach address bar in GTK's file selector def __init__(self, app): - self.app = app.sikuliapp + self.app = app def __getattr__(self, name): fkey = self.fkeys[name] if type(fkey) != tuple: fkey = (fkey,) - app = self.app def PressShortCut(): - app.focus() + self.app.sikuliapp.focus() sikuli.type(*fkey) + self.app.ReportText("Sending " + name + " shortcut") return PressShortCut @@ -86,6 +87,8 @@ break c = c - 1 + self.ReportScreenShot("UI is idle" if c != 0 else "UI is not idle") + if c == 0: raise Exception("Window did not idle before timeout") @@ -113,6 +116,7 @@ if len(a) == 0 or a is None: break sys.stdout.write(a) + self.ReportOutput(a) self.event.set() if self.pattern is not None and a.find(self.pattern) >= 0: sys.stdout.write("found pattern in '" + a +"'") @@ -126,7 +130,11 @@ """ start_time = timesec() - if self.event.wait(timeout): + wait_result = self.event.wait(timeout) + + self.ReportScreenShot("stdout changed" if wait_result else "stdout didn't change") + + if wait_result: self.event.clear() else: raise Exception("Stdout didn't become active before timeout") @@ -148,8 +156,11 @@ self.event.clear() else: # timeout -> no event -> idle -> exit + self.ReportScreenShot("stdout is idle") return True + self.ReportScreenShot("stdout did not idle") + raise Exception("Stdout did not idle before timeout") def waitPatternInStdout(self, pattern, timeout, count=1): @@ -170,6 +181,7 @@ if found >= count: break self.pattern = None + self.ReportScreenShot("found pattern" if res else "pattern not found") return res class BeremizApp(IDEIdleObserver, stdoutIdleObserver): @@ -185,6 +197,21 @@ Sikuli App class instance """ + self.screenshotnum = 0 + self.starttime = timesec() + self.screen = sikuli.Screen() + + self.report = open("report.html", "w") + self.report.write(""" + +
+ + +" + elapsed + msg + "" + "
") + + def ReportText(self, text): + elapsed = "%.3fs: "%(timesec() - self.starttime) + self.report.write("" + elapsed + text + "
") + + def ReportOutput(self, text): + elapsed = "%.3fs: "%(timesec() - self.starttime) + self.report.write("" + elapsed + text + "") + + +def run_test(func, *args, **kwargs): + app = BeremizApp(*args, **kwargs) + try: + success = func(app) + except: + # sadly, sys.excepthook is broken in sikuli/jython + # purpose of this run_test function is to work around it. + # and catch exception cleanly anyhow + e_type, e_value, e_traceback = sys.exc_info() + err_msg = "\n".join(traceback.format_exception(e_type, e_value, e_traceback)) + sys.stdout.write(err_msg) + app.ReportOutput(err_msg) + success = False + + app.close() + + if success: + sikuli.exit(0) + else: + sikuli.exit(1) + + +