Files
ResInsight/Fwk/AppFwk/cafUserInterface/cafUserInterface_UnitTests/cafPdmUiTreeViewModelTest.cpp
2022-05-31 15:05:07 +02:00

195 lines
6.1 KiB
C++

#include "gtest/gtest.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmObject.h"
#include "cafPdmUiTreeView.h"
#include <QApplication>
#include <QModelIndex>
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.deleteChildren(); }
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.removeChild( 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.clearWithoutDelete();
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.removeChild( 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();
}