Files
ResInsight/Fwk/AppFwk/cafUserInterface/cafUserInterface_UnitTests/cafPdmUiTreeViewModelTest.cpp
Magne Sjaastad 8698291e7d (#566) Major rewrite of how to build and update PdmUiTreeOrdering items
Removed findChildItemIndex() which caused performance issues for large
models. Replaced with a new algorithm using std::map. Added unit tests
2015-10-14 13:32:35 +02:00

205 lines
6.0 KiB
C++

#include "gtest/gtest.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmObject.h"
#include "cafPdmUiTreeView.h"
#include <QModelIndex>
#include <QApplication>
using namespace caf;
class SimpleObj: public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
SimpleObj() : PdmObject()
{
CAF_PDM_InitObject("SimpleObj", "", "Tooltip SimpleObj", "WhatsThis SimpleObj");
}
~SimpleObj() {}
};
CAF_PDM_SOURCE_INIT(SimpleObj, "SimpleObj");
class DemoPdmObject: public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
DemoPdmObject()
{
CAF_PDM_InitObject("DemoPdmObject", "", "Tooltip DemoPdmObject", "WhatsThis DemoPdmObject");
CAF_PDM_InitFieldNoDefault(&m_simpleObjPtrField, "SimpleObjPtrField", "SimpleObjPtrField", "", "Tooltip", "WhatsThis");
}
~DemoPdmObject()
{
m_simpleObjPtrField.deleteAllChildObjects();
}
caf::PdmChildArrayField<caf::PdmObjectHandle*> m_simpleObjPtrField;
};
CAF_PDM_SOURCE_INIT(DemoPdmObject, "DemoPdmObject");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(PdmUiTreeViewModelTest, DeleteOneItemAndVerifyTreeOrdering)
{
SimpleObj* obj1 = new SimpleObj;
SimpleObj* obj2 = new SimpleObj;
SimpleObj* obj3 = new SimpleObj;
SimpleObj* obj4 = new SimpleObj;
DemoPdmObject* demoObj = new DemoPdmObject;
demoObj->m_simpleObjPtrField.push_back(obj1);
demoObj->m_simpleObjPtrField.push_back(obj2);
demoObj->m_simpleObjPtrField.push_back(obj3);
demoObj->m_simpleObjPtrField.push_back(obj4);
PdmUiTreeView treeView;
treeView.setPdmItem(demoObj);
QModelIndex mi;
mi = treeView.findModelIndex(obj1);
EXPECT_TRUE(mi.isValid());
demoObj->m_simpleObjPtrField.removeChildObject(obj1);
demoObj->m_simpleObjPtrField().uiCapability()->updateConnectedEditors();
mi = treeView.findModelIndex(obj1);
EXPECT_FALSE(mi.isValid());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(PdmUiTreeViewModelTest, AddOneItemAndVerifyTreeOrdering)
{
SimpleObj* obj1 = new SimpleObj;
SimpleObj* obj2 = new SimpleObj;
SimpleObj* obj3 = new SimpleObj;
SimpleObj* obj4 = new SimpleObj;
DemoPdmObject* demoObj = new DemoPdmObject;
demoObj->m_simpleObjPtrField.push_back(obj1);
demoObj->m_simpleObjPtrField.push_back(obj2);
demoObj->m_simpleObjPtrField.push_back(obj3);
PdmUiTreeView treeView;
treeView.setPdmItem(demoObj);
QModelIndex mi;
mi = treeView.findModelIndex(obj4);
EXPECT_FALSE(mi.isValid());
demoObj->m_simpleObjPtrField.push_back(obj4);
demoObj->m_simpleObjPtrField().uiCapability()->updateConnectedEditors();
mi = treeView.findModelIndex(obj4);
EXPECT_TRUE(mi.isValid());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(PdmUiTreeViewModelTest, ChangeOrderingAndVerifyTreeOrdering)
{
SimpleObj* obj1 = new SimpleObj;
SimpleObj* obj2 = new SimpleObj;
SimpleObj* obj3 = new SimpleObj;
SimpleObj* obj4 = new SimpleObj;
DemoPdmObject* demoObj = new DemoPdmObject;
demoObj->m_simpleObjPtrField.push_back(obj1);
demoObj->m_simpleObjPtrField.push_back(obj2);
demoObj->m_simpleObjPtrField.push_back(obj3);
demoObj->m_simpleObjPtrField.push_back(obj4);
PdmUiTreeView treeView;
treeView.setPdmItem(demoObj);
QModelIndex mi;
mi = treeView.findModelIndex(obj4);
EXPECT_EQ(3, mi.row());
demoObj->m_simpleObjPtrField.clear();
demoObj->m_simpleObjPtrField.push_back(obj1);
demoObj->m_simpleObjPtrField.push_back(obj4);
demoObj->m_simpleObjPtrField.push_back(obj3);
demoObj->m_simpleObjPtrField.push_back(obj2);
demoObj->m_simpleObjPtrField().uiCapability()->updateConnectedEditors();
mi = treeView.findModelIndex(obj4);
EXPECT_EQ(1, mi.row());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(PdmUiTreeViewModelTest, ChangeDeepInTreeNotifyRootAndVerifyTreeOrdering)
{
DemoPdmObject* root = new DemoPdmObject;
SimpleObj* rootObj1 = new SimpleObj;
root->m_simpleObjPtrField.push_back(rootObj1);
DemoPdmObject* demoObj = new DemoPdmObject;
root->m_simpleObjPtrField.push_back(demoObj);
SimpleObj* obj1 = new SimpleObj;
SimpleObj* obj2 = new SimpleObj;
SimpleObj* obj3 = new SimpleObj;
SimpleObj* obj4 = new SimpleObj;
demoObj->m_simpleObjPtrField.push_back(obj1);
demoObj->m_simpleObjPtrField.push_back(obj2);
demoObj->m_simpleObjPtrField.push_back(obj3);
demoObj->m_simpleObjPtrField.push_back(obj4);
PdmUiTreeView treeView;
treeView.setPdmItem(root);
QModelIndex mi;
mi = treeView.findModelIndex(obj4);
EXPECT_EQ(3, mi.row());
demoObj->m_simpleObjPtrField.removeChildObject(obj4);
root->m_simpleObjPtrField().uiCapability()->updateConnectedEditors();
mi = treeView.findModelIndex(obj4);
EXPECT_FALSE(mi.isValid());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(PdmUiTreeViewModelTest, DISABLED_PerformanceLargeNumberOfItems)
{
//int objCount = 20000;
int objCount = 100000;
DemoPdmObject* demoObj = new DemoPdmObject;
for (int i = 0; i < objCount; i++)
{
demoObj->m_simpleObjPtrField.push_back(new SimpleObj);
}
PdmUiTreeView treeView;
treeView.setPdmItem(demoObj);
demoObj->m_simpleObjPtrField().uiCapability()->updateConnectedEditors();
}