diff options
| author | Christian Tismer <tismer@stackless.com> | 2022-08-08 15:31:15 +0200 |
|---|---|---|
| committer | Christian Tismer <tismer@stackless.com> | 2022-08-17 09:46:17 +0200 |
| commit | bd3e8afdb06c8614164e4ed1f195a8618c1d586d (patch) | |
| tree | 8e7ab3249c0d6377982dcf84417876b592105845 | |
| parent | 50b0ccb4d17ccd7befc54dc51baec0ee5425da0a (diff) | |
signature: Update, cleanup and install signature test
The signature tests were disabled for a long time.
Meanwhile, a number of unresolved values have piled up.
The reason was partially a weird mixture of intents that
made it unpractical to run the full tests on every platform.
Mamely, macOS was quite unclear about which signatures
have to exist and which don't.
This overhaul does the following:
* The various Shiboken modules were removed from the tested
signatures
* A pure test is added that only checks for no offending lines
As effect, signatures are tested unconditionally without any
other conditions. The other tests remain disabled.
Task-number: PYSIDE-510
Change-Id: Id9e65ed7324a795966f460e13dd95fd5cebcca6a
Pick-to: 6.3
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
6 files changed, 43 insertions, 20 deletions
diff --git a/build_history/blacklist.txt b/build_history/blacklist.txt index 3355a2b6e..d3455dd60 100644 --- a/build_history/blacklist.txt +++ b/build_history/blacklist.txt @@ -33,8 +33,6 @@ linux darwin # Open GL functions failures on macOS (2/2020) -[registry::existence_test] - darwin [QtQml::qqmlnetwork_test] linux ci # extended, see PyPy section below [QtWidgets::bug_750] diff --git a/sources/pyside6/tests/registry/existence_test.py b/sources/pyside6/tests/registry/existence_test.py index 15476caa5..5540b6e04 100644 --- a/sources/pyside6/tests/registry/existence_test.py +++ b/sources/pyside6/tests/registry/existence_test.py @@ -36,8 +36,8 @@ import unittest from pathlib import Path sys.path.append(os.fspath(Path(__file__).resolve().parents[1])) -from init_paths import init_all_test_paths -init_all_test_paths() +from init_paths import init_test_paths +init_test_paths(True) from init_platform import enum_all, generate_all from util import (isolate_warnings, check_warnings, suppress_warnings, warn, @@ -83,6 +83,19 @@ if have_refmodule and not hasattr(sig_exists, dict_name): have_refmodule = False +class TestUnrecognizedOffending(unittest.TestCase): + """ + We run the signature generation on all modules and raise an error + if a warning was issued. This is better than turning warnings into + errors because that would stop early before we have all warnings. + """ + def test_signatures_recognized(self): + with isolate_warnings(): + found_sigs = enum_all() + if check_warnings(): + raise RuntimeError("There are errors, see above.") + + @unittest.skipIf(not have_refmodule, "not activated for this platform or version") class TestSignaturesExists(unittest.TestCase): diff --git a/sources/pyside6/tests/registry/init_platform.py b/sources/pyside6/tests/registry/init_platform.py index 09190b7ce..8abf30216 100644 --- a/sources/pyside6/tests/registry/init_platform.py +++ b/sources/pyside6/tests/registry/init_platform.py @@ -77,13 +77,7 @@ def set_ospaths(build_dir): ps = os.pathsep ospath_var = "PATH" if sys.platform == "win32" else "LD_LIBRARY_PATH" old_val = os.environ.get(ospath_var, "") - lib_path = [os.path.join(build_dir, "pyside6", "libpyside"), - os.path.join(build_dir, "pyside6", "tests", "pysidetest"), - os.path.join(build_dir, "shiboken6", "tests", "libminimal"), - os.path.join(build_dir, "shiboken6", "tests", "libsample"), - os.path.join(build_dir, "shiboken6", "tests", "libother"), - os.path.join(build_dir, "shiboken6", "tests", "libsmart"), - os.path.join(build_dir, "shiboken6", "libshiboken")] + lib_path = [os.path.join(build_dir, "pyside6", "tests", "pysidetest"),] ospath = ps.join(lib_path + old_val.split(ps)) os.environ[ospath_var] = ospath @@ -103,12 +97,6 @@ all_modules.append("testbinding") from shiboken6 import Shiboken all_modules.append("shiboken6.Shiboken") -# 'sample/smart' are needed by 'other', so import them first. -for modname in "minimal sample smart other".split(): - sys.path.insert(0, os.path.join(shiboken_build_dir, "tests", modname + "binding")) - __import__(modname) - all_modules.append(modname) - from shibokensupport.signature.lib.enum_sig import SimplifyingEnumerator # Make sure not to get .pyc in Python2. @@ -172,6 +160,12 @@ def enum_all(): return ret +LICENSE_TEXT = """ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +""" + + def generate_all(): refPath = get_refpath() module = os.path.basename(os.path.splitext(refPath)[0]) @@ -182,7 +176,7 @@ def generate_all(): license_line = next((lno for lno, line in enumerate(lines) if "$QT_END_LICENSE$" in line)) fmt.print("#recreate # uncomment this to enforce generation") - fmt.print("".join(lines[:license_line + 3])) + fmt.print(LICENSE_TEXT) version = sys.version.replace('\n', ' ') build = qt_build() fmt.print(dedent(f'''\ diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py index d7dfa3451..c271be7f7 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py @@ -200,7 +200,7 @@ def create_signature(props, key): # parser. pass else: - if varnames[0] in ("self", "cls"): + if varnames and varnames[0] in ("self", "cls"): varnames = varnames[1:] # calculate the modifications diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/mapping.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/mapping.py index 204f1a3d4..6bd63ad77 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/mapping.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/mapping.py @@ -25,7 +25,7 @@ class ellipsis(object): return "..." ellipsis = ellipsis() -Point = typing.Tuple[float, float] +Point = typing.Tuple[int, int] Variant = typing.Any QImageCleanupFunction = typing.Callable @@ -283,6 +283,8 @@ type_map.update({ "zero(str)": "", "zero(typing.Any)": None, "zero(Any)": None, + # This can be refined by importing numpy.typing optionally, but better than nothing. + "numpy.ndarray": typing.List[typing.Any], }) type_map.update({ @@ -658,9 +660,19 @@ def init_PySide6_QtBluetooth(): return locals() +def init_PySide6_QtHttpServer(): + type_map.update({ + "qMakePair(1u, 1u)": (1, 1), + }) + return locals() + + def init_testbinding(): type_map.update({ "testbinding.PySideCPP2.TestObjectWithoutNamespace": testbinding.TestObjectWithoutNamespace, + "FlagsNamespace.Option.NoOptions": 0, + "StdIntList": typing.List[int], + 'Str("")': str(""), }) return locals() diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py index ffb8badb5..13fe675a7 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py @@ -410,6 +410,12 @@ def calculate_props(line): line = re.sub(rf"\b{parts[_old]}\b", parts[_new], line) type_map[parts[_old]] = parts[_new] + # PYSIDE-510: This is an ad-hoc fix to be removed. + # Special case, observed in 'PySide6.QtWebEngineWidgets.QWebEngineView.printToPdf' + # There is "\r" in that line. Should be fixed by something else, but for now: + if sys.platform == "win32": + line = line.replace("\r", "") + parsed = SimpleNamespace(**_parse_line(line.strip())) arglist = parsed.arglist annotations = {} |
