#include "apps/openmw/mwclass/npc.hpp" #include "apps/openmw/mwworld/esmstore.hpp" #include "apps/openmw/mwworld/livecellref.hpp" #include "apps/openmw/mwworld/ptr.hpp" #include "apps/openmw/mwworld/worldmodel.hpp" #include #include #include namespace MWWorld { namespace { using namespace testing; TEST(MWWorldPtrTest, toStringShouldReturnHumanReadableTextRepresentationOfPtrWithNullRef) { Ptr ptr; EXPECT_EQ(ptr.toString(), "null object"); } TEST(MWWorldPtrTest, toStringShouldReturnHumanReadableTextRepresentationOfPtrWithDeletedRef) { MWClass::Npc::registerSelf(); ESM::NPC npc; npc.blank(); npc.mId = ESM::RefId::stringRefId("Player"); ESMStore store; store.insert(npc); ESM::CellRef cellRef; cellRef.blank(); cellRef.mRefID = npc.mId; cellRef.mRefNum = ESM::RefNum{ .mIndex = 0x2a, .mContentFile = 0xd }; LiveCellRef liveCellRef(cellRef, &npc); liveCellRef.mData.setDeletedByContentFile(true); Ptr ptr(&liveCellRef); EXPECT_EQ(ptr.toString(), "deleted object0xd00002a (NPC, \"player\")"); } TEST(MWWorldPtrTest, toStringShouldReturnHumanReadableTextRepresentationOfPtr) { MWClass::Npc::registerSelf(); ESM::NPC npc; npc.blank(); npc.mId = ESM::RefId::stringRefId("Player"); ESMStore store; store.insert(npc); ESM::CellRef cellRef; cellRef.blank(); cellRef.mRefID = npc.mId; cellRef.mRefNum = ESM::RefNum{ .mIndex = 0x2a, .mContentFile = 0xd }; LiveCellRef liveCellRef(cellRef, &npc); Ptr ptr(&liveCellRef); EXPECT_EQ(ptr.toString(), "object0xd00002a (NPC, \"player\")"); } TEST(MWWorldPtrTest, underlyingLiveCellRefShouldBeDeregisteredOnDestruction) { MWClass::Npc::registerSelf(); ESM::NPC npc; npc.blank(); npc.mId = ESM::RefId::stringRefId("Player"); ESMStore store; store.insert(npc); ESM::ReadersCache readersCache; WorldModel worldModel(store, readersCache); ESM::CellRef cellRef; cellRef.blank(); cellRef.mRefID = npc.mId; cellRef.mRefNum = ESM::FormId{ .mIndex = 0x2a, .mContentFile = 0xd }; { LiveCellRef liveCellRef(cellRef, &npc); Ptr ptr(&liveCellRef); worldModel.registerPtr(ptr); ASSERT_EQ(worldModel.getPtr(cellRef.mRefNum), ptr); } EXPECT_EQ(worldModel.getPtr(cellRef.mRefNum), Ptr()); } } }