diff options
author | Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> | 2018-03-29 14:35:28 +0200 |
---|---|---|
committer | Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> | 2018-04-19 18:45:06 +0000 |
commit | 67d6c85a9dc17fe68ab399e14da73d10a1f9a351 (patch) | |
tree | 76e0ecb7cd2693fddb5d673b331331621e6430b8 /sources/pyside2/tests | |
parent | c18e1958334aa2e1c40e87097dade6f103e4ddf1 (diff) |
Check default superclass when getting baseClasses
Reimplementing a class must respect the closest
base class instead of falling back to QObject.
By adding a default-superclass argument one can
verify that field first when shiboken is getting
the base classes.
This problem was found by reimplementing
QGraphicsObject including methods from one of its parent
classes, QGraphicsItem.
With this change, the generated wrapper will list all the
base classes in `Sbk_QGraphicsObject_Type_bases` leaving
QObject at the end, because if not, it will match
inmediately.
A test case was included.
This change doesn't affect other existing tests.
Task-number: PYSIDE-86
Change-Id: I6b9a220497b12c8085302a502f8581cc2d3fb11b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/pyside2/tests')
-rw-r--r-- | sources/pyside2/tests/QtWidgets/CMakeLists.txt | 1 | ||||
-rw-r--r-- | sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py | 76 |
2 files changed, 77 insertions, 0 deletions
diff --git a/sources/pyside2/tests/QtWidgets/CMakeLists.txt b/sources/pyside2/tests/QtWidgets/CMakeLists.txt index 0384e0a8d..9caf7e365 100644 --- a/sources/pyside2/tests/QtWidgets/CMakeLists.txt +++ b/sources/pyside2/tests/QtWidgets/CMakeLists.txt @@ -93,6 +93,7 @@ PYSIDE_TEST(qdynamic_signal.py) PYSIDE_TEST(qformlayout_test.py) PYSIDE_TEST(qgraphicsitem_test.py) PYSIDE_TEST(qgraphicsitem_isblocked_test.py) +PYSIDE_TEST(qgraphicsobjectreimpl_test.py) PYSIDE_TEST(qgraphicsproxywidget_test.py) PYSIDE_TEST(qgraphicsscene_test.py) PYSIDE_TEST(qimage_test.py) diff --git a/sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py b/sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py new file mode 100644 index 000000000..fd79ce3aa --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py @@ -0,0 +1,76 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of PySide2. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## 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 General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## 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-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test cases related to QGraphicsItem and subclasses''' + +import unittest + +from PySide2.QtWidgets import QGraphicsObject, QGraphicsWidget +from PySide2.QtCore import QRectF + +from helper import UsesQApplication + +class GObjA(QGraphicsObject): + def paint(self, *args): + pass + + def boundingRect(self): + return QRectF() + + def itemChange(self, *args): + return QGraphicsObject.itemChange(self, *args) + +class GObjB(QGraphicsObject): + def paint(self, *args): + pass + + def boundingRect(self): + return QRectF() + +class QGraphicsObjectReimpl(UsesQApplication): + '''Test case for reimplementing QGraphicsObject''' + + def testReimplementationTypes(self): + w = QGraphicsWidget() + + # PYSIDE-86: + # This case failed because GObjA was reimplementing + # the method itemChange() from QGraphicsItem, + # and then the QVariant was not associated with + # a QGraphicsItem but a QObjectItem because the base + # class was a QObject. + gobjA = GObjA() + gobjA.setParentItem(w) + self.assertIs(type(w), type(gobjA.parentItem())) + + gobjB = GObjB() + gobjB.setParentItem(w) + self.assertIs(type(w), type(gobjB.parentItem())) + +if __name__ == '__main__': + unittest.main() |