pyqtgraph/tests/test_exit_crash.py
Ogi Moore a6971c768d Move and Update test-data repo into pyqtgraph repo
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
2021-05-31 21:05:00 -07:00

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