1
2TEST_NAMEX(operators_init)
3{
4    CStringX test;
5    ok(test.IsEmpty() == true, "Expected test to be empty\n");
6    ok(test.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", test.GetLength());
7    ok(test.GetAllocLength() == 0, "Expected GetAllocLength() to be 0, was: %i\n", test.GetAllocLength());
8
9    // Operator
10    const XCHAR* cstring = (const XCHAR*)test;
11    ok(cstring != NULL, "Expected a valid pointer\n");
12    if (cstring)
13    {
14        ok(cstring[0] == '\0', "Expected \\0, got: %c (%i)\n", cstring[0], (int)cstring[0]);
15    }
16
17    CStringX first(_X("First "));
18    ok(first.IsEmpty() != true, "Expected first to not be empty\n");
19    ok(first.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", first.GetLength());
20    ok(first.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(7, 6), first.GetAllocLength());
21
22    CStringX second(_X("Second"));
23    ok(second.IsEmpty() != true, "Expected second to not be empty\n");
24    ok(second.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", second.GetLength());
25    ok(second.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(7, 6), second.GetAllocLength());
26
27    test = first;
28    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
29    ok(test.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", test.GetLength());
30    ok(test.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(7, 6), test.GetAllocLength());
31
32    test.Empty();
33    ok(test.IsEmpty() == true, "Expected test to be empty\n");
34    ok(test.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", test.GetLength());
35    ok(test.GetAllocLength() == 0, "Expected GetAllocLength() to be 0, was: %i\n", test.GetAllocLength());
36
37    test = _X("First ");
38    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
39    ok(test.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", test.GetLength());
40    ok(test.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(7, 6), test.GetAllocLength());
41
42    test += second;
43    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
44    ok(test.GetLength() == 12, "Expected GetLength() to be 12, was: %i\n", test.GetLength());
45    ok(test.GetAllocLength() == ALLOC_EXPECT(15, 12), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(15, 12), test.GetAllocLength());
46
47    test = first + second;
48    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
49    ok(test.GetLength() == 12, "Expected GetLength() to be 12, was: %i\n", test.GetLength());
50    ok(test.GetAllocLength() == ALLOC_EXPECT(15, 12), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(15, 12), test.GetAllocLength());
51
52    test = first + second + _X(".");
53    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
54    ok(test.GetLength() == 13, "Expected GetLength() to be 13, was: %i\n", test.GetLength());
55    ok(test.GetAllocLength() == ALLOC_EXPECT(15, 18), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(15, 18), test.GetAllocLength());
56
57    CStringX test2(test);
58    ok(test2.IsEmpty() != true, "Expected test2 to not be empty\n");
59    ok(test2.GetLength() == 13, "Expected GetLength() to be 13, was: %i\n", test2.GetLength());
60    ok(test2.GetAllocLength() == ALLOC_EXPECT(15, 18), "Expected GetAllocLength() to be %i, was: %i\n", ALLOC_EXPECT(15, 18), test2.GetAllocLength());
61
62    // Clear it again
63    test.Empty();
64    ok(test.IsEmpty() == true, "Expected test to be empty\n");
65    ok(test.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", test.GetLength());
66    ok(test.GetAllocLength() == 0, "Expected GetAllocLength() to be 0, was: %i\n", test.GetAllocLength());
67
68    // Assign string
69    test = "First ";
70    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
71    ok(test.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", test.GetLength());
72    ok(test.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be 7, was: %i\n", test.GetAllocLength());
73
74    CStringA testA = test;
75    ok(testA.IsEmpty() != true, "Expected testA to not be empty\n");
76    ok(testA.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", testA.GetLength());
77    ok(testA.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be 7, was: %i\n", testA.GetAllocLength());
78
79    CStringW testW = test;
80    ok(testW.IsEmpty() != true, "Expected testW to not be empty\n");
81    ok(testW.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", testW.GetLength());
82    ok(testW.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be 7, was: %i\n", testW.GetAllocLength());
83
84    // Assign wstring
85    test = L"First ";
86    ok(test.IsEmpty() != true, "Expected test to not be empty\n");
87    ok(test.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", test.GetLength());
88    ok(test.GetAllocLength() == ALLOC_EXPECT(7, 6), "Expected GetAllocLength() to be 7, was: %i\n", test.GetAllocLength());
89}
90
91
92TEST_NAMEX(compare)
93{
94    CStringX s1, s2;
95    s1 = s2 = _X("some text 1!");
96
97    int c = s1.Compare(s2);
98    ok(c == 0, "Expected c to be 1, was: %i\n", c);
99
100    c = s1.Compare(_X("r"));
101    ok(c == 1, "Expected c to be 1, was: %i\n", c);
102
103    c = s1.Compare(_X("s"));
104    ok(c == 1, "Expected c to be 1, was: %i\n", c);
105
106    c = s1.Compare(_X("t"));
107    ok(c == -1, "Expected c to be -1, was: %i\n", c);
108
109    c = s1.Compare(_X("R"));
110    ok(c == 1, "Expected c to be 1, was: %i\n", c);
111
112    c = s1.Compare(_X("S"));
113    ok(c == 1, "Expected c to be 1, was: %i\n", c);
114
115    c = s1.Compare(_X("T"));
116    ok(c == 1, "Expected c to be 1, was: %i\n", c);
117
118    ok(s1 == s2, "Expected s1 and s2 to be equal: '%s' == '%s'\n", dbgstrx(s1), dbgstrx(s2));
119
120    s1.MakeUpper();  // Does not modify s2
121    ok(s1[0] == _X('S'), "Expected s1[0] to be S, was: %c\n", (char)s1[0]);
122    ok(s2[0] == _X('s'), "Expected s2[0] to be s, was: %c\n", (char)s2[0]);
123
124    ok(s1 == _X("SOME TEXT 1!"), "Expected s1 to be 'SOME TEXT 1!', was: %s\n", dbgstrx(s1));
125
126    CStringX s3 = s1.MakeLower();
127    ok(s1 == _X("some text 1!"), "Expected s1 to be 'some text 1!', was: %s\n", dbgstrx(s1));
128    ok(s1 == s3, "Expected s1 and s3 to be equal: '%s' == '%s'\n", dbgstrx(s1), dbgstrx(s3));
129}
130
131
132TEST_NAMEX(find)
133{
134    CStringX s(_X("adbcdef"));
135    int n = s.Find(_X('c'));
136    ok(n == 3, "Expected n to be 2, was %i\n", n);
137    n = s.Find(_X("de"));
138    ok(n == 4, "Expected n to be 4, was %i\n", n);
139
140    CStringX str(_X("The waves are still"));
141    n = str.Find(_X('e'), 5);
142    ok(n == 7, "Expected n to be 7, was %i\n", n);
143    n = str.Find(_X('e'), 7);
144    ok(n == 7, "Expected n to be 7, was %i\n", n);
145
146    s = _X("abcdefGHIJKLMNop");
147    n = s.FindOneOf(_X("Nd"));
148    ok(n == 3, "Expected n to be 3, was %i\n", n);
149    n = s.FindOneOf(_X("Np"));
150    ok(n == 13, "Expected n to be 13, was %i\n", n);
151
152    n = str.ReverseFind(_X('l'));
153    ok(n == 18, "Expected n to be 18, was %i\n", n);
154
155    n = str.ReverseFind(_X('e'));
156    ok(n == 12, "Expected n to be 12, was %i\n", n);
157}
158
159
160void WriteString(const XCHAR* pstrFormat, ...)
161{
162    CStringX str;
163
164    va_list args;
165    va_start(args, pstrFormat);
166
167    str.FormatV(pstrFormat, args);
168    va_end(args);
169
170    ok(str == _X("10e 1351l"), "Expected str to be '10e 1351l', was: %s\n", dbgstrx(str));
171}
172
173TEST_NAMEX(format)
174{
175    CStringX str;
176
177    str.Format(_X("FP: %.2f"), 12345.12345);
178    ok(str == _X("FP: 12345.12"), "Expected str to be 'FP: 12345.12', was: %s\n", dbgstrx(str));
179
180    str.Format(_X("int: %.6d"), 35);
181    ok(str == _X("int: 000035"), "Expected str to be 'int: 000035', was: %s\n", dbgstrx(str));
182
183    WriteString(_X("%de %dl"), 10, 1351);
184}
185
186
187TEST_NAMEX(substr)
188{
189    CStringX s(_X("abcdef"));
190
191    CStringX m = s.Mid(2, 3);
192    ok(m == _X("cde"), "Expected str to be 'cde', was: %s\n", dbgstrx(m));
193    ok(m.GetLength() == 3, "Expected GetLength() to be 3, was: %i\n", m.GetLength());
194
195    m = s.Mid(-5, 3);
196    ok(m == _X("abc"), "Expected str to be 'abc', was: %s\n", dbgstrx(m));
197    ok(m.GetLength() == 3, "Expected GetLength() to be 3, was: %i\n", m.GetLength());
198
199    m = s.Mid(3, 20);
200    ok(m == _X("def"), "Expected str to be 'def', was: %s\n", dbgstrx(m));
201    ok(m.GetLength() == 3, "Expected GetLength() to be 3, was: %i\n", m.GetLength());
202
203    m = s.Mid(3, -1);
204    ok(m == _X(""), "Expected str to be '', was: %s\n", dbgstrx(m));
205    ok(m.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", m.GetLength());
206
207    m = s.Mid(2);
208    ok(m == _X("cdef"), "Expected str to be 'cdef', was: %s\n", dbgstrx(m));
209    ok(m.GetLength() == 4, "Expected GetLength() to be 4, was: %i\n", m.GetLength());
210
211    m = s.Mid(-3);
212    ok(m == _X("abcdef"), "Expected str to be 'abcdef', was: %s\n", dbgstrx(m));
213    ok(m.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", m.GetLength());
214
215    m = s.Mid(20);
216    ok(m == _X(""), "Expected str to be '', was: %s\n", dbgstrx(m));
217    ok(m.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", m.GetLength());
218
219    m = s.Left(2);
220    ok(m == _X("ab"), "Expected str to be 'ab', was: %s\n", dbgstrx(m));
221    ok(m.GetLength() == 2, "Expected GetLength() to be 2, was: %i\n", m.GetLength());
222
223    m = s.Left(40);
224    ok(m == _X("abcdef"), "Expected str to be 'abcdef', was: %s\n", dbgstrx(m));
225    ok(m.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", m.GetLength());
226
227    m = s.Left(-10);
228    ok(m == _X(""), "Expected str to be '', was: %s\n", dbgstrx(m));
229    ok(m.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", m.GetLength());
230
231    m = s.Right(2);
232    ok(m == _X("ef"), "Expected str to be 'ef', was: %s\n", dbgstrx(m));
233    ok(m.GetLength() == 2, "Expected GetLength() to be 2, was: %i\n", m.GetLength());
234
235    m = s.Right(-40);
236    ok(m == _X(""), "Expected str to be '', was: %s\n", dbgstrx(m));
237    ok(m.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", m.GetLength());
238
239    m = s.Right(99);
240    ok(m == _X("abcdef"), "Expected str to be 'abcdef', was: %s\n", dbgstrx(m));
241    ok(m.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", m.GetLength());
242}
243
244
245TEST_NAMEX(replace)
246{
247    CStringX str(_X("abcde"));
248    int n = str.Replace(_X("b"), _X("bx"));
249    ok(n == 1, "Expected n to be 1, was %i\n", n);
250    ok(str == _X("abxcde"), "Expected str to be 'abxcde', was: %s\n", dbgstrx(str));
251    ok(str.GetLength() == 6, "Expected GetLength() to be 6, was: %i\n", str.GetLength());
252
253    CStringX strBang(_X("The quick brown fox is lazy today of all days"));
254
255    n = strBang.Replace(_X("is"), _X("was"));
256    ok(n == 1, "Expected n to be 1, was %i\n", n);
257    ok(strBang == _X("The quick brown fox was lazy today of all days"),
258        "Expected str to be 'The quick brown fox was lazy today of all days', was: %s\n", dbgstrx(strBang));
259    ok(strBang.GetLength() == 46, "Expected GetLength() to be 46, was: %i\n", strBang.GetLength());
260
261    n = strBang.Replace(_X("is"), _X("was"));
262    ok(n == 0, "Expected n to be 0, was %i\n", n);
263    ok(strBang == _X("The quick brown fox was lazy today of all days"),
264        "Expected str to be 'The quick brown fox was lazy today of all days', was: %s\n", dbgstrx(strBang));
265    ok(strBang.GetLength() == 46, "Expected GetLength() to be 46, was: %i\n", strBang.GetLength());
266
267    n = strBang.Replace(_X('o'), _X('0'));
268    ok(n == 4, "Expected n to be 4, was %i\n", n);
269    ok(strBang == _X("The quick br0wn f0x was lazy t0day 0f all days"),
270        "Expected str to be 'The quick br0wn f0x was lazy t0day 0f all days', was: %s\n", dbgstrx(strBang));
271    ok(strBang.GetLength() == 46, "Expected GetLength() to be 46, was: %i\n", strBang.GetLength());
272
273    n = strBang.Replace(_X('o'), _X('0'));
274    ok(n == 0, "Expected n to be 0, was %i\n", n);
275    ok(strBang == _X("The quick br0wn f0x was lazy t0day 0f all days"),
276        "Expected str to be 'The quick br0wn f0x was lazy t0day 0f all days', was: %s\n", dbgstrx(strBang));
277    ok(strBang.GetLength() == 46, "Expected GetLength() to be 46, was: %i\n", strBang.GetLength());
278
279    n = strBang.Replace(_X("y "), _X("y, "));
280    ok(n == 2, "Expected n to be 2, was %i\n", n);
281    ok(strBang == _X("The quick br0wn f0x was lazy, t0day, 0f all days"),
282        "Expected str to be 'The quick br0wn f0x was lazy, t0day, 0f all days', was: %s\n", dbgstrx(strBang));
283    ok(strBang.GetLength() == 48, "Expected GetLength() to be 48, was: %i\n", strBang.GetLength());
284
285    n = strBang.Replace(_X(", 0f all days"), _X(""));
286    ok(n == 1, "Expected n to be 1, was %i\n", n);
287    ok(strBang == _X("The quick br0wn f0x was lazy, t0day"),
288        "Expected str to be 'The quick br0wn f0x was lazy, t0day', was: %s\n", dbgstrx(strBang));
289    ok(strBang.GetLength() == 35, "Expected GetLength() to be 35, was: %i\n", strBang.GetLength());
290
291    n = strBang.Replace(_X(" lazy, "), _X(" fast "));
292    ok(n == 1, "Expected n to be 1, was %i\n", n);
293    ok(strBang == _X("The quick br0wn f0x was fast t0day"),
294        "Expected str to be 'The quick br0wn f0x was fast t0day', was: %s\n", dbgstrx(strBang));
295    ok(strBang.GetLength() == 34, "Expected GetLength() to be 34, was: %i\n", strBang.GetLength());
296
297    n = strBang.Replace(_X("The "), _X(""));
298    ok(n == 1, "Expected n to be 1, was %i\n", n);
299    ok(strBang == _X("quick br0wn f0x was fast t0day"),
300        "Expected str to be 'quick br0wn f0x was fast t0day', was: %s\n", dbgstrx(strBang));
301    ok(strBang.GetLength() == 30, "Expected GetLength() to be 30, was: %i\n", strBang.GetLength());
302
303    n = strBang.Replace(_X(" t0day"), _X(""));
304    ok(n == 1, "Expected n to be 1, was %i\n", n);
305    ok(strBang == _X("quick br0wn f0x was fast"),
306        "Expected str to be 'quick br0wn f0x was fast', was: %s\n", dbgstrx(strBang));
307    ok(strBang.GetLength() == 24, "Expected GetLength() to be 24, was: %i\n", strBang.GetLength());
308
309    n = strBang.Replace(_X("quick"), _X("The fast, quick"));
310    ok(n == 1, "Expected n to be 1, was %i\n", n);
311    ok(strBang == _X("The fast, quick br0wn f0x was fast"),
312        "Expected str to be 'The fast, quick br0wn f0x was fast', was: %s\n", dbgstrx(strBang));
313    ok(strBang.GetLength() == 34, "Expected GetLength() to be 34, was: %i\n", strBang.GetLength());
314}
315
316
317TEST_NAMEX(trim)
318{
319    CStringX str;
320    str = _X(" \t\r\n******Trim some text!?!?!?!?!\n\r\t ");
321
322    str.TrimLeft();
323    ok(str == _X("******Trim some text!?!?!?!?!\n\r\t "), "Expected str to be '******Trim some text!?!?!?!?!\n\r\t ', was: %s\n", dbgstrx(str));
324    ok(str.GetLength() == 33, "Expected GetLength() to be 33, was: %i\n", str.GetLength());
325
326    str.TrimRight();
327    ok(str == _X("******Trim some text!?!?!?!?!"), "Expected str to be '******Trim some text!?!?!?!?!', was: %s\n", dbgstrx(str));
328    ok(str.GetLength() == 29, "Expected GetLength() to be 29, was: %i\n", str.GetLength());
329
330    CStringX str2 = str.Trim(_X("?!*"));
331    ok(str2 == _X("Trim some text"), "Expected str to be 'Trim some text', was: %s\n", dbgstrx(str2));
332    ok(str2.GetLength() == 14, "Expected GetLength() to be 14, was: %i\n", str2.GetLength());
333
334    str = _X("\t\t   ****Trim some text!");
335    str2 = str.TrimLeft(_X("\t *"));
336    ok(str2 == _X("Trim some text!"), "Expected str to be 'Trim some text!', was: %s\n", dbgstrx(str2));
337    ok(str2.GetLength() == 15, "Expected GetLength() to be 15, was: %i\n", str2.GetLength());
338
339    str = _X("Trim some text!?!?!?!?!");
340    str2 = str.TrimRight(_X("?!"));
341    ok(str2 == _X("Trim some text"), "Expected str to be 'Trim some text', was: %s\n", dbgstrx(str2));
342    ok(str2.GetLength() == 14, "Expected GetLength() to be 14, was: %i\n", str2.GetLength());
343
344    str = _X("\t\t\t\t\t");
345    str2 = str.TrimLeft();
346    ok(str2 == _X(""), "Expected str2 to be '', was: %s\n", dbgstrx(str2));
347    ok(str2.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", str2.GetLength());
348
349    str = _X("\t\t\t\t\t");
350    str2 = str.TrimRight();
351    ok(str2 == _X(""), "Expected str2 to be '', was: %s\n", dbgstrx(str2));
352    ok(str2.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", str2.GetLength());
353
354    str = _X("\t\t\t\t\t");
355    str2 = str.Trim();
356    ok(str2 == _X(""), "Expected str2 to be '', was: %s\n", dbgstrx(str2));
357    ok(str2.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", str2.GetLength());
358}
359
360TEST_NAMEX(env)
361{
362    CStringX test;
363    BOOL ret;
364    ok(test.IsEmpty() == true, "Expected test to be empty\n");
365    ok(test.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", test.GetLength());
366    ok(test.GetAllocLength() == 0, "Expected GetAllocLength() to be 0, was: %i\n", test.GetAllocLength());
367
368    XCHAR buf[512];
369    GetWindowsDirectoryX(buf, _countof(buf));
370
371    ret = test.GetEnvironmentVariable(_X("SystemDrive"));
372    ok(!!ret, "Expected %%SystemDrive%% to exist\n");
373    ok(test.IsEmpty() == false, "Expected test to have a valid result\n");
374    ok(test.GetLength() == 2, "Expected GetLength() to be 2, was: %i\n", test.GetLength());
375    if (test.GetLength() == 2)
376    {
377        ok(test[0] == buf[0], "Expected test[0] to equal buf[0], was: %c, %c\n", test[0], buf[0]);
378        ok(test[1] == buf[1], "Expected test[1] to equal buf[1], was: %c, %c\n", test[1], buf[1]);
379    }
380
381    ret = test.GetEnvironmentVariable(_X("SystemRoot"));
382    ok(!!ret, "Expected %%SystemRoot%% to exist\n");
383    ok(test.IsEmpty() == false, "Expected test to have a valid result\n");
384    ok(test == buf, "Expected test to be %s, was %s\n", dbgstrx(buf), dbgstrx(test));
385
386    ret = test.GetEnvironmentVariable(_X("some non existing env var"));
387    ok(!ret, "Expected %%some non existing env var%% to not exist\n");
388    ok(test.IsEmpty() == true, "Expected test to be empty\n");
389    ok(test.GetLength() == 0, "Expected GetLength() to be 0, was: %i\n", test.GetLength());
390}
391
392TEST_NAMEX(load_str)
393{
394    CStringX str;
395
396    ok(str.LoadString(0) == FALSE, "LoadString should fail.\n");
397
398    ok(str.LoadString(IDS_TEST1) == TRUE, "LoadString failed.\n");
399    ok(str == _X("Test string one."), "The value was '%s'\n", dbgstrx(str));
400
401    ok(str.LoadString(IDS_TEST2) == TRUE, "LoadString failed.\n");
402    ok(str == _X("I am a happy BSTR"), "The value was '%s'\n", dbgstrx(str));
403
404    ok(str.LoadString(0) == FALSE, "LoadString should fail.\n");
405    ok(str == _X("I am a happy BSTR"), "The value was '%s'\n", dbgstrx(str));
406
407    XCHAR *xNULL = NULL;
408    CStringX str0(xNULL);
409    ok(str0.IsEmpty(), "str0 should be empty.\n");
410
411    YCHAR *yNULL = NULL;
412    CStringX str1(yNULL);
413    ok(str1.IsEmpty(), "str1 should be empty.\n");
414
415    CStringX str2(MAKEINTRESOURCEX(IDS_TEST1));
416    ok(str2 == _X("Test string one."), "The value was '%s'\n", dbgstrx(str2));
417
418    CStringX str3(MAKEINTRESOURCEX(IDS_TEST2));
419    ok(str3 == _X("I am a happy BSTR"), "The value was '%s'\n", dbgstrx(str3));
420
421    CStringX str4(MAKEINTRESOURCEY(IDS_TEST1));
422    ok(str4 == _X("Test string one."), "The value was '%s'\n", dbgstrx(str4));
423
424    CStringX str5(MAKEINTRESOURCEY(IDS_TEST2));
425    ok(str5 == _X("I am a happy BSTR"), "The value was '%s'\n", dbgstrx(str5));
426}
427
428TEST_NAMEX(bstr)
429{
430    CStringX str;
431
432    str = _X("Some test text here...");
433
434    BSTR bstr = str.AllocSysString();
435    ok(!!bstr, "Expected a valid pointer\n");
436    if (bstr)
437    {
438        ok(!wcscmp(bstr, L"Some test text here..."), "Expected 'Some test text here...', got: '%S'\n", bstr);
439        ::SysFreeString(bstr);
440    }
441}
442