1 /*
2  * PROJECT:     ReactOS api tests
3  * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4  * PURPOSE:     Test for OBJECT_ENTRY_AUTO
5  * COPYRIGHT:   Copyright 2023 Mark Jansen <mark.jansen@reactos.org>
6  */
7 
8 #ifdef HAVE_APITEST
9     #include <apitest.h>
10 #else
11     #include "atltest.h"
12 #endif
13 
14 #include <atlbase.h>
15 #include <atlcom.h>
16 
17 class CAtlObjMapModule : public ATL::CAtlExeModuleT<CAtlObjMapModule>
18 {
19 
20 } _Module;
21 
22 CLSID CLSID_ObjMapTestObject = {0xeae5616c, 0x1e7f, 0x4a00, {0x92, 0x27, 0x1a, 0xad, 0xad, 0x66, 0xbb, 0x85}};
23 
24 static LONG g_Created = 0;
25 static LONG g_Destroyed = 0;
26 
27 
28 START_TEST(AtlObjMap)
29 {
30     HRESULT hr = CoInitialize(NULL);
31     ok_hex(hr, S_OK);
32 
33     {
34         CComPtr<IUnknown> spTestObject;
35         hr = CoCreateInstance(CLSID_ObjMapTestObject, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID*)&spTestObject);
36         ok_hex(hr, REGDB_E_CLASSNOTREG);
37     }
38 
39     ok_int(g_Created, 0);
40     ok_int(g_Destroyed, 0);
41 
42     // Register the com objects added to the auto-map in _AtlComModule
43     hr = _Module.RegisterClassObjects(CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE);
44     ok_hex(hr, S_OK);
45 
46     ok_int(g_Created, 0);
47     ok_int(g_Destroyed, 0);
48 
49     {
50         CComPtr<IUnknown> spTestObject;
51         hr = CoCreateInstance(CLSID_ObjMapTestObject, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID *)&spTestObject);
52         ok_hex(hr, S_OK);
53         ok_int(g_Created, 1);
54         ok_int(g_Destroyed, 0);
55     }
56     ok_int(g_Created, 1);
57     ok_int(g_Destroyed, 1);
58 }
59 
60 
61 
62 struct CObjMapTestObject : public CComObjectRootEx<CComSingleThreadModel>,
63                            public CComCoClass<CObjMapTestObject, &CLSID_ObjMapTestObject>,
64                           public IUnknown
65 {
66     CObjMapTestObject()
67     {
68         InterlockedIncrement(&g_Created);
69     }
70     ~CObjMapTestObject()
71     {
72         InterlockedIncrement(&g_Destroyed);
73     }
74 
75 
76     DECLARE_PROTECT_FINAL_CONSTRUCT();
77     DECLARE_NO_REGISTRY();
78     DECLARE_NOT_AGGREGATABLE(CObjMapTestObject)
79 
80     BEGIN_COM_MAP(CObjMapTestObject)
81         COM_INTERFACE_ENTRY_IID(IID_IUnknown, IUnknown)
82     END_COM_MAP()
83 };
84 
85 OBJECT_ENTRY_AUTO(CLSID_ObjMapTestObject, CObjMapTestObject)
86 
87