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