171 lines
4.9 KiB
Python
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,
|
|
)
|