ReactOS
0.4.15-dev-4614-ga5a6101
CString.cpp
Go to the documentation of this file.
1
/*
2
* PROJECT: ReactOS api tests
3
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4
* PURPOSE: Test for CString
5
* COPYRIGHT: Copyright 2016-2017 Mark Jansen (mark.jansen@reactos.org)
6
* Copyright 2017 Katayama Hirofumi MZ
7
*/
8
9
#include <
atlstr.h
>
10
#include "
resource.h
"
11
12
#ifdef HAVE_APITEST
13
#include <
apitest.h
>
14
#else
15
#include "
atltest.h
"
16
#endif
17
18
struct
traits_test
19
{
20
const
char
*
strA
;
21
const
wchar_t
*
strW
;
22
int
str_len
;
23
int
exp_1
,
exp_2
,
exp_3
,
exp_4
;
24
};
25
26
traits_test
g_Tests
[] = {
27
// inputs outputs
28
{
NULL
,
NULL
, 0, 0, 0, -1, 0 },
29
{
NULL
,
NULL
, -1, 0, -1, -1, 0 },
30
{
NULL
,
NULL
, 1, 0, 1, -1, 0 },
31
32
{
""
,
L
""
, 0, 0, 0, 0, 0 },
33
{
""
,
L
""
, -1, 0, -1, 0, 1 },
34
{
""
,
L
""
, 1, 0, 1, 0, 1 },
35
36
{
"AAABBB"
,
L
"AAABBB"
, 0, 6, 0, 6, 0 },
37
{
"AAABBB"
,
L
"AAABBB"
, 3, 6, 3, 6, 3 },
38
{
"AAABBB"
,
L
"AAABBB"
, -1, 6, -1, 6, 7 },
39
};
40
41
static
void
test_basetypes
()
42
{
43
int
len
;
44
char
bufA[10];
45
wchar_t
bufW[10];
46
47
for
(
size_t
n
= 0;
n
<
_countof
(
g_Tests
); ++
n
)
48
{
49
len
=
ChTraitsCRT<char>::GetBaseTypeLength
(
g_Tests
[
n
].
strA
);
50
ok
(
len
==
g_Tests
[
n
].exp_1,
"Expected len to be %i, was %i for %u (A)\n"
,
g_Tests
[
n
].exp_1,
len
,
n
);
51
52
len
=
ChTraitsCRT<char>::GetBaseTypeLength
(
g_Tests
[
n
].
strA
,
g_Tests
[
n
].
str_len
);
53
ok
(
len
==
g_Tests
[
n
].exp_2,
"Expected len to be %i, was %i for %u (A,len)\n"
,
g_Tests
[
n
].exp_2,
len
,
n
);
54
55
len
=
ChTraitsCRT<char>::GetBaseTypeLength
(
g_Tests
[
n
].
strW
);
56
ok
(
len
==
g_Tests
[
n
].exp_3,
"Expected len to be %i, was %i for %u (W)\n"
,
g_Tests
[
n
].exp_3,
len
,
n
);
57
58
len
=
ChTraitsCRT<char>::GetBaseTypeLength
(
g_Tests
[
n
].
strW
,
g_Tests
[
n
].
str_len
);
59
ok
(
len
==
g_Tests
[
n
].exp_4,
"Expected len to be %i, was %i for %u (W,len)\n"
,
g_Tests
[
n
].exp_4,
len
,
n
);
60
61
if
(
g_Tests
[
n
].
strA
&&
g_Tests
[
n
].
strW
)
62
{
63
memset
(bufA,
'x'
,
sizeof
(bufA));
64
ChTraitsCRT<char>::ConvertToBaseType
(bufA,
g_Tests
[
n
].exp_1+1,
g_Tests
[
n
].
strA
);
65
char
ch = bufA[
g_Tests
[
n
].
exp_1
];
66
ok
(ch ==
'\0'
,
"Expected %i to be \\0, was: %c (%i) for %u\n"
,
g_Tests
[
n
].exp_1, ch, (
int
)ch,
n
);
67
ok
(!
strcmp
(bufA,
g_Tests
[
n
].
strA
),
"Expected bufA to be %s, was: %s for %u\n"
,
g_Tests
[
n
].
strA
, bufA,
n
);
68
ch = bufA[
g_Tests
[
n
].
exp_1
+1];
69
ok
(ch ==
'x'
,
"Expected %i to be 'x', was: %c (%i) for %u\n"
,
g_Tests
[
n
].exp_1+1, ch, (
int
)ch,
n
);
70
}
71
72
if
(
g_Tests
[
n
].
strA
&&
g_Tests
[
n
].
strW
)
73
{
74
memset
(bufA,
'x'
,
sizeof
(bufA));
75
ChTraitsCRT<char>::ConvertToBaseType
(bufA,
g_Tests
[
n
].exp_1+1,
g_Tests
[
n
].
strW
);
76
char
ch = bufA[
g_Tests
[
n
].
exp_1
];
77
ok
(ch ==
'\0'
,
"Expected %i to be \\0, was: %c (%i) for %u\n"
,
g_Tests
[
n
].exp_1, ch, (
int
)ch,
n
);
78
ok
(!
strcmp
(bufA,
g_Tests
[
n
].
strA
),
"Expected bufA to be %s, was: %s for %u\n"
,
g_Tests
[
n
].
strA
, bufA,
n
);
79
ch = bufA[
g_Tests
[
n
].
exp_1
+1];
80
ok
(ch ==
'x'
,
"Expected %i to be 'x', was: %c (%i) for %u\n"
,
g_Tests
[
n
].exp_1+1, ch, (
int
)ch,
n
);
81
}
82
83
// wchar_t --> please note, swapped the expectations from 2 and 4 !
84
len
=
ChTraitsCRT<wchar_t>::GetBaseTypeLength
(
g_Tests
[
n
].
strA
);
85
ok
(
len
==
g_Tests
[
n
].exp_1,
"Expected len to be %i, was %i for %u (A)\n"
,
g_Tests
[
n
].exp_1,
len
,
n
);
86
87
len
=
ChTraitsCRT<wchar_t>::GetBaseTypeLength
(
g_Tests
[
n
].
strA
,
g_Tests
[
n
].
str_len
);
88
ok
(
len
==
g_Tests
[
n
].exp_4,
"Expected len to be %i, was %i for %u (A,len)\n"
,
g_Tests
[
n
].exp_4,
len
,
n
);
89
90
len
=
ChTraitsCRT<wchar_t>::GetBaseTypeLength
(
g_Tests
[
n
].
strW
);
91
ok
(
len
==
g_Tests
[
n
].exp_3,
"Expected len to be %i, was %i for %u (W)\n"
,
g_Tests
[
n
].exp_3,
len
,
n
);
92
93
len
=
ChTraitsCRT<wchar_t>::GetBaseTypeLength
(
g_Tests
[
n
].
strW
,
g_Tests
[
n
].
str_len
);
94
ok
(
len
==
g_Tests
[
n
].exp_2,
"Expected len to be %i, was %i for %u (W,len)\n"
,
g_Tests
[
n
].exp_2,
len
,
n
);
95
96
if
(
g_Tests
[
n
].
strA
&&
g_Tests
[
n
].
strW
)
97
{
98
memset
(bufW,
'x'
,
sizeof
(bufW));
99
ChTraitsCRT<wchar_t>::ConvertToBaseType
(bufW,
g_Tests
[
n
].exp_1+1,
g_Tests
[
n
].
strA
);
100
wchar_t
ch = bufW[
g_Tests
[
n
].
exp_1
];
101
ok
(ch ==
L
'\0'
,
"Expected %i to be \\0, was: %c (%i) for %u\n"
,
g_Tests
[
n
].exp_1, ch, (
int
)ch,
n
);
102
ok
(!
wcscmp
(bufW,
g_Tests
[
n
].
strW
),
"Expected bufW to be %s, was: %s for %u\n"
,
wine_dbgstr_w
(
g_Tests
[
n
].
strW
),
wine_dbgstr_w
(bufW),
n
);
103
ch = bufW[
g_Tests
[
n
].
exp_1
+1];
104
ok
(ch == 30840,
"Expected %i to be %i for %u\n"
,
g_Tests
[
n
].exp_1+1, (
int
)ch,
n
);
105
}
106
107
if
(
g_Tests
[
n
].
strA
&&
g_Tests
[
n
].
strW
)
108
{
109
memset
(bufW,
'x'
,
sizeof
(bufW));
110
ChTraitsCRT<wchar_t>::ConvertToBaseType
(bufW,
g_Tests
[
n
].exp_1+1,
g_Tests
[
n
].
strW
);
111
wchar_t
ch = bufW[
g_Tests
[
n
].
exp_1
];
112
ok
(ch ==
'\0'
,
"Expected %i to be \\0, was: %c (%i) for %u\n"
,
g_Tests
[
n
].exp_1, ch, (
int
)ch,
n
);
113
ok
(!
wcscmp
(bufW,
g_Tests
[
n
].
strW
),
"Expected bufW to be %s, was: %s for %u\n"
,
wine_dbgstr_w
(
g_Tests
[
n
].
strW
),
wine_dbgstr_w
(bufW),
n
);
114
ch = bufW[
g_Tests
[
n
].
exp_1
+1];
115
ok
(ch == 30840,
"Expected %i to be %i for %u\n"
,
g_Tests
[
n
].exp_1+1, (
int
)ch,
n
);
116
}
117
}
118
}
119
120
#undef ok
121
#undef _T
122
123
#define TEST_NAMEX(name) void test_##name##W()
124
#define CStringX CStringW
125
#define _X(x) L ## x
126
#define XCHAR WCHAR
127
#define YCHAR CHAR
128
#define dbgstrx(x) wine_dbgstr_w(x)
129
#define ok ok_("CStringW:\n" __FILE__, __LINE__)
130
#define GetWindowsDirectoryX GetWindowsDirectoryW
131
#define MAKEINTRESOURCEX(x) MAKEINTRESOURCEW(x)
132
#define MAKEINTRESOURCEY(x) MAKEINTRESOURCEA(x)
133
#include "CString.inl"
134
135
136
#undef CStringX
137
#undef TEST_NAMEX
138
#undef _X
139
#undef XCHAR
140
#undef YCHAR
141
#undef dbgstrx
142
#undef ok
143
#undef GetWindowsDirectoryX
144
#undef MAKEINTRESOURCEX
145
#undef MAKEINTRESOURCEY
146
147
#define TEST_NAMEX(name) void test_##name##A()
148
#define CStringX CStringA
149
#define _X(x) x
150
#define XCHAR CHAR
151
#define YCHAR WCHAR
152
#define dbgstrx(x) (const char*)x
153
#define ok ok_("CStringA:\n" __FILE__, __LINE__)
154
#define GetWindowsDirectoryX GetWindowsDirectoryA
155
#define MAKEINTRESOURCEX(x) MAKEINTRESOURCEA(x)
156
#define MAKEINTRESOURCEY(x) MAKEINTRESOURCEW(x)
157
#include "CString.inl"
158
159
160
START_TEST
(
CString
)
161
{
162
test_basetypes
();
163
164
test_operators_initW();
165
test_operators_initA();
166
167
test_compareW();
168
test_compareA();
169
170
test_findW();
171
test_findA();
172
173
test_formatW();
174
test_formatA();
175
176
test_substrW();
177
test_substrA();
178
179
test_replaceW();
180
test_replaceA();
181
182
test_trimW();
183
test_trimA();
184
185
test_envW();
186
test_envA();
187
188
test_load_strW();
189
test_load_strA();
190
191
test_bstrW();
192
test_bstrA();
193
194
test_tokenizeW();
195
test_tokenizeA();
196
}
strA
char strA[12]
Definition:
clipboard.c:2028
traits_test::strW
const wchar_t * strW
Definition:
CString.cpp:21
wine_dbgstr_w
char * wine_dbgstr_w(const wchar_t *wstr)
Definition:
atltest.h:87
str_len
#define str_len
Definition:
treelist.c:89
n
GLdouble n
Definition:
glext.h:7729
g_Tests
traits_test g_Tests[]
Definition:
CString.cpp:26
L
#define L(x)
Definition:
ntvdm.h:50
strW
WCHAR strW[12]
Definition:
clipboard.c:2029
apitest.h
traits_test::strA
const char * strA
Definition:
CString.cpp:20
traits_test
Definition:
CString.cpp:18
traits_test::exp_2
int exp_2
Definition:
CString.cpp:23
ATL::CStringT
Definition:
cstringt.h:369
resource.h
ok
#define ok
Definition:
CString.cpp:153
_countof
#define _countof(array)
Definition:
sndvol32.h:68
traits_test::str_len
int str_len
Definition:
CString.cpp:22
test_basetypes
static void test_basetypes()
Definition:
CString.cpp:41
ATL::ChTraitsCRT
Definition:
cstringt.h:25
atlstr.h
len
GLenum GLsizei len
Definition:
glext.h:6722
traits_test::exp_1
int exp_1
Definition:
CString.cpp:23
traits_test::exp_4
int exp_4
Definition:
CString.cpp:23
wcscmp
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
traits_test::exp_3
int exp_3
Definition:
CString.cpp:23
NULL
#define NULL
Definition:
types.h:112
atltest.h
strcmp
int strcmp(const char *String1, const char *String2)
Definition:
utclib.c:469
memset
#define memset(x, y, z)
Definition:
compat.h:39
START_TEST
START_TEST(CString)
Definition:
CString.cpp:160
modules
rostests
apitests
atl
CString.cpp
Generated on Fri May 27 2022 06:06:06 for ReactOS by
1.8.15