1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Test for <atlconv.h>
5 * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8 #ifdef HAVE_APITEST
9 #include <apitest.h>
10 #else
11 #include "atltest.h"
12 #endif
13 #include <atlbase.h>
14 #include <atlconv.h>
15
START_TEST(atlconv)16 START_TEST(atlconv)
17 {
18 char dataA[MAX_PATH];
19 wchar_t dataW[MAX_PATH];
20 const char *dataAX = "test12345";
21 const wchar_t *dataWX = L"test12345";
22 using namespace ATL;
23
24 //
25 // Initialize long data
26 //
27 FillMemory(dataA, sizeof(dataA), 'A');
28 dataA[_countof(dataA) - 1] = 0;
29
30 for (size_t i = 0; i < _countof(dataW); ++i)
31 dataW[i] = L'A';
32 dataW[_countof(dataW) - 1] = 0;
33
34 //
35 // The NULL strings
36 //
37 {
38 CA2A a2a(NULL);
39 ok_ptr((LPSTR)a2a, NULL);
40 ok_ptr(a2a.m_psz, NULL);
41 ok_int(a2a.m_szBuffer[0], 0);
42
43 CW2A w2a(NULL);
44 ok_ptr((LPSTR)w2a, NULL);
45 ok_ptr(w2a.m_psz, NULL);
46 ok_int(w2a.m_szBuffer[0], 0);
47
48 CA2W a2w(NULL);
49 ok_ptr((LPWSTR)a2w, NULL);
50 ok_ptr(a2w.m_psz, NULL);
51 ok_int(a2w.m_szBuffer[0], 0);
52
53 CW2W w2w(NULL);
54 ok_ptr((LPWSTR)w2w, NULL);
55 ok_ptr(w2w.m_psz, NULL);
56 ok_int(w2w.m_szBuffer[0], 0);
57 }
58
59 //
60 // The zero-length strings
61 //
62 {
63 CA2A a2a("");
64 ok_str((LPSTR)a2a, "");
65 ok_str(a2a.m_psz, "");
66 ok_int(a2a.m_szBuffer[0], 0);
67 ok_ptr(a2a.m_psz, a2a.m_szBuffer);
68
69 CW2A w2a(L"");
70 ok_str((LPSTR)w2a, "");
71 ok_str(w2a.m_psz, "");
72 ok_int(w2a.m_szBuffer[0], 0);
73 ok_ptr(w2a.m_psz, w2a.m_szBuffer);
74
75 CA2W a2w("");
76 ok_wstr((LPWSTR)a2w, L"");
77 ok_wstr(a2w.m_psz, L"");
78 ok_int(a2w.m_szBuffer[0], 0);
79 ok_ptr(a2w.m_psz, a2w.m_szBuffer);
80
81 CW2W w2w(L"");
82 ok_wstr((LPWSTR)w2w, L"");
83 ok_wstr(w2w.m_psz, L"");
84 ok_int(w2w.m_szBuffer[0], 0);
85 ok_ptr(w2w.m_psz, w2w.m_szBuffer);
86 }
87
88 //
89 // The short strings
90 //
91 {
92 CA2A a2a("TEST123");
93 ok_str((LPSTR)a2a, "TEST123");
94 ok_str(a2a.m_psz, "TEST123");
95 ok_ptr(a2a.m_psz, a2a.m_szBuffer);
96
97 CW2A w2a(L"TEST123");
98 ok_str((LPSTR)w2a, "TEST123");
99 ok_str(w2a.m_psz, "TEST123");
100 ok_ptr(w2a.m_psz, w2a.m_szBuffer);
101
102 CA2W a2w("TEST123");
103 ok_wstr((LPWSTR)a2w, L"TEST123");
104 ok_wstr(a2w.m_psz, L"TEST123");
105 ok_ptr(a2w.m_psz, a2w.m_szBuffer);
106
107 CW2W w2w(L"TEST123");
108 ok_wstr((LPWSTR)w2w, L"TEST123");
109 ok_wstr(w2w.m_psz, L"TEST123");
110 ok_ptr(w2w.m_psz, w2w.m_szBuffer);
111 }
112
113 //
114 // The short strings (EX)
115 //
116 {
117 CA2AEX<5> a2ax("123");
118 ok_str((LPSTR)a2ax, "123");
119 ok_str(a2ax.m_psz, "123");
120 ok_ptr(a2ax.m_psz, a2ax.m_szBuffer);
121
122 CW2AEX<5> w2ax(L"123");
123 ok_str((LPSTR)w2ax, "123");
124 ok_str(w2ax.m_psz, "123");
125 //ok(w2ax.m_psz != w2ax.m_szBuffer, "w2ax.m_psz == w2ax.m_szBuffer\n"); // corner case
126
127 CA2WEX<5> a2wx("123");
128 ok_wstr((LPWSTR)a2wx, L"123");
129 ok_wstr(a2wx.m_psz, L"123");
130 ok_ptr(a2wx.m_psz, a2wx.m_szBuffer);
131
132 CW2WEX<5> w2wx(L"123");
133 ok_wstr((LPWSTR)w2wx, L"123");
134 ok_wstr(w2wx.m_psz, L"123");
135 ok_ptr(w2wx.m_psz, w2wx.m_szBuffer);
136 }
137
138 //
139 // The long strings
140 //
141 {
142 CA2A a2a2(dataA);
143 ok_str((LPSTR)a2a2, dataA);
144 ok_str(a2a2.m_psz, dataA);
145 ok_str(a2a2.m_szBuffer, "");
146 ok(a2a2.m_psz != dataA, "a2a2.m_psz == dataA\n");
147 ok(a2a2.m_psz != a2a2.m_szBuffer, "a2a2.m_psz == a2a2.m_szBuffer\n");
148
149 CW2A w2a2(dataW);
150 ok_str((LPSTR)w2a2, dataA);
151 ok_str(w2a2.m_psz, dataA);
152 ok_str(w2a2.m_szBuffer, "");
153 ok(w2a2.m_psz != dataA, "w2a2.m_psz == dataA\n");
154 ok(w2a2.m_psz != w2a2.m_szBuffer, "w2a2.m_psz == w2a2.m_szBuffer\n");
155
156 CA2W a2w2(dataA);
157 ok_wstr((LPWSTR)a2w2, dataW);
158 ok_wstr(a2w2.m_psz, dataW);
159 ok_wstr(a2w2.m_szBuffer, L"");
160 ok(a2w2.m_psz != dataW, "a2w2.m_psz == dataW\n");
161 ok(a2w2.m_psz != a2w2.m_szBuffer, "a2w2.m_psz == a2w2.m_szBuffer\n");
162
163 CW2W w2w2(dataW);
164 ok_wstr((LPWSTR)w2w2, dataW);
165 ok_wstr(w2w2.m_psz, dataW);
166 ok_wstr(w2w2.m_szBuffer, L"");
167 ok(w2w2.m_psz != dataW, "w2w2.m_psz == dataW\n");
168 ok(w2w2.m_psz != w2w2.m_szBuffer, "w2w2.m_psz == w2w2.m_szBuffer\n");
169 }
170
171 //
172 // The long strings (EX)
173 //
174 {
175 CA2AEX<5> a2a2x(dataAX);
176 ok_str((LPSTR)a2a2x, dataAX);
177 ok_str(a2a2x.m_psz, dataAX);
178 ok_str(a2a2x.m_szBuffer, "");
179 ok(a2a2x.m_psz != dataAX, "a2a2x.m_psz == dataAX\n");
180 ok(a2a2x.m_psz != a2a2x.m_szBuffer, "a2a2x.m_psz == a2a2x.m_szBuffer\n");
181
182 CW2AEX<5> w2a2x(dataWX);
183 ok_str((LPSTR)w2a2x, dataAX);
184 ok_str(w2a2x.m_psz, dataAX);
185 ok_str(w2a2x.m_szBuffer, "");
186 ok(w2a2x.m_psz != dataAX, "w2a2x.m_psz == dataAX\n");
187 ok(w2a2x.m_psz != w2a2x.m_szBuffer, "w2a2x.m_psz == w2a2x.m_szBuffer\n");
188
189 CA2WEX<5> a2w2x(dataAX);
190 ok_wstr((LPWSTR)a2w2x, dataWX);
191 ok_wstr(a2w2x.m_psz, dataWX);
192 ok_wstr(a2w2x.m_szBuffer, L"");
193 ok(a2w2x.m_psz != dataWX, "a2w2x.m_psz == dataWX\n");
194 ok(a2w2x.m_psz != a2w2x.m_szBuffer, "a2w2x.m_psz == a2w2x.m_szBuffer\n");
195
196 CW2WEX<5> w2w2x(dataWX);
197 ok_wstr((LPWSTR)w2w2x, dataWX);
198 ok_wstr(w2w2x.m_psz, dataWX);
199 ok_wstr(w2w2x.m_szBuffer, L"");
200 ok(w2w2x.m_psz != dataWX, "w2w2x.m_psz == dataWX\n");
201 ok(w2w2x.m_psz != w2w2x.m_szBuffer, "w2w2x.m_psz == w2w2x.m_szBuffer\n");
202 }
203
204 //
205 // The const strings
206 //
207 {
208 CA2CA a2ca(dataA);
209 ok_str((LPCSTR)a2ca, dataA);
210 ok_str(a2ca.m_psz, dataA);
211 ok_ptr(a2ca.m_psz, dataA);
212
213 CW2CW w2cw(dataW);
214 ok_wstr((LPCWSTR)w2cw, dataW);
215 ok_wstr(w2cw.m_psz, dataW);
216 ok_ptr(w2cw.m_psz, dataW);
217 }
218 }
219