a6971c768d
To reduce complexity, and make it easier to add more images and tests, the images in the `test-data` repository should be merged with the main repository. Furthermore, we can remove a lot of the subprocess work in the image_testing.py file, as we no longer need to have it interact with git. The images are not the same. Images were regenerated with Qt6, and now have proper big and little endian handling thanks to @pijyoi Second commit is a slightly modified variant of 2e135ab282d6007b34a3854921be54d0e9efb241 authored by @pijyoi it is to convert qimages to RGBA8888 for testing. Image files were regenerated images for the big/little handling Fixed issue with bogus test from test_NonUniformImage and generated a new image
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import tempfile
|
|
import pyqtgraph as pg
|
|
import pytest
|
|
import textwrap
|
|
import time
|
|
|
|
code = """
|
|
import sys
|
|
sys.path.insert(0, '{path}')
|
|
import pyqtgraph as pg
|
|
app = pg.mkQApp()
|
|
w = pg.{classname}({args})
|
|
"""
|
|
|
|
skipmessage = ('unclear why this test is failing. skipping until someone has'
|
|
' time to fix it')
|
|
|
|
|
|
def call_with_timeout(*args, **kwargs):
|
|
"""Mimic subprocess.call with timeout for python < 3.3"""
|
|
wait_per_poll = 0.1
|
|
try:
|
|
timeout = kwargs.pop('timeout')
|
|
except KeyError:
|
|
timeout = 10
|
|
|
|
rc = None
|
|
p = subprocess.Popen(*args, **kwargs)
|
|
for i in range(int(timeout/wait_per_poll)):
|
|
rc = p.poll()
|
|
if rc is not None:
|
|
break
|
|
time.sleep(wait_per_poll)
|
|
return rc
|
|
|
|
|
|
@pytest.mark.skipif(True, reason=skipmessage)
|
|
def test_exit_crash():
|
|
# For each Widget subclass, run a simple python script that creates an
|
|
# instance and then shuts down. The intent is to check for segmentation
|
|
# faults when each script exits.
|
|
tmp = tempfile.mktemp(".py")
|
|
path = os.path.dirname(pg.__file__)
|
|
|
|
initArgs = {
|
|
'CheckTable': "[]",
|
|
'ProgressDialog': '"msg"',
|
|
'VerticalLabel': '"msg"',
|
|
}
|
|
|
|
for name in dir(pg):
|
|
obj = getattr(pg, name)
|
|
if not isinstance(obj, type) or not issubclass(obj, pg.QtGui.QWidget):
|
|
continue
|
|
|
|
print(name)
|
|
argstr = initArgs.get(name, "")
|
|
with open(tmp, 'w') as f:
|
|
f.write(code.format(path=path, classname=name, args=argstr))
|
|
proc = subprocess.Popen([sys.executable, tmp])
|
|
assert proc.wait() == 0
|
|
|
|
os.remove(tmp)
|
|
|
|
@pytest.mark.skipif(pg.Qt.QtVersion.startswith("5.9"), reason="Functionality not well supported, failing only on this config")
|
|
def test_pg_exit():
|
|
# test the pg.exit() function
|
|
code = textwrap.dedent("""
|
|
import pyqtgraph as pg
|
|
app = pg.mkQApp()
|
|
pg.plot()
|
|
pg.exit()
|
|
""")
|
|
rc = call_with_timeout([sys.executable, '-c', code], timeout=5, shell=False)
|
|
assert rc == 0
|