// Copyright (C) 2018 Intel Corporation // SPDX-License-Identifier: Apache-2.0 // #include #include #include #include #include
using namespace InferenceEngine::details; using namespace ::testing; using ::testing::InSequence; class PointedObjHelper { public: MOCK_METHOD0(obj_dtor, void()); virtual ~PointedObjHelper() { obj_dtor(); } }; class SharedObjectLoaderHelper { public: MOCK_METHOD0(loader_dtor, void()); virtual ~SharedObjectLoaderHelper() { loader_dtor(); } }; template class SoPointerHelper : public SOPointer { public: SoPointerHelper(std::shared_ptr&& loader, std::shared_ptr&& object) : SOPointer() { SOPointer::_so_loader = std::move(loader); SOPointer::_pointedObj = std::move(object); } }; class SoPointerTests : public ::testing::Test { protected: SharedObjectLoaderHelper *loader1 = nullptr, *loader2 = nullptr; PointedObjHelper *obj1 = nullptr, *obj2 = nullptr; }; TEST_F(SoPointerTests, assignObjThenLoader) { auto loaderPtr1 = std::make_shared(); auto objPtr1 = std::make_shared(); auto loaderPtr2 = std::make_shared(); auto objPtr2 = std::make_shared(); loader1 = loaderPtr1.get(); obj1 = objPtr1.get(); loader2 = loaderPtr2.get(); obj2 = objPtr2.get(); SoPointerHelper<> soPointer1(std::move(loaderPtr1), std::move(objPtr1)); SoPointerHelper<> soPointer2(std::move(loaderPtr2), std::move(objPtr2)); { InSequence dummy; EXPECT_CALL(*obj1, obj_dtor()); EXPECT_CALL(*loader1, loader_dtor()); EXPECT_CALL(*obj2, obj_dtor()); EXPECT_CALL(*loader2, loader_dtor()); } soPointer1 = soPointer2; }