1#include "StringSearchTest.h"
2#include "cppunit/TestCaller.h"
3#include <String.h>
4#include <stdio.h>
5
6
7StringSearchTest::StringSearchTest(std::string name)
8		: BTestCase(name)
9{
10}
11
12
13StringSearchTest::~StringSearchTest()
14{
15}
16
17
18void
19StringSearchTest::PerformTest(void)
20{
21	BString *string1, *string2;
22	int32 i;
23
24	// FindFirst(BString&)
25	NextSubTest();
26	string1 = new BString("last but not least");
27	string2 = new BString("st");
28	i = string1->FindFirst(*string2);
29	CPPUNIT_ASSERT(i == 2);
30	delete string1;
31	delete string2;
32
33	NextSubTest();
34	string1 = new BString;
35	string2 = new BString("some text");
36	i = string1->FindFirst(*string2);
37	CPPUNIT_ASSERT(i == B_ERROR);
38	delete string1;
39	delete string2;
40
41	// FindFirst(char*)
42	NextSubTest();
43	string1 = new BString("last but not least");
44	i = string1->FindFirst("st");
45	CPPUNIT_ASSERT(i == 2);
46	delete string1;
47
48	NextSubTest();
49	string1 = new BString;
50	i = string1->FindFirst("some text");
51	CPPUNIT_ASSERT(i == B_ERROR);
52	delete string1;
53
54#ifndef TEST_R5
55// 	Commented, since crashes R5
56	NextSubTest();
57	string1 = new BString("string");
58	i = string1->FindFirst((char*)NULL);
59	CPPUNIT_ASSERT(i == B_BAD_VALUE);
60	delete string1;
61#endif
62
63	// FindFirst(BString&, int32)
64	NextSubTest();
65	string1 = new BString("abc abc abc");
66	string2 = new BString("abc");
67	i = string1->FindFirst(*string2, 5);
68	CPPUNIT_ASSERT(i == 8);
69	delete string1;
70	delete string2;
71
72	NextSubTest();
73	string1 = new BString("abc abc abc");
74	string2 = new BString("abc");
75	i = string1->FindFirst(*string2, 200);
76	CPPUNIT_ASSERT(i == B_ERROR);
77	delete string1;
78	delete string2;
79
80	NextSubTest();
81	string1 = new BString("abc abc abc");
82	string2 = new BString("abc");
83	i = string1->FindFirst(*string2, -10);
84	CPPUNIT_ASSERT(i == B_ERROR);
85	delete string1;
86	delete string2;
87
88	// FindFirst(const char*, int32)
89	NextSubTest();
90	string1 = new BString("abc abc abc");
91	i = string1->FindFirst("abc", 2);
92	CPPUNIT_ASSERT(i == 4);
93	delete string1;
94
95	NextSubTest();
96	string1 = new BString("abc abc abc");
97	i = string1->FindFirst("abc", 200);
98	CPPUNIT_ASSERT(i == B_ERROR);
99	delete string1;
100
101	NextSubTest();
102	string1 = new BString("abc abc abc");
103	i = string1->FindFirst("abc", -10);
104	CPPUNIT_ASSERT(i == B_ERROR);
105	delete string1;
106
107#ifndef TEST_R5
108	// Commented since crashes R5
109	NextSubTest();
110	string1 = new BString("abc abc abc");
111	i = string1->FindFirst((char*)NULL, 3);
112	CPPUNIT_ASSERT(i == B_BAD_VALUE);
113	delete string1;
114#endif
115
116	// FindFirst(char)
117	NextSubTest();
118	string1 = new BString("abcd abcd");
119	i = string1->FindFirst('c');
120	CPPUNIT_ASSERT(i == 2);
121	delete string1;
122
123	NextSubTest();
124	string1 = new BString("abcd abcd");
125	i = string1->FindFirst('e');
126	CPPUNIT_ASSERT(i == B_ERROR);
127	delete string1;
128
129	// FindFirst(char, int32)
130	NextSubTest();
131	string1 = new BString("abc abc abc");
132	i = string1->FindFirst("b", 3);
133	CPPUNIT_ASSERT(i == 5);
134	delete string1;
135
136	NextSubTest();
137	string1 = new BString("abcd abcd");
138	i = string1->FindFirst('e', 3);
139	CPPUNIT_ASSERT(i == B_ERROR);
140	delete string1;
141
142	NextSubTest();
143	string1 = new BString("abc abc abc");
144	i = string1->FindFirst("a", 9);
145	CPPUNIT_ASSERT(i == B_ERROR);
146	delete string1;
147
148#ifndef TEST_R5
149	// StartsWith(BString&)
150	NextSubTest();
151	string1 = new BString("last but not least");
152	string2 = new BString("last");
153	i = (int32)string1->StartsWith(*string2);
154	CPPUNIT_ASSERT(i != 0);
155	delete string1;
156	delete string2;
157
158	// StartsWith(const char*)
159	NextSubTest();
160	string1 = new BString("last but not least");
161	i = (int32)string1->StartsWith("last");
162	CPPUNIT_ASSERT(i != 0);
163	delete string1;
164
165	// StartsWith(const char*, int32)
166	NextSubTest();
167	string1 = new BString("last but not least");
168	i = (int32)string1->StartsWith("last", 4);
169	CPPUNIT_ASSERT(i != 0);
170	delete string1;
171#endif
172
173	// FindLast(BString&)
174	NextSubTest();
175	string1 = new BString("last but not least");
176	string2 = new BString("st");
177	i = string1->FindLast(*string2);
178	CPPUNIT_ASSERT(i == 16);
179	delete string1;
180	delete string2;
181
182	NextSubTest();
183	string1 = new BString;
184	string2 = new BString("some text");
185	i = string1->FindLast(*string2);
186	CPPUNIT_ASSERT(i == B_ERROR);
187	delete string1;
188	delete string2;
189
190	// FindLast(char*)
191	NextSubTest();
192	string1 = new BString("last but not least");
193	i = string1->FindLast("st");
194	CPPUNIT_ASSERT(i == 16);
195	delete string1;
196
197	NextSubTest();
198	string1 = new BString;
199	i = string1->FindLast("some text");
200	CPPUNIT_ASSERT(i == B_ERROR);
201	delete string1;
202
203#ifndef TEST_R5
204	// Commented since crashes R5
205	NextSubTest();
206	string1 = new BString("string");
207	i = string1->FindLast((char*)NULL);
208	CPPUNIT_ASSERT(i == B_BAD_VALUE);
209	delete string1;
210#endif
211
212	// FindLast(BString&, int32)
213	NextSubTest();
214	string1 = new BString("abcabcabc");
215	string2 = new BString("abc");
216	i = string1->FindLast(*string2, 7);
217	CPPUNIT_ASSERT(i == 3);
218	delete string1;
219	delete string2;
220
221	NextSubTest();
222	string1 = new BString("abc abc abc");
223	string2 = new BString("abc");
224	i = string1->FindLast(*string2, -10);
225	CPPUNIT_ASSERT(i == B_ERROR);
226	delete string1;
227	delete string2;
228
229	// FindLast(const char*, int32)
230	NextSubTest();
231	string1 = new BString("abc abc abc");
232	i = string1->FindLast("abc", 9);
233	CPPUNIT_ASSERT(i == 4);
234	delete string1;
235
236	NextSubTest();
237	string1 = new BString("abc abc abc");
238	i = string1->FindLast("abc", -10);
239	CPPUNIT_ASSERT(i == B_ERROR);
240	delete string1;
241
242#ifndef TEST_R5
243	// Commented since crashes r5
244	NextSubTest();
245	string1 = new BString("abc abc abc");
246	i = string1->FindLast((char*)NULL, 3);
247	CPPUNIT_ASSERT(i == B_BAD_VALUE);
248	delete string1;
249#endif
250
251	// FindLast(char)
252	NextSubTest();
253	string1 = new BString("abcd abcd");
254	i = string1->FindLast('c');
255	CPPUNIT_ASSERT(i == 7);
256	delete string1;
257
258	NextSubTest();
259	string1 = new BString("abcd abcd");
260	i = string1->FindLast('e');
261	CPPUNIT_ASSERT(i == B_ERROR);
262	delete string1;
263
264	// FindLast(char, int32)
265	NextSubTest();
266	string1 = new BString("abc abc abc");
267	i = string1->FindLast("b", 5);
268	CPPUNIT_ASSERT(i == 1);
269	delete string1;
270
271	NextSubTest();
272	string1 = new BString("abcd abcd");
273	i = string1->FindLast('e', 3);
274	CPPUNIT_ASSERT(i == B_ERROR);
275	delete string1;
276
277	NextSubTest();
278	string1 = new BString("abcd abcd");
279	i = string1->FindLast('b', 6);
280	CPPUNIT_ASSERT(i == 6);
281	delete string1;
282
283	NextSubTest();
284	string1 = new BString("abcd abcd");
285	i = string1->FindLast('b', 5);
286	CPPUNIT_ASSERT(i == 1);
287	delete string1;
288
289	NextSubTest();
290	string1 = new BString("abc abc abc");
291	i = string1->FindLast("a", 0);
292	CPPUNIT_ASSERT(i == B_ERROR);
293	delete string1;
294
295	// IFindFirst(BString&)
296	NextSubTest();
297	string1 = new BString("last but not least");
298	string2 = new BString("st");
299	i = string1->IFindFirst(*string2);
300	CPPUNIT_ASSERT(i == 2);
301	delete string1;
302	delete string2;
303
304	NextSubTest();
305	string1 = new BString("last but not least");
306	string2 = new BString("ST");
307	i = string1->IFindFirst(*string2);
308	CPPUNIT_ASSERT(i == 2);
309	delete string1;
310	delete string2;
311
312	NextSubTest();
313	string1 = new BString;
314	string2 = new BString("some text");
315	i = string1->IFindFirst(*string2);
316	CPPUNIT_ASSERT(i == B_ERROR);
317	delete string1;
318	delete string2;
319
320	NextSubTest();
321	string1 = new BString("string");
322	string2 = new BString;
323	i = string1->IFindFirst(*string2);
324	CPPUNIT_ASSERT(i == 0);
325	delete string1;
326	delete string2;
327
328	// IFindFirst(const char*)
329	NextSubTest();
330	string1 = new BString("last but not least");
331	i = string1->IFindFirst("st");
332	CPPUNIT_ASSERT(i == 2);
333	delete string1;
334
335	NextSubTest();
336	string1 = new BString("LAST BUT NOT least");
337	i = string1->IFindFirst("st");
338	CPPUNIT_ASSERT(i == 2);
339	delete string1;
340
341	NextSubTest();
342	string1 = new BString;
343	i = string1->IFindFirst("some text");
344	CPPUNIT_ASSERT(i == B_ERROR);
345	delete string1;
346
347#ifndef TEST_R5
348	// Commented, since crashes R5
349	NextSubTest();
350	string1 = new BString("string");
351	i = string1->IFindFirst((char*)NULL);
352	CPPUNIT_ASSERT(i == B_BAD_VALUE);
353	delete string1;
354#endif
355
356	// IFindFirst(BString&, int32)
357	NextSubTest();
358	string1 = new BString("abc abc abc");
359	string2 = new BString("abc");
360	i = string1->IFindFirst(*string2, 5);
361	CPPUNIT_ASSERT(i == 8);
362	delete string1;
363	delete string2;
364
365	NextSubTest();
366	string1 = new BString("abc abc abc");
367	string2 = new BString("AbC");
368	i = string1->IFindFirst(*string2, 5);
369	CPPUNIT_ASSERT(i == 8);
370	delete string1;
371	delete string2;
372
373	NextSubTest();
374	string1 = new BString("abc abc abc");
375	string2 = new BString("abc");
376	i = string1->IFindFirst(*string2, 200);
377	CPPUNIT_ASSERT(i == B_ERROR);
378	delete string1;
379	delete string2;
380
381	NextSubTest();
382	string1 = new BString("abc abc abc");
383	string2 = new BString("abc");
384	i = string1->IFindFirst(*string2, -10);
385	CPPUNIT_ASSERT(i == B_ERROR);
386	delete string1;
387	delete string2;
388
389	// IFindFirst(const char*, int32)
390	NextSubTest();
391	string1 = new BString("abc abc abc");
392	i = string1->IFindFirst("abc", 2);
393	CPPUNIT_ASSERT(i == 4);
394	delete string1;
395
396	NextSubTest();
397	string1 = new BString("AbC ABC abC");
398	i = string1->IFindFirst("abc", 2);
399	CPPUNIT_ASSERT(i == 4);
400	delete string1;
401
402	NextSubTest();
403	string1 = new BString("abc abc abc");
404	i = string1->IFindFirst("abc", 200);
405	CPPUNIT_ASSERT(i == B_ERROR);
406	delete string1;
407
408	NextSubTest();
409	string1 = new BString("abc abc abc");
410	i = string1->IFindFirst("abc", -10);
411	CPPUNIT_ASSERT(i == B_ERROR);
412	delete string1;
413
414#ifndef TEST_R5
415	// IStartsWith(BString&)
416	NextSubTest();
417	string1 = new BString("last but not least");
418	string2 = new BString("lAsT");
419	i = (int32)string1->IStartsWith(*string2);
420	CPPUNIT_ASSERT(i != 0);
421	delete string1;
422	delete string2;
423
424	// IStartsWith(const char*)
425	NextSubTest();
426	string1 = new BString("last but not least");
427	i = (int32)string1->IStartsWith("lAsT");
428	CPPUNIT_ASSERT(i != 0);
429	delete string1;
430
431	// IStartsWith(const char*, int32)
432	NextSubTest();
433	string1 = new BString("last but not least");
434	i = (int32)string1->IStartsWith("lAsT", 4);
435	CPPUNIT_ASSERT(i != 0);
436	delete string1;
437
438	// IFindLast(BString&)
439	NextSubTest();
440	string1 = new BString("last but not least");
441	string2 = new BString("st");
442	i = string1->IFindLast(*string2);
443	CPPUNIT_ASSERT(i == 16);
444	delete string1;
445	delete string2;
446
447	NextSubTest();
448	string1 = new BString("laSt but NOT leaSt");
449	string2 = new BString("sT");
450	i = string1->IFindLast(*string2);
451	CPPUNIT_ASSERT(i == 16);
452	delete string1;
453	delete string2;
454
455	// EndsWith(BString&)
456	NextSubTest();
457	string1 = new BString("last but not least");
458	string2 = new BString("st");
459	i = (int32)string1->EndsWith(*string2);
460	CPPUNIT_ASSERT(i != 0);
461	delete string1;
462	delete string2;
463
464	NextSubTest();
465	string1 = new BString("laSt but NOT leaSt");
466	string2 = new BString("sT");
467	i = (int32)string1->EndsWith(*string2);
468	CPPUNIT_ASSERT(i == 0);
469	delete string1;
470	delete string2;
471
472	// EndsWith(const char*)
473	NextSubTest();
474	string1 = new BString("last but not least");
475	i = (int32)string1->EndsWith("least");
476	CPPUNIT_ASSERT(i != 0);
477	delete string1;
478
479	NextSubTest();
480	string1 = new BString("laSt but NOT leaSt");
481	i = (int32)string1->EndsWith("least");
482	CPPUNIT_ASSERT(i == 0);
483	delete string1;
484
485	// EndsWith(const char*, int32)
486	NextSubTest();
487	string1 = new BString("last but not least");
488	i = (int32)string1->EndsWith("st", 2);
489	CPPUNIT_ASSERT(i != 0);
490	delete string1;
491
492	NextSubTest();
493	string1 = new BString("laSt but NOT leaSt");
494	i = (int32)string1->EndsWith("sT", 2);
495	CPPUNIT_ASSERT(i == 0);
496	delete string1;
497
498	// IEndsWith(BString&)
499	NextSubTest();
500	string1 = new BString("last but not least");
501	string2 = new BString("st");
502	i = (int32)string1->IEndsWith(*string2);
503	CPPUNIT_ASSERT(i != 0);
504	delete string1;
505	delete string2;
506
507	NextSubTest();
508	string1 = new BString("laSt but NOT leaSt");
509	string2 = new BString("sT");
510	i = (int32)string1->IEndsWith(*string2);
511	CPPUNIT_ASSERT(i != 0);
512	delete string1;
513	delete string2;
514
515	// IEndsWith(const char*)
516	NextSubTest();
517	string1 = new BString("last but not least");
518	i = (int32)string1->IEndsWith("st");
519	CPPUNIT_ASSERT(i != 0);
520	delete string1;
521
522	NextSubTest();
523	string1 = new BString("laSt but NOT leaSt");
524	i = (int32)string1->IEndsWith("sT");
525	CPPUNIT_ASSERT(i != 0);
526	delete string1;
527
528	// IEndsWith(const char*, int32)
529	NextSubTest();
530	string1 = new BString("last but not least");
531	i = (int32)string1->IEndsWith("st", 2);
532	CPPUNIT_ASSERT(i != 0);
533	delete string1;
534
535	NextSubTest();
536	string1 = new BString("laSt but NOT leaSt");
537	i = (int32)string1->IEndsWith("sT", 2);
538	CPPUNIT_ASSERT(i != 0);
539	delete string1;
540#endif
541
542	NextSubTest();
543	string1 = new BString;
544	string2 = new BString("some text");
545	i = string1->IFindLast(*string2);
546	CPPUNIT_ASSERT(i == B_ERROR);
547	delete string1;
548	delete string2;
549
550	// IFindLast(const char*)
551	NextSubTest();
552	string1 = new BString("last but not least");
553	i = string1->IFindLast("st");
554	CPPUNIT_ASSERT(i == 16);
555	delete string1;
556
557#ifndef TEST_R5
558	NextSubTest();
559	string1 = new BString("laSt but NOT leaSt");
560	i = string1->IFindLast("ST");
561	CPPUNIT_ASSERT(i == 16);
562	delete string1;
563#endif
564
565	NextSubTest();
566	string1 = new BString;
567	i = string1->IFindLast("some text");
568	CPPUNIT_ASSERT(i == B_ERROR);
569	delete string1;
570
571#ifndef TEST_R5
572	// Commented since crashes R5
573	NextSubTest();
574	string1 = new BString("string");
575	i = string1->IFindLast((char*)NULL);
576	CPPUNIT_ASSERT(i == B_BAD_VALUE);
577	delete string1;
578#endif
579
580	// FindLast(BString&, int32)
581	NextSubTest();
582	string1 = new BString("abcabcabc");
583	string2 = new BString("abc");
584	i = string1->IFindLast(*string2, 7);
585	CPPUNIT_ASSERT(i == 3);
586	delete string1;
587	delete string2;
588
589	NextSubTest();
590	string1 = new BString("abcabcabc");
591	string2 = new BString("AbC");
592	i = string1->IFindLast(*string2, 7);
593	CPPUNIT_ASSERT(i == 3);
594	delete string1;
595	delete string2;
596
597	NextSubTest();
598	string1 = new BString("abc abc abc");
599	string2 = new BString("abc");
600	i = string1->IFindLast(*string2, -10);
601	CPPUNIT_ASSERT(i == B_ERROR);
602	delete string1;
603	delete string2;
604
605	// IFindLast(const char*, int32)
606// #ifndef TEST_R5
607	NextSubTest();
608	string1 = new BString("abc abc abc");
609	i = string1->IFindLast("abc", 9);
610	CPPUNIT_ASSERT(i == 4);
611	delete string1;
612// #endif
613#ifndef TEST_R5
614	NextSubTest();
615	string1 = new BString("ABc abC aBC");
616	i = string1->IFindLast("aBc", 9);
617	CPPUNIT_ASSERT(i == 4);
618	delete string1;
619#endif
620	NextSubTest();
621	string1 = new BString("abc abc abc");
622	i = string1->IFindLast("abc", -10);
623	CPPUNIT_ASSERT(i == B_ERROR);
624	delete string1;
625
626	NextSubTest();
627	string1 = new BString("abc def ghi");
628	i = string1->IFindLast("abc",4);
629	CPPUNIT_ASSERT(i == 0);
630	delete string1;
631}
632
633
634CppUnit::Test *StringSearchTest::suite(void)
635{
636	typedef CppUnit::TestCaller<StringSearchTest>
637		StringSearchTestCaller;
638
639	return(new StringSearchTestCaller("BString::Search Test",
640		&StringSearchTest::PerformTest));
641}
642