aboutsummaryrefslogtreecommitdiffstats
path: root/tests/pysidetest/delegatecreateseditor_test.py
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-12-17 19:37:35 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:48:01 -0300
commit7771798cf27896c43054699c5f53468cd8bf14cf (patch)
tree1115cf02ac1b8c88ee14d24fca96c17d2831f44c /tests/pysidetest/delegatecreateseditor_test.py
parent05d011ccfa3ad442adb3639f9db87d49dd346299 (diff)
Fixes bug #502.
The ownership of the editor returned by the Python override of QAbstractItemDelegate.createEditor(...) is now transferred to C++. A test was added to simulate the situation that triggers the bug, instead of relying on an example with a view, model and editable cells. See: http://bugs.openbossa.org/show_bug.cgi?id=502 Reviewed by Lauro Moura <lauro.neto@openbossa.org> Reviewed by Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'tests/pysidetest/delegatecreateseditor_test.py')
-rw-r--r--tests/pysidetest/delegatecreateseditor_test.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/pysidetest/delegatecreateseditor_test.py b/tests/pysidetest/delegatecreateseditor_test.py
new file mode 100644
index 000000000..0054e7995
--- /dev/null
+++ b/tests/pysidetest/delegatecreateseditor_test.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+
+import unittest
+from helper import UsesQApplication
+
+from testbinding import TestView
+from PySide.QtCore import Qt
+from PySide.QtGui import QAbstractItemDelegate, QComboBox
+
+id_text = 'This is me'
+
+class DelegateDoesntKeepReferenceToEditor(QAbstractItemDelegate):
+ def createEditor(self, parent, option, index):
+ comboBox = QComboBox(parent)
+ comboBox.addItem(id_text)
+ return comboBox
+
+
+class DelegateKeepsReferenceToEditor(QAbstractItemDelegate):
+ def __init__(self, parent=None):
+ QAbstractItemDelegate.__init__(self, parent)
+ self.comboBox = QComboBox()
+ self.comboBox.addItem(id_text)
+
+ def createEditor(self, parent, option, index):
+ self.comboBox.setParent(parent)
+ return self.comboBox
+
+
+class EditorCreatedByDelegateTest(UsesQApplication):
+
+ def testDelegateDoesntKeepReferenceToEditor(self):
+ view = TestView(None)
+ delegate = DelegateDoesntKeepReferenceToEditor()
+ view.setItemDelegate(delegate)
+ editor = view.getEditorWidgetFromItemDelegate()
+ self.assertEqual(type(editor), QComboBox)
+ self.assertEqual(editor.count(), 1)
+ self.assertEqual(editor.itemData(0, Qt.DisplayRole), id_text)
+ editor.metaObject()
+
+ def testDelegateKeepsReferenceToEditor(self):
+ view = TestView(None)
+ delegate = DelegateKeepsReferenceToEditor()
+ view.setItemDelegate(delegate)
+ editor = view.getEditorWidgetFromItemDelegate()
+ self.assertEqual(type(editor), QComboBox)
+ self.assertEqual(editor.count(), 1)
+ self.assertEqual(editor.itemData(0, Qt.DisplayRole), id_text)
+ editor.metaObject()
+
+
+if __name__ == '__main__':
+ unittest.main()
+