From 86b7d6e25c2612313da8a9193c90cc60728d3264 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Mon, 13 Dec 2010 17:47:16 -0300 Subject: Added test for Python written models returning new objects without keeping reference to them. Reviewed by Lauro Moura eviewed by Luciano Wolf --- tests/pysidetest/CMakeLists.txt | 4 +++ tests/pysidetest/global.h | 1 + tests/pysidetest/modelview_test.py | 51 ++++++++++++++++++++++++++++++ tests/pysidetest/testview.cpp | 15 +++++++++ tests/pysidetest/testview.h | 23 ++++++++++++++ tests/pysidetest/typesystem_pysidetest.xml | 7 ++++ 6 files changed, 101 insertions(+) create mode 100644 tests/pysidetest/modelview_test.py create mode 100644 tests/pysidetest/testview.cpp create mode 100644 tests/pysidetest/testview.h diff --git a/tests/pysidetest/CMakeLists.txt b/tests/pysidetest/CMakeLists.txt index d983ef8d0..07b03d5d2 100644 --- a/tests/pysidetest/CMakeLists.txt +++ b/tests/pysidetest/CMakeLists.txt @@ -12,16 +12,19 @@ add_definitions(-DRXX_ALLOCATOR_INIT_0) set(pysidetest_SRC testobject.cpp +testview.cpp ) set(pysidetest_MOC_HEADERS testobject.h +testview.h ) qt4_wrap_cpp(pysidetest_MOC_SRC ${pysidetest_MOC_HEADERS}) set(testbinding_SRC ${CMAKE_CURRENT_BINARY_DIR}/testbinding/testobject_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/testview_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/testbinding/testbinding_module_wrapper.cpp ) @@ -63,5 +66,6 @@ add_dependencies(testbinding pyside QtCore libpyside pysidetest) PYSIDE_TEST(homonymoussignalandmethod_test.py) +PYSIDE_TEST(modelview_test.py) PYSIDE_TEST(version_test.py) diff --git a/tests/pysidetest/global.h b/tests/pysidetest/global.h index 22d337542..e55a7735c 100644 --- a/tests/pysidetest/global.h +++ b/tests/pysidetest/global.h @@ -1,2 +1,3 @@ #include "pyside_global.h" #include "testobject.h" +#include "testview.h" diff --git a/tests/pysidetest/modelview_test.py b/tests/pysidetest/modelview_test.py new file mode 100644 index 000000000..ebab200af --- /dev/null +++ b/tests/pysidetest/modelview_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import unittest +from testbinding import TestView +from PySide.QtCore import QAbstractListModel, QObject, QModelIndex + +'''Tests model/view relationship.''' + +object_name = 'test object' + +class MyObject(QObject): + pass + +class ListModelKeepsReference(QAbstractListModel): + def rowCount(self, parent=QModelIndex()): + return 1 + + def data(self, index, role): + self.obj = MyObject() + self.obj.setObjectName(object_name) + return self.obj + +class ListModelDoesntKeepsReference(QAbstractListModel): + def rowCount(self, parent=QModelIndex()): + return 1 + + def data(self, index, role): + obj = MyObject() + obj.setObjectName(object_name) + return obj + +class ModelViewTest(unittest.TestCase): + + def testListModelKeepsReference(self): + model = ListModelKeepsReference() + view = TestView(model) + obj = view.getData() + self.assertEqual(type(obj), MyObject) + self.assertEqual(obj.objectName(), object_name) + + def testListModelDoesntKeepsReference(self): + model = ListModelDoesntKeepsReference() + view = TestView(model) + obj = view.getData() + self.assertEqual(type(obj), MyObject) + self.assertEqual(obj.objectName(), object_name) + + +if __name__ == '__main__': + unittest.main() + diff --git a/tests/pysidetest/testview.cpp b/tests/pysidetest/testview.cpp new file mode 100644 index 000000000..c7e9c6db4 --- /dev/null +++ b/tests/pysidetest/testview.cpp @@ -0,0 +1,15 @@ +#include "testview.h" +#include +#include + +QObject* +TestView::getData() +{ + QModelIndex index; + QVariant data = m_model->data(index); + QObject* obj = 0; + if (data.canConvert()) + obj = data.value(); + return obj; +} + diff --git a/tests/pysidetest/testview.h b/tests/pysidetest/testview.h new file mode 100644 index 000000000..2ae416264 --- /dev/null +++ b/tests/pysidetest/testview.h @@ -0,0 +1,23 @@ +#ifndef TESTVIEW_H +#define TESTVIEW_H + +#include +#include +#ifdef pysidetest_EXPORTS +#define PYSIDE_EXPORTS 1 +#endif +#include "pysidemacros.h" + +class PYSIDE_API TestView : public QObject +{ + Q_OBJECT +public: + TestView(QAbstractListModel* model, QObject* parent = 0) : QObject(parent), m_model(model) {} + QAbstractListModel* model() { return m_model; } + QObject* getData(); +private: + QAbstractListModel* m_model; +}; + +#endif // TESTVIEW_H + diff --git a/tests/pysidetest/typesystem_pysidetest.xml b/tests/pysidetest/typesystem_pysidetest.xml index a96636262..afa764c43 100644 --- a/tests/pysidetest/typesystem_pysidetest.xml +++ b/tests/pysidetest/typesystem_pysidetest.xml @@ -2,5 +2,12 @@ + + + + + + + -- cgit v1.2.3