Files
backtrader/venv/Lib/site-packages/pyqt5_tools/tests/test_entrypoints.py
2026-01-17 21:21:30 +08:00

171 lines
4.9 KiB
Python

import os
import pathlib
import subprocess
import sys
import sysconfig
import pytest
from .. import _import_it
from .. import major
from .. import version
from .. import string_version
qt_tools = _import_it('qt_tools')
pyqt_plugins = _import_it('pyqt_plugins')
_import_it('pyqt_plugins', 'examples', 'exampleqmlitem')
_import_it('pyqt_plugins', 'tests', 'testbutton')
_import_it('pyqt_plugins', 'tests', 'testbuttonplugin')
_import_it('pyqt_plugins', 'utilities')
fspath = getattr(os, 'fspath', str)
scripts_path = pathlib.Path(sysconfig.get_path("scripts"))
executable_path_string = fspath(scripts_path.joinpath("pyqt{}-tools".format(major)))
vars_to_print = [
*pyqt_plugins.utilities.diagnostic_variables_to_print,
pyqt_plugins.examples.exampleqmlitem.test_path_env_var,
pyqt_plugins.tests.testbutton.test_path_env_var,
]
@pytest.fixture(name='environment')
def environment_fixture():
environment = pyqt_plugins.create_environment(os.environ)
pyqt_plugins.utilities.mutate_qml_path(environment, paths=qml2_import_paths)
environment['QT_DEBUG_PLUGINS'] = '1'
return environment
def test_designer_creates_test_widget(tmp_path, environment):
file_path = tmp_path/'tigger'
environment[pyqt_plugins.tests.testbutton.test_path_env_var] = fspath(file_path)
widget_plugin_path = pathlib.Path(
pyqt_plugins.tests.testbuttonplugin.__file__,
).parent
environment.update(pyqt_plugins.utilities.add_to_env_var_path_list(
env=environment,
name='PYQTDESIGNERPATH',
before=[fspath(widget_plugin_path)],
after=[''],
))
pyqt_plugins.utilities.print_environment_variables(environment, *vars_to_print)
with pytest.raises(subprocess.TimeoutExpired):
subprocess.run(
[
executable_path_string,
'designer',
],
check=True,
env=environment,
timeout=40,
)
assert (
file_path.read_bytes()
== pyqt_plugins.tests.testbutton.test_file_contents
)
qml2_import_paths = (pyqt_plugins.utilities.fspath(pyqt_plugins.root),)
# https://www.riverbankcomputing.com/pipermail/pyqt/2021-May/043916.html
@pytest.mark.skipif(
(6,) <= version <= (6, 1, 0),
reason="QML not supported for v6 through v6.1.0: {}".format(string_version),
)
# https://github.com/altendky/pyqt-tools/issues/110#issuecomment-1483673605
@pytest.mark.xfail(
version[0] == 5 and sys.platform == "win32" and sys.version_info[:2] == (3, 11),
reason="accepting failure until we figure out the problem".format(string_version),
strict=True,
)
def test_qmlscene_paints_test_item(tmp_path, environment):
file_path = tmp_path/'eeyore'
environment[pyqt_plugins.examples.exampleqmlitem.test_path_env_var] = fspath(file_path)
qml_example_path = pyqt_plugins.utilities.fspath(
pathlib.Path(pyqt_plugins.examples.__file__).parent / 'qmlapp.qml'
)
pyqt_plugins.utilities.print_environment_variables(environment, *vars_to_print)
with pytest.raises(subprocess.TimeoutExpired):
subprocess.run(
[
fspath(qt_tools.application_path('qmlscene')),
fspath(qml_example_path),
],
check=True,
env=environment,
timeout=40,
)
assert (
file_path.read_bytes()
== pyqt_plugins.examples.exampleqmlitem.test_file_contents
)
# https://www.riverbankcomputing.com/pipermail/pyqt/2021-May/043916.html
@pytest.mark.skipif(
(6,) <= version <= (6, 1, 0),
reason="QML not supported for v6 through v6.1.0: {}".format(string_version),
)
# https://github.com/altendky/pyqt-tools/issues/110#issuecomment-1483673605
@pytest.mark.xfail(
version[0] == 5 and sys.platform == "win32" and sys.version_info[:2] == (3, 11),
reason="accepting failure until we figure out the problem".format(string_version),
strict=True,
)
def test_qmltestrunner_paints_test_item(tmp_path, environment):
file_path = tmp_path/'piglet'
environment[pyqt_plugins.examples.exampleqmlitem.test_path_env_var] = fspath(file_path)
qml_test_path = pyqt_plugins.utilities.fspath(
pathlib.Path(pyqt_plugins.examples.__file__).parent / 'qmltest.qml'
)
pyqt_plugins.utilities.print_environment_variables(environment, *vars_to_print)
subprocess.run(
[
executable_path_string,
'qmltestrunner',
'--',
'-input',
qml_test_path,
],
check=True,
env=environment,
timeout=40,
)
assert (
file_path.read_bytes()
== pyqt_plugins.examples.exampleqmlitem.test_file_contents
)
def test_installuic_does_not_fail(environment):
pyqt_plugins.utilities.print_environment_variables(environment, *vars_to_print)
subprocess.run(
[
executable_path_string,
'installuic',
],
check=True,
env=environment,
timeout=40,
)