Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/dlls/activeds/tests/activeds.c
8829 views
1
/*
2
* Copyright 2020 Dmitry Timoshkov
3
*
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17
*/
18
19
#include <stdarg.h>
20
#include <stdio.h>
21
22
#define COBJMACROS
23
24
#include "windef.h"
25
#include "winbase.h"
26
#include "objbase.h"
27
#include "initguid.h"
28
#include "iads.h"
29
#include "adshlp.h"
30
#include "adserr.h"
31
32
#include "wine/test.h"
33
34
static void test_ADsBuildVarArrayStr(void)
35
{
36
const WCHAR *props[] = { L"prop1", L"prop2" };
37
HRESULT hr;
38
VARIANT var, item, *data;
39
LONG start, end, idx;
40
41
hr = ADsBuildVarArrayStr(NULL, 0, NULL);
42
ok(hr == E_ADS_BAD_PARAMETER || hr == E_FAIL /* XP */, "got %#lx\n", hr);
43
44
hr = ADsBuildVarArrayStr(NULL, 0, &var);
45
ok(hr == S_OK, "got %#lx\n", hr);
46
ok(V_VT(&var) == (VT_ARRAY | VT_VARIANT), "got %d\n", V_VT(&var));
47
start = 0xdeadbeef;
48
hr = SafeArrayGetLBound(V_ARRAY(&var), 1, &start);
49
ok(hr == S_OK, "got %#lx\n", hr);
50
ok(start == 0, "got %ld\n", start);
51
end = 0xdeadbeef;
52
hr = SafeArrayGetUBound(V_ARRAY(&var), 1, &end);
53
ok(hr == S_OK, "got %#lx\n", hr);
54
ok(end == -1, "got %ld\n", end);
55
VariantClear(&var);
56
57
hr = ADsBuildVarArrayStr((LPWSTR *)props, ARRAY_SIZE(props), &var);
58
ok(hr == S_OK, "got %#lx\n", hr);
59
ok(V_VT(&var) == (VT_ARRAY | VT_VARIANT), "got %d\n", V_VT(&var));
60
start = 0xdeadbeef;
61
hr = SafeArrayGetLBound(V_ARRAY(&var), 1, &start);
62
ok(hr == S_OK, "got %#lx\n", hr);
63
ok(start == 0, "got %ld\n", start);
64
end = 0xdeadbeef;
65
hr = SafeArrayGetUBound(V_ARRAY(&var), 1, &end);
66
ok(hr == S_OK, "got %#lx\n", hr);
67
ok(end == 1, "got %ld\n", end);
68
idx = 0;
69
hr = SafeArrayGetElement(V_ARRAY(&var), &idx, &item);
70
ok(hr == S_OK, "got %#lx\n", hr);
71
ok(V_VT(&item) == VT_BSTR, "got %d\n", V_VT(&item));
72
ok(!lstrcmpW(V_BSTR(&item), L"prop1"), "got %s\n", wine_dbgstr_w(V_BSTR(&item)));
73
VariantClear(&item);
74
hr = SafeArrayAccessData(V_ARRAY(&var), (void *)&data);
75
ok(hr == S_OK, "got %#lx\n", hr);
76
ok(V_VT(&data[0]) == VT_BSTR, "got %d\n", V_VT(&data[0]));
77
ok(!lstrcmpW(V_BSTR(&data[0]), L"prop1"), "got %s\n", wine_dbgstr_w(V_BSTR(&data[0])));
78
ok(V_VT(&data[0]) == VT_BSTR, "got %d\n", V_VT(&data[0]));
79
ok(!lstrcmpW(V_BSTR(&data[1]), L"prop2"), "got %s\n", wine_dbgstr_w(V_BSTR(&data[1])));
80
hr = SafeArrayUnaccessData(V_ARRAY(&var));
81
ok(hr == S_OK, "got %#lx\n", hr);
82
VariantClear(&var);
83
}
84
85
static void test_ADsBuildVarArrayInt(void)
86
{
87
const DWORD props[] = { 1, 2, 3, 4 };
88
HRESULT hr;
89
VARIANT var, item;
90
LONG start, end, idx;
91
92
hr = ADsBuildVarArrayInt(NULL, 0, NULL);
93
ok(hr == E_ADS_BAD_PARAMETER || hr == E_FAIL /* XP */, "got %#lx\n", hr);
94
95
hr = ADsBuildVarArrayInt(NULL, 0, &var);
96
ok(hr == S_OK, "got %#lx\n", hr);
97
ok(V_VT(&var) == (VT_ARRAY | VT_VARIANT), "got %d\n", V_VT(&var));
98
start = 0xdeadbeef;
99
hr = SafeArrayGetLBound(V_ARRAY(&var), 1, &start);
100
ok(hr == S_OK, "got %#lx\n", hr);
101
ok(start == 0, "got %ld\n", start);
102
end = 0xdeadbeef;
103
hr = SafeArrayGetUBound(V_ARRAY(&var), 1, &end);
104
ok(hr == S_OK, "got %#lx\n", hr);
105
ok(end == -1, "got %ld\n", end);
106
VariantClear(&var);
107
108
hr = ADsBuildVarArrayInt((LPDWORD)props, ARRAY_SIZE(props), &var);
109
ok(hr == S_OK, "got %#lx\n", hr);
110
ok(V_VT(&var) == (VT_ARRAY | VT_VARIANT), "got %d\n", V_VT(&var));
111
start = 0xdeadbeef;
112
hr = SafeArrayGetLBound(V_ARRAY(&var), 1, &start);
113
ok(hr == S_OK, "got %#lx\n", hr);
114
ok(start == 0, "got %ld\n", start);
115
end = 0xdeadbeef;
116
hr = SafeArrayGetUBound(V_ARRAY(&var), 1, &end);
117
ok(hr == S_OK, "got %#lx\n", hr);
118
ok(end == 3, "got %ld\n", end);
119
120
for (idx = 0; idx < ARRAY_SIZE(props); idx++)
121
{
122
hr = SafeArrayGetElement(V_ARRAY(&var), &idx, &item);
123
ok(hr == S_OK, "got %#lx\n", hr);
124
ok(V_VT(&item) == VT_I4, "got %d\n", V_VT(&item));
125
ok(V_UI4(&item) == props[idx], "got %lu\n", V_UI4(&item));
126
VariantClear(&item);
127
}
128
129
VariantClear(&var);
130
}
131
132
static void test_Pathname(void)
133
{
134
static const WCHAR * const elem[3] = { L"a=b",L"c=d",L"e=f" };
135
HRESULT hr;
136
IADsPathname *path;
137
BSTR bstr;
138
LONG count, i;
139
140
hr = CoCreateInstance(&CLSID_Pathname, 0, CLSCTX_INPROC_SERVER, &IID_IADsPathname, (void **)&path);
141
ok(hr == S_OK, "got %#lx\n", hr);
142
143
count = 0xdeadbeef;
144
hr = IADsPathname_GetNumElements(path, &count);
145
ok(hr == S_OK, "got %#lx\n", hr);
146
ok(count == 0, "got %ld\n", count);
147
148
bstr = NULL;
149
hr = IADsPathname_Retrieve(path, ADS_FORMAT_X500, &bstr);
150
ok(hr == S_OK, "got %#lx\n", hr);
151
ok(bstr && !wcscmp(bstr, L"LDAP://"), "got %s\n", wine_dbgstr_w(bstr));
152
SysFreeString(bstr);
153
154
bstr = SysAllocString(L"LDAP://sample");
155
hr = IADsPathname_Set(path, bstr, ADS_SETTYPE_FULL);
156
ok(hr == S_OK, "got %#lx\n", hr);
157
SysFreeString(bstr);
158
159
count = 0xdeadbeef;
160
hr = IADsPathname_GetNumElements(path, &count);
161
ok(hr == S_OK, "got %#lx\n", hr);
162
ok(count == 0, "got %ld\n", count);
163
164
hr = IADsPathname_GetElement(path, 0, &bstr);
165
ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), "got %#lx\n", hr);
166
SysFreeString(bstr);
167
168
bstr = SysAllocString(L"LDAP://sample:123/a=b,c=d,e=f");
169
hr = IADsPathname_Set(path, bstr, ADS_SETTYPE_FULL);
170
ok(hr == S_OK, "got %#lx\n", hr);
171
SysFreeString(bstr);
172
173
count = 0xdeadbeef;
174
hr = IADsPathname_GetNumElements(path, &count);
175
ok(hr == S_OK, "got %#lx\n", hr);
176
ok(count == 3, "got %ld\n", count);
177
178
for (i = 0; i < count; i++)
179
{
180
hr = IADsPathname_GetElement(path, i, &bstr);
181
ok(hr == S_OK, "got %#lx\n", hr);
182
ok(!wcscmp(bstr, elem[i]), "%lu: %s\n", i, wine_dbgstr_w(bstr));
183
SysFreeString(bstr);
184
}
185
186
hr = IADsPathname_Retrieve(path, ADS_FORMAT_X500, &bstr);
187
ok(hr == S_OK, "got %#lx\n", hr);
188
ok(!wcscmp(bstr, L"LDAP://sample:123/a=b,c=d,e=f"), "got %s\n", wine_dbgstr_w(bstr));
189
SysFreeString(bstr);
190
191
hr = IADsPathname_Retrieve(path, ADS_FORMAT_PROVIDER, &bstr);
192
ok(hr == S_OK, "got %#lx\n", hr);
193
ok(!wcscmp(bstr, L"LDAP"), "got %s\n", wine_dbgstr_w(bstr));
194
SysFreeString(bstr);
195
196
hr = IADsPathname_Retrieve(path, ADS_FORMAT_SERVER, &bstr);
197
ok(hr == S_OK, "got %#lx\n", hr);
198
ok(!wcscmp(bstr, L"sample:123"), "got %s\n", wine_dbgstr_w(bstr));
199
SysFreeString(bstr);
200
201
hr = IADsPathname_Retrieve(path, ADS_FORMAT_LEAF, &bstr);
202
ok(hr == S_OK, "got %#lx\n", hr);
203
ok(!wcscmp(bstr, L"a=b"), "got %s\n", wine_dbgstr_w(bstr));
204
SysFreeString(bstr);
205
206
IADsPathname_Release(path);
207
}
208
209
START_TEST(activeds)
210
{
211
CoInitialize(NULL);
212
213
test_Pathname();
214
test_ADsBuildVarArrayStr();
215
test_ADsBuildVarArrayInt();
216
217
CoUninitialize();
218
}
219
220