Compare commits

...

2 Commits

Author SHA1 Message Date
Dmitri Bogomolov f738769d34
Add TestBase.take_screenshot(window=None) in bitmessageqt.tests:
it shows specified window (or the main window), execs the app
and saves screenshot in png file in the appdata with full test name
in the file name.

Used it in TestUISignaler.test_updateStatusBar and TestSupport.
2021-03-02 19:32:46 +02:00
Dmitri Bogomolov d7cc8b112e
Use xvfb only on Linux with xvfbwrapper 2021-03-02 19:32:41 +02:00
5 changed files with 29 additions and 5 deletions

View File

@ -18,5 +18,5 @@ install:
- export PYTHONWARNINGS=all
script:
- python checkdeps.py
- xvfb-run src/bitmessagemain.py -t
- python src/bitmessagemain.py -t
- python -bm tests

View File

@ -2,3 +2,4 @@ coverage
python_prctl
psutil
pycrypto
xvfbwrapper;platform_system=="Linux"

View File

@ -2,6 +2,7 @@
import Queue
import sys
import os
import unittest
from PyQt4 import QtCore, QtGui
@ -23,6 +24,22 @@ class TestBase(unittest.TestCase):
self.window = bitmessageqt.MyForm()
self.window.appIndicatorInit(self.app)
def take_screenshot(self, window=None):
"""Take a screenshot of the *window* or main window if not set"""
def save_screenshot():
"""Save screenshot and quit app clause"""
screenshot = QtGui.QPixmap.grabWindow(
self.app.desktop().winId())
screenshot.save(os.path.join(
bitmessageqt.state.appdata, '%s.png' % self.id()))
self.app.quit()
timer = QtCore.QTimer()
timer.timeout.connect(save_screenshot)
timer.start(200)
(window or self.window).show()
self.app.exec_()
def tearDown(self):
# self.app.deleteLater()
while True:
@ -55,6 +72,4 @@ class TestUISignaler(TestBase):
_translate("test", "Testing updateStatusBar..."), 1)
))
QtCore.QTimer.singleShot(60, self.app.quit)
self.app.exec_()
# self.app.processEvents(QtCore.QEventLoop.AllEvents, 60)
self.take_screenshot()

View File

@ -31,3 +31,5 @@ class TestSupport(TestBase):
ui.lineEditSubject.text(), self.SUPPORT_SUBJECT)
self.assertIn(
sys.version, ui.textEditMessage.toPlainText())
self.take_screenshot()

View File

@ -3,6 +3,7 @@ Tests for core and those that do not work outside
(because of import error for example)
"""
import atexit
import os
import pickle # nosec
import Queue
@ -398,8 +399,9 @@ def run():
suite = loader.loadTestsFromTestCase(TestCore)
try:
import bitmessageqt.tests
from xvfbwrapper import Xvfb
except ImportError:
pass
Xvfb = None
else:
qt_tests = loader.loadTestsFromModule(bitmessageqt.tests)
suite.addTests(qt_tests)
@ -410,4 +412,8 @@ def run():
sys.excepthook = keep_exc
if Xvfb:
vdisplay = Xvfb(width=1024, height=768)
vdisplay.start()
atexit.register(vdisplay.stop)
return unittest.TextTestRunner(verbosity=2).run(suite)