Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
TStringTest.cpp
[詳解]
1
5
6#include "pch.h"
7#include "TString.h"
8
9using namespace Microsoft::VisualStudio::CppUnitTestFramework;
10
11namespace WindowsLibraryTest
12{
13 TEST_CLASS (TStringTest)
14 {
15 public:
16 TEST_CLASS_INITIALIZE (ClassInitialize)
17 {
18 Logger::WriteMessage ("TString class initialize.\n");
19 }
20
21 TEST_CLASS_CLEANUP (ClassCleanup)
22 {
23 Logger::WriteMessage ("TString class cleanup.\n");
24 }
25
26 TEST_METHOD_INITIALIZE (MethodInitialize)
27 {
28 Logger::WriteMessage ("TString method initialize.\n");
29 }
30
31 TEST_METHOD_CLEANUP (MethodCleanup)
32 {
33 Logger::WriteMessage ("TString method cleanup.\n");
34 }
35
36 TEST_METHOD (ConstractorTest1)
37 {
38 alt::TString string1;
39 Assert::IsNull (string1.Ctr ());
40 Assert::IsNull (string1.Ptr ());
41
42 alt::TString string2 (_T ("ABCDE"));
43 Assert::AreEqual (_T ("ABCDE"), string2.Ctr ());
44 Assert::AreEqual (_T ("ABCDE"), string2.Ptr ());
45
46 alt::TString string3 (string1);
47 Assert::IsNull (string3.Ctr ());
48 Assert::IsNull (string3.Ptr ());
49
50 alt::TString string4 (string2);
51 Assert::AreEqual (_T ("ABCDE"), string4.Ctr ());
52 Assert::AreEqual (_T ("ABCDE"), string4.Ptr ());
53
54 alt::TString string5 (10 + sizeof (TCHAR));
55 lstrcpy (string5.Ptr (), _T ("1234567890"));
56 Assert::AreEqual (_T ("1234567890"), string5.Ctr ());
57 Assert::AreEqual (_T ("1234567890"), string5.Ptr ());
58 }
59
60 TEST_METHOD (ConstractorTest2)
61 {
62 alt::TString* string1 = new alt::TString ();
63 Assert::IsNull (string1->Ctr ());
64 Assert::IsNull (string1->Ptr ());
65
66 alt::TString* string2 = new alt::TString (_T ("ABCDE"));
67 Assert::AreEqual (_T ("ABCDE"), string2->Ctr ());
68 Assert::AreEqual (_T ("ABCDE"), string2->Ptr ());
69
70 alt::TString* string3 = new alt::TString (*string1);
71 Assert::IsNull (string3->Ctr ());
72 Assert::IsNull (string3->Ptr ());
73
74 alt::TString* string4 = new alt::TString (*string2);
75 Assert::AreEqual (_T ("ABCDE"), string4->Ctr ());
76 Assert::AreEqual (_T ("ABCDE"), string4->Ptr ());
77
78 alt::TString* string5 = new alt::TString (10 + sizeof (TCHAR));
79 lstrcpy (string5->Ptr (), _T ("1234567890"));
80 Assert::AreEqual (_T ("1234567890"), string5->Ctr ());
81 Assert::AreEqual (_T ("1234567890"), string5->Ptr ());
82
83 delete string1;
84 delete string2;
85 delete string3;
86 delete string4;
87 delete string5;
88 }
89
90 TEST_METHOD (SizeTest)
91 {
92 alt::TString string1 (_T ("ABCDE"));
93 Assert::AreEqual<int> (lstrlen (_T ("ABCDE")), string1.Len (), _T ("lstrlen() and Len() mismatched.\n"));
94 Assert::AreEqual<int> ((lstrlen (_T ("ABCDE")) * sizeof (TCHAR)), string1.Byte (), _T ("lstrlen() and Byte() mismatched.\n"));
95
96 alt::TString string2 (MAX_PATH);
97 Assert::AreEqual<INT> (0, string2.Len ());
98 Assert::AreEqual<INT> (0, string2.Byte ());
99
100 alt::TString string3;
101 Assert::AreEqual (0, string2.Len ());
102 Assert::AreEqual (0, string2.Byte ());
103 }
104
105 TEST_METHOD (OperatorEqualCompareTest1)
106 {
107 alt::TString string1 (_T ("ABCDE"));
108
109 {
110 alt::TString string2 (_T ("ABCDE"));
111 Assert::IsTrue (string1 == string2);
112 Assert::IsTrue (string1 == _T ("ABCDE"));
113 }
114
115 alt::TString string3 (_T ("ABCDE"));
116
117 {
118 alt::TString string4 (_T ("abcde"));
119 Assert::IsTrue (string3 != string4);
120 Assert::IsTrue (string4 != _T ("ABCDE"));
121 }
122 }
123
124 TEST_METHOD (OperatorEqualInsertTest2)
125 {
126 alt::TString string1 (_T ("ABCDE"));
127
128 {
129 alt::TString string2;
130
131 string2 = string1;
132 Assert::AreEqual (_T ("ABCDE"), string2.Ctr ());
133
134 string2 = _T ("12345");
135 Assert::AreEqual (_T ("12345"), string2.Ctr ());
136 }
137 }
138
139 TEST_METHOD (OperatorRedirectTest3)
140 {
141 alt::TString string1;
142
143 {
144 string1 << _T ("123") << _T ("ABC");
145 }
146
147 Assert::AreEqual (_T ("123ABC"), string1.Ctr ());
148
149 alt::TString string2;
150
151 {
152 alt::TString stringA (_T ("ABC"));
153 alt::TString stringB (_T ("123"));
154
155 string2 << stringA << stringB;
156 Assert::AreEqual (_T ("ABC123"), string2.Ctr ());
157 }
158
159 alt::TString string3;
160
161 {
162 string3 << 123 << 456;
163 }
164
165 Assert::AreEqual (_T ("123456"), string3.Ctr ());
166 }
167
168 TEST_METHOD (OperatorPlusTest4)
169 {
170 alt::TString string0 (_T ("123"));
171
172 {
173 alt::TString string00 = string0 + _T ("ABC");
174 Assert::AreEqual (_T ("123ABC"), string00.Ctr ());
175 }
176
177 Assert::AreEqual (_T ("123"), string0.Ctr ());
178
179 alt::TString string1;
180
181 {
182 alt::TString string11;
183 string11 = string1 + _T ("123") + _T ("ABC");
184 Assert::AreEqual (_T ("123ABC"), string11.Ctr ());
185 }
186
187 Assert::AreEqual (nullptr, string1.Ctr ());
188
189 alt::TString string2 (_T ("XYZ"));
190
191 {
192 alt::TString string22;
193 string22 = string2 + _T ("123") + _T ("ABC");
194 Assert::AreEqual (_T ("XYZ123ABC"), string22.Ctr ());
195 }
196
197 Assert::AreEqual (_T ("XYZ"), string2.Ctr ());
198
199 alt::TString stringA (_T ("ABC"));
200 alt::TString stringB (_T ("123"));
201 alt::TString string3;
202
203 {
204 alt::TString string33;
205 string33 = string3 + stringA + stringB;
206 Assert::AreEqual (_T ("ABC123"), string33.Ctr ());
207 Assert::AreEqual (_T ("ABC"), stringA.Ctr ());
208 Assert::AreEqual (_T ("123"), stringB.Ctr ());
209 }
210
211 Assert::AreEqual (nullptr, string3.Ctr ());
212
213 alt::TString string4 (_T ("XYZ"));
214
215 {
216 alt::TString string44;
217 string44 = string4 + stringA + stringB;
218 Assert::AreEqual (_T ("XYZABC123"), string44.Ctr ());
219 Assert::AreEqual (_T ("XYZ"), string4.Ctr ());
220 Assert::AreEqual (_T ("ABC"), stringA.Ctr ());
221 Assert::AreEqual (_T ("123"), stringB.Ctr ());
222 }
223 }
224
225 TEST_METHOD (OperatorPlusEqualTest5)
226 {
227 alt::TString string1;
228
229 {
230 alt::TString string2 (_T ("ABC"));
231
232 string1 += string2;
233 Assert::AreEqual (_T ("ABC"), string1.Ctr ());
234
235 {
236 alt::TString string3 (_T ("123"));
237 string3 += string2;
238 Assert::AreEqual (_T ("123ABC"), string3.Ctr ());
239 }
240
241 alt::TString string4;
242
243 {
244 string4 += _T ("ABC");
245 Assert::AreEqual (_T ("ABC"), string4.Ctr ());
246 }
247
248 alt::TString string5 (_T ("123"));
249 string5 += _T ("ABC");
250 Assert::AreEqual (_T ("123ABC"), string5.Ptr ());
251 }
252 }
253
254 TEST_METHOD (OperatorArraySelectTest)
255 {
256 alt::TString string = _T ("ABC123");
257
258 {
259 TCHAR c1 = string[1]; // B
260 TCHAR c3 = string[3]; // 1
261 Assert::IsTrue ('B' == c1);
262 Assert::IsTrue ('1' == c3);
263
264 {
265 TCHAR c5 = string[5]; // 3
266 TCHAR c7 = string[7]; // \0
267
268 Assert::IsTrue ('3' == c5);
269 Assert::IsTrue ('\0' == c7);
270 }
271 }
272 }
273
274 TEST_METHOD (OperatorMathematicalSignTest)
275 {
276 bool check;
277
278 alt::TString string1 = _T ("12345");
279
280 {
281 alt::TString string2 = _T ("12345");
282 check = string1 < string2;
283 Assert::IsFalse (check, _T("can't judge equal.\n"));
284
285 {
286 alt::TString string3 = _T ("1234");
287 check = string1 < string3;
288 Assert::IsFalse (check, _T("can't judge greater than this.\n"));
289 }
290
291 alt::TString string4 = _T ("123456");
292 check = string1 < string4;
293 Assert::IsTrue (check, _T("can't judge less than this.\n"));
294 }
295 }
296
297 TEST_METHOD (TrimLeftTest)
298 {
299 alt::TString string = _T (" 1234 5678 ");
300 string.TrimLeft ();
301 Assert::AreEqual (_T ("1234 5678 "), string.Ptr ());
302 }
303
304 TEST_METHOD (TrimRightTest)
305 {
306 alt::TString string = _T (" 1234 5678 ");
307 string.TrimRight ();
308 Assert::AreEqual (_T (" 1234 5678"), string.Ptr ());
309 }
310
311 TEST_METHOD (TrimTest1)
312 {
313 alt::TString string = _T (" 1234 5678 ");
314 string.Trim ();
315 Assert::AreEqual (_T ("1234 5678"), string.Ptr ());
316 }
317
318 TEST_METHOD (TrimTest2)
319 {
320 alt::TString string = _T (" 1234 5678 ");
321 string.TrimLeft ().TrimRight ();
322 Assert::AreEqual (_T ("1234 5678"), string.Ptr ());
323 }
324
325 TEST_METHOD (SubstringTest)
326 {
327 // 01234567890123456789012345
328 alt::TString string = _T ("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
329
330 alt::TString str1 = string.Substring (0, 3);
331 Assert::IsTrue (alt::TString (_T ("ABC")) == str1, str1.Ctr ());
332
333 alt::TString str2 = string.Substring (5, 3);
334 Assert::IsTrue (alt::TString (_T ("FGH")) == str2, str2.Ctr ());
335
336 alt::TString str3 = string.Substring (23, 3);
337 Assert::IsTrue (alt::TString (_T ("XYZ")) == str3, str3.Ctr ());
338
339 {
340 alt::TString str4 = string.Substring (24, 3);
341 Assert::IsTrue (alt::TString () == str4, str4.Ctr ());
342
343 alt::TString str5 = string.Substring (25);
344 Assert::AreEqual (_T ("Z"), str5.Ptr ());
345
346 alt::TString str6 = string.Substring (23);
347 Assert::AreEqual (_T ("XYZ"), str6.Ptr ());
348
349 alt::TString str7 = string.Substring (30);
350 Assert::AreEqual (nullptr, str7.Ptr ());
351
352 alt::TString str8 = string.Substring (0, 0);
353 Assert::AreEqual (nullptr, str8.Ctr ());
354 }
355 }
356
357 TEST_METHOD (SplitTest1)
358 {
359 alt::TString string = _T ("123/456;789,abc/def");
360 alt::skeleton::Array<alt::TString> response = string.Split (_T (",;/"));
361
362 Assert::AreEqual (_T ("123"), response[0]->Ptr ());
363 Assert::AreEqual (_T ("456"), response[1]->Ptr ());
364 Assert::AreEqual (_T ("789"), response[2]->Ptr ());
365 Assert::AreEqual (_T ("abc"), response[3]->Ptr ());
366 Assert::AreEqual (_T ("def"), response[4]->Ptr ());
367 Assert::IsTrue (response[5] == nullptr);
368 }
369
370 TEST_METHOD (FindTest1)
371 {
372 // 01234567890123456
373 alt::TString string = _T ("1234567890ABCDEFG");
374
375 int t1 = string.Find (_T ("5678"));
376 Assert::AreEqual (4, t1);
377
378 int t2 = string.Find (_T ("1"));
379 Assert::AreEqual (0, t2);
380
381 int t3 = string.Find (_T ("123"));
382 Assert::AreEqual (0, t3);
383
384 int t4 = string.Find (_T ("G"));
385 Assert::AreEqual (16, t4);
386
387 int t5 = string.Find (_T ("ABCD"));
388 Assert::AreEqual (10, t5);
389
390 int t6 = string.Find (_T ("XYZ"));
391 Assert::AreEqual (-1, t6);
392 }
393
394 TEST_METHOD (FindTest2)
395 {
396 // 01234567890123456
397 alt::TString string = _T ("ABABCBCABABCBCABC");
398
399 int t1 = string.Find (_T ("ABCD"));
400 Assert::AreEqual (-1, t1);
401
402 int t2 = string.Find (_T ("ABC"));
403 Assert::AreEqual (2, t2);
404
405 int t3 = string.Find (_T ("ABC"), 2);
406 Assert::AreEqual (2, t3);
407
408 int t4 = string.Find (_T ("ABC"), 3);
409 Assert::AreEqual (9, t4);
410
411 int t5 = string.Find (_T ("ABCD"), 7);
412 Assert::AreEqual (-1, t5);
413 }
414
415 TEST_METHOD (FindTest3)
416 {
417 // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
418 alt::TString string = _T ("壱弐参四五六七八九零甲乙丙丁戊己庚辛壬癸");
419
420 int t1 = string.Find (_T ("七八九"));
421 Assert::AreEqual (6, t1);
422
423 int t2 = string.Find (_T ("甲乙丙丁"));
424 Assert::AreEqual (10, t2);
425
426 int t3 = string.Find (_T ("零壱弐"));
427 Assert::AreEqual (-1, t3);
428 }
429
430 TEST_METHOD (FormatTest)
431 {
432 alt::TString formatString;
433 TCHAR tszBuf[1024];
434
435 for (int i = 0; i < 100; i += 3)
436 {
437 formatString.Format (_T ("FormatTest(%d)"), i);
438 wsprintf (tszBuf, _T ("FormatTest(%d)"), i);
439 Assert::AreEqual (tszBuf, formatString.Ctr ());
440 }
441 }
442
443 TEST_METHOD (ReplaceTest1a)
444 {
445 alt::TString baseString (_T ("This text is sample."));
446
447 alt::TString replaceBefore (_T ("text"));
448 alt::TString replaceAfter (_T ("contents"));
449
450 alt::TString replaced = baseString.Replace (replaceBefore, replaceAfter);
451
452 Assert::AreEqual (_T ("This contents is sample."), replaced.Ctr ());
453 }
454
455 TEST_METHOD (ReplaceTest1b)
456 {
457 alt::TString baseString (_T ("This contents is sample."));
458
459 alt::TString replaceBefore (_T ("contents"));
460 alt::TString replaceAfter (_T ("text"));
461
462 alt::TString replaced = baseString.Replace (replaceBefore, replaceAfter);
463
464 Assert::AreEqual (_T ("This text is sample."), replaced.Ctr ());
465 }
466
467 TEST_METHOD (ReplaceTest2)
468 {
469 alt::TString baseString (_T ("This text is sample."));
470
471 alt::TString replaceBefore (_T ("This"));
472 alt::TString replaceAfter (_T ("That"));
473
474 alt::TString replaced = baseString.Replace (replaceBefore, replaceAfter);
475
476 Assert::AreEqual (_T ("That text is sample."), replaced.Ctr ());
477 }
478
479 TEST_METHOD (ReplaceTest3)
480 {
481 alt::TString baseString (_T ("This text is sample.\r\n"));
482
483 alt::TString replaceBefore (_T ("\r\n"));
484 alt::TString replaceAfter (_T (""));
485
486 alt::TString replaced = baseString.Replace (replaceBefore, replaceAfter);
487
488 Assert::AreEqual (_T ("This text is sample."), replaced.Ctr ());
489 }
490
491 TEST_METHOD (ReplaceAllTest)
492 {
493 alt::TString baseString (_T ("ABC 0ABC0 1ABCD1 2ABC"));
494
495 alt::TString replaceBefore (_T ("ABC"));
496 alt::TString replaceAfter (_T ("x"));
497
498 alt::TString replaced = baseString.ReplaceAll (replaceBefore, replaceAfter);
499
500 Assert::AreEqual (_T ("x 0x0 1xD1 2x"), replaced.Ctr ());
501 }
502
503 TEST_METHOD (ConvertFromSJISTest)
504 {
505 LPCSTR lpcszSJIS = "これはSJISで作成された文字列です。\n壱弐参四五六七八九零\n";
506
507 alt::TString convert;
508 Assert::IsTrue (convert.FromMultiByte (lpcszSJIS));
509 Assert::AreEqual<INT> (31, convert.Len (), _T ("Len() mismatched.\n"));
510 Assert::AreEqual<INT> (62, convert.Byte (), _T ("Byte() mismatched.\n"));
511 Logger::WriteMessage (convert.Ctr ());
512 }
513
514 TEST_METHOD (ConvertFromUTF8Test)
515 {
516 LPCSTR lpcszSJIS = "これはUTF-8で作成された文字列です。\n壱弐参四五六七八九零\n";
517
518 alt::TString convert;
519 Assert::IsTrue (convert.FromMultiByte (lpcszSJIS, CP_UTF8));
520 Logger::WriteMessage (convert.Ctr ());
521 }
522
523 TEST_METHOD (ConvertToSJISTest)
524 {
525 LPCWSTR lpcwszUnicode = L"これはUnicodeで作成された文字列です。\n壱弐参四五六七八九零\n";
526
527 alt::TString output (lpcwszUnicode);
528 DWORD dwLen = output.Byte () + sizeof (TCHAR);
529 LPSTR lpszBuf = new CHAR[dwLen];
530 int ret = output.ToSJIS (lpszBuf, dwLen);
531 Assert::IsTrue (ret > 0);
532 Logger::WriteMessage (lpszBuf);
533 delete[] lpszBuf;
534 }
535
536 TEST_METHOD (ParseTest1)
537 {
538 int test[] { 0,1,12,123,1234,12345, 123456, 1234567, 12345678, 123456789, 1234567890 };
539 int loop = sizeof (test) / sizeof(int);
540 for (int i = 0; i < loop; i++)
541 {
542 alt::TString value;
543 value << test[i];
544 int response = value.ParseInt ();
545 Assert::AreEqual<int> (test[i], response);
546 }
547 }
548
549 TEST_METHOD (ParseTest2)
550 {
551 int test[] { -1,-12,-123,-1234,-12345, -123456, -1234567, -12345678 };
552 int loop = sizeof (test) / sizeof(int);
553 for (int i = 0; i < loop; i++)
554 {
555 alt::TString value;
556 value << test[i];
557 int response = value.ParseInt ();
558 Assert::AreEqual<int> (test[i], response);
559 }
560 }
561 };
562}
文字列に関するWindowsAPIを集約したクラス
#define loop
プリコンパイル済みヘッダー ファイルです。
文字列に関するWindowsAPIを集約したクラス
Definition: TString.h:17
TString &APIENTRY Format(LPCTSTR format,...)
フォーマットに従ってパラメータを文字列化します。
Definition: TString.cpp:333
INT APIENTRY Byte() const
内部で確保している文字列(バイト数)を取得します。
Definition: TString.cpp:44
INT APIENTRY Len() const
内部で確保している文字列数を取得します。
Definition: TString.cpp:39
TString APIENTRY Replace(TString &charsBefore, TString &charsAfter)
文字列を置換します。
Definition: TString.cpp:233
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:46
int APIENTRY ToSJIS(LPSTR lpszSJIS, DWORD dwLen)
SJIS文字列を出力します。
Definition: TString.cpp:364
TString APIENTRY ReplaceAll(TString &charsBefore, TString &charsAfter)
文字列を置換します。
Definition: TString.cpp:246
TString APIENTRY Substring(int startPos, int length=0)
文字列を切り出します。
Definition: TString.cpp:219
LPTSTR APIENTRY Ptr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:42
int APIENTRY ParseInt() const
文字列の数値化
Definition: TString.cpp:370
BOOL APIENTRY FromMultiByte(LPCSTR lpcszSJIS, UINT codePage=CP_ACP)
マルチバイト文字列を取り込みます。
Definition: TString.cpp:350
サイズ可変の配列を具現したクラス
Definition: Array.hpp:20
TEST_CLASS(ArrayTest)
Definition: ArrayTest.cpp:19