diff options
author | Christian Tismer <tismer@stackless.com> | 2022-06-21 10:22:04 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-07-14 17:07:27 +0000 |
commit | a2f00bfcd00c467e53bc2ad6a14488b9e789208a (patch) | |
tree | 8d5f4ee535b1e623a37f8d9c339dae110697eede | |
parent | b9339a7721b42f2359cfba8cc558c29ef9a2e124 (diff) |
PyEnum: Simplify the test-cases with the new forgiveness mode
With the new forgiveness, all the "normal" uses of old enums
are working with the new enums, too.
What does not work are range violations and inheritance of enums
from other enums.
Also, the implemented trick does not work for enums which
do not belong to a class. The induced bugs are easy to find,
because they should normally break at import time.
[ChangeLog][PySide6] The new forgiveness mode of Python enums
allows to use old enum code, most of the time. Much changed
test code was reverted.
Change-Id: I9c081831309f1b2358fe86e6107b0f4d78fd48cf
Task-number: PYSIDE-1735
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit 0a3f69537d5901d626077c0a8e6486f33ebf88af)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
7 files changed, 34 insertions, 55 deletions
diff --git a/sources/pyside6/tests/QtCore/qenum_test.py b/sources/pyside6/tests/QtCore/qenum_test.py index 4b4226064..612a3873b 100644 --- a/sources/pyside6/tests/QtCore/qenum_test.py +++ b/sources/pyside6/tests/QtCore/qenum_test.py @@ -59,7 +59,6 @@ class TestEnum(unittest.TestCase): def testToIntInFunction(self): self.assertEqual(str(int(QIODevice.WriteOnly)), "2") - @unittest.skipIf(sys.pyside63_option_python_enum, "makes no sense for tested Python enums") def testOperations(self): k = Qt.Key.Key_1 @@ -68,15 +67,16 @@ class TestEnum(unittest.TestCase): self.assertEqual(k - 2, -(2 - k)) self.assertEqual(k * 2, 2 * k) - # Floats - with self.assertRaises(TypeError): - a = k + 2.0 + if not sys.pyside63_option_python_enum: + # Floats work fine with new enums + with self.assertRaises(TypeError): + a = k + 2.0 - with self.assertRaises(TypeError): - a = k - 2.0 + with self.assertRaises(TypeError): + a = k - 2.0 - with self.assertRaises(TypeError): - a = k * 2.0 + with self.assertRaises(TypeError): + a = k * 2.0 @unittest.skipIf(sys.pyside63_option_python_enum, "inheritance forbidden for Python enums") def testInherit(self): diff --git a/sources/pyside6/tests/QtCore/qflags_test.py b/sources/pyside6/tests/QtCore/qflags_test.py index 078b610f1..3800a003c 100644 --- a/sources/pyside6/tests/QtCore/qflags_test.py +++ b/sources/pyside6/tests/QtCore/qflags_test.py @@ -67,22 +67,19 @@ class QFlagOperatorTest(unittest.TestCase): def testInvert(self): '''QFlags ~ (invert) operator''' - self.assertEqual(type(~QIODevice.ReadOnly), QIODevice.OpenModeFlag - if sys.pyside63_option_python_enum else QIODevice.OpenMode) + self.assertEqual(type(~QIODevice.ReadOnly), QIODevice.OpenMode) def testOr(self): '''QFlags | (or) operator''' - self.assertEqual(type(QIODevice.ReadOnly | QIODevice.WriteOnly), QIODevice.OpenModeFlag - if sys.pyside63_option_python_enum else QIODevice.OpenMode) + self.assertEqual(type(QIODevice.ReadOnly | QIODevice.WriteOnly), QIODevice.OpenMode) def testAnd(self): '''QFlags & (and) operator''' - self.assertEqual(type(QIODevice.ReadOnly & QIODevice.WriteOnly), QIODevice.OpenModeFlag - if sys.pyside63_option_python_enum else QIODevice.OpenMode) + self.assertEqual(type(QIODevice.ReadOnly & QIODevice.WriteOnly), QIODevice.OpenMode) def testIOr(self): '''QFlags |= (ior) operator''' - flag = Qt.WindowType(1) if sys.pyside63_option_python_enum else Qt.WindowFlags() + flag = Qt.WindowFlags() self.assertTrue(Qt.Widget == 0) self.assertFalse(flag & Qt.Widget) result = flag & Qt.Widget @@ -92,8 +89,7 @@ class QFlagOperatorTest(unittest.TestCase): def testInvertOr(self): '''QFlags ~ (invert) operator over the result of an | (or) operator''' - self.assertEqual(type(~(Qt.ItemIsSelectable | Qt.ItemIsEditable)), Qt.ItemFlag - if sys.pyside63_option_python_enum else Qt.ItemFlags) + self.assertEqual(type(~(Qt.ItemIsSelectable | Qt.ItemIsEditable)), Qt.ItemFlags) def testEqual(self): '''QFlags == operator''' @@ -102,8 +98,7 @@ class QFlagOperatorTest(unittest.TestCase): flag_type = (flags & Qt.WindowType_Mask) self.assertEqual(flag_type, Qt.Window) - self.assertEqual((Qt.KeyboardModifier if sys.pyside63_option_python_enum else - Qt.KeyboardModifiers)(Qt.ControlModifier), Qt.ControlModifier) + self.assertEqual(Qt.KeyboardModifiers(Qt.ControlModifier), Qt.ControlModifier) def testOperatorBetweenFlags(self): '''QFlags & QFlags''' @@ -121,8 +116,7 @@ class QFlagsOnQVariant(unittest.TestCase): def testQFlagsOnQVariant(self): o = QObject() o.setProperty("foo", QIODevice.ReadOnly | QIODevice.WriteOnly) - self.assertEqual(type(o.property("foo")), QIODevice.OpenModeFlag - if sys.pyside63_option_python_enum else QIODevice.OpenMode) + self.assertEqual(type(o.property("foo")), QIODevice.OpenMode) class QFlagsWrongType(unittest.TestCase): diff --git a/sources/pyside6/tests/QtWidgets/qlabel_test.py b/sources/pyside6/tests/QtWidgets/qlabel_test.py index dc1ed8a10..58e5ce544 100644 --- a/sources/pyside6/tests/QtWidgets/qlabel_test.py +++ b/sources/pyside6/tests/QtWidgets/qlabel_test.py @@ -94,8 +94,7 @@ class QLabelTest(UsesQApplication): # Test for PYSIDE-1673, QObject.property() returning a QFlags<> property. def testQObjectProperty(self): a = self.label.property("alignment") - self.assertEqual(type(a), Qt.AlignmentFlag if sys.pyside63_option_python_enum - else Qt.Alignment) + self.assertEqual(type(a), Qt.Alignment) print("alignment=", a) diff --git a/sources/pyside6/tests/pysidetest/new_inherited_functions_test.py b/sources/pyside6/tests/pysidetest/new_inherited_functions_test.py index 1d612da5b..a2c13692e 100644 --- a/sources/pyside6/tests/pysidetest/new_inherited_functions_test.py +++ b/sources/pyside6/tests/pysidetest/new_inherited_functions_test.py @@ -126,15 +126,10 @@ class MainTest(unittest.TestCase): qint64 = 42 tfarg = os.path.join(PySide6.QtCore.QDir.tempPath(), "XXXXXX.tmp") findStr = 'bla' - if sys.pyside63_option_python_enum: - orientation = PySide6.QtCore.Qt.Orientation(0) - openMode = PySide6.QtCore.QIODevice.OpenModeFlag(PySide6.QtCore.QIODevice.ReadOnly) - transformationMode = PySide6.QtCore.Qt.TransformationMode(0) - else: - orientation = PySide6.QtCore.Qt.Orientation() - openMode = PySide6.QtCore.QIODevice.OpenMode(PySide6.QtCore.QIODevice.ReadOnly) - transformationMode = PySide6.QtCore.Qt.TransformationMode() + orientation = PySide6.QtCore.Qt.Orientations() + openMode = PySide6.QtCore.QIODevice.OpenMode(PySide6.QtCore.QIODevice.ReadOnly) qModelIndex = PySide6.QtCore.QModelIndex() + transformationMode = PySide6.QtCore.Qt.TransformationMode() qObject = PySide6.QtCore.QObject() qPoint = PySide6.QtCore.QPoint() try: @@ -149,8 +144,7 @@ class MainTest(unittest.TestCase): pass try: PySide6.QtWidgets - direction = (PySide6.QtWidgets.QBoxLayout.Direction(0) - if sys.pyside63_option_python_enum else PySide6.QtWidgets.QBoxLayout.Direction()) + direction = PySide6.QtWidgets.QBoxLayout.Direction() qWidget = PySide6.QtWidgets.QWidget() qStyleOptionFrame = PySide6.QtWidgets.QStyleOptionFrame() qAction = PySide6.QtGui.QAction(qObject) diff --git a/sources/shiboken6/tests/samplebinding/derived_test.py b/sources/shiboken6/tests/samplebinding/derived_test.py index 06eba289e..18ca0d11f 100644 --- a/sources/shiboken6/tests/samplebinding/derived_test.py +++ b/sources/shiboken6/tests/samplebinding/derived_test.py @@ -84,7 +84,6 @@ class DerivedTest(unittest.TestCase): self.assertEqual(type(result), OverloadedFuncEnum) self.assertEqual(result, sample.OverloadedFunc_d) - @unittest.skipIf(sys.pyside63_option_python_enum, "Makes no sense with strict Enums") def testOtherOverloadedMethodCall(self): '''Another test to check overloaded method calling, just to double check.''' derived = Derived() @@ -97,13 +96,13 @@ class DerivedTest(unittest.TestCase): self.assertEqual(type(result), Derived.OtherOverloadedFuncEnum) self.assertEqual(result, Derived.OtherOverloadedFunc_id) - @unittest.skipIf(sys.pyside63_option_python_enum, "Makes no sense with strict Enums") def testOverloadedMethodCallWithDifferentNumericTypes(self): '''Test if the correct overloaded method accepts a different numeric type as argument.''' derived = Derived() result = derived.overloaded(1.1, 2.2) self.assertEqual(type(result), OverloadedFuncEnum) - self.assertEqual(result, sample.OverloadedFunc_ii) + if not sys.pyside63_option_python_enum: + self.assertEqual(result, sample.OverloadedFunc_ii) def testOverloadedMethodCallWithWrongNumberOfArguments(self): '''Test if a call to an overloaded method with the wrong number of arguments raises an exception.''' diff --git a/sources/shiboken6/tests/samplebinding/enum_test.py b/sources/shiboken6/tests/samplebinding/enum_test.py index e4bfb811d..08921b3ab 100644 --- a/sources/shiboken6/tests/samplebinding/enum_test.py +++ b/sources/shiboken6/tests/samplebinding/enum_test.py @@ -45,11 +45,14 @@ import shiboken6 import sample from sample import SampleNamespace, ObjectType, Event +from shibokensupport.signature import get_signature + def createTempFile(): import tempfile return tempfile.SpooledTemporaryFile(mode='rw') + class EnumTest(unittest.TestCase): '''Test case for Python representation of C++ enums.''' @@ -81,13 +84,11 @@ class EnumTest(unittest.TestCase): '''Tries to build the proper enum using an integer.''' SampleNamespace.getNumber(SampleNamespace.Option(1)) - @unittest.skipIf(sys.pyside63_option_python_enum, "test not suitable for Python enum") def testBuildingEnumWithDefaultValue(self): '''Enum constructor with default value''' enum = SampleNamespace.Option() self.assertEqual(enum, SampleNamespace.None_) - @unittest.skipIf(sys.pyside63_option_python_enum, "test not suitable for Python enum") def testEnumConversionToAndFromPython(self): '''Conversion of enum objects from Python to C++ back again.''' enumout = SampleNamespace.enumInEnumOut(SampleNamespace.TwoIn) @@ -155,11 +156,11 @@ class EnumTest(unittest.TestCase): base = types[1] # The class has an empty signature. - self.assertEqual(klass.__signature__, None) + self.assertEqual(get_signature(klass), None) # The base class must be Enum - self.assertNotEqual(base.__signature__, None) + self.assertNotEqual(get_signature(base), None) # It contains an int annotation. - param = base.__signature__.parameters["itemValue"] + param = get_signature(base).parameters["itemValue"] self.assertEqual(param.annotation, int) diff --git a/sources/shiboken6/tests/samplebinding/namespace_test.py b/sources/shiboken6/tests/samplebinding/namespace_test.py index 19e291c4c..5dcc8dda7 100644 --- a/sources/shiboken6/tests/samplebinding/namespace_test.py +++ b/sources/shiboken6/tests/samplebinding/namespace_test.py @@ -58,20 +58,12 @@ class TestVariablesUnderNamespace(unittest.TestCase): class TestClassesUnderNamespace(unittest.TestCase): def testIt(self): - if sys.pyside63_option_python_enum: - c1 = SampleNamespace.SomeClass() - e1 = SampleNamespace.SomeClass.ProtectedEnum(0) - c2 = SampleNamespace.SomeClass.SomeInnerClass() - e2 = SampleNamespace.SomeClass.SomeInnerClass.ProtectedEnum(0) - c3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough() - e3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough.NiceEnum(0) - else: - c1 = SampleNamespace.SomeClass() - e1 = SampleNamespace.SomeClass.ProtectedEnum() - c2 = SampleNamespace.SomeClass.SomeInnerClass() - e2 = SampleNamespace.SomeClass.SomeInnerClass.ProtectedEnum() - c3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough() - e3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough.NiceEnum() + c1 = SampleNamespace.SomeClass() + e1 = SampleNamespace.SomeClass.ProtectedEnum() + c2 = SampleNamespace.SomeClass.SomeInnerClass() + e2 = SampleNamespace.SomeClass.SomeInnerClass.ProtectedEnum() + c3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough() + e3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough.NiceEnum(0) def testFunctionAddedOnNamespace(self): res = SampleNamespace.ImInsideANamespace(2, 2) |