1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <gtest/gtest.h>
6 #include <gmock/gmock.h>
7 #include <gmock/gmock-spec-builders.h>
10 #include <details/ie_so_pointer.hpp>
12 using namespace InferenceEngine::details;
13 using namespace ::testing;
14 using ::testing::InSequence;
16 class PointedObjHelper {
18 MOCK_METHOD0(obj_dtor, void());
20 virtual ~PointedObjHelper() {
25 class SharedObjectLoaderHelper {
27 MOCK_METHOD0(loader_dtor, void());
29 virtual ~SharedObjectLoaderHelper() {
34 template<class T=PointedObjHelper, class L = SharedObjectLoaderHelper>
35 class SoPointerHelper : public SOPointer<T, L> {
37 SoPointerHelper(std::shared_ptr<L>&& loader, std::shared_ptr<T>&& object)
39 SOPointer<T, L>::_so_loader = std::move(loader);
40 SOPointer<T, L>::_pointedObj = std::move(object);
44 class SoPointerTests : public ::testing::Test {
46 SharedObjectLoaderHelper *loader1 = nullptr, *loader2 = nullptr;
47 PointedObjHelper *obj1 = nullptr, *obj2 = nullptr;
50 TEST_F(SoPointerTests, assignObjThenLoader) {
51 auto loaderPtr1 = std::make_shared<SharedObjectLoaderHelper>();
52 auto objPtr1 = std::make_shared<PointedObjHelper>();
53 auto loaderPtr2 = std::make_shared<SharedObjectLoaderHelper>();
54 auto objPtr2 = std::make_shared<PointedObjHelper>();
55 loader1 = loaderPtr1.get();
57 loader2 = loaderPtr2.get();
59 SoPointerHelper<> soPointer1(std::move(loaderPtr1), std::move(objPtr1));
60 SoPointerHelper<> soPointer2(std::move(loaderPtr2), std::move(objPtr2));
64 EXPECT_CALL(*obj1, obj_dtor());
65 EXPECT_CALL(*loader1, loader_dtor());
66 EXPECT_CALL(*obj2, obj_dtor());
67 EXPECT_CALL(*loader2, loader_dtor());
70 soPointer1 = soPointer2;