diff options
author | Christian Tismer <tismer@stackless.com> | 2020-11-06 14:53:53 +0100 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2020-11-11 17:29:38 +0000 |
commit | 12c93597dd09c68e2d619e03f9867afbc56dcf48 (patch) | |
tree | 8fdf4cff22b88b1dbab209f744568923fc963c98 /sources/pyside6/tests | |
parent | ce8dcd2c7755aa5272f484c0e475a1b65b8a01c3 (diff) |
__feature__: provide useful error message when feature is active
Features seem to work quite good so far, but they clearly need
much more testing.
One of the problems is that error messages are produced,
but the function name is not found and we get an ugly default
error message.
This is an efficient implementation that does all name mangling
in the C code. A helper dict avoids linear search for properties.
Task-number: PYSIDE-1019
Change-Id: Ic87c4a6e7dc2b2a251e809d6df0eb7fb9ca8021c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/pyside6/tests')
-rw-r--r-- | sources/pyside6/tests/QtCore/CMakeLists.txt | 1 | ||||
-rw-r--r-- | sources/pyside6/tests/QtCore/errormessages_with_features_test.py | 123 |
2 files changed, 124 insertions, 0 deletions
diff --git a/sources/pyside6/tests/QtCore/CMakeLists.txt b/sources/pyside6/tests/QtCore/CMakeLists.txt index ee87345db..f9044a1b6 100644 --- a/sources/pyside6/tests/QtCore/CMakeLists.txt +++ b/sources/pyside6/tests/QtCore/CMakeLists.txt @@ -36,6 +36,7 @@ PYSIDE_TEST(deletelater_test.py) PYSIDE_TEST(destroysignal_test.py) PYSIDE_TEST(duck_punching_test.py) PYSIDE_TEST(emoji_string_test.py) +PYSIDE_TEST(errormessages_with_features_test.py) PYSIDE_TEST(hash_test.py) PYSIDE_TEST(inherits_test.py) PYSIDE_TEST(max_signals.py) diff --git a/sources/pyside6/tests/QtCore/errormessages_with_features_test.py b/sources/pyside6/tests/QtCore/errormessages_with_features_test.py new file mode 100644 index 000000000..0e55c2e49 --- /dev/null +++ b/sources/pyside6/tests/QtCore/errormessages_with_features_test.py @@ -0,0 +1,123 @@ +############################################################################# +## +## Copyright (C) 2020 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os +import sys +import unittest + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from init_paths import init_test_paths +init_test_paths(False) + +from PySide6 import QtWidgets +from PySide6.support import __feature__ + +""" +errormessages_with_features_test.py +----------------------------------- + +When errors occur while features are switched, we must always produce a +valid error message. + +This test is in its own file because combining it with +"snake_prop_feature_test" gave strange interactions with the other tests. +""" + +class ErrormessagesWithFeatures(unittest.TestCase): + probe = "called with wrong argument types" + probe_miss = "missing signature" + + def setUp(self): + qApp or QtWidgets.QApplication() + __feature__.set_selection(0) + + def tearDown(self): + __feature__.set_selection(0) + qApp.shutdown() + + def testCorrectErrorMessagesPlain(self): + with self.assertRaises(TypeError) as cm: + QtWidgets.QLabel().setFont(42) + print("\n\n" + cm.exception.args[0]) + self.assertTrue(self.probe in cm.exception.args[0]) + + def testCorrectErrorMessagesSnake(self): + from __feature__ import snake_case + with self.assertRaises(TypeError) as cm: + QtWidgets.QLabel().set_font(42) + print("\n\n" + cm.exception.args[0]) + self.assertTrue(self.probe in cm.exception.args[0]) + + def testCorrectErrorMessagesProp(self): + from __feature__ import true_property + with self.assertRaises(TypeError) as cm: + QtWidgets.QLabel().font = 42 + print("\n\n" + cm.exception.args[0]) + self.assertTrue(self.probe in cm.exception.args[0]) + + def testCorrectErrorMessagesSnakeProp(self): + from __feature__ import snake_case, true_property + with self.assertRaises(TypeError) as cm: + QtWidgets.QLabel().font = 42 + print("\n\n" + cm.exception.args[0]) + self.assertTrue(self.probe in cm.exception.args[0]) + + def testCorrectErrorMessagesClassProp(self): + from __feature__ import true_property + with self.assertRaises(TypeError) as cm: + QtWidgets.QApplication.quitOnLastWindowClosed = object + print("\n\n" + cm.exception.args[0]) + self.assertTrue(self.probe_miss in cm.exception.args[0]) + with self.assertRaises(TypeError) as cm: + qApp.quitOnLastWindowClosed = object + self.assertTrue(self.probe_miss in cm.exception.args[0]) + + def testCorrectErrorMessagesClassSnakeProp(self): + from __feature__ import snake_case, true_property + with self.assertRaises(TypeError) as cm: + QtWidgets.QApplication.quit_on_last_window_closed = object + print("\n\n" + cm.exception.args[0]) + self.assertTrue(self.probe_miss in cm.exception.args[0]) + with self.assertRaises(TypeError) as cm: + qApp.quit_on_last_window_closed = object + self.assertTrue(self.probe_miss in cm.exception.args[0]) + + +if __name__ == '__main__': + unittest.main() |