2026-10-03 17:18:44 +02:00
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
|
|
|
|
|
#include "RimDockWindowController.h"
|
2026-10-11 15:36:48 +02:00
|
|
|
#include "RimSummaryPlot.h"
|
|
|
|
|
|
|
|
|
|
#include "cafPdmDefaultObjectFactory.h"
|
|
|
|
|
|
|
|
|
|
#include <memory>
|
2026-10-03 17:18:44 +02:00
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
/// handleViewerDeletion() used to dereference viewPdmObject() (m_viewToControl) unconditionally.
|
|
|
|
|
/// Calling it before setViewToControl() has ever been called (m_viewToControl is null) must not crash.
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
TEST( RimDockWindowControllerTest, HandleViewerDeletionWithoutViewToControlDoesNotCrash )
|
|
|
|
|
{
|
|
|
|
|
RimDockWindowController controller;
|
|
|
|
|
|
|
|
|
|
EXPECT_NO_FATAL_FAILURE( controller.handleViewerDeletion() );
|
|
|
|
|
}
|
2026-10-11 15:36:48 +02:00
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
/// The dock manager identifies dock widgets by the dock window id. Copied views, including plots created from a plot
|
|
|
|
|
/// template, must get a new id, while reading a project (or undoing a delete) must keep it.
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
TEST( RimDockWindowControllerTest, DockWindowIdIsNotCopied )
|
|
|
|
|
{
|
|
|
|
|
RimSummaryPlot plot;
|
|
|
|
|
const QString dockId = plot.dockWindowName();
|
|
|
|
|
ASSERT_FALSE( dockId.isEmpty() );
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<RimSummaryPlot> copy( plot.copyObject<RimSummaryPlot>() );
|
|
|
|
|
ASSERT_TRUE( copy );
|
|
|
|
|
EXPECT_NE( dockId, copy->dockWindowName() );
|
|
|
|
|
|
|
|
|
|
const QString xml = plot.writeObjectToXmlString();
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<caf::PdmObjectHandle> fromTemplate(
|
|
|
|
|
caf::PdmXmlObjectHandle::readUnknownObjectFromXmlString( xml, caf::PdmDefaultObjectFactory::instance(), true ) );
|
|
|
|
|
auto templatePlot = dynamic_cast<RimSummaryPlot*>( fromTemplate.get() );
|
|
|
|
|
ASSERT_TRUE( templatePlot );
|
|
|
|
|
EXPECT_NE( dockId, templatePlot->dockWindowName() );
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<caf::PdmObjectHandle> fromProject(
|
|
|
|
|
caf::PdmXmlObjectHandle::readUnknownObjectFromXmlString( xml, caf::PdmDefaultObjectFactory::instance(), false ) );
|
|
|
|
|
auto projectPlot = dynamic_cast<RimSummaryPlot*>( fromProject.get() );
|
|
|
|
|
ASSERT_TRUE( projectPlot );
|
|
|
|
|
EXPECT_EQ( dockId, projectPlot->dockWindowName() );
|
|
|
|
|
}
|