ReactOS  0.4.15-dev-1197-g8081ba9
imalloc.c
Go to the documentation of this file.
1 /*
2  * Unit test suite for MAPI IMalloc functions
3  *
4  * Copyright 2004 Jon Griffiths
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #define COBJMACROS
22 #include "wine/test.h"
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "winerror.h"
27 #include "winnt.h"
28 #include "mapiutil.h"
29 #include "mapi32_test.h"
30 
31 static HMODULE hMapi32 = 0;
32 
33 static SCODE (WINAPI *pScInitMapiUtil)(ULONG);
34 static LPMALLOC (WINAPI *pMAPIGetDefaultMalloc)(void);
35 
36 static void test_IMalloc(void)
37 {
38  LPVOID lpMem;
39  ULONG ulRef;
40  int iRet;
41  HRESULT hRet;
42  LPMALLOC lpMalloc;
43  LPVOID lpVoid;
44 
45  pMAPIGetDefaultMalloc = (void*)GetProcAddress(hMapi32,
46  "MAPIGetDefaultMalloc@0");
47  if (!pMAPIGetDefaultMalloc)
48  {
49  win_skip("MAPIGetDefaultMalloc is not available\n");
50  return;
51  }
52 
53  lpMalloc = pMAPIGetDefaultMalloc();
54  ok(lpMalloc != NULL, "Expected MAPIGetDefaultMalloc to return non-NULL\n");
55  if (!lpMalloc)
56  {
57  skip("MAPIGetDefaultMalloc failed\n");
58  return;
59  }
60 
61  lpVoid = NULL;
62  hRet = IMalloc_QueryInterface(lpMalloc, &IID_IUnknown, &lpVoid);
63  ok (hRet == S_OK && lpVoid != NULL,
64  "IID_IUnknown: expected S_OK, non-null, got 0x%08x, %p\n",
65  hRet, lpVoid);
66 
67  lpVoid = NULL;
68  hRet = IMalloc_QueryInterface(lpMalloc, &IID_IMalloc, &lpVoid);
69  ok (hRet == S_OK && lpVoid != NULL,
70  "IID_IIMalloc: expected S_OK, non-null, got 0x%08x, %p\n",
71  hRet, lpVoid);
72 
73  /* Prove that native mapi uses LocalAlloc/LocalFree */
74  lpMem = IMalloc_Alloc(lpMalloc, 61);
75  ok (lpMem && IMalloc_GetSize(lpMalloc, lpMem) == LocalSize(lpMem),
76  "Expected non-null, same size, got %p, %s size\n", lpMem,
77  lpMem ? "different" : "same");
78 
79  iRet = IMalloc_DidAlloc(lpMalloc, lpMem);
80  ok (iRet == -1, "DidAlloc, expected -1. got %d\n", iRet);
81 
82  IMalloc_HeapMinimize(lpMalloc);
83 
84  LocalFree(lpMem);
85 
86  ulRef = IMalloc_AddRef(lpMalloc);
87  ok (ulRef == 1u, "AddRef expected 1, returned %d\n", ulRef);
88 
89  ulRef = IMalloc_Release(lpMalloc);
90  ok (ulRef == 1u, "AddRef expected 1, returned %d\n", ulRef);
91 
92  IMalloc_Release(lpMalloc);
93 }
94 
95 START_TEST(imalloc)
96 {
97  SCODE ret;
98 
99  if (!HaveDefaultMailClient())
100  {
101  win_skip("No default mail client installed\n");
102  return;
103  }
104 
105  hMapi32 = LoadLibraryA("mapi32.dll");
106 
107  pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil@4");
108  if (!pScInitMapiUtil)
109  {
110  win_skip("ScInitMapiUtil is not available\n");
112  return;
113  }
114 
115  SetLastError(0xdeadbeef);
116  ret = pScInitMapiUtil(0);
117  if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND))
118  {
119  win_skip("ScInitMapiUtil is not implemented\n");
121  return;
122  }
123  else if ((ret == E_FAIL) && (GetLastError() == ERROR_INVALID_HANDLE))
124  {
125  win_skip("ScInitMapiUtil doesn't work on some Win98 and WinME systems\n");
127  return;
128  }
129 
130  test_IMalloc();
131 
133 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
START_TEST(imalloc)
Definition: imalloc.c:95
interface IMalloc * LPMALLOC
Definition: objfwd.h:12
static SCODE(WINAPI *pScInitMapiUtil)(ULONG)
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
SIZE_T NTAPI LocalSize(HLOCAL hMem)
Definition: heapmem.c:1777
static void test_IMalloc(void)
Definition: imalloc.c:36
#define E_FAIL
Definition: ddrawi.h:102
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
LONG SCODE
Definition: compat.h:2000
smooth NULL
Definition: ftsmooth.c:416
#define FreeLibrary(x)
Definition: compat.h:496
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
#define WINAPI
Definition: msvc.h:6
#define SetLastError(x)
Definition: compat.h:500
int ret
#define S_OK
Definition: intsafe.h:51
#define ERROR_PROC_NOT_FOUND
Definition: winerror.h:199
static BOOL HaveDefaultMailClient(void)
Definition: mapi32_test.h:20
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
unsigned int ULONG
Definition: retypes.h:1
#define GetProcAddress(x, y)
Definition: compat.h:501
static LPMALLOC(WINAPI *pMAPIGetDefaultMalloc)(void)
#define win_skip
Definition: test.h:149
static HMODULE hMapi32
Definition: imalloc.c:31