1 // StringTest.cs - NUnit Test Cases for the System.String class
4 // Jeffrey Stedfast <fejj@ximian.com>
5 // David Brandt <bucky@keystreams.com>
6 // Kornel Pal <http://www.kornelpal.hu/>
8 // (C) Ximian, Inc. http://www.ximian.com
9 // Copyright (C) 2006 Kornel Pal
10 // Copyright (C) 2006 Novell (http://www.novell.com)
15 using System
.Globalization
;
16 using System
.Reflection
;
17 using System
.Threading
;
19 using NUnit
.Framework
;
21 namespace MonoTests
.System
25 public class StringTest
27 class NullFormatter
: IFormatProvider
, ICustomFormatter
29 public string Format (string format
, object arg
, IFormatProvider provider
)
34 public object GetFormat (Type formatType
)
42 public override string ToString()
48 private CultureInfo orgCulture
;
53 // save current culture
54 orgCulture
= CultureInfo
.CurrentCulture
;
58 public void TearDown ()
60 // restore original culture
61 Thread
.CurrentThread
.CurrentCulture
= orgCulture
;
65 [Test
] // ctor (Char [])
66 public unsafe void Constructor2 ()
68 Assert
.AreEqual (String
.Empty
, new String ((char[]) null), "#1");
69 Assert
.AreEqual (String
.Empty
, new String (new Char
[0]), "#2");
70 Assert
.AreEqual ("A", new String (new Char
[1] {'A'}
), "#3");
73 [Test
] // ctor (Char, Int32)
74 public void Constructor4 ()
76 Assert
.AreEqual (string.Empty
, new String ('A', 0));
77 Assert
.AreEqual (new String ('A', 3), "AAA");
80 [Test
] // ctor (Char, Int32)
81 public void Constructor4_Count_Negative ()
86 } catch (ArgumentOutOfRangeException ex
) {
87 // 'count' must be non-negative
88 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
89 Assert
.IsNull (ex
.InnerException
, "#3");
90 Assert
.IsNotNull (ex
.Message
, "#4");
91 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
95 [Test
] // ctor (Char [], Int32, Int32)
96 public void Constructor6 ()
98 char [] arr
= new char [3] { 'A', 'B', 'C' }
;
99 Assert
.AreEqual ("ABC", new String (arr
, 0, arr
.Length
), "#1");
100 Assert
.AreEqual ("BC", new String (arr
, 1, 2), "#2");
101 Assert
.AreEqual (string.Empty
, new String (arr
, 2, 0), "#3");
104 [Test
] // ctor (Char [], Int32, Int32)
105 public void Constructor6_Length_Negative ()
107 char [] arr
= new char [3] { 'A', 'B', 'C' }
;
110 new String (arr
, 0, -1);
112 } catch (ArgumentOutOfRangeException ex
) {
113 // Length cannot be less than zero
114 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
115 Assert
.IsNull (ex
.InnerException
, "#3");
116 Assert
.IsNotNull (ex
.Message
, "#4");
117 Assert
.AreEqual ("length", ex
.ParamName
, "#5");
121 [Test
] // ctor (Char [], Int32, Int32)
122 public void Constructor6_Length_Overflow ()
124 char [] arr
= new char [3] { 'A', 'B', 'C' }
;
127 new String (arr
, 1, 3);
129 } catch (ArgumentOutOfRangeException ex
) {
130 // Index was out of range. Must be non-negative and
131 // less than the size of the collection
132 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
133 Assert
.IsNull (ex
.InnerException
, "#3");
134 Assert
.IsNotNull (ex
.Message
, "#4");
135 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
139 [Test
] // ctor (Char [], Int32, Int32)
140 public void Constructor6_StartIndex_Negative ()
142 char [] arr
= new char [3] { 'A', 'B', 'C' }
;
145 new String (arr
, -1, 0);
147 } catch (ArgumentOutOfRangeException ex
) {
148 // StartIndex cannot be less than zero
149 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
150 Assert
.IsNull (ex
.InnerException
, "#3");
151 Assert
.IsNotNull (ex
.Message
, "#4");
152 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
156 [Test
] // ctor (Char [], Int32, Int32)
157 public void Constructor6_Value_Null ()
160 new String ((char []) null, 0, 0);
162 } catch (ArgumentNullException ex
) {
163 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
164 Assert
.IsNull (ex
.InnerException
, "#3");
165 Assert
.IsNotNull (ex
.Message
, "#4");
166 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
171 public unsafe void CharPtrConstructor ()
173 Assert
.AreEqual (String
.Empty
, new String ((char*) null), "char*");
174 Assert
.AreEqual (String
.Empty
, new String ((char*) null, 0, 0), "char*,int,int");
178 public unsafe void TestSbytePtrConstructorASCII ()
180 Encoding encoding
= Encoding
.ASCII
;
181 String s
= "ASCII*\0";
182 byte[] bytes
= encoding
.GetBytes (s
);
184 fixed (byte* bytePtr
= bytes
)
185 Assert
.AreEqual (s
, new String ((sbyte*) bytePtr
, 0, bytes
.Length
, encoding
));
189 public unsafe void TestSbytePtrConstructorDefault ()
191 Encoding encoding
= Encoding
.Default
;
192 byte [] bytes
= new byte [256];
194 for (int i
= 0; i
< 255; i
++)
195 bytes
[i
] = (byte) (i
+ 1);
196 bytes
[255] = (byte) 0;
198 // Ensure that bytes are valid for Encoding.Default
199 bytes
= encoding
.GetBytes (encoding
.GetChars (bytes
));
200 String s
= encoding
.GetString(bytes
);
202 // Ensure null terminated array
203 bytes
[bytes
.Length
- 1] = (byte) 0;
205 fixed (byte* bytePtr
= bytes
)
207 Assert
.AreEqual (s
.Substring (0, s
.Length
- 1), new String ((sbyte*) bytePtr
));
208 Assert
.AreEqual (s
, new String ((sbyte*) bytePtr
, 0, bytes
.Length
));
209 Assert
.AreEqual (s
, new String ((sbyte*) bytePtr
, 0, bytes
.Length
, null));
210 Assert
.AreEqual (s
, new String ((sbyte*) bytePtr
, 0, bytes
.Length
, encoding
));
214 [Test
] // ctor (SByte*)
215 public unsafe void Constructor3_Value_Null ()
217 Assert
.AreEqual (String
.Empty
, new String ((sbyte*) null));
220 [Test
] // ctor (SByte*)
221 [Ignore ("invalid test")]
222 public unsafe void Constructor3_Value_Invalid ()
225 new String ((sbyte*) (-1));
227 } catch (ArgumentOutOfRangeException ex
) {
228 // Pointer startIndex and length do not refer to a
230 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
231 Assert
.IsNull (ex
.InnerException
, "#3");
232 Assert
.IsNotNull (ex
.Message
, "#4");
233 Assert
.AreEqual ("ptr", ex
.ParamName
, "#5");
237 [Test
] // ctor (SByte*, Int32, Int32)
238 public unsafe void Constructor7_Length_Negative ()
241 new String ((sbyte*) null, 0, -1);
243 } catch (ArgumentOutOfRangeException ex
) {
244 // Length cannot be less than zero
245 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
246 Assert
.IsNull (ex
.InnerException
, "#3");
247 Assert
.IsNotNull (ex
.Message
, "#4");
248 Assert
.AreEqual ("length", ex
.ParamName
, "#5");
252 [Test
] // ctor (SByte*, Int32, Int32)
253 public unsafe void Constructor7_StartIndex_Negative ()
256 new String ((sbyte*) null, -1, 0);
258 } catch (ArgumentOutOfRangeException ex
) {
259 // StartIndex cannot be less than zero
260 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
261 Assert
.IsNull (ex
.InnerException
, "#3");
262 Assert
.IsNotNull (ex
.Message
, "#4");
263 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
268 public unsafe void Constructor7_StartIndex_Overflow ()
271 new String ((sbyte*) (-1), 1, 0);
273 } catch (ArgumentOutOfRangeException ex
) {
274 // Pointer startIndex and length do not refer to a
276 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
277 Assert
.IsNull (ex
.InnerException
, "#A3");
278 Assert
.IsNotNull (ex
.Message
, "#A4");
279 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
283 new String ((sbyte*) (-1), 1, 1);
285 } catch (ArgumentOutOfRangeException ex
) {
286 // Pointer startIndex and length do not refer to a
288 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
289 Assert
.IsNull (ex
.InnerException
, "#B3");
290 Assert
.IsNotNull (ex
.Message
, "#B4");
291 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
295 [Test
] // ctor (SByte*, Int32, Int32)
296 [Ignore ("invalid test")]
297 public unsafe void Constructor7_Value_Invalid ()
300 new String ((sbyte*) (-1), 0, 1);
302 } catch (ArgumentOutOfRangeException ex
) {
303 // Pointer startIndex and length do not refer to a
305 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
306 Assert
.IsNull (ex
.InnerException
, "#3");
307 Assert
.IsNotNull (ex
.Message
, "#4");
308 Assert
.AreEqual ("ptr", ex
.ParamName
, "#5");
312 [Test
] // ctor (SByte*, Int32, Int32)
313 public unsafe void Constructor7_Value_Null ()
316 new String ((sbyte*) null, 0, 0);
318 } catch (ArgumentNullException ex
) {
319 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
320 Assert
.IsNull (ex
.InnerException
, "#A3");
321 Assert
.IsNotNull (ex
.Message
, "#A4");
322 Assert
.AreEqual ("value", ex
.ParamName
, "#A5");
326 new String ((sbyte*) null, 0, 1);
328 } catch (ArgumentNullException ex
) {
329 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#B2");
330 Assert
.IsNull (ex
.InnerException
, "#B3");
331 Assert
.IsNotNull (ex
.Message
, "#B4");
332 Assert
.AreEqual ("value", ex
.ParamName
, "#B5");
336 new String ((sbyte*) null, 1, 0);
338 } catch (ArgumentNullException ex
) {
339 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#C2");
340 Assert
.IsNull (ex
.InnerException
, "#C3");
341 Assert
.IsNotNull (ex
.Message
, "#C4");
342 Assert
.AreEqual ("value", ex
.ParamName
, "#C5");
346 [Test
] // ctor (SByte*, Int32, Int32, Encoding)
347 public unsafe void Constructor8_Length_Negative ()
350 new String ((sbyte*) null, 0, -1, null);
352 } catch (ArgumentOutOfRangeException ex
) {
353 // Length cannot be less than zero
354 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
355 Assert
.IsNull (ex
.InnerException
, "#A3");
356 Assert
.IsNotNull (ex
.Message
, "#A4");
357 Assert
.AreEqual ("length", ex
.ParamName
, "#A5");
361 new String ((sbyte*) null, 0, -1, Encoding
.Default
);
363 } catch (ArgumentOutOfRangeException ex
) {
364 // Non-negative number required
365 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
366 Assert
.IsNull (ex
.InnerException
, "#B3");
367 Assert
.IsNotNull (ex
.Message
, "#B4");
368 Assert
.AreEqual ("length", ex
.ParamName
, "#B5");
372 [Test
] // ctor (SByte*, Int32, Int32, Encoding)
373 public unsafe void Constructor8_StartIndex_Negative ()
376 new String ((sbyte*) null, -1, 0, null);
378 } catch (ArgumentOutOfRangeException ex
) {
379 // StartIndex cannot be less than zero
380 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
381 Assert
.IsNull (ex
.InnerException
, "#A3");
382 Assert
.IsNotNull (ex
.Message
, "#A4");
383 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
387 new String ((sbyte*) null, -1, 0, Encoding
.Default
);
389 } catch (ArgumentOutOfRangeException ex
) {
390 // StartIndex cannot be less than zero
391 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
392 Assert
.IsNull (ex
.InnerException
, "#B3");
393 Assert
.IsNotNull (ex
.Message
, "#B4");
394 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
399 public unsafe void Constructor8_StartIndex_Overflow ()
402 new String ((sbyte*) (-1), 1, 0, null);
404 } catch (ArgumentOutOfRangeException ex
) {
405 // Pointer startIndex and length do not refer to a
407 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
408 Assert
.IsNull (ex
.InnerException
, "#A3");
409 Assert
.IsNotNull (ex
.Message
, "#A4");
410 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
414 new String ((sbyte*) (-1), 1, 1, null);
416 } catch (ArgumentOutOfRangeException ex
) {
417 // Pointer startIndex and length do not refer to a
419 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
420 Assert
.IsNull (ex
.InnerException
, "#B3");
421 Assert
.IsNotNull (ex
.Message
, "#B4");
422 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
426 new String ((sbyte*) (-1), 1, 0, Encoding
.Default
);
428 } catch (ArgumentOutOfRangeException ex
) {
429 // Pointer startIndex and length do not refer to a
431 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
432 Assert
.IsNull (ex
.InnerException
, "#C3");
433 Assert
.IsNotNull (ex
.Message
, "#C4");
434 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#C5");
438 new String ((sbyte*) (-1), 1, 1, Encoding
.Default
);
440 } catch (ArgumentOutOfRangeException ex
) {
441 // Pointer startIndex and length do not refer to a
443 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#D2");
444 Assert
.IsNull (ex
.InnerException
, "#D3");
445 Assert
.IsNotNull (ex
.Message
, "#D4");
446 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#D5");
450 [Test
] // ctor (SByte*, Int32, Int32, Encoding)
451 [Ignore ("invalid test")]
452 public unsafe void Constructor8_Value_Invalid ()
455 new String ((sbyte*) (-1), 0, 1, null);
457 } catch (ArgumentOutOfRangeException ex
) {
458 // Pointer startIndex and length do not refer to a
460 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
461 Assert
.IsNull (ex
.InnerException
, "#3");
462 Assert
.IsNotNull (ex
.Message
, "#4");
463 Assert
.AreEqual ("ptr", ex
.ParamName
, "#5");
468 [Ignore ("Runtime throws NullReferenceException instead of AccessViolationException")]
469 [ExpectedException (typeof (AccessViolationException
))]
470 public unsafe void Constructor8_Value_Invalid2 ()
472 new String ((sbyte*) (-1), 0, 1, Encoding
.Default
);
475 [Test
] // ctor (SByte*, Int32, Int32, Encoding)
476 public unsafe void Constructor8_Value_Null ()
479 new String ((sbyte*) null, 0, 0, null);
481 } catch (ArgumentNullException ex
) {
482 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
483 Assert
.IsNull (ex
.InnerException
, "#A3");
484 Assert
.IsNotNull (ex
.Message
, "#A4");
485 Assert
.AreEqual ("value", ex
.ParamName
, "#A5");
489 new String ((sbyte*) null, 0, 1, null);
491 } catch (ArgumentNullException ex
) {
492 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#B2");
493 Assert
.IsNull (ex
.InnerException
, "#B3");
494 Assert
.IsNotNull (ex
.Message
, "#B4");
495 Assert
.AreEqual ("value", ex
.ParamName
, "#B5");
499 new String ((sbyte*) null, 1, 0, null);
501 } catch (ArgumentNullException ex
) {
502 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#C2");
503 Assert
.IsNull (ex
.InnerException
, "#C3");
504 Assert
.IsNotNull (ex
.Message
, "#C4");
505 Assert
.AreEqual ("value", ex
.ParamName
, "#C5");
508 Assert
.AreEqual (String
.Empty
, new String ((sbyte*) null, 0, 0, Encoding
.Default
), "#D");
511 new String ((sbyte*) null, 0, 1, Encoding
.Default
);
513 } catch (ArgumentOutOfRangeException ex
) {
514 // Pointer startIndex and length do not refer to a
516 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#E2");
517 Assert
.IsNull (ex
.InnerException
, "#E3");
518 Assert
.IsNotNull (ex
.Message
, "#E4");
519 //Assert.AreEqual ("value", ex.ParamName, "#E5");
522 Assert
.AreEqual (String
.Empty
, new String ((sbyte*) null, 1, 0, Encoding
.Default
), "#F");
525 public void Length ()
527 string str
= "test string";
529 Assert
.AreEqual (11, str
.Length
, "wrong length");
535 string s1
= "oRiGiNal";
536 Assert
.AreEqual (s1
, s1
.Clone (), "#A1");
537 Assert
.AreSame (s1
, s1
.Clone (), "#A2");
539 string s2
= new DateTime (2000, 6, 3).ToString ();
540 Assert
.AreEqual (s2
, s2
.Clone (), "#B1");
541 Assert
.AreSame (s2
, s2
.Clone (), "#B2");
544 [Test
] // bug #316666
545 public void CompareNotWorking ()
547 Assert
.AreEqual (String
.Compare ("A", "a"), 1, "A03");
548 Assert
.AreEqual (String
.Compare ("a", "A"), -1, "A04");
552 public void CompareNotWorking2 ()
554 string needle
= "ab";
555 string haystack
= "abbcbacab";
556 Assert
.AreEqual (0, String
.Compare(needle
, 0, haystack
, 0, 2, false), "basic substring check #9");
557 for (int i
= 1; i
<= (haystack
.Length
- needle
.Length
); i
++) {
559 Assert
.AreEqual (-1, String
.Compare(needle
, 0, haystack
, i
, 2, false), "loop substring check #8/" + i
);
565 public void Compare ()
567 string lesser
= "abc";
568 string medium
= "abcd";
569 string greater
= "xyz";
572 Assert
.AreEqual (0, String
.Compare (null, null));
573 Assert
.AreEqual (1, String
.Compare (lesser
, null));
575 Assert
.IsTrue (String
.Compare (lesser
, greater
) < 0);
576 Assert
.IsTrue (String
.Compare (greater
, lesser
) > 0);
577 Assert
.IsTrue (String
.Compare (lesser
, lesser
) == 0);
578 Assert
.IsTrue (String
.Compare (lesser
, medium
) < 0);
580 Assert
.IsTrue (String
.Compare (lesser
, caps
, true) == 0);
581 Assert
.IsTrue (String
.Compare (lesser
, caps
, false) != 0);
582 Assert
.AreEqual (String
.Compare ("a", "b"), -1, "A01");
583 Assert
.AreEqual (String
.Compare ("b", "a"), 1, "A02");
586 // TODO - test with CultureInfo
588 string needle
= "ab";
589 string haystack
= "abbcbacab";
590 Assert
.AreEqual (0, String
.Compare(needle
, 0, haystack
, 0, 2), "basic substring check #1");
591 Assert
.AreEqual (-1, String
.Compare(needle
, 0, haystack
, 0, 3), "basic substring check #2");
592 Assert
.AreEqual (0, String
.Compare("ab", 0, "ab", 0, 2), "basic substring check #3");
593 Assert
.AreEqual (0, String
.Compare("ab", 0, "ab", 0, 3), "basic substring check #4");
594 Assert
.AreEqual (0, String
.Compare("abc", 0, "ab", 0, 2), "basic substring check #5");
595 Assert
.AreEqual (1, String
.Compare("abc", 0, "ab", 0, 5), "basic substring check #6");
596 Assert
.AreEqual (-1, String
.Compare("ab", 0, "abc", 0, 5), "basic substring check #7");
598 for (int i
= 1; i
<= (haystack
.Length
- needle
.Length
); i
++) {
600 Assert
.IsTrue (String
.Compare(needle
, 0, haystack
, i
, 2) != 0, "loop substring check #1/" + i
);
601 Assert
.IsTrue (String
.Compare(needle
, 0, haystack
, i
, 3) != 0, "loop substring check #2/" + i
);
603 Assert
.AreEqual (0, String
.Compare(needle
, 0, haystack
, i
, 2), "loop substring check #3/" + i
);
604 Assert
.AreEqual (0, String
.Compare(needle
, 0, haystack
, i
, 3), "loop substring check #4/" + i
);
609 Assert
.AreEqual (0, String
.Compare(needle
, 0, haystack
, 0, 2, true), "basic substring check #8");
610 for (int i
= 1; i
<= (haystack
.Length
- needle
.Length
); i
++) {
612 Assert
.IsTrue (String
.Compare(needle
, 0, haystack
, i
, 2, true) != 0, "loop substring check #5/" + i
);
613 Assert
.IsTrue (String
.Compare(needle
, 0, haystack
, i
, 2, false) != 0, "loop substring check #6/" + i
);
615 Assert
.AreEqual (0, String
.Compare(needle
, 0, haystack
, i
, 2, true), "loop substring check #7/" + i
);
619 Assert
.AreEqual (0, String
.Compare (needle
, 0, haystack
, 0, 0), "Compare with 0 length");
621 // TODO - extended format call with CultureInfo
625 public void CompareOrdinal ()
627 string lesser
= "abc";
628 string medium
= "abcd";
629 string greater
= "xyz";
631 Assert
.AreEqual (0, String
.CompareOrdinal (null, null));
632 Assert
.AreEqual (1, String
.CompareOrdinal (lesser
, null));
634 Assert
.IsTrue (String
.CompareOrdinal (lesser
, greater
) < 0, "#1");
635 Assert
.IsTrue (String
.CompareOrdinal (greater
, lesser
) > 0, "#2");
636 Assert
.IsTrue (String
.CompareOrdinal (lesser
, lesser
) == 0, "#3");
637 Assert
.IsTrue (String
.CompareOrdinal (lesser
, medium
) < 0, "#4");
639 string needle
= "ab";
640 string haystack
= "abbcbacab";
641 Assert
.AreEqual (0, String
.CompareOrdinal(needle
, 0, haystack
, 0, 2), "basic substring check");
642 Assert
.AreEqual (-1, String
.CompareOrdinal(needle
, 0, haystack
, 0, 3), "basic substring miss");
643 for (int i
= 1; i
<= (haystack
.Length
- needle
.Length
); i
++) {
645 Assert
.IsTrue (String
.CompareOrdinal(needle
, 0, haystack
, i
, 2) != 0, "loop substring check " + i
);
646 Assert
.IsTrue (String
.CompareOrdinal(needle
, 0, haystack
, i
, 3) != 0, "loop substring check " + i
);
648 Assert
.AreEqual (0, String
.CompareOrdinal(needle
, 0, haystack
, i
, 2), "loop substring check " + i
);
649 Assert
.AreEqual (0, String
.CompareOrdinal(needle
, 0, haystack
, i
, 3), "loop substring check " + i
);
655 public void CompareOrdinalWithOffset ()
658 string ab2
= "a" + new string ('b', 1);
660 Assert
.IsTrue (string.CompareOrdinal (ab1
, 0, ab1
, 1, 1) < 0, "#1");
661 Assert
.IsTrue (string.CompareOrdinal (ab2
, 0, ab1
, 1, 1) < 0, "#2");
665 public void CompareOrdinalSubstringWithNull ()
667 string lesser
= "abc";
668 string greater
= "xyz";
670 Assert
.AreEqual (0, string.CompareOrdinal (null, 0, null, 0, 0), "substring both null");
671 Assert
.AreEqual (-1, string.CompareOrdinal (null, 0, greater
, 0, 0), "substring strA null");
672 Assert
.AreEqual (-1, string.CompareOrdinal (null, 4, greater
, 0, 0), "substring strA null; indexA greater than strA.Length");
673 Assert
.AreEqual (-1, string.CompareOrdinal (null, 0, greater
, 4, 0), "substring strA null; indexB greater than strB.Length");
674 Assert
.AreEqual (-1, string.CompareOrdinal (null, -1, greater
, -1, -1), "substring strA null; indexA, indexB, length negative");
675 Assert
.AreEqual (1, string.CompareOrdinal (lesser
, 0, null, 0, 0), "substring strB null");
676 Assert
.AreEqual (1, string.CompareOrdinal (lesser
, 4, null, 0, 0), "substring strB null; indexA greater than strA.Length");
677 Assert
.AreEqual (1, string.CompareOrdinal (lesser
, 0, null, 4, 0), "substring strB null; indexB greater than strB.Length");
678 Assert
.AreEqual (1, string.CompareOrdinal (lesser
, -1, null, -1, -1), "substring strB null; indexA, indexB, length negative");
682 public void CompareTo ()
684 string lower
= "abc";
685 string greater
= "xyz";
686 string lesser
= "abc";
688 Assert
.IsTrue (lower
.CompareTo (greater
) < 0);
689 Assert
.IsTrue (lower
.CompareTo (lower
) == 0);
690 Assert
.IsTrue (greater
.CompareTo (lesser
) > 0);
695 public override string ToString ()
702 public void Concat ()
704 string string1
= "string1";
705 string string2
= "string2";
706 string concat
= "string1string2";
708 Assert
.IsTrue (String
.Concat (string1
, string2
) == concat
);
710 Assert
.AreEqual (string1
, String
.Concat (string1
, null));
711 Assert
.AreEqual (string1
, String
.Concat (null, string1
));
712 Assert
.AreEqual (string.Empty
, String
.Concat (null, null));
714 WeirdToString wts
= new WeirdToString ();
715 Assert
.AreEqual (string1
, String
.Concat (string1
, wts
));
716 Assert
.AreEqual (string1
, String
.Concat (wts
, string1
));
717 Assert
.AreEqual (string.Empty
, String
.Concat (wts
, wts
));
718 string [] allstr
= new string []{ string1, null, string2, concat }
;
719 object [] allobj
= new object []{ string1, null, string2, concat }
;
720 string astr
= String
.Concat (allstr
);
721 Assert
.AreEqual ("string1string2string1string2", astr
);
722 string ostr
= String
.Concat (allobj
);
723 Assert
.AreEqual (astr
, ostr
);
729 string s1
= "original";
730 string s2
= String
.Copy(s1
);
731 Assert
.AreEqual (s1
, s2
, "#1");
732 Assert
.IsTrue (!object.ReferenceEquals (s1
, s2
), "#2");
736 public void Copy_Str_Null ()
739 String
.Copy ((string) null);
741 } catch (ArgumentNullException ex
) {
742 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
743 Assert
.IsNull (ex
.InnerException
, "#3");
744 Assert
.IsNotNull (ex
.Message
, "#4");
745 Assert
.AreEqual ("str", ex
.ParamName
, "#5");
750 public void CopyTo ()
752 string s1
= "original";
753 char[] c1
= new char[s1
.Length
];
754 string s2
= new String(c1
);
755 Assert
.IsTrue (!s1
.Equals(s2
), "#1");
756 for (int i
= 0; i
< s1
.Length
; i
++) {
757 s1
.CopyTo(i
, c1
, i
, 1);
760 Assert
.AreEqual (s1
, s2
, "#2");
764 public void CopyTo_Count_Negative ()
766 char [] dest
= new char [4];
768 "Mono".CopyTo (0, dest
, 0, -1);
770 } catch (ArgumentOutOfRangeException ex
) {
771 // Count cannot be less than zero
772 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
773 Assert
.IsNull (ex
.InnerException
, "#3");
774 Assert
.IsNotNull (ex
.Message
, "#4");
775 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
780 public void CopyTo_Count_Overflow ()
782 char [] dest
= new char [4];
784 "Mono".CopyTo (0, dest
, 0, Int32
.MaxValue
);
786 } catch (ArgumentOutOfRangeException ex
) {
787 // Index and count must refer to a location within the
789 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
790 Assert
.IsNull (ex
.InnerException
, "#3");
791 Assert
.IsNotNull (ex
.Message
, "#4");
792 Assert
.AreEqual ("sourceIndex", ex
.ParamName
, "#5");
797 public void CopyTo_Destination_Null ()
799 string s
= "original";
802 s
.CopyTo (0, (char []) null, 0, s
.Length
);
804 } catch (ArgumentNullException ex
) {
805 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
806 Assert
.IsNull (ex
.InnerException
, "#3");
807 Assert
.IsNotNull (ex
.Message
, "#4");
808 Assert
.AreEqual ("destination", ex
.ParamName
, "#5");
813 public void CopyTo_DestinationIndex_Negative ()
815 char [] dest
= new char [4];
817 "Mono".CopyTo (0, dest
, -1, 4);
819 } catch (ArgumentOutOfRangeException ex
) {
820 // Index and count must refer to a location within the
822 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
823 Assert
.IsNull (ex
.InnerException
, "#3");
824 Assert
.IsNotNull (ex
.Message
, "#4");
825 Assert
.AreEqual ("destinationIndex", ex
.ParamName
, "#5");
830 public void CopyTo_DestinationIndex_Overflow ()
832 char [] dest
= new char [4];
834 "Mono".CopyTo (0, dest
, Int32
.MaxValue
, 4);
836 } catch (ArgumentOutOfRangeException ex
) {
837 // Index and count must refer to a location within the
839 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
840 Assert
.IsNull (ex
.InnerException
, "#3");
841 Assert
.IsNotNull (ex
.Message
, "#4");
842 Assert
.AreEqual ("destinationIndex", ex
.ParamName
, "#5");
847 public void CopyTo_SourceIndex_Negative ()
849 char [] dest
= new char [4];
851 "Mono".CopyTo (-1, dest
, 0, 4);
853 } catch (ArgumentOutOfRangeException ex
) {
854 // Index was out of range. Must be non-negative and
855 // less than the size of the collection
856 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
857 Assert
.IsNull (ex
.InnerException
, "#3");
858 Assert
.IsNotNull (ex
.Message
, "#4");
859 Assert
.AreEqual ("sourceIndex", ex
.ParamName
, "#5");
864 public void CopyTo_SourceIndex_Overflow ()
866 char[] dest
= new char [4];
868 "Mono".CopyTo (Int32
.MaxValue
, dest
, 0, 4);
870 } catch (ArgumentOutOfRangeException ex
) {
871 // Index and count must refer to a location within the
873 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
874 Assert
.IsNull (ex
.InnerException
, "#3");
875 Assert
.IsNotNull (ex
.Message
, "#4");
876 Assert
.AreEqual ("sourceIndex", ex
.ParamName
, "#5");
880 [Test
] // EndsWith (String)
881 public void EndsWith1 ()
885 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
888 Assert
.IsTrue (s
.EndsWith ("bC"), "#A1");
889 Assert
.IsTrue (!s
.EndsWith ("bc"), "#A1");
890 Assert
.IsTrue (!s
.EndsWith ("dc"), "#A2");
891 Assert
.IsTrue (!s
.EndsWith ("LAbC"), "#A3");
892 Assert
.IsTrue (s
.EndsWith (string.Empty
), "#A4");
893 Assert
.IsTrue (!s
.EndsWith ("Ab"), "#A5");
894 Assert
.IsTrue (!s
.EndsWith ("Abc"), "#A6");
895 Assert
.IsTrue (s
.EndsWith ("AbC"), "#A7");
899 Assert
.IsTrue (s
.EndsWith ("ai"), "#B1");
900 Assert
.IsTrue (!s
.EndsWith ("AI"), "#B2");
901 Assert
.IsTrue (!s
.EndsWith ("LTai"), "#B3");
902 Assert
.IsTrue (s
.EndsWith (string.Empty
), "#B4");
903 Assert
.IsTrue (!s
.EndsWith ("Ta"), "#B5");
904 Assert
.IsTrue (!s
.EndsWith ("tai"), "#B6");
905 Assert
.IsTrue (s
.EndsWith ("Tai"), "#B7");
907 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
909 Assert
.IsTrue (s
.EndsWith ("ai"), "#C1");
910 Assert
.IsTrue (!s
.EndsWith ("AI"), "#C2");
911 Assert
.IsTrue (!s
.EndsWith ("LTai"), "#C3");
912 Assert
.IsTrue (s
.EndsWith (string.Empty
), "#C4");
913 Assert
.IsTrue (!s
.EndsWith ("Ta"), "#C5");
914 Assert
.IsTrue (!s
.EndsWith ("tai"), "#C6");
915 Assert
.IsTrue (s
.EndsWith ("Tai"), "#C7");
918 [Test
] // EndsWith (String)
919 public void EndsWith1_Value_Null ()
922 "ABC".EndsWith ((string) null);
924 } catch (ArgumentNullException ex
) {
925 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
926 Assert
.IsNull (ex
.InnerException
, "#3");
927 Assert
.IsNotNull (ex
.Message
, "#4");
928 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
932 [Test
] // EndsWith (String, StringComparison)
933 public void EndsWith2_ComparisonType_Invalid ()
936 "ABC".EndsWith ("C", (StringComparison
) 80);
938 } catch (ArgumentException ex
) {
939 // The string comparison type passed in is currently
941 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
942 Assert
.IsNull (ex
.InnerException
, "#3");
943 Assert
.IsNotNull (ex
.Message
, "#4");
944 Assert
.AreEqual ("comparisonType", ex
.ParamName
, "#5");
948 [Test
] // EndsWith (String, StringComparison)
949 public void EndsWith2_Value_Null ()
952 "ABC".EndsWith ((string) null, StringComparison
.CurrentCulture
);
954 } catch (ArgumentNullException ex
) {
955 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
956 Assert
.IsNull (ex
.InnerException
, "#3");
957 Assert
.IsNotNull (ex
.Message
, "#4");
958 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
962 [Test
] // EndsWith (String, Boolean, CultureInfo)
963 public void EndsWith3 ()
969 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
974 Assert
.IsTrue (!s
.EndsWith ("bc", ignorecase
, culture
), "#A1");
975 Assert
.IsTrue (!s
.EndsWith ("dc", ignorecase
, culture
), "#A2");
976 Assert
.IsTrue (!s
.EndsWith ("LAbC", ignorecase
, culture
), "#A3");
977 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#A4");
978 Assert
.IsTrue (!s
.EndsWith ("Ab", ignorecase
, culture
), "#A5");
979 Assert
.IsTrue (!s
.EndsWith ("Abc", ignorecase
, culture
), "#A6");
980 Assert
.IsTrue (s
.EndsWith ("AbC", ignorecase
, culture
), "#A7");
983 Assert
.IsTrue (s
.EndsWith ("bc", ignorecase
, culture
), "#B1");
984 Assert
.IsTrue (!s
.EndsWith ("dc", ignorecase
, culture
), "#B2");
985 Assert
.IsTrue (!s
.EndsWith ("LAbC", ignorecase
, culture
), "#B3");
986 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#B4");
987 Assert
.IsTrue (!s
.EndsWith ("Ab", ignorecase
, culture
), "#B5");
988 Assert
.IsTrue (s
.EndsWith ("Abc", ignorecase
, culture
), "#B6");
989 Assert
.IsTrue (s
.EndsWith ("AbC", ignorecase
, culture
), "#B7");
995 Assert
.IsTrue (s
.EndsWith ("ai", ignorecase
, culture
), "#C1");
996 Assert
.IsTrue (!s
.EndsWith ("AI", ignorecase
, culture
), "#C2");
997 Assert
.IsTrue (!s
.EndsWith ("LTai", ignorecase
, culture
), "#C3");
998 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#C4");
999 Assert
.IsTrue (!s
.EndsWith ("Ta", ignorecase
, culture
), "#C5");
1000 Assert
.IsTrue (!s
.EndsWith ("tai", ignorecase
, culture
), "#C6");
1001 Assert
.IsTrue (s
.EndsWith ("Tai", ignorecase
, culture
), "#C7");
1004 Assert
.IsTrue (s
.EndsWith ("ai", ignorecase
, culture
), "#D1");
1005 Assert
.IsTrue (!s
.EndsWith ("AI", ignorecase
, culture
), "#D2");
1006 Assert
.IsTrue (!s
.EndsWith ("LTai", ignorecase
, culture
), "#D3");
1007 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#D4");
1008 Assert
.IsTrue (!s
.EndsWith ("Ta", ignorecase
, culture
), "#D5");
1009 Assert
.IsTrue (s
.EndsWith ("tai", ignorecase
, culture
), "#D6");
1010 Assert
.IsTrue (s
.EndsWith ("Tai", ignorecase
, culture
), "#D7");
1013 culture
= new CultureInfo ("en-US");
1016 Assert
.IsTrue (s
.EndsWith ("ai", ignorecase
, culture
), "#E1");
1017 Assert
.IsTrue (!s
.EndsWith ("AI", ignorecase
, culture
), "#E2");
1018 Assert
.IsTrue (!s
.EndsWith ("LTai", ignorecase
, culture
), "#E3");
1019 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#E4");
1020 Assert
.IsTrue (!s
.EndsWith ("Ta", ignorecase
, culture
), "#E5");
1021 Assert
.IsTrue (!s
.EndsWith ("tai", ignorecase
, culture
), "#E6");
1022 Assert
.IsTrue (s
.EndsWith ("Tai", ignorecase
, culture
), "#E7");
1025 Assert
.IsTrue (s
.EndsWith ("ai", ignorecase
, culture
), "#F1");
1026 Assert
.IsTrue (s
.EndsWith ("AI", ignorecase
, culture
), "#F2");
1027 Assert
.IsTrue (!s
.EndsWith ("LTai", ignorecase
, culture
), "#F3");
1028 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#F4");
1029 Assert
.IsTrue (!s
.EndsWith ("Ta", ignorecase
, culture
), "#F5");
1030 Assert
.IsTrue (s
.EndsWith ("tai", ignorecase
, culture
), "#F6");
1031 Assert
.IsTrue (s
.EndsWith ("Tai", ignorecase
, culture
), "#F7");
1033 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
1037 Assert
.IsTrue (s
.EndsWith ("ai", ignorecase
, culture
), "#G1");
1038 Assert
.IsTrue (!s
.EndsWith ("AI", ignorecase
, culture
), "#G2");
1039 Assert
.IsTrue (!s
.EndsWith ("LTai", ignorecase
, culture
), "#G3");
1040 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#G4");
1041 Assert
.IsTrue (!s
.EndsWith ("Ta", ignorecase
, culture
), "#G5");
1042 Assert
.IsTrue (!s
.EndsWith ("tai", ignorecase
, culture
), "#G6");
1043 Assert
.IsTrue (s
.EndsWith ("Tai", ignorecase
, culture
), "#G7");
1046 Assert
.IsTrue (s
.EndsWith ("ai", ignorecase
, culture
), "#H1");
1047 Assert
.IsTrue (s
.EndsWith ("AI", ignorecase
, culture
), "#H2");
1048 Assert
.IsTrue (!s
.EndsWith ("LTai", ignorecase
, culture
), "#H3");
1049 Assert
.IsTrue (s
.EndsWith (string.Empty
, ignorecase
, culture
), "#H4");
1050 Assert
.IsTrue (!s
.EndsWith ("Ta", ignorecase
, culture
), "#H5");
1051 Assert
.IsTrue (s
.EndsWith ("tai", ignorecase
, culture
), "#H6");
1052 Assert
.IsTrue (s
.EndsWith ("Tai", ignorecase
, culture
), "#H7");
1055 [Test
] // EndsWith (String, Boolean, CultureInfo)
1056 public void EndsWith3_Value_Null ()
1059 "ABC".EndsWith ((string) null, true, null);
1061 } catch (ArgumentNullException ex
) {
1062 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1063 Assert
.IsNull (ex
.InnerException
, "#3");
1064 Assert
.IsNotNull (ex
.Message
, "#4");
1065 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
1070 public void TestEquals ()
1072 string s1
= "original";
1073 string yes
= "original";
1076 string s1s1
= s1
+ s1
;
1078 Assert
.IsTrue (!s1
.Equals (null), "No match for null");
1079 Assert
.IsTrue (s1
.Equals (y
), "Should match object");
1080 Assert
.IsTrue (s1
.Equals (yes
), "Should match");
1081 Assert
.IsTrue (!s1
.Equals (no
), "Shouldn't match");
1083 Assert
.IsTrue (String
.Equals (null, null), "Static nulls should match");
1084 Assert
.IsTrue (String
.Equals (s1
, yes
), "Should match");
1085 Assert
.IsTrue (!String
.Equals (s1
, no
), "Shouldn't match");
1087 Assert
.AreEqual (false, s1s1
.Equals (y
), "Equals (object)");
1091 public void TestFormat ()
1093 Assert
.AreEqual (string.Empty
, String
.Format (string.Empty
, 0), "Empty format string.");
1094 Assert
.AreEqual ("100", String
.Format ("{0}", 100), "Single argument.");
1095 Assert
.AreEqual ("X 37X", String
.Format ("X{0,5}X", 37), "Single argument, right justified.");
1096 Assert
.AreEqual ("X37 X", String
.Format ("X{0,-5}X", 37), "Single argument, left justified.");
1097 Assert
.AreEqual (" 7d", String
.Format ("{0, 4:x}", 125), "Whitespace in specifier");
1098 Assert
.AreEqual ("The 3 wise men.", String
.Format ("The {0} wise {1}.", 3, "men"), "Two arguments.");
1099 Assert
.AreEqual ("do re me fa so.", String
.Format ("{0} re {1} fa {2}.", "do", "me", "so"), "Three arguments.");
1100 Assert
.AreEqual ("###00c0ffee#", String
.Format ("###{0:x8}#", 0xc0ffee), "Formatted argument.");
1101 Assert
.AreEqual ("# 033#", String
.Format ("#{0,5:x3}#", 0x33), "Formatted argument, right justified.");
1102 Assert
.AreEqual ("#033 #", String
.Format ("#{0,-5:x3}#", 0x33), "Formatted argument, left justified.");
1103 Assert
.AreEqual ("typedef struct _MonoObject { ... } MonoObject;", String
.Format ("typedef struct _{0} {{ ... }} MonoObject;", "MonoObject"), "Escaped bracket");
1104 Assert
.AreEqual ("Could not find file \"a/b\"", String
.Format ("Could not find file \"{0}\"", "a/b"), "With Slash");
1105 Assert
.AreEqual ("Could not find file \"a\\b\"", String
.Format ("Could not find file \"{0}\"", "a\\b"), "With BackSlash");
1108 [Test
] // Format (String, Object)
1109 public void Format1_Format_Null ()
1112 String
.Format (null, 1);
1114 } catch (ArgumentNullException ex
) {
1115 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1116 Assert
.IsNull (ex
.InnerException
, "#3");
1117 Assert
.IsNotNull (ex
.Message
, "#4");
1118 Assert
.AreEqual ("format", ex
.ParamName
, "#5");
1122 [Test
] // Format (String, Object [])
1123 public void Format2_Format_Null ()
1126 String
.Format (null, new object [] { 2 }
);
1128 } catch (ArgumentNullException ex
) {
1129 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1130 Assert
.IsNull (ex
.InnerException
, "#3");
1131 Assert
.IsNotNull (ex
.Message
, "#4");
1132 Assert
.AreEqual ("format", ex
.ParamName
, "#5");
1136 [Test
] // Format (String, Object [])
1137 public void Format2_Args_Null ()
1140 String
.Format ("text", (object []) null);
1142 } catch (ArgumentNullException ex
) {
1143 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1144 Assert
.IsNull (ex
.InnerException
, "#3");
1145 Assert
.IsNotNull (ex
.Message
, "#4");
1146 Assert
.AreEqual ("args", ex
.ParamName
, "#5");
1150 [Test
] // Format (IFormatProvider, String, Object [])
1151 public void Format3_Format_Null ()
1154 String
.Format (CultureInfo
.InvariantCulture
, null,
1155 new object [] { 3 }
);
1157 } catch (ArgumentNullException ex
) {
1158 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1159 Assert
.IsNull (ex
.InnerException
, "#3");
1160 Assert
.IsNotNull (ex
.Message
, "#4");
1161 Assert
.AreEqual ("format", ex
.ParamName
, "#5");
1165 [Test
] // Format (IFormatProvider, String, Object [])
1166 public void Format3_Args_Null ()
1169 String
.Format (CultureInfo
.InvariantCulture
, "text",
1172 } catch (ArgumentNullException ex
) {
1173 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1174 Assert
.IsNull (ex
.InnerException
, "#3");
1175 Assert
.IsNotNull (ex
.Message
, "#4");
1176 Assert
.AreEqual ("args", ex
.ParamName
, "#5");
1180 [Test
] // Format (String, Object, Object)
1181 public void Format4_Format_Null ()
1184 String
.Format (null, 4, 5);
1186 } catch (ArgumentNullException ex
) {
1187 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1188 Assert
.IsNull (ex
.InnerException
, "#3");
1189 Assert
.IsNotNull (ex
.Message
, "#4");
1190 Assert
.AreEqual ("format", ex
.ParamName
, "#5");
1194 [Test
] // Format (String, Object, Object, Object)
1195 public void Format5_Format_Null ()
1198 String
.Format (null, 4, 5, 6);
1200 } catch (ArgumentNullException ex
) {
1201 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1202 Assert
.IsNull (ex
.InnerException
, "#3");
1203 Assert
.IsNotNull (ex
.Message
, "#4");
1204 Assert
.AreEqual ("format", ex
.ParamName
, "#5");
1209 public void Format ()
1211 var s
= String
.Format (new NullFormatter (), "{0:}", "test");
1212 Assert
.AreEqual ("test", s
);
1216 public void Format_Arg_ToNullStringer ()
1218 var s
= String
.Format ("{0}", new ToNullStringer ());
1219 Assert
.AreEqual ("", s
);
1223 public void TestGetEnumerator ()
1225 string s1
= "original";
1226 char[] c1
= new char[s1
.Length
];
1227 string s2
= new String(c1
);
1228 Assert
.IsTrue (!s1
.Equals(s2
), "pre-enumerated string should not match");
1229 CharEnumerator en
= s1
.GetEnumerator();
1230 Assert
.IsNotNull (en
, "null enumerator");
1232 for (int i
= 0; i
< s1
.Length
; i
++) {
1236 s2
= new String(c1
);
1237 Assert
.AreEqual (s1
, s2
, "enumerated string should match");
1241 public void TestGetHashCode ()
1243 string s1
= "original";
1244 // TODO - weak test, currently. Just verifies determinicity.
1245 Assert
.AreEqual (s1
.GetHashCode(), s1
.GetHashCode(), "same string, same hash code");
1249 public void TestGetType ()
1251 string s1
= "original";
1252 Assert
.AreEqual ("System.String", s1
.GetType().ToString(), "String type");
1256 public void TestGetTypeCode ()
1258 string s1
= "original";
1259 Assert
.IsTrue (s1
.GetTypeCode().Equals(TypeCode
.String
));
1263 public void IndexOf ()
1265 string s1
= "original";
1268 s1
.IndexOf ('q', s1
.Length
+ 1);
1269 Assert
.Fail ("#A1");
1270 } catch (ArgumentOutOfRangeException ex
) {
1271 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
1272 Assert
.IsNull (ex
.InnerException
, "#A3");
1273 Assert
.IsNotNull (ex
.Message
, "#A4");
1274 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
1278 s1
.IndexOf ('q', s1
.Length
+ 1, 1);
1279 Assert
.Fail ("#B1");
1280 } catch (ArgumentOutOfRangeException ex
) {
1281 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
1282 Assert
.IsNull (ex
.InnerException
, "#B3");
1283 Assert
.IsNotNull (ex
.Message
, "#B4");
1284 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
1288 s1
.IndexOf ("huh", s1
.Length
+ 1);
1289 Assert
.Fail ("#C1");
1290 } catch (ArgumentOutOfRangeException ex
) {
1291 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
1292 Assert
.IsNull (ex
.InnerException
, "#C3");
1293 Assert
.IsNotNull (ex
.Message
, "#C4");
1294 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#C5");
1297 Assert
.AreEqual (1, s1
.IndexOf('r'), "basic char index");
1298 Assert
.AreEqual (2, s1
.IndexOf('i'), "basic char index 2");
1299 Assert
.AreEqual (-1, s1
.IndexOf('q'), "basic char index - no");
1301 Assert
.AreEqual (1, s1
.IndexOf("rig"), "basic string index");
1302 Assert
.AreEqual (2, s1
.IndexOf("i"), "basic string index 2");
1303 Assert
.AreEqual (0, string.Empty
.IndexOf(string.Empty
), "basic string index 3");
1304 Assert
.AreEqual (0, "ABC".IndexOf(string.Empty
), "basic string index 4");
1305 Assert
.AreEqual (-1, s1
.IndexOf("rag"), "basic string index - no");
1307 Assert
.AreEqual (1, s1
.IndexOf('r', 1), "stepped char index");
1308 Assert
.AreEqual (2, s1
.IndexOf('i', 1), "stepped char index 2");
1309 Assert
.AreEqual (4, s1
.IndexOf('i', 3), "stepped char index 3");
1310 Assert
.AreEqual (-1, s1
.IndexOf('i', 5), "stepped char index 4");
1311 Assert
.AreEqual (-1, s1
.IndexOf('l', s1
.Length
), "stepped char index 5");
1313 Assert
.AreEqual (1, s1
.IndexOf('r', 1, 1), "stepped limited char index");
1314 Assert
.AreEqual (-1, s1
.IndexOf('r', 0, 1), "stepped limited char index");
1315 Assert
.AreEqual (2, s1
.IndexOf('i', 1, 3), "stepped limited char index");
1316 Assert
.AreEqual (4, s1
.IndexOf('i', 3, 3), "stepped limited char index");
1317 Assert
.AreEqual (-1, s1
.IndexOf('i', 5, 3), "stepped limited char index");
1319 s1
= "original original";
1320 Assert
.AreEqual (0, s1
.IndexOf("original", 0), "stepped string index 1");
1321 Assert
.AreEqual (9, s1
.IndexOf("original", 1), "stepped string index 2");
1322 Assert
.AreEqual (-1, s1
.IndexOf("original", 10), "stepped string index 3");
1323 Assert
.AreEqual (3, s1
.IndexOf(string.Empty
, 3), "stepped string index 4");
1324 Assert
.AreEqual (1, s1
.IndexOf("rig", 0, 5), "stepped limited string index 1");
1325 Assert
.AreEqual (-1, s1
.IndexOf("rig", 0, 3), "stepped limited string index 2");
1326 Assert
.AreEqual (10, s1
.IndexOf("rig", 2, 15), "stepped limited string index 3");
1327 Assert
.AreEqual (-1, s1
.IndexOf("rig", 2, 3), "stepped limited string index 4");
1328 Assert
.AreEqual (2, s1
.IndexOf(string.Empty
, 2, 3), "stepped limited string index 5");
1330 string s2
= "QBitArray::bitarr_data";
1331 Assert
.AreEqual (9, s2
.IndexOf ("::"), "bug #62160");
1334 [Test
] // IndexOf (String)
1335 public void IndexOf2_Value_Null ()
1338 "Mono".IndexOf ((string) null);
1340 } catch (ArgumentNullException ex
) {
1341 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1342 Assert
.IsNull (ex
.InnerException
, "#3");
1343 Assert
.IsNotNull (ex
.Message
, "#4");
1344 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
1348 [Test
] // IndexOf (Char, Int32)
1349 public void IndexOf3 ()
1351 string s
= "testing123456";
1353 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
1355 Assert
.AreEqual (-1, s
.IndexOf ('a', s
.Length
), "#A1");
1356 Assert
.AreEqual (-1, s
.IndexOf ('6', s
.Length
), "#A2");
1357 Assert
.AreEqual (-1, s
.IndexOf ('t', s
.Length
), "#A3");
1358 Assert
.AreEqual (-1, s
.IndexOf ('T', s
.Length
), "#A4");
1359 Assert
.AreEqual (-1, s
.IndexOf ('i', s
.Length
), "#A5");
1360 Assert
.AreEqual (-1, s
.IndexOf ('I', s
.Length
), "#A6");
1361 Assert
.AreEqual (-1, s
.IndexOf ('q', s
.Length
), "#A7");
1362 Assert
.AreEqual (-1, s
.IndexOf ('3', s
.Length
), "#A8");
1364 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
1366 Assert
.AreEqual (-1, s
.IndexOf ('a', s
.Length
), "#B1");
1367 Assert
.AreEqual (-1, s
.IndexOf ('6', s
.Length
), "#B2");
1368 Assert
.AreEqual (-1, s
.IndexOf ('t', s
.Length
), "#B3");
1369 Assert
.AreEqual (-1, s
.IndexOf ('T', s
.Length
), "#B4");
1370 Assert
.AreEqual (-1, s
.IndexOf ('i', s
.Length
), "#B5");
1371 Assert
.AreEqual (-1, s
.IndexOf ('I', s
.Length
), "#B6");
1372 Assert
.AreEqual (-1, s
.IndexOf ('q', s
.Length
), "#B7");
1373 Assert
.AreEqual (-1, s
.IndexOf ('3', s
.Length
), "#B8");
1376 [Test
] // IndexOf (String, Int32)
1377 public void IndexOf4 ()
1379 string s
= "testing123456";
1381 Assert
.AreEqual (-1, s
.IndexOf ("IN", 3), "#1");
1382 Assert
.AreEqual (4, s
.IndexOf ("in", 3), "#2");
1383 Assert
.AreEqual (-1, s
.IndexOf ("in", 5), "#3");
1384 Assert
.AreEqual (7, s
.IndexOf ("1", 5), "#4");
1385 Assert
.AreEqual (12, s
.IndexOf ("6", 12), "#5");
1386 Assert
.AreEqual (0, s
.IndexOf ("testing123456", 0), "#6");
1387 Assert
.AreEqual (-1, s
.IndexOf ("testing123456", 1), "#7");
1388 Assert
.AreEqual (5, s
.IndexOf (string.Empty
, 5), "#8");
1389 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, 0), "#9");
1392 [Test
] // IndexOf (String, Int32)
1393 public void IndexOf4_Value_Null ()
1396 "Mono".IndexOf ((string) null, 1);
1398 } catch (ArgumentNullException ex
) {
1399 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1400 Assert
.IsNull (ex
.InnerException
, "#3");
1401 Assert
.IsNotNull (ex
.Message
, "#4");
1402 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
1406 [Test
] // IndexOf (String, StringComparison)
1407 public void IndexOf5 ()
1409 string s
= "testing123456";
1410 StringComparison comparison_type
;
1412 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
1414 comparison_type
= StringComparison
.CurrentCulture
;
1415 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#A1");
1416 Assert
.AreEqual (-1, s
.IndexOf ("NG", comparison_type
), "#A2");
1417 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#A3");
1418 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#A4");
1419 Assert
.AreEqual (-1, s
.IndexOf ("T", comparison_type
), "#A5");
1420 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#A6");
1421 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#A7");
1422 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#A8");
1423 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#A9");
1425 comparison_type
= StringComparison
.CurrentCultureIgnoreCase
;
1426 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#B1");
1427 Assert
.AreEqual (5, s
.IndexOf ("NG", comparison_type
), "#B2");
1428 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#B3");
1429 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#B4");
1430 Assert
.AreEqual (0, s
.IndexOf ("T", comparison_type
), "#B5");
1431 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#B6");
1432 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#B7");
1433 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#B8");
1434 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#B9");
1436 comparison_type
= StringComparison
.InvariantCulture
;
1437 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#C1");
1438 Assert
.AreEqual (-1, s
.IndexOf ("NG", comparison_type
), "#C2");
1439 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#C3");
1440 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#C4");
1441 Assert
.AreEqual (-1, s
.IndexOf ("T", comparison_type
), "#C5");
1442 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#C6");
1443 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#C7");
1444 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#C8");
1445 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#C9");
1447 comparison_type
= StringComparison
.InvariantCultureIgnoreCase
;
1448 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#D1");
1449 Assert
.AreEqual (5, s
.IndexOf ("NG", comparison_type
), "#D2");
1450 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#D3");
1451 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#D4");
1452 Assert
.AreEqual (0, s
.IndexOf ("T", comparison_type
), "#D5");
1453 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#D6");
1454 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#D7");
1455 Assert
.AreEqual (3, s
.IndexOf ("TIN", comparison_type
), "#D8");
1456 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#D9");
1458 comparison_type
= StringComparison
.Ordinal
;
1459 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#E1");
1460 Assert
.AreEqual (-1, s
.IndexOf ("NG", comparison_type
), "#E2");
1461 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#E3");
1462 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#E4");
1463 Assert
.AreEqual (-1, s
.IndexOf ("T", comparison_type
), "#E5");
1464 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#E6");
1465 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#E7");
1466 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#E8");
1467 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#E9");
1469 comparison_type
= StringComparison
.OrdinalIgnoreCase
;
1470 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#F1");
1471 Assert
.AreEqual (5, s
.IndexOf ("NG", comparison_type
), "#F2");
1472 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#F3");
1473 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#F4");
1474 Assert
.AreEqual (0, s
.IndexOf ("T", comparison_type
), "#F5");
1475 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#F6");
1476 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#F7");
1477 Assert
.AreEqual (3, s
.IndexOf ("TIN", comparison_type
), "#F8");
1478 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#F9");
1480 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
1482 comparison_type
= StringComparison
.CurrentCulture
;
1483 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#G1");
1484 Assert
.AreEqual (-1, s
.IndexOf ("NG", comparison_type
), "#G2");
1485 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#G3");
1486 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#G4");
1487 Assert
.AreEqual (-1, s
.IndexOf ("T", comparison_type
), "#G5");
1488 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#G6");
1489 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#G7");
1490 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#G8");
1491 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#G9");
1493 comparison_type
= StringComparison
.CurrentCultureIgnoreCase
;
1494 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#H1");
1495 Assert
.AreEqual (5, s
.IndexOf ("NG", comparison_type
), "#H2");
1496 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#H3");
1497 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#H4");
1498 Assert
.AreEqual (0, s
.IndexOf ("T", comparison_type
), "#H5");
1499 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#H6");
1500 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#H7");
1501 Assert
.AreEqual (3, s
.IndexOf ("TIN", comparison_type
), "#H8");
1502 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#H9");
1504 comparison_type
= StringComparison
.InvariantCulture
;
1505 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#I1");
1506 Assert
.AreEqual (-1, s
.IndexOf ("NG", comparison_type
), "#I2");
1507 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#I3");
1508 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#I4");
1509 Assert
.AreEqual (-1, s
.IndexOf ("T", comparison_type
), "#I5");
1510 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#I6");
1511 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#I7");
1512 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#I8");
1513 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#I9");
1515 comparison_type
= StringComparison
.InvariantCultureIgnoreCase
;
1516 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#J1");
1517 Assert
.AreEqual (5, s
.IndexOf ("NG", comparison_type
), "#J2");
1518 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#J3");
1519 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#J4");
1520 Assert
.AreEqual (0, s
.IndexOf ("T", comparison_type
), "#J5");
1521 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#J6");
1522 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#J7");
1523 Assert
.AreEqual (3, s
.IndexOf ("TIN", comparison_type
), "#J8");
1524 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#J9");
1526 comparison_type
= StringComparison
.Ordinal
;
1527 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#K1");
1528 Assert
.AreEqual (-1, s
.IndexOf ("NG", comparison_type
), "#K2");
1529 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#K3");
1530 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#K4");
1531 Assert
.AreEqual (-1, s
.IndexOf ("T", comparison_type
), "#K5");
1532 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#K6");
1533 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#K7");
1534 Assert
.AreEqual (-1, s
.IndexOf ("TIN", comparison_type
), "#K8");
1535 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#K9");
1537 comparison_type
= StringComparison
.OrdinalIgnoreCase
;
1538 Assert
.AreEqual (7, s
.IndexOf ("123", comparison_type
), "#L1");
1539 Assert
.AreEqual (5, s
.IndexOf ("NG", comparison_type
), "#L2");
1540 Assert
.AreEqual (-1, s
.IndexOf ("nga", comparison_type
), "#L3");
1541 Assert
.AreEqual (0, s
.IndexOf ("t", comparison_type
), "#L4");
1542 Assert
.AreEqual (0, s
.IndexOf ("T", comparison_type
), "#L5");
1543 Assert
.AreEqual (12, s
.IndexOf ("6", comparison_type
), "#L6");
1544 Assert
.AreEqual (3, s
.IndexOf ("tin", comparison_type
), "#L7");
1545 Assert
.AreEqual (3, s
.IndexOf ("TIN", comparison_type
), "#L8");
1546 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, comparison_type
), "#L9");
1548 Assert
.AreEqual (0, string.Empty
.IndexOf (string.Empty
, comparison_type
), "#M");
1551 [Test
] // IndexOf (String, StringComparison)
1552 public void IndexOf5_ComparisonType_Invalid ()
1555 "Mono".IndexOf (string.Empty
, (StringComparison
) Int32
.MinValue
);
1557 } catch (ArgumentException ex
) {
1558 // The string comparison type passed in is currently
1560 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
1561 Assert
.IsNull (ex
.InnerException
, "#3");
1562 Assert
.IsNotNull (ex
.Message
, "#4");
1563 Assert
.AreEqual ("comparisonType", ex
.ParamName
, "#5");
1567 [Test
] // IndexOf (String, StringComparison)
1568 public void IndexOf5_Value_Null ()
1571 "Mono".IndexOf ((string) null, StringComparison
.Ordinal
);
1573 } catch (ArgumentNullException ex
) {
1574 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1575 Assert
.IsNull (ex
.InnerException
, "#3");
1576 Assert
.IsNotNull (ex
.Message
, "#4");
1577 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
1582 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1583 public void IndexOfStringComparisonOrdinalRangeException1 ()
1585 "Mono".IndexOf ("no", 5, StringComparison
.Ordinal
);
1589 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1590 public void IndexOfStringComparisonOrdinalRangeException2 ()
1592 "Mono".IndexOf ("no", 1, 5, StringComparison
.Ordinal
);
1596 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1597 public void IndexOfStringComparisonOrdinalIgnoreCaseRangeException1 ()
1599 "Mono".IndexOf ("no", 5, StringComparison
.OrdinalIgnoreCase
);
1603 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
1604 public void IndexOfStringComparisonOrdinalIgnoreCaseRangeException2 ()
1606 "Mono".IndexOf ("no", 1, 5, StringComparison
.OrdinalIgnoreCase
);
1610 public void IndexOfStringComparisonCurrentCulture_Empty ()
1612 Assert
.AreEqual (1, "Mono".IndexOf ("", 1, StringComparison
.CurrentCultureIgnoreCase
));
1616 public void IndexOfStringComparison ()
1618 string text
= "testing123456";
1619 string text2
= "123";
1620 string text3
= "NG";
1622 Assert
.AreEqual (7, text
.IndexOf (text2
, StringComparison
.Ordinal
), "#1-1");
1623 Assert
.AreEqual (5, text
.IndexOf (text3
, StringComparison
.OrdinalIgnoreCase
), "#2-1");
1625 Assert
.AreEqual (7, text
.IndexOf (text2
, 0, StringComparison
.Ordinal
), "#1-2");
1626 Assert
.AreEqual (5, text
.IndexOf (text3
, 0, StringComparison
.OrdinalIgnoreCase
), "#2-2");
1628 Assert
.AreEqual (7, text
.IndexOf (text2
, 1, StringComparison
.Ordinal
), "#1-3");
1629 Assert
.AreEqual (5, text
.IndexOf (text3
, 1, StringComparison
.OrdinalIgnoreCase
), "#2-3");
1631 Assert
.AreEqual (7, text
.IndexOf (text2
, 6, StringComparison
.Ordinal
), "#1-4");
1632 Assert
.AreEqual (-1, text
.IndexOf (text3
, 6, StringComparison
.OrdinalIgnoreCase
), "#2-4");
1634 Assert
.AreEqual (7, text
.IndexOf (text2
, 7, 3, StringComparison
.Ordinal
), "#1-5");
1635 Assert
.AreEqual (-1, text
.IndexOf (text3
, 7, 3, StringComparison
.OrdinalIgnoreCase
), "#2-5");
1637 Assert
.AreEqual (-1, text
.IndexOf (text2
, 6, 0, StringComparison
.Ordinal
), "#1-6");
1638 Assert
.AreEqual (-1, text
.IndexOf (text3
, 5, 0, StringComparison
.OrdinalIgnoreCase
), "#2-6");
1640 Assert
.AreEqual (-1, text
.IndexOf (text2
, 7, 1, StringComparison
.Ordinal
), "#1-7");
1641 Assert
.AreEqual (-1, text
.IndexOf (text3
, 5, 1, StringComparison
.OrdinalIgnoreCase
), "#2-7");
1643 Assert
.AreEqual (0, text
.IndexOf (text4
, 0, StringComparison
.Ordinal
), "#3-1");
1644 Assert
.AreEqual (0, text
.IndexOf (text4
, 0, StringComparison
.OrdinalIgnoreCase
), "#3-2");
1646 Assert
.AreEqual (-1, text
.IndexOf (text4
, 13, StringComparison
.Ordinal
), "#4-1");
1647 Assert
.AreEqual (-1, text
.IndexOf (text4
, 13, StringComparison
.OrdinalIgnoreCase
), "#4-2");
1649 Assert
.AreEqual (-1, text
.IndexOf (text4
, 13, 0, StringComparison
.Ordinal
), "#4-1");
1650 Assert
.AreEqual (-1, text
.IndexOf (text4
, 13, 0, StringComparison
.OrdinalIgnoreCase
), "#4-2");
1652 Assert
.AreEqual (12, text
.IndexOf ("6", 12, 1, StringComparison
.Ordinal
), "#5-1");
1653 Assert
.AreEqual (12, text
.IndexOf ("6", 12, 1, StringComparison
.OrdinalIgnoreCase
), "#5-2");
1657 public void IndexOfStringComparisonOrdinal ()
1659 string text
= "testing123456";
1660 Assert
.AreEqual (10, text
.IndexOf ("456", StringComparison
.Ordinal
), "#1");
1661 Assert
.AreEqual (-1, text
.IndexOf ("4567", StringComparison
.Ordinal
), "#2");
1662 Assert
.AreEqual (0, text
.IndexOf ("te", StringComparison
.Ordinal
), "#3");
1663 Assert
.AreEqual (2, text
.IndexOf ("s", StringComparison
.Ordinal
), "#4");
1664 Assert
.AreEqual (-1, text
.IndexOf ("ates", StringComparison
.Ordinal
), "#5");
1665 Assert
.AreEqual (-1, text
.IndexOf ("S", StringComparison
.Ordinal
), "#6");
1669 public void IndexOfStringComparisonOrdinalIgnoreCase ()
1671 string text
= "testing123456";
1672 Assert
.AreEqual (10, text
.IndexOf ("456", StringComparison
.OrdinalIgnoreCase
), "#1");
1673 Assert
.AreEqual (-1, text
.IndexOf ("4567", StringComparison
.OrdinalIgnoreCase
), "#2");
1674 Assert
.AreEqual (0, text
.IndexOf ("te", StringComparison
.OrdinalIgnoreCase
), "#3");
1675 Assert
.AreEqual (2, text
.IndexOf ("s", StringComparison
.OrdinalIgnoreCase
), "#4");
1676 Assert
.AreEqual (-1, text
.IndexOf ("ates", StringComparison
.OrdinalIgnoreCase
), "#5");
1677 Assert
.AreEqual (2, text
.IndexOf ("S", StringComparison
.OrdinalIgnoreCase
), "#6");
1681 public void IndexOfOrdinalCountSmallerThanValueString ()
1683 Assert
.AreEqual (-1, "Test".IndexOf ("ST", 2, 1, StringComparison
.Ordinal
), "#1");
1684 Assert
.AreEqual (-1, "Test".IndexOf ("ST", 2, 1, StringComparison
.OrdinalIgnoreCase
), "#2");
1685 Assert
.AreEqual (-1, "Test".LastIndexOf ("ST", 2, 1, StringComparison
.Ordinal
), "#3");
1686 Assert
.AreEqual (-1, "Test".LastIndexOf ("ST", 2, 1, StringComparison
.OrdinalIgnoreCase
), "#4");
1689 [Test
] // IndexOf (Char, Int32, Int32)
1690 public void IndexOf6_Count_Negative ()
1693 "Mono".IndexOf ('o', 1, -1);
1695 } catch (ArgumentOutOfRangeException ex
) {
1696 // Count must be positive and count must refer to a
1697 // location within the string/array/collection
1698 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1699 Assert
.IsNull (ex
.InnerException
, "#3");
1700 Assert
.IsNotNull (ex
.Message
, "#4");
1701 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
1705 [Test
] // IndexOf (Char, Int32, Int32)
1706 public void IndexOf6_Count_Overflow ()
1709 "Mono".IndexOf ('o', 1, Int32
.MaxValue
);
1711 } catch (ArgumentOutOfRangeException ex
) {
1712 // Count must be positive and count must refer to a
1713 // location within the string/array/collection
1714 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1715 Assert
.IsNull (ex
.InnerException
, "#3");
1716 Assert
.IsNotNull (ex
.Message
, "#4");
1717 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
1721 [Test
] // IndexOf (Char, Int32, Int32)
1722 public void IndexOf6_StartIndex_Negative ()
1725 "Mono".IndexOf ('o', -1, 1);
1727 } catch (ArgumentOutOfRangeException ex
) {
1728 // Index was out of range. Must be non-negative and
1729 // less than the size of the collection
1730 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1731 Assert
.IsNull (ex
.InnerException
, "#3");
1732 Assert
.IsNotNull (ex
.Message
, "#4");
1733 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
1737 [Test
] // IndexOf (Char, Int32, Int32)
1738 public void IndexOf6_StartIndex_Overflow ()
1740 string s
= "testing123456";
1743 s
.IndexOf ('o', s
.Length
+ 1, 1);
1745 } catch (ArgumentOutOfRangeException ex
) {
1746 // Index was out of range. Must be non-negative and
1747 // less than the size of the collection
1748 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1749 Assert
.IsNull (ex
.InnerException
, "#3");
1750 Assert
.IsNotNull (ex
.Message
, "#4");
1751 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
1755 [Test
] // IndexOf (String, Int32, Int32)
1756 public void IndexOf7 ()
1758 string s
= "testing123456test";
1760 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
1762 Assert
.AreEqual (-1, s
.IndexOf ("123", 4, 5), "#A1");
1763 Assert
.AreEqual (7, s
.IndexOf ("123", 4, 6), "#A2");
1764 Assert
.AreEqual (-1, s
.IndexOf ("123", 5, 4), "#A3");
1765 Assert
.AreEqual (7, s
.IndexOf ("123", 5, 5), "#A4");
1766 Assert
.AreEqual (7, s
.IndexOf ("123", 0, s
.Length
), "#A5");
1767 Assert
.AreEqual (-1, s
.IndexOf ("123", s
.Length
, 0), "#A6");
1769 Assert
.AreEqual (-1, s
.IndexOf ("tin", 2, 3), "#B1");
1770 Assert
.AreEqual (3, s
.IndexOf ("tin", 3, 3), "#B2");
1771 Assert
.AreEqual (-1, s
.IndexOf ("tin", 2, 2), "#B3");
1772 Assert
.AreEqual (-1, s
.IndexOf ("tin", 1, 4), "#B4");
1773 Assert
.AreEqual (3, s
.IndexOf ("tin", 0, s
.Length
), "#B5");
1774 Assert
.AreEqual (-1, s
.IndexOf ("tin", s
.Length
, 0), "#B6");
1776 Assert
.AreEqual (6, s
.IndexOf ("g12", 4, 5), "#C1");
1777 Assert
.AreEqual (-1, s
.IndexOf ("g12", 5, 2), "#C2");
1778 Assert
.AreEqual (-1, s
.IndexOf ("g12", 5, 3), "#C3");
1779 Assert
.AreEqual (6, s
.IndexOf ("g12", 6, 4), "#C4");
1780 Assert
.AreEqual (6, s
.IndexOf ("g12", 0, s
.Length
), "#C5");
1781 Assert
.AreEqual (-1, s
.IndexOf ("g12", s
.Length
, 0), "#C6");
1783 Assert
.AreEqual (1, s
.IndexOf ("est", 0, 5), "#D1");
1784 Assert
.AreEqual (-1, s
.IndexOf ("est", 1, 2), "#D2");
1785 Assert
.AreEqual (-1, s
.IndexOf ("est", 2, 10), "#D3");
1786 Assert
.AreEqual (14, s
.IndexOf ("est", 7, 10), "#D4");
1787 Assert
.AreEqual (1, s
.IndexOf ("est", 0, s
.Length
), "#D5");
1788 Assert
.AreEqual (-1, s
.IndexOf ("est", s
.Length
, 0), "#D6");
1790 Assert
.AreEqual (-1, s
.IndexOf ("T", 0, s
.Length
), "#E1");
1791 Assert
.AreEqual (4, s
.IndexOf ("i", 0, s
.Length
), "#E2");
1792 Assert
.AreEqual (-1, s
.IndexOf ("I", 0, s
.Length
), "#E3");
1793 Assert
.AreEqual (12, s
.IndexOf ("6", 0, s
.Length
), "#E4");
1794 Assert
.AreEqual (0, s
.IndexOf ("testing123456", 0, s
.Length
), "#E5");
1795 Assert
.AreEqual (-1, s
.IndexOf ("testing1234567", 0, s
.Length
), "#E6");
1796 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, 0, 0), "#E7");
1797 Assert
.AreEqual (4, s
.IndexOf (string.Empty
, 4, 3), "#E8");
1798 Assert
.AreEqual (0, string.Empty
.IndexOf (string.Empty
, 0, 0), "#E9");
1799 Assert
.AreEqual (-1, string.Empty
.IndexOf ("abc", 0, 0), "#E10");
1801 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
1803 Assert
.AreEqual (-1, s
.IndexOf ("123", 4, 5), "#F1");
1804 Assert
.AreEqual (7, s
.IndexOf ("123", 4, 6), "#F2");
1805 Assert
.AreEqual (-1, s
.IndexOf ("123", 5, 4), "#F3");
1806 Assert
.AreEqual (7, s
.IndexOf ("123", 5, 5), "#F4");
1807 Assert
.AreEqual (7, s
.IndexOf ("123", 0, s
.Length
), "#F5");
1808 Assert
.AreEqual (-1, s
.IndexOf ("123", s
.Length
, 0), "#F6");
1810 Assert
.AreEqual (-1, s
.IndexOf ("tin", 2, 3), "#G1");
1811 Assert
.AreEqual (3, s
.IndexOf ("tin", 3, 3), "#G2");
1812 Assert
.AreEqual (-1, s
.IndexOf ("tin", 2, 2), "#G3");
1813 Assert
.AreEqual (-1, s
.IndexOf ("tin", 1, 4), "#G4");
1814 Assert
.AreEqual (3, s
.IndexOf ("tin", 0, s
.Length
), "#G5");
1815 Assert
.AreEqual (-1, s
.IndexOf ("tin", s
.Length
, 0), "#G6");
1817 Assert
.AreEqual (6, s
.IndexOf ("g12", 4, 5), "#H1");
1818 Assert
.AreEqual (-1, s
.IndexOf ("g12", 5, 2), "#H2");
1819 Assert
.AreEqual (-1, s
.IndexOf ("g12", 5, 3), "#H3");
1820 Assert
.AreEqual (6, s
.IndexOf ("g12", 6, 4), "#H4");
1821 Assert
.AreEqual (6, s
.IndexOf ("g12", 0, s
.Length
), "#H5");
1822 Assert
.AreEqual (-1, s
.IndexOf ("g12", s
.Length
, 0), "#H6");
1824 Assert
.AreEqual (1, s
.IndexOf ("est", 0, 5), "#I1");
1825 Assert
.AreEqual (-1, s
.IndexOf ("est", 1, 2), "#I2");
1826 Assert
.AreEqual (-1, s
.IndexOf ("est", 2, 10), "#I3");
1827 Assert
.AreEqual (14, s
.IndexOf ("est", 7, 10), "#I4");
1828 Assert
.AreEqual (1, s
.IndexOf ("est", 0, s
.Length
), "#I5");
1829 Assert
.AreEqual (-1, s
.IndexOf ("est", s
.Length
, 0), "#I6");
1831 Assert
.AreEqual (-1, s
.IndexOf ("T", 0, s
.Length
), "#J1");
1832 Assert
.AreEqual (4, s
.IndexOf ("i", 0, s
.Length
), "#J2");
1833 Assert
.AreEqual (-1, s
.IndexOf ("I", 0, s
.Length
), "#J3");
1834 Assert
.AreEqual (12, s
.IndexOf ("6", 0, s
.Length
), "#J4");
1835 Assert
.AreEqual (0, s
.IndexOf ("testing123456", 0, s
.Length
), "#J5");
1836 Assert
.AreEqual (-1, s
.IndexOf ("testing1234567", 0, s
.Length
), "#J6");
1837 Assert
.AreEqual (0, s
.IndexOf (string.Empty
, 0, 0), "#J7");
1838 Assert
.AreEqual (4, s
.IndexOf (string.Empty
, 4, 3), "#J8");
1839 Assert
.AreEqual (0, string.Empty
.IndexOf (string.Empty
, 0, 0), "#J9");
1840 Assert
.AreEqual (-1, string.Empty
.IndexOf ("abc", 0, 0), "#J10");
1844 public void IndexOf7_Empty ()
1846 Assert
.AreEqual (1, "FOO".IndexOf ("", 1, 2, StringComparison
.Ordinal
));
1847 Assert
.AreEqual (1, "FOO".IndexOf ("", 1, 2, StringComparison
.OrdinalIgnoreCase
));
1850 [Test
] // IndexOf (String, Int32, Int32)
1851 public void IndexOf7_Count_Negative ()
1854 "Mono".IndexOf ("no", 1, -1);
1856 } catch (ArgumentOutOfRangeException ex
) {
1857 // Count must be positive and count must refer to a
1858 // location within the string/array/collection
1859 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1860 Assert
.IsNull (ex
.InnerException
, "#3");
1861 Assert
.IsNotNull (ex
.Message
, "#4");
1862 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
1866 [Test
] // IndexOf (String, Int32, Int32)
1867 public void IndexOf7_Count_Overflow ()
1869 string s
= "testing123456";
1872 s
.IndexOf ("no", 1, s
.Length
);
1873 Assert
.Fail ("#A1");
1874 } catch (ArgumentOutOfRangeException ex
) {
1875 // Count must be positive and count must refer to a
1876 // location within the string/array/collection
1877 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
1878 Assert
.IsNull (ex
.InnerException
, "#A3");
1879 Assert
.IsNotNull (ex
.Message
, "#A4");
1880 Assert
.AreEqual ("count", ex
.ParamName
, "#A5");
1884 s
.IndexOf ("no", 1, s
.Length
+ 1);
1885 Assert
.Fail ("#B1");
1886 } catch (ArgumentOutOfRangeException ex
) {
1887 // Count must be positive and count must refer to a
1888 // location within the string/array/collection
1889 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
1890 Assert
.IsNull (ex
.InnerException
, "#B3");
1891 Assert
.IsNotNull (ex
.Message
, "#B4");
1892 Assert
.AreEqual ("count", ex
.ParamName
, "#B5");
1896 s
.IndexOf ("no", 1, int.MaxValue
);
1897 Assert
.Fail ("#C1");
1898 } catch (ArgumentOutOfRangeException ex
) {
1899 // Count must be positive and count must refer to a
1900 // location within the string/array/collection
1901 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
1902 Assert
.IsNull (ex
.InnerException
, "#C3");
1903 Assert
.IsNotNull (ex
.Message
, "#C4");
1904 Assert
.AreEqual ("count", ex
.ParamName
, "#C5");
1908 [Test
] // IndexOf (String, Int32, Int32)
1909 public void IndexOf7_StartIndex_Negative ()
1912 "Mono".IndexOf ("no", -1, 1);
1914 } catch (ArgumentOutOfRangeException ex
) {
1915 // Index was out of range. Must be non-negative and
1916 // less than the size of the collection
1917 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1918 Assert
.IsNull (ex
.InnerException
, "#3");
1919 Assert
.IsNotNull (ex
.Message
, "#4");
1920 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
1924 [Test
] // IndexOf (String, Int32, Int32)
1925 public void IndexOf7_StartIndex_Overflow ()
1927 string s
= "testing123456";
1930 s
.IndexOf ("no", s
.Length
+ 1, 1);
1931 Assert
.Fail ("#A1");
1932 } catch (ArgumentOutOfRangeException ex
) {
1933 // Index was out of range. Must be non-negative and
1934 // less than the size of the collection
1935 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
1936 Assert
.IsNull (ex
.InnerException
, "#A3");
1937 Assert
.IsNotNull (ex
.Message
, "#A4");
1938 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
1942 s
.IndexOf ("no", int.MaxValue
, 1);
1943 Assert
.Fail ("#B1");
1944 } catch (ArgumentOutOfRangeException ex
) {
1945 // Index was out of range. Must be non-negative and
1946 // less than the size of the collection
1947 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
1948 Assert
.IsNull (ex
.InnerException
, "#B3");
1949 Assert
.IsNotNull (ex
.Message
, "#B4");
1950 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
1954 [Test
] // IndexOf (String, Int32, Int32)
1955 public void IndexOf7_Value_Null ()
1958 "Mono".IndexOf ((string) null, 0, 1);
1960 } catch (ArgumentNullException ex
) {
1961 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1962 Assert
.IsNull (ex
.InnerException
, "#3");
1963 Assert
.IsNotNull (ex
.Message
, "#4");
1964 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
1968 [Test
] // IndexOf (String, Int32, StringComparison)
1969 public void IndexOf8_ComparisonType_Invalid ()
1972 "Mono".IndexOf (string.Empty
, 1, (StringComparison
) Int32
.MinValue
);
1974 } catch (ArgumentException ex
) {
1975 // The string comparison type passed in is currently
1977 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
1978 Assert
.IsNull (ex
.InnerException
, "#3");
1979 Assert
.IsNotNull (ex
.Message
, "#4");
1980 Assert
.AreEqual ("comparisonType", ex
.ParamName
, "#5");
1984 [Test
] // IndexOf (String, Int32, StringComparison)
1985 public void IndexOf8_StartIndex_Negative ()
1988 "Mono".IndexOf ("o", -1, StringComparison
.Ordinal
);
1990 } catch (ArgumentOutOfRangeException ex
) {
1991 // Index was out of range. Must be non-negative and
1992 // less than the size of the collection
1993 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
1994 Assert
.IsNull (ex
.InnerException
, "#3");
1995 Assert
.IsNotNull (ex
.Message
, "#4");
1996 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2000 [Test
] // IndexOf (String, Int32, Int32, StringComparison)
2001 public void IndexOf9_ComparisonType_Invalid ()
2004 "Mono".IndexOf (string.Empty
, 0, 1, (StringComparison
) Int32
.MinValue
);
2006 } catch (ArgumentException ex
) {
2007 // The string comparison type passed in is currently
2009 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
2010 Assert
.IsNull (ex
.InnerException
, "#3");
2011 Assert
.IsNotNull (ex
.Message
, "#4");
2012 Assert
.AreEqual ("comparisonType", ex
.ParamName
, "#5");
2016 [Test
] // IndexOf (String, Int32, Int32, StringComparison)
2017 public void IndexOf9_Count_Negative ()
2020 "Mono".IndexOf ("o", 1, -1, StringComparison
.Ordinal
);
2023 } catch (ArgumentOutOfRangeException ex
) {
2024 // Count must be positive and count must refer to a
2025 // location within the string/array/collection
2026 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2027 Assert
.IsNull (ex
.InnerException
, "#3");
2028 Assert
.IsNotNull (ex
.Message
, "#4");
2029 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2033 [Test
] // IndexOf (String, Int32, Int32, StringComparison)
2034 public void IndexOf9_StartIndex_Negative ()
2037 "Mono".IndexOf ("o", -1, 0, StringComparison
.Ordinal
);
2039 } catch (ArgumentOutOfRangeException ex
) {
2040 // Index was out of range. Must be non-negative and
2041 // less than the size of the collection
2042 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2043 Assert
.IsNull (ex
.InnerException
, "#3");
2044 Assert
.IsNotNull (ex
.Message
, "#4");
2045 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2050 public void IndexOfAny1 ()
2052 string s
= "abcdefghijklmd";
2055 c
= new char [] {'a', 'e', 'i', 'o', 'u'}
;
2056 Assert
.AreEqual (0, s
.IndexOfAny (c
), "#1");
2057 c
= new char [] { 'd', 'z' }
;
2058 Assert
.AreEqual (3, s
.IndexOfAny (c
), "#1");
2059 c
= new char [] { 'q', 'm', 'z' }
;
2060 Assert
.AreEqual (12, s
.IndexOfAny (c
), "#2");
2062 Assert
.AreEqual (-1, s
.IndexOfAny (c
), "#3");
2066 [Test
] // IndexOfAny (Char [])
2067 public void IndexOfAny1_AnyOf_Null ()
2070 "mono".IndexOfAny ((char []) null);
2072 } catch (ArgumentNullException ex
) {
2073 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
2074 Assert
.IsNull (ex
.InnerException
, "#3");
2075 Assert
.IsNotNull (ex
.Message
, "#4");
2076 Assert
.IsNull (ex
.ParamName
, "#5");
2080 [Test
] // IndexOfAny (Char [], Int32)
2081 public void IndexOfAny2 ()
2083 string s
= "abcdefghijklmd";
2086 c
= new char [] { 'a', 'e', 'i', 'o', 'u' }
;
2087 Assert
.AreEqual (0, s
.IndexOfAny (c
, 0), "#A1");
2088 Assert
.AreEqual (4, s
.IndexOfAny (c
, 1), "#A1");
2089 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 9), "#A2");
2090 Assert
.AreEqual (-1, s
.IndexOfAny (c
, s
.Length
), "#A3");
2092 c
= new char [] { 'd', 'z' }
;
2093 Assert
.AreEqual (3, s
.IndexOfAny (c
, 0), "#B1");
2094 Assert
.AreEqual (3, s
.IndexOfAny (c
, 3), "#B2");
2095 Assert
.AreEqual (13, s
.IndexOfAny (c
, 4), "#B3");
2096 Assert
.AreEqual (13, s
.IndexOfAny (c
, 9), "#B4");
2097 Assert
.AreEqual (-1, s
.IndexOfAny (c
, s
.Length
), "#B5");
2098 Assert
.AreEqual (13, s
.IndexOfAny (c
, s
.Length
- 1), "#B6");
2100 c
= new char [] { 'q', 'm', 'z' }
;
2101 Assert
.AreEqual (12, s
.IndexOfAny (c
, 0), "#C1");
2102 Assert
.AreEqual (12, s
.IndexOfAny (c
, 4), "#C2");
2103 Assert
.AreEqual (12, s
.IndexOfAny (c
, 12), "#C3");
2104 Assert
.AreEqual (-1, s
.IndexOfAny (c
, s
.Length
), "#C4");
2107 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 0), "#D1");
2108 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 4), "#D2");
2109 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 9), "#D3");
2110 Assert
.AreEqual (-1, s
.IndexOfAny (c
, s
.Length
), "#D4");
2113 [Test
] // IndexOfAny (Char [], Int32)
2114 public void IndexOfAny2_AnyOf_Null ()
2117 "mono".IndexOfAny ((char []) null, 0);
2119 } catch (ArgumentNullException ex
) {
2120 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
2121 Assert
.IsNull (ex
.InnerException
, "#3");
2122 Assert
.IsNotNull (ex
.Message
, "#4");
2123 Assert
.IsNull (ex
.ParamName
, "#5");
2127 [Test
] // IndexOfAny (Char [], Int32)
2128 public void IndexOfAny2_StartIndex_Negative ()
2130 string s
= "abcdefghijklm";
2133 s
.IndexOfAny (new char [1] { 'd' }
, -1, 1);
2135 } catch (ArgumentOutOfRangeException ex
) {
2136 // Specified argument was out of the range of valid
2138 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2139 Assert
.IsNull (ex
.InnerException
, "#3");
2140 Assert
.IsNotNull (ex
.Message
, "#4");
2141 Assert
.IsNull (ex
.ParamName
, "#5");
2145 [Test
] // IndexOfAny (Char [], Int32, Int32)
2146 public void IndexOfAny2_StartIndex_Overflow ()
2148 string s
= "abcdefghijklm";
2151 s
.IndexOfAny (new char [1] { 'd' }
, s
.Length
+ 1);
2153 } catch (ArgumentOutOfRangeException ex
) {
2154 // Specified argument was out of the range of valid
2156 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2157 Assert
.IsNull (ex
.InnerException
, "#3");
2158 Assert
.IsNotNull (ex
.Message
, "#4");
2159 Assert
.IsNull (ex
.ParamName
, "#5");
2163 [Test
] // IndexOfAny (Char [], Int32, Int32)
2164 public void IndexOfAny3 ()
2166 string s
= "abcdefghijklmd";
2169 c
= new char [] { 'a', 'e', 'i', 'o', 'u' }
;
2170 Assert
.AreEqual (0, s
.IndexOfAny (c
, 0, 2), "#A1");
2171 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 1, 2), "#A2");
2172 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 1, 3), "#A3");
2173 Assert
.AreEqual (4, s
.IndexOfAny (c
, 1, 4), "#A3");
2174 Assert
.AreEqual (4, s
.IndexOfAny (c
, 1, s
.Length
- 1), "#A4");
2176 c
= new char [] { 'd', 'z' }
;
2177 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 0, 2), "#B1");
2178 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 1, 2), "#B2");
2179 Assert
.AreEqual (3, s
.IndexOfAny (c
, 1, 3), "#B3");
2180 Assert
.AreEqual (3, s
.IndexOfAny (c
, 0, s
.Length
), "#B4");
2181 Assert
.AreEqual (3, s
.IndexOfAny (c
, 1, s
.Length
- 1), "#B5");
2182 Assert
.AreEqual (-1, s
.IndexOfAny (c
, s
.Length
, 0), "#B6");
2184 c
= new char [] { 'q', 'm', 'z' }
;
2185 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 0, 10), "#C1");
2186 Assert
.AreEqual (12, s
.IndexOfAny (c
, 10, 4), "#C2");
2187 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 1, 3), "#C3");
2188 Assert
.AreEqual (12, s
.IndexOfAny (c
, 0, s
.Length
), "#C4");
2189 Assert
.AreEqual (12, s
.IndexOfAny (c
, 1, s
.Length
- 1), "#C5");
2192 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 0, 3), "#D1");
2193 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 4, 9), "#D2");
2194 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 9, 5), "#D3");
2195 Assert
.AreEqual (-1, s
.IndexOfAny (c
, 13, 1), "#D4");
2198 [Test
] // IndexOfAny (Char [], Int32, Int32)
2199 public void IndexOfAny3_AnyOf_Null ()
2202 "mono".IndexOfAny ((char []) null, 0, 0);
2204 } catch (ArgumentNullException ex
) {
2205 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
2206 Assert
.IsNull (ex
.InnerException
, "#3");
2207 Assert
.IsNotNull (ex
.Message
, "#4");
2208 Assert
.IsNull (ex
.ParamName
, "#5");
2212 [Test
] // IndexOfAny (Char [], Int32, Int32)
2213 public void IndexOfAny3_Count_Negative ()
2216 "Mono".IndexOfAny (new char [1] { 'o' }
, 1, -1);
2218 } catch (ArgumentOutOfRangeException ex
) {
2219 // Count must be positive and count must refer to a
2220 // location within the string/array/collection
2221 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2222 Assert
.IsNull (ex
.InnerException
, "#3");
2223 Assert
.IsNotNull (ex
.Message
, "#4");
2224 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2228 [Test
] // IndexOfAny (Char [], Int32, Int32)
2229 public void IndexOfAny3_Length_Overflow ()
2231 string s
= "abcdefghijklm";
2234 s
.IndexOfAny (new char [1] { 'd' }
, 1, s
.Length
);
2236 } catch (ArgumentOutOfRangeException ex
) {
2237 // Count must be positive and count must refer to a
2238 // location within the string/array/collection
2239 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2240 Assert
.IsNull (ex
.InnerException
, "#3");
2241 Assert
.IsNotNull (ex
.Message
, "#4");
2242 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2246 [Test
] // IndexOfAny (Char [], Int32, Int32)
2247 public void IndexOfAny3_StartIndex_Negative ()
2250 "Mono".IndexOfAny (new char [1] { 'o' }
, -1, 1);
2252 } catch (ArgumentOutOfRangeException ex
) {
2253 // Specified argument was out of the range of valid
2255 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2256 Assert
.IsNull (ex
.InnerException
, "#3");
2257 Assert
.IsNotNull (ex
.Message
, "#4");
2258 Assert
.IsNull (ex
.ParamName
, "#5");
2262 [Test
] // IndexOfAny (Char [], Int32, Int32)
2263 public void IndexOfAny3_StartIndex_Overflow ()
2265 string s
= "abcdefghijklm";
2268 s
.IndexOfAny (new char [1] { 'o' }
, s
.Length
+ 1, 1);
2270 } catch (ArgumentOutOfRangeException ex
) {
2271 // Specified argument was out of the range of valid
2273 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2274 Assert
.IsNull (ex
.InnerException
, "#3");
2275 Assert
.IsNotNull (ex
.Message
, "#4");
2276 Assert
.IsNull (ex
.ParamName
, "#5");
2281 public void Contains ()
2283 Assert
.IsTrue ("ABC".Contains (string.Empty
));
2284 Assert
.IsTrue ("ABC".Contains ("ABC"));
2285 Assert
.IsTrue ("ABC".Contains ("AB"));
2286 Assert
.IsTrue (!"ABC".Contains ("AD"));
2287 Assert
.IsTrue (!"encyclopædia".Contains("encyclopaedia"));
2291 public void IndexOfIsCultureAwareWhileContainsIsNot ()
2293 string a
= "encyclopædia";
2294 string b
= "encyclopaedia";
2295 Assert
.IsFalse (a
.Contains (b
), "#1");
2296 Assert
.IsTrue (a
.Contains ("æ"), "#1.1");
2297 Assert
.IsFalse (b
.Contains ("æ"), "#1.2");
2298 Assert
.AreEqual (0, a
.IndexOf (b
), "#2");
2299 Assert
.AreEqual (8, a
.IndexOf ('æ'), "#3");
2300 Assert
.AreEqual (-1, b
.IndexOf ('æ'), "#4");
2301 Assert
.AreEqual (8, a
.IndexOf ("æ"), "#5");
2302 Assert
.AreEqual (8, b
.IndexOf ("æ"), "#6");
2304 Assert
.AreEqual (0, CultureInfo
.CurrentCulture
.CompareInfo
.IndexOf (a
, b
, 0, a
.Length
, CompareOptions
.None
), "#7");
2305 Assert
.AreEqual (-1, CultureInfo
.CurrentCulture
.CompareInfo
.IndexOf (a
, b
, 0, a
.Length
, CompareOptions
.Ordinal
), "#8");
2309 public void Contains_Value_Null ()
2312 "ABC".Contains (null);
2314 } catch (ArgumentNullException ex
) {
2315 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
2316 Assert
.IsNull (ex
.InnerException
, "#3");
2317 Assert
.IsNotNull (ex
.Message
, "#4");
2318 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
2323 public void IsNullOrEmpty ()
2325 Assert
.IsTrue (String
.IsNullOrEmpty (null));
2326 Assert
.IsTrue (String
.IsNullOrEmpty (String
.Empty
));
2327 Assert
.IsTrue (String
.IsNullOrEmpty (""));
2328 Assert
.IsTrue (!String
.IsNullOrEmpty ("A"));
2329 Assert
.IsTrue (!String
.IsNullOrEmpty (" "));
2330 Assert
.IsTrue (!String
.IsNullOrEmpty ("\t"));
2331 Assert
.IsTrue (!String
.IsNullOrEmpty ("\n"));
2335 public void TestInsert ()
2337 string s1
= "original";
2340 s1
.Insert (0, null);
2341 Assert
.Fail ("#A1");
2342 } catch (ArgumentNullException ex
) {
2343 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
2344 Assert
.IsNull (ex
.InnerException
, "#A3");
2345 Assert
.IsNotNull (ex
.Message
, "#A4");
2346 Assert
.AreEqual ("value", ex
.ParamName
, "#A5");
2350 s1
.Insert (s1
.Length
+ 1, "Hi!");
2351 Assert
.Fail ("#B1");
2352 } catch (ArgumentOutOfRangeException ex
) {
2353 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
2354 Assert
.IsNull (ex
.InnerException
, "#B3");
2355 Assert
.IsNotNull (ex
.Message
, "#B4");
2356 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
2359 Assert
.AreEqual ("Hi!original", s1
.Insert (0, "Hi!"), "#C1");
2360 Assert
.AreEqual ("originalHi!", s1
.Insert (s1
.Length
, "Hi!"), "#C2");
2361 Assert
.AreEqual ("origHi!inal", s1
.Insert (4, "Hi!"), "#C3");
2365 public void Intern ()
2367 string s1
= "original";
2368 Assert
.AreSame (s1
, String
.Intern (s1
), "#A1");
2369 Assert
.AreSame (String
.Intern(s1
), String
.Intern(s1
), "#A2");
2371 string s2
= "originally";
2372 Assert
.AreSame (s2
, String
.Intern (s2
), "#B1");
2373 Assert
.IsTrue (String
.Intern(s1
) != String
.Intern(s2
), "#B2");
2375 string s3
= new DateTime (2000, 3, 7).ToString ();
2376 Assert
.IsNull (String
.IsInterned (s3
), "#C1");
2378 string s4
= String
.Intern (s3
);
2379 Assert
.AreEqual (s3
, s4
, "#C2");
2380 Assert
.AreSame (s4
, String
.IsInterned (s4
), "#C3");
2381 Assert
.AreSame (s4
, String
.IsInterned (new DateTime (2000, 3, 7).ToString ()), "#C4");
2382 Assert
.AreSame (s4
, String
.Intern (new DateTime (2000, 3, 7).ToString ()), "#C5");
2386 public void Intern_Str_Null ()
2389 String
.Intern (null);
2391 } catch (ArgumentNullException ex
) {
2392 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
2393 Assert
.IsNull (ex
.InnerException
, "#3");
2394 Assert
.IsNotNull (ex
.Message
, "#4");
2395 Assert
.AreEqual ("str", ex
.ParamName
, "#5");
2400 public void IsInterned ()
2402 Assert
.IsNull (String
.IsInterned (new DateTime (2000, 3, 6).ToString ()), "#1");
2403 string s1
= "original";
2404 Assert
.AreSame (s1
, String
.IsInterned (s1
), "#2");
2408 public void IsInterned_Str_Null ()
2411 String
.IsInterned (null);
2413 } catch (ArgumentNullException ex
) {
2414 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
2415 Assert
.IsNull (ex
.InnerException
, "#3");
2416 Assert
.IsNotNull (ex
.Message
, "#4");
2417 Assert
.AreEqual ("str", ex
.ParamName
, "#5");
2422 public void TestJoin ()
2425 string s
= String
.Join(" ", null);
2426 Assert
.Fail ("#A1");
2427 } catch (ArgumentNullException ex
) {
2428 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
2429 Assert
.IsNull (ex
.InnerException
, "#A3");
2430 Assert
.IsNotNull (ex
.Message
, "#A4");
2431 Assert
.AreEqual ("value", ex
.ParamName
, "#A5");
2434 string[] chunks
= {"this", "is", "a", "test"}
;
2435 Assert
.AreEqual ("this is a test", String
.Join(" ", chunks
), "Basic join");
2436 Assert
.AreEqual ("this.is.a.test", String
.Join(".", chunks
), "Basic join");
2438 Assert
.AreEqual ("is a", String
.Join(" ", chunks
, 1, 2), "Subset join");
2439 Assert
.AreEqual ("is.a", String
.Join(".", chunks
, 1, 2), "Subset join");
2440 Assert
.AreEqual ("is a test", String
.Join(" ", chunks
, 1, 3), "Subset join");
2443 string s
= String
.Join(" ", chunks
, 2, 3);
2444 Assert
.Fail ("#C1");
2445 } catch (ArgumentOutOfRangeException ex
) {
2446 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
2447 Assert
.IsNull (ex
.InnerException
, "#C3");
2448 Assert
.IsNotNull (ex
.Message
, "#C4");
2449 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#C5");
2454 public void Join_SeparatorNull ()
2456 string[] chunks
= {"this", "is", "a", "test"}
;
2457 Assert
.AreEqual ("thisisatest", String
.Join (null, chunks
), "SeparatorNull");
2461 public void Join_ValuesNull ()
2463 string[] chunks1
= {null, "is", "a", null}
;
2464 Assert
.AreEqual (" is a ", String
.Join (" ", chunks1
), "SomeNull");
2466 string[] chunks2
= {null, "is", "a", null}
;
2467 Assert
.AreEqual ("isa", String
.Join (null, chunks2
), "Some+Sep=Null");
2469 string[] chunks3
= {null, null, null, null}
;
2470 Assert
.AreEqual (" ", String
.Join (" ", chunks3
), "AllValuesNull");
2474 public void Join_AllNull ()
2476 string[] chunks
= {null, null, null}
;
2477 Assert
.AreEqual (string.Empty
, String
.Join (null, chunks
), "AllNull");
2481 public void Join_StartIndexNegative ()
2483 string[] values
= { "Mo", "no" }
;
2485 String
.Join ("o", values
, -1, 1);
2487 } catch (ArgumentOutOfRangeException ex
) {
2488 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2489 Assert
.IsNull (ex
.InnerException
, "#3");
2490 Assert
.IsNotNull (ex
.Message
, "#4");
2491 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2496 public void Join_StartIndexOverflow ()
2498 string[] values
= { "Mo", "no" }
;
2500 String
.Join ("o", values
, Int32
.MaxValue
, 1);
2502 } catch (ArgumentOutOfRangeException ex
) {
2503 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2504 Assert
.IsNull (ex
.InnerException
, "#3");
2505 Assert
.IsNotNull (ex
.Message
, "#4");
2506 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2511 public void Join_LengthNegative ()
2513 string[] values
= { "Mo", "no" }
;
2515 String
.Join ("o", values
, 1, -1);
2517 } catch (ArgumentOutOfRangeException ex
) {
2518 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2519 Assert
.IsNull (ex
.InnerException
, "#3");
2520 Assert
.IsNotNull (ex
.Message
, "#4");
2521 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2526 public void Join_LengthOverflow ()
2528 string[] values
= { "Mo", "no" }
;
2530 String
.Join ("o", values
, 1, Int32
.MaxValue
);
2532 } catch (ArgumentOutOfRangeException ex
) {
2533 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2534 Assert
.IsNull (ex
.InnerException
, "#3");
2535 Assert
.IsNotNull (ex
.Message
, "#4");
2536 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2541 public void LastIndexOf ()
2543 string s1
= "original";
2546 s1
.LastIndexOf ('q', -1);
2547 Assert
.Fail ("#A1");
2548 } catch (ArgumentOutOfRangeException ex
) {
2549 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
2550 Assert
.IsNull (ex
.InnerException
, "#A3");
2551 Assert
.IsNotNull (ex
.Message
, "#A4");
2552 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
2556 s1
.LastIndexOf ('q', -1, 1);
2557 Assert
.Fail ("#B1");
2558 } catch (ArgumentOutOfRangeException ex
) {
2559 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
2560 Assert
.IsNull (ex
.InnerException
, "#B3");
2561 Assert
.IsNotNull (ex
.Message
, "#B4");
2562 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
2566 s1
.LastIndexOf ("huh", s1
.Length
+ 1);
2567 Assert
.Fail ("#C1");
2568 } catch (ArgumentOutOfRangeException ex
) {
2569 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
2570 Assert
.IsNull (ex
.InnerException
, "#C3");
2571 Assert
.IsNotNull (ex
.Message
, "#C4");
2572 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#C5");
2576 int i
= s1
.LastIndexOf ("huh", s1
.Length
+ 1, 3);
2577 Assert
.Fail ("#D1");
2578 } catch (ArgumentOutOfRangeException ex
) {
2579 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#D2");
2580 Assert
.IsNull (ex
.InnerException
, "#D3");
2581 Assert
.IsNotNull (ex
.Message
, "#D4");
2582 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#D5");
2586 s1
.LastIndexOf (null);
2587 Assert
.Fail ("#E1");
2588 } catch (ArgumentNullException ex
) {
2589 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#E2");
2590 Assert
.IsNull (ex
.InnerException
, "#E3");
2591 Assert
.IsNotNull (ex
.Message
, "#E4");
2592 Assert
.AreEqual ("value", ex
.ParamName
, "#E5");
2596 s1
.LastIndexOf (null, 0);
2597 Assert
.Fail ("#F1");
2598 } catch (ArgumentNullException ex
) {
2599 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#F2");
2600 Assert
.IsNull (ex
.InnerException
, "#F3");
2601 Assert
.IsNotNull (ex
.Message
, "#F4");
2602 Assert
.AreEqual ("value", ex
.ParamName
, "#F5");
2606 s1
.LastIndexOf (null, 0, 1);
2607 Assert
.Fail ("#G1");
2608 } catch (ArgumentNullException ex
) {
2609 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#G2");
2610 Assert
.IsNull (ex
.InnerException
, "#G3");
2611 Assert
.IsNotNull (ex
.Message
, "#G4");
2612 Assert
.AreEqual ("value", ex
.ParamName
, "#G5");
2615 Assert
.AreEqual (1, s1
.LastIndexOf('r'), "basic char index");
2616 Assert
.AreEqual (4, s1
.LastIndexOf('i'), "basic char index");
2617 Assert
.AreEqual (-1, s1
.LastIndexOf('q'), "basic char index - no");
2619 Assert
.AreEqual (7, s1
.LastIndexOf(string.Empty
), "basic string index");
2620 Assert
.AreEqual (1, s1
.LastIndexOf("rig"), "basic string index");
2621 Assert
.AreEqual (4, s1
.LastIndexOf("i"), "basic string index");
2622 Assert
.AreEqual (-1, s1
.LastIndexOf("rag"), "basic string index - no");
2624 Assert
.AreEqual (1, s1
.LastIndexOf('r', s1
.Length
-1), "stepped char index");
2625 Assert
.AreEqual (4, s1
.LastIndexOf('i', s1
.Length
-1), "stepped char index");
2626 Assert
.AreEqual (2, s1
.LastIndexOf('i', 3), "stepped char index");
2627 Assert
.AreEqual (-1, s1
.LastIndexOf('i', 1), "stepped char index");
2629 Assert
.AreEqual (1, s1
.LastIndexOf('r', 1, 1), "stepped limited char index");
2630 Assert
.AreEqual (-1, s1
.LastIndexOf('r', 0, 1), "stepped limited char index");
2631 Assert
.AreEqual (4, s1
.LastIndexOf('i', 6, 3), "stepped limited char index");
2632 Assert
.AreEqual (2, s1
.LastIndexOf('i', 3, 3), "stepped limited char index");
2633 Assert
.AreEqual (-1, s1
.LastIndexOf('i', 1, 2), "stepped limited char index");
2635 s1
= "original original";
2636 Assert
.AreEqual (9, s1
.LastIndexOf("original", s1
.Length
), "stepped string index #1");
2637 Assert
.AreEqual (0, s1
.LastIndexOf("original", s1
.Length
-2), "stepped string index #2");
2638 Assert
.AreEqual (-1, s1
.LastIndexOf("original", s1
.Length
-11), "stepped string index #3");
2639 Assert
.AreEqual (-1, s1
.LastIndexOf("translator", 2), "stepped string index #4");
2640 Assert
.AreEqual (0, string.Empty
.LastIndexOf(string.Empty
, 0), "stepped string index #5");
2641 Assert
.AreEqual (-1, string.Empty
.LastIndexOf("A", -1), "stepped string index #6");
2642 Assert
.AreEqual (10, s1
.LastIndexOf("rig", s1
.Length
-1, 10), "stepped limited string index #1");
2643 Assert
.AreEqual (-1, s1
.LastIndexOf("rig", s1
.Length
, 3), "stepped limited string index #2");
2644 Assert
.AreEqual (10, s1
.LastIndexOf("rig", s1
.Length
-2, 15), "stepped limited string index #3");
2645 Assert
.AreEqual (-1, s1
.LastIndexOf("rig", s1
.Length
-2, 3), "stepped limited string index #4");
2647 string s2
= "QBitArray::bitarr_data";
2648 Assert
.AreEqual (9, s2
.LastIndexOf ("::"), "bug #62160");
2650 string s3
= "test123";
2651 Assert
.AreEqual (0, s3
.LastIndexOf ("test123"), "bug #77412");
2653 Assert
.AreEqual (0, "\u267B RT \u30FC".LastIndexOf ("\u267B RT "), "bug #605094");
2657 [ExpectedException (typeof (ArgumentException
))]
2658 public void LastIndexOf_StringComparison ()
2660 " ".LastIndexOf (string.Empty
, 0, 1, (StringComparison
)Int32
.MinValue
);
2664 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
2665 public void LastIndexOfStringComparisonOrdinalRangeException1 ()
2667 "Mono".LastIndexOf ("no", 5, StringComparison
.Ordinal
);
2671 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
2672 public void LastIndexOfStringComparisonOrdinalRangeException2 ()
2674 "Mono".LastIndexOf ("no", 1, 3, StringComparison
.Ordinal
);
2678 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
2679 public void LastIndexOfStringComparisonOrdinalIgnoreCaseRangeException1 ()
2681 "Mono".LastIndexOf ("no", 5, StringComparison
.OrdinalIgnoreCase
);
2685 [ExpectedException (typeof (ArgumentOutOfRangeException
))]
2686 public void LastIndexOfStringComparisonOrdinalIgnoreCaseRangeException2 ()
2688 "Mono".LastIndexOf ("no", 1, 3, StringComparison
.OrdinalIgnoreCase
);
2692 public void LastIndexOfStringComparison ()
2694 string text
= "testing123456";
2695 string text2
= "123";
2696 string text3
= "NG";
2698 Assert
.AreEqual (7, text
.LastIndexOf (text2
, StringComparison
.Ordinal
), "#1-1");
2699 Assert
.AreEqual (5, text
.LastIndexOf (text3
, StringComparison
.OrdinalIgnoreCase
), "#2-1");
2701 Assert
.AreEqual (7, text
.LastIndexOf (text2
, 12, StringComparison
.Ordinal
), "#1-2");
2702 Assert
.AreEqual (5, text
.LastIndexOf (text3
, 12, StringComparison
.OrdinalIgnoreCase
), "#2-2");
2704 Assert
.AreEqual (-1, text
.LastIndexOf (text2
, 0, StringComparison
.Ordinal
), "#1-3");
2705 Assert
.AreEqual (-1, text
.LastIndexOf (text3
, 0, StringComparison
.OrdinalIgnoreCase
), "#2-3");
2707 Assert
.AreEqual (-1, text
.LastIndexOf (text2
, 6, StringComparison
.Ordinal
), "#1-4");
2708 Assert
.AreEqual (5, text
.LastIndexOf (text3
, 6, StringComparison
.OrdinalIgnoreCase
), "#2-4");
2710 Assert
.AreEqual (-1, text
.LastIndexOf (text2
, 7, 3, StringComparison
.Ordinal
), "#1-5");
2711 Assert
.AreEqual (5, text
.LastIndexOf (text3
, 7, 3, StringComparison
.OrdinalIgnoreCase
), "#2-5");
2713 Assert
.AreEqual (-1, text
.LastIndexOf (text2
, 6, 0, StringComparison
.Ordinal
), "#1-6");
2714 Assert
.AreEqual (-1, text
.LastIndexOf (text3
, 5, 0, StringComparison
.OrdinalIgnoreCase
), "#2-6");
2716 Assert
.AreEqual (-1, text
.LastIndexOf (text2
, 7, 1, StringComparison
.Ordinal
), "#1-7");
2717 Assert
.AreEqual (-1, text
.LastIndexOf (text3
, 5, 1, StringComparison
.OrdinalIgnoreCase
), "#2-7");
2719 Assert
.AreEqual (0, text
.LastIndexOf (text4
, 0, StringComparison
.Ordinal
), "#3-1");
2720 Assert
.AreEqual (0, text
.LastIndexOf (text4
, 0, StringComparison
.OrdinalIgnoreCase
), "#3-2");
2722 Assert
.AreEqual (3, text
.LastIndexOf (text4
, 13, StringComparison
.Ordinal
), "#4-1");
2723 Assert
.AreEqual (3, text
.LastIndexOf (text4
, 13, StringComparison
.OrdinalIgnoreCase
), "#4-2");
2725 Assert
.AreEqual (3, text
.LastIndexOf (text4
, 13, 14, StringComparison
.Ordinal
), "#4-1");
2726 Assert
.AreEqual (3, text
.LastIndexOf (text4
, 13, 14, StringComparison
.OrdinalIgnoreCase
), "#4-2");
2728 Assert
.AreEqual (0, text
.LastIndexOf (text4
, 1, 2, StringComparison
.Ordinal
), "#5-1");
2729 Assert
.AreEqual (0, text
.LastIndexOf (text4
, 1, 2, StringComparison
.OrdinalIgnoreCase
), "#5-2");
2731 Assert
.AreEqual (-1, "".LastIndexOf ("FOO", StringComparison
.Ordinal
));
2732 Assert
.AreEqual (0, "".LastIndexOf ("", StringComparison
.Ordinal
));
2736 public void LastIndexOfStringComparisonOrdinal ()
2738 string text
= "testing123456";
2739 Assert
.AreEqual (10, text
.LastIndexOf ("456", StringComparison
.Ordinal
), "#1");
2740 Assert
.AreEqual (-1, text
.LastIndexOf ("4567", StringComparison
.Ordinal
), "#2");
2741 Assert
.AreEqual (0, text
.LastIndexOf ("te", StringComparison
.Ordinal
), "#3");
2742 Assert
.AreEqual (2, text
.LastIndexOf ("s", StringComparison
.Ordinal
), "#4");
2743 Assert
.AreEqual (-1, text
.LastIndexOf ("ates", StringComparison
.Ordinal
), "#5");
2744 Assert
.AreEqual (-1, text
.LastIndexOf ("S", StringComparison
.Ordinal
), "#6");
2748 public void LastIndexOfStringComparisonOrdinalIgnoreCase ()
2750 string text
= "testing123456";
2751 Assert
.AreEqual (10, text
.LastIndexOf ("456", StringComparison
.OrdinalIgnoreCase
), "#1");
2752 Assert
.AreEqual (-1, text
.LastIndexOf ("4567", StringComparison
.OrdinalIgnoreCase
), "#2");
2753 Assert
.AreEqual (0, text
.LastIndexOf ("te", StringComparison
.OrdinalIgnoreCase
), "#3");
2754 Assert
.AreEqual (2, text
.LastIndexOf ("s", StringComparison
.OrdinalIgnoreCase
), "#4");
2755 Assert
.AreEqual (-1, text
.LastIndexOf ("ates", StringComparison
.OrdinalIgnoreCase
), "#5");
2756 Assert
.AreEqual (2, text
.LastIndexOf ("S", StringComparison
.OrdinalIgnoreCase
), "#6");
2760 public void LastIndexOf_Char_StartIndexStringLength ()
2764 s
.LastIndexOf ('n', s
.Length
, 1);
2766 } catch (ArgumentOutOfRangeException ex
) {
2767 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2768 Assert
.IsNull (ex
.InnerException
, "#3");
2769 Assert
.IsNotNull (ex
.Message
, "#4");
2770 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2772 // this works for string but not for a char
2776 public void LastIndexOf_Char_StartIndexOverflow ()
2779 "Mono".LastIndexOf ('o', Int32
.MaxValue
, 1);
2781 } catch (ArgumentOutOfRangeException ex
) {
2782 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2783 Assert
.IsNull (ex
.InnerException
, "#3");
2784 Assert
.IsNotNull (ex
.Message
, "#4");
2785 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2790 public void LastIndexOf_Char_LengthOverflow ()
2793 "Mono".LastIndexOf ('o', 1, Int32
.MaxValue
);
2795 } catch (ArgumentOutOfRangeException ex
) {
2796 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2797 Assert
.IsNull (ex
.InnerException
, "#3");
2798 Assert
.IsNotNull (ex
.Message
, "#4");
2799 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2804 public void LastIndexOf_String_StartIndexStringLength ()
2807 Assert
.AreEqual (-1, s
.LastIndexOf ("n", s
.Length
, 1));
2808 // this works for string but not for a char
2812 public void LastIndexOf_String_StartIndexStringLength_Plus1 ()
2816 s
.LastIndexOf ("n", s
.Length
+ 1, 1);
2818 } catch (ArgumentOutOfRangeException ex
) {
2819 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2820 Assert
.IsNull (ex
.InnerException
, "#3");
2821 Assert
.IsNotNull (ex
.Message
, "#4");
2822 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2827 public void LastIndexOf_String_StartIndexOverflow ()
2830 "Mono".LastIndexOf ("no", Int32
.MaxValue
, 1);
2832 } catch (ArgumentOutOfRangeException ex
) {
2833 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2834 Assert
.IsNull (ex
.InnerException
, "#3");
2835 Assert
.IsNotNull (ex
.Message
, "#4");
2836 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2841 public void LastIndexOf_String_LengthOverflow ()
2844 "Mono".LastIndexOf ("no", 1, Int32
.MaxValue
);
2846 } catch (ArgumentOutOfRangeException ex
) {
2847 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2848 Assert
.IsNull (ex
.InnerException
, "#3");
2849 Assert
.IsNotNull (ex
.Message
, "#4");
2850 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2855 public void LastIndexOfAny ()
2857 string s1
= ".bcdefghijklm";
2860 s1
.LastIndexOfAny (null);
2861 Assert
.Fail ("#A1");
2862 } catch (ArgumentNullException ex
) {
2863 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
2864 Assert
.IsNull (ex
.InnerException
, "#A3");
2865 Assert
.IsNotNull (ex
.Message
, "#A4");
2866 Assert
.IsNull (ex
.ParamName
, "#A5");
2870 s1
.LastIndexOfAny (null, s1
.Length
);
2871 Assert
.Fail ("#B1");
2872 } catch (ArgumentNullException ex
) {
2873 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#B2");
2874 Assert
.IsNull (ex
.InnerException
, "#B3");
2875 Assert
.IsNotNull (ex
.Message
, "#B4");
2876 Assert
.IsNull (ex
.ParamName
, "#B5");
2880 s1
.LastIndexOfAny (null, s1
.Length
, 1);
2881 Assert
.Fail ("#C1");
2882 } catch (ArgumentNullException ex
) {
2883 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#C2");
2884 Assert
.IsNull (ex
.InnerException
, "#C3");
2885 Assert
.IsNotNull (ex
.Message
, "#C4");
2886 Assert
.IsNull (ex
.ParamName
, "#C5");
2889 char[] c1
= {'a', 'e', 'i', 'o', 'u'}
;
2890 Assert
.AreEqual (8, s1
.LastIndexOfAny (c1
), "#D1");
2891 Assert
.AreEqual (4, s1
.LastIndexOfAny (c1
, 7), "#D2");
2892 Assert
.AreEqual (-1, s1
.LastIndexOfAny (c1
, 3), "#D3");
2893 Assert
.AreEqual (4, s1
.LastIndexOfAny (c1
, s1
.Length
- 6, 4), "#D4");
2894 Assert
.AreEqual (-1, s1
.LastIndexOfAny (c1
, s1
.Length
- 6, 3), "#D5");
2897 s1
.LastIndexOfAny (c1
, -1);
2898 Assert
.Fail ("#E1");
2899 } catch (ArgumentOutOfRangeException ex
) {
2900 // Index was out of range. Must be non-negative and
2901 // less than the size of the collection
2902 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#E2");
2903 Assert
.IsNull (ex
.InnerException
, "#E3");
2904 Assert
.IsNotNull (ex
.Message
, "#E4");
2905 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#E5");
2909 s1
.LastIndexOfAny (c1
, -1, 1);
2910 Assert
.Fail ("#F1");
2911 } catch (ArgumentOutOfRangeException ex
) {
2912 // Index was out of range. Must be non-negative and
2913 // less than the size of the collection
2914 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#F2");
2915 Assert
.IsNull (ex
.InnerException
, "#F3");
2916 Assert
.IsNotNull (ex
.Message
, "#F4");
2917 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#F5");
2922 public void LastIndexOfAny_Length_Overflow ()
2925 "Mono".LastIndexOfAny (new char [1] { 'o' }
, 1, Int32
.MaxValue
);
2927 } catch (ArgumentOutOfRangeException ex
) {
2928 // Count must be positive and count must refer to a
2929 // location within the string/array/collection
2930 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2931 Assert
.IsNull (ex
.InnerException
, "#3");
2932 Assert
.IsNotNull (ex
.Message
, "#4");
2933 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
2938 public void LastIndexOfAny_StartIndex_Overflow ()
2941 "Mono".LastIndexOfAny (new char [1] { 'o' }
, Int32
.MaxValue
, 1);
2943 } catch (ArgumentOutOfRangeException ex
) {
2944 // Index was out of range. Must be non-negative and
2945 // less than the size of the collection
2946 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2947 Assert
.IsNull (ex
.InnerException
, "#3");
2948 Assert
.IsNotNull (ex
.Message
, "#4");
2949 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
2953 [Test
] // PadLeft (Int32)
2954 public void PadLeft1 ()
2959 result
= s1
.PadLeft (0);
2960 Assert
.AreSame (s1
, result
, "#A");
2962 result
= s1
.PadLeft (s1
.Length
- 1);
2963 Assert
.AreSame (s1
, result
, "#B");
2965 result
= s1
.PadLeft (s1
.Length
);
2966 Assert
.AreEqual (s1
, result
, "#C1");
2967 Assert
.IsTrue (!object.ReferenceEquals (s1
, result
), "#C2");
2969 result
= s1
.PadLeft (s1
.Length
+ 1);
2970 Assert
.AreEqual (" Hi!", result
, "#D");
2973 [Test
] // PadLeft (Int32)
2974 public void PadLeft1_TotalWidth_Negative ()
2977 "Mono".PadLeft (-1);
2979 } catch (ArgumentOutOfRangeException ex
) {
2980 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
2981 Assert
.IsNull (ex
.InnerException
, "#3");
2982 Assert
.IsNotNull (ex
.Message
, "#4");
2983 Assert
.AreEqual ("totalWidth", ex
.ParamName
, "#5");
2988 public void PadLeft_Overflow ()
2991 "x".PadLeft (int.MaxValue
, '-');
2992 } catch (OutOfMemoryException
) {
2996 [Test
] // PadRight (Int32)
2997 public void PadRight1 ()
3002 result
= s1
.PadRight (0);
3003 Assert
.AreSame (s1
, result
, "#A");
3005 result
= s1
.PadRight (s1
.Length
- 1);
3006 Assert
.AreSame (s1
, result
, "#B");
3008 result
= s1
.PadRight (s1
.Length
);
3009 Assert
.AreEqual (s1
, result
, "#C1");
3010 Assert
.IsTrue (!object.ReferenceEquals (s1
, result
), "#C2");
3012 result
= s1
.PadRight (s1
.Length
+ 1);
3013 Assert
.AreEqual ("Hi! ", result
, "#D");
3016 [Test
] // PadRight1 (Int32)
3017 public void PadRight1_TotalWidth_Negative ()
3020 "Mono".PadRight (-1);
3022 } catch (ArgumentOutOfRangeException ex
) {
3023 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3024 Assert
.IsNull (ex
.InnerException
, "#3");
3025 Assert
.IsNotNull (ex
.Message
, "#4");
3026 Assert
.AreEqual ("totalWidth", ex
.ParamName
, "#5");
3031 public void PadRight2 ()
3033 Assert
.AreEqual ("100000000000", "1".PadRight (12, '0'), "#1");
3034 Assert
.AreEqual ("000000000000", "".PadRight (12, '0'), "#2");
3038 public void PadRight_Overflow ()
3041 "x".PadRight (int.MaxValue
, '-');
3042 } catch (OutOfMemoryException
) {
3046 [Test
] // Remove (Int32, Int32)
3047 public void Remove2 ()
3049 string s1
= "original";
3053 Assert
.Fail ("#A1");
3054 } catch (ArgumentOutOfRangeException ex
) {
3055 // StartIndex cannot be less than zero
3056 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
3057 Assert
.IsNull (ex
.InnerException
, "#A3");
3058 Assert
.IsNotNull (ex
.Message
, "#A4");
3059 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
3064 Assert
.Fail ("#B1");
3065 } catch (ArgumentOutOfRangeException ex
) {
3066 // Count cannot be less than zero
3067 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
3068 Assert
.IsNull (ex
.InnerException
, "#B3");
3069 Assert
.IsNotNull (ex
.Message
, "#B4");
3070 Assert
.AreEqual ("count", ex
.ParamName
, "#B5");
3074 s1
.Remove (s1
.Length
, s1
.Length
);
3075 Assert
.Fail ("#C1");
3076 } catch (ArgumentOutOfRangeException ex
) {
3077 // Index and count must refer to a location within the
3079 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
3080 Assert
.IsNull (ex
.InnerException
, "#C3");
3081 Assert
.IsNotNull (ex
.Message
, "#C4");
3082 Assert
.AreEqual ("count", ex
.ParamName
, "#C5");
3085 Assert
.AreEqual ("oinal", s1
.Remove(1, 3), "#D1");
3086 Assert
.AreEqual (s1
, s1
.Remove (0, 0), "#D2");
3087 Assert
.IsTrue (!object.ReferenceEquals (s1
, s1
.Remove (0, 0)), "#D3");
3088 Assert
.AreEqual ("riginal", s1
.Remove (0, 1), "#D4");
3089 Assert
.AreEqual ("origina", s1
.Remove (7, 1), "#D5");
3092 [Test
] // Remove (Int32, Int32)
3093 public void Remove2_Length_Overflow ()
3096 "Mono".Remove (1, Int32
.MaxValue
);
3098 } catch (ArgumentOutOfRangeException ex
) {
3099 // Index and count must refer to a location within the
3101 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3102 Assert
.IsNull (ex
.InnerException
, "#3");
3103 Assert
.IsNotNull (ex
.Message
, "#4");
3104 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
3108 [Test
] // Remove (Int32, Int32)
3109 public void Remove2_StartIndex_Overflow ()
3112 "Mono".Remove (Int32
.MaxValue
, 1);
3114 } catch (ArgumentOutOfRangeException ex
) {
3115 // Index and count must refer to a location within the
3117 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3118 Assert
.IsNull (ex
.InnerException
, "#3");
3119 Assert
.IsNotNull (ex
.Message
, "#4");
3120 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
3124 [Test
] // Remove (Int32)
3125 public void Remove1_StartIndex_Negative ()
3130 } catch (ArgumentOutOfRangeException ex
) {
3131 // StartIndex cannot be less than zero
3132 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3133 Assert
.IsNull (ex
.InnerException
, "#3");
3134 Assert
.IsNotNull (ex
.Message
, "#4");
3135 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3139 [Test
] // Remove (Int32)
3140 public void Remove1_StartIndex_Overflow ()
3145 } catch (ArgumentOutOfRangeException ex
) {
3146 // startIndex must be less than length of string
3147 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3148 Assert
.IsNull (ex
.InnerException
, "#3");
3149 Assert
.IsNotNull (ex
.Message
, "#4");
3150 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3154 [Test
] // Remove (Int32)
3155 public void Remove1 ()
3159 Assert
.AreEqual ("AB", s
.Remove (2), "#1");
3160 Assert
.AreEqual (string.Empty
, s
.Remove (0), "#2");
3161 Assert
.AreEqual ("A", s
.Remove (1), "#3");
3165 public void Replace()
3167 string s1
= "original";
3169 Assert
.AreEqual (s1
, s1
.Replace('q', 's'), "non-hit char");
3170 Assert
.AreEqual ("oxiginal", s1
.Replace('r', 'x'), "single char");
3171 Assert
.AreEqual ("orxgxnal", s1
.Replace('i', 'x'), "double char");
3173 bool errorThrown
= false;
3175 string s
= s1
.Replace(null, "feh");
3176 } catch (ArgumentNullException
) {
3179 Assert
.IsTrue (errorThrown
, "should get null arg exception");
3181 Assert
.AreEqual ("ornal", s1
.Replace("igi", null), "replace as remove");
3182 Assert
.AreEqual (s1
, s1
.Replace("spam", "eggs"), "non-hit string");
3183 Assert
.AreEqual ("orirumal", s1
.Replace("gin", "rum"), "single string");
3184 Assert
.AreEqual ("oreigeinal", s1
.Replace("i", "ei"), "double string");
3186 Assert
.AreEqual ("ooriginal", s1
.Replace("o", "oo"), "start");
3187 Assert
.AreEqual ("originall", s1
.Replace("l", "ll"), "end");
3189 Assert
.AreEqual ("riginal", s1
.Replace("o", string.Empty
), "start empty");
3190 Assert
.AreEqual ("origina", s1
.Replace("l", string.Empty
), "end empty");
3192 Assert
.AreEqual ("original", s1
.Replace("original2", "original3"), "replace bigger that original");
3194 Assert
.AreEqual (":!:", "::".Replace ("::", ":!:"), "result longer");
3196 // Test overlapping matches (bug #54988)
3197 string s2
= "...aaaaaaa.bbbbbbbbb,............ccccccc.u...";
3198 Assert
.AreEqual (s2
.Replace("..", "."), "..aaaaaaa.bbbbbbbbb,......ccccccc.u..");
3200 // Test replacing null characters (bug #67395)
3201 Assert
.AreEqual ("is this ok ?", "is \0 ok ?".Replace ("\0", "this"), "should not strip content after nullchar");
3205 public void ReplaceStringBeginEndTest ()
3207 string s1
= "original";
3209 Assert
.AreEqual ("riginal", s1
.Replace ("o", ""), "#1");
3210 Assert
.AreEqual ("origina", s1
.Replace ("l", ""), "#2");
3211 Assert
.AreEqual ("ariginal", s1
.Replace ("o", "a"), "#3");
3212 Assert
.AreEqual ("originaa", s1
.Replace ("l", "a"), "#4");
3213 Assert
.AreEqual ("aariginal", s1
.Replace ("o", "aa"), "#5");
3214 Assert
.AreEqual ("originaaa", s1
.Replace ("l", "aa"), "#6");
3215 Assert
.AreEqual ("original", s1
.Replace ("o", "o"), "#7");
3216 Assert
.AreEqual ("original", s1
.Replace ("l", "l"), "#8");
3217 Assert
.AreEqual ("original", s1
.Replace ("original", "original"), "#9");
3218 Assert
.AreEqual ("", s1
.Replace ("original", ""), "#10");
3222 public void ReplaceStringBeginEndTestFallback ()
3224 string prev
= new String ('o', 300);
3225 string s1
= prev
+ "riginal";
3227 Assert
.AreEqual ("riginal", s1
.Replace ("o", ""), "#1");
3228 Assert
.AreEqual (prev
+ "rigina", s1
.Replace ("l", ""), "#2");
3229 Assert
.AreEqual (new String ('a', 300) + "riginal", s1
.Replace ("o", "a"), "#3");
3230 Assert
.AreEqual (prev
+ "riginaa", s1
.Replace ("l", "a"), "#4");
3231 Assert
.AreEqual (new String ('a', 600) + "riginal", s1
.Replace ("o", "aa"), "#5");
3232 Assert
.AreEqual (prev
+ "riginaaa", s1
.Replace ("l", "aa"), "#6");
3233 Assert
.AreEqual (s1
, s1
.Replace ("o", "o"), "#7");
3234 Assert
.AreEqual (s1
, s1
.Replace ("l", "l"), "#8");
3235 Assert
.AreEqual (s1
, s1
.Replace (s1
, s1
), "#9");
3236 Assert
.AreEqual ("", s1
.Replace (prev
+ "riginal", ""), "#10");
3240 public void ReplaceStringOffByOne ()
3242 Assert
.AreEqual ("", new String ('o', 199).Replace ("o", ""), "#-1");
3243 Assert
.AreEqual ("", new String ('o', 200).Replace ("o", ""), "#0");
3244 Assert
.AreEqual ("", new String ('o', 201).Replace ("o", ""), "#+1");
3248 public void ReplaceStringCultureTests ()
3250 // LAMESPEC: According to MSDN Replace with String parameter is culture-senstive.
3251 // However this does not currently seem to be the case. Otherwise following code should
3252 // produce "check" instead of "AE"
3254 CultureInfo old
= Thread
.CurrentThread
.CurrentCulture
;
3255 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
3256 Assert
.AreEqual ("AE", "AE".Replace ("\u00C6", "check"), "#1");
3257 Thread
.CurrentThread
.CurrentCulture
= old
;
3260 [Test
] // StartsWith (String)
3261 public void StartsWith1 ()
3263 string s1
= "original";
3265 Assert
.IsTrue (s1
.StartsWith ("o"), "#1");
3266 Assert
.IsTrue (s1
.StartsWith ("orig"), "#2");
3267 Assert
.IsTrue (!s1
.StartsWith ("rig"), "#3");
3268 Assert
.IsTrue (s1
.StartsWith (String
.Empty
), "#4");
3269 Assert
.IsTrue (String
.Empty
.StartsWith (String
.Empty
), "#5");
3270 Assert
.IsTrue (!String
.Empty
.StartsWith ("rig"), "#6");
3273 [Test
] // StartsWith (String)
3274 public void StartsWith1_Value_Null ()
3277 "A".StartsWith (null);
3279 } catch (ArgumentNullException ex
) {
3280 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
3281 Assert
.IsNull (ex
.InnerException
, "#3");
3282 Assert
.IsNotNull (ex
.Message
, "#4");
3283 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
3287 [Test
] // StartsWith (String, StringComparison)
3288 public void StartsWith2_ComparisonType_Invalid ()
3291 "ABC".StartsWith ("A", (StringComparison
) 80);
3293 } catch (ArgumentException ex
) {
3294 // The string comparison type passed in is currently
3296 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
3297 Assert
.IsNull (ex
.InnerException
, "#3");
3298 Assert
.IsNotNull (ex
.Message
, "#4");
3299 Assert
.AreEqual ("comparisonType", ex
.ParamName
, "#5");
3303 [Test
] // StartsWith (String, StringComparison)
3304 public void StartsWith2_Value_Null ()
3307 "A".StartsWith (null, StringComparison
.CurrentCulture
);
3309 } catch (ArgumentNullException ex
) {
3310 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
3311 Assert
.IsNull (ex
.InnerException
, "#3");
3312 Assert
.IsNotNull (ex
.Message
, "#4");
3313 Assert
.AreEqual ("value", ex
.ParamName
, "#5");
3317 [Test
] // StartsWith (String, Boolean, CultureInfo)
3318 public void StartsWith3_Culture_Null ()
3320 // This should not crash
3323 s
.StartsWith ("this", true, null);
3326 [Test
] // SubString (Int32)
3327 public void Substring1 ()
3329 string s
= "original";
3331 Assert
.AreEqual ("inal", s
.Substring (4), "#1");
3332 Assert
.AreEqual (string.Empty
, s
.Substring (s
.Length
), "#2");
3333 Assert
.AreSame (s
, s
.Substring (0), "#3");
3336 [Test
] // SubString (Int32)
3337 public void SubString1_StartIndex_Negative ()
3339 string s
= "original";
3344 } catch (ArgumentOutOfRangeException ex
) {
3345 // StartIndex cannot be less than zero
3346 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3347 Assert
.IsNull (ex
.InnerException
, "#3");
3348 Assert
.IsNotNull (ex
.Message
, "#4");
3349 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3353 [Test
] // SubString (Int32)
3354 public void SubString1_StartIndex_Overflow ()
3356 string s
= "original";
3359 s
.Substring (s
.Length
+ 1);
3361 } catch (ArgumentOutOfRangeException ex
) {
3362 // startIndex cannot be larger than length of string
3363 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3364 Assert
.IsNull (ex
.InnerException
, "#3");
3365 Assert
.IsNotNull (ex
.Message
, "#4");
3366 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3370 [Test
] // SubString (Int32, Int32)
3371 public void Substring2 ()
3373 string s
= "original";
3375 Assert
.AreEqual ("igin", s
.Substring (2, 4), "#1");
3376 Assert
.AreEqual (string.Empty
, s
.Substring (s
.Length
, 0), "#2");
3377 Assert
.AreEqual ("origina", s
.Substring (0, s
.Length
- 1), "#3");
3378 Assert
.AreEqual (s
, s
.Substring (0, s
.Length
), "#4");
3379 Assert
.AreSame (s
, s
.Substring (0, s
.Length
), "#5");
3382 [Test
] // SubString (Int32, Int32)
3383 public void SubString2_Length_Negative ()
3385 string s
= "original";
3388 s
.Substring (1, -1);
3390 } catch (ArgumentOutOfRangeException ex
) {
3391 // Length cannot be less than zero
3392 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3393 Assert
.IsNull (ex
.InnerException
, "#3");
3394 Assert
.IsNotNull (ex
.Message
, "#4");
3395 Assert
.AreEqual ("length", ex
.ParamName
, "#5");
3399 [Test
] // SubString (Int32, Int32)
3400 public void Substring2_Length_Overflow ()
3402 string s
= "original";
3405 s
.Substring (s
.Length
, 1);
3406 Assert
.Fail ("#A1");
3407 } catch (ArgumentOutOfRangeException ex
) {
3408 // Index and length must refer to a location within
3410 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
3411 Assert
.IsNull (ex
.InnerException
, "#A3");
3412 Assert
.IsNotNull (ex
.Message
, "#A4");
3413 Assert
.AreEqual ("length", ex
.ParamName
, "#A5");
3417 s
.Substring (1, s
.Length
);
3418 Assert
.Fail ("#B1");
3419 } catch (ArgumentOutOfRangeException ex
) {
3420 // Index and length must refer to a location within
3422 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
3423 Assert
.IsNull (ex
.InnerException
, "#B3");
3424 Assert
.IsNotNull (ex
.Message
, "#B4");
3425 Assert
.AreEqual ("length", ex
.ParamName
, "#B5");
3429 s
.Substring (1, Int32
.MaxValue
);
3430 Assert
.Fail ("#C1");
3431 } catch (ArgumentOutOfRangeException ex
) {
3432 // Index and length must refer to a location within
3434 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#C2");
3435 Assert
.IsNull (ex
.InnerException
, "#C3");
3436 Assert
.IsNotNull (ex
.Message
, "#C4");
3437 Assert
.AreEqual ("length", ex
.ParamName
, "#C5");
3441 [Test
] // SubString (Int32, Int32)
3442 public void SubString2_StartIndex_Negative ()
3444 string s
= "original";
3447 s
.Substring (-1, 1);
3449 } catch (ArgumentOutOfRangeException ex
) {
3450 // StartIndex cannot be less than zero
3451 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3452 Assert
.IsNull (ex
.InnerException
, "#3");
3453 Assert
.IsNotNull (ex
.Message
, "#4");
3454 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3458 [Test
] // SubString (Int32, Int32)
3459 public void Substring2_StartIndex_Overflow ()
3461 string s
= "original";
3464 s
.Substring (s
.Length
+ 1, 0);
3465 Assert
.Fail ("#A1");
3466 } catch (ArgumentOutOfRangeException ex
) {
3467 // startIndex cannot be larger than length of string
3468 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
3469 Assert
.IsNull (ex
.InnerException
, "#A3");
3470 Assert
.IsNotNull (ex
.Message
, "#A4");
3471 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
3475 "Mono".Substring (Int32
.MaxValue
, 1);
3476 Assert
.Fail ("#B1");
3477 } catch (ArgumentOutOfRangeException ex
) {
3478 // startIndex cannot be larger than length of string
3479 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
3480 Assert
.IsNull (ex
.InnerException
, "#B3");
3481 Assert
.IsNotNull (ex
.Message
, "#B4");
3482 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
3487 public void ToCharArray ()
3489 const string s
= "original";
3492 c
= s
.ToCharArray ();
3493 Assert
.AreEqual (s
.Length
, c
.Length
, "#A1");
3494 Assert
.AreEqual (s
, new String (c
), "#A2");
3496 c
= s
.ToCharArray (0, s
.Length
);
3497 Assert
.AreEqual (s
.Length
, c
.Length
, "#B1");
3498 Assert
.AreEqual (s
, new String (c
), "#B2");
3500 c
= s
.ToCharArray (1, s
.Length
- 1);
3501 Assert
.AreEqual (7, c
.Length
, "#C1");
3502 Assert
.AreEqual ("riginal", new String (c
), "#C2");
3504 c
= s
.ToCharArray (0, 3);
3505 Assert
.AreEqual (3, c
.Length
, "#D1");
3506 Assert
.AreEqual ("ori", new String (c
), "#D2");
3508 c
= s
.ToCharArray (2, 0);
3509 Assert
.AreEqual (0, c
.Length
, "#E1");
3510 Assert
.AreEqual (string.Empty
, new String (c
), "#E2");
3512 c
= s
.ToCharArray (3, 2);
3513 Assert
.AreEqual (2, c
.Length
, "#F1");
3514 Assert
.AreEqual ("gi", new String (c
), "#F2");
3516 c
= s
.ToCharArray (s
.Length
, 0);
3517 Assert
.AreEqual (0, c
.Length
, "#G1");
3518 Assert
.AreEqual (string.Empty
, new String (c
), "#G2");
3522 public void ToCharArray_Length_Negative ()
3524 const string s
= "original";
3527 s
.ToCharArray (1, -1);
3529 } catch (ArgumentOutOfRangeException ex
) {
3530 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3531 Assert
.IsNull (ex
.InnerException
, "#3");
3532 Assert
.IsNotNull (ex
.Message
, "#4");
3533 Assert
.AreEqual ("length", ex
.ParamName
, "#5");
3538 public void ToCharArray_Length_Overflow ()
3540 const string s
= "original";
3543 s
.ToCharArray (1, s
.Length
);
3544 Assert
.Fail ("#A1");
3545 } catch (ArgumentOutOfRangeException ex
) {
3546 // Index was out of range. Must be non-negative and
3547 // less than the size of the collection
3548 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
3549 Assert
.IsNull (ex
.InnerException
, "#A3");
3550 Assert
.IsNotNull (ex
.Message
, "#A4");
3551 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
3555 s
.ToCharArray (1, Int32
.MaxValue
);
3556 Assert
.Fail ("#B1");
3557 } catch (ArgumentOutOfRangeException ex
) {
3558 // Index was out of range. Must be non-negative and
3559 // less than the size of the collection
3560 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
3561 Assert
.IsNull (ex
.InnerException
, "#B3");
3562 Assert
.IsNotNull (ex
.Message
, "#B4");
3563 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
3568 public void ToCharArray_StartIndex_Negative ()
3570 const string s
= "original";
3573 s
.ToCharArray (-1, 1);
3575 } catch (ArgumentOutOfRangeException ex
) {
3576 // Index was out of range. Must be non-negative and
3577 // less than the size of the collection
3578 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3579 Assert
.IsNull (ex
.InnerException
, "#3");
3580 Assert
.IsNotNull (ex
.Message
, "#4");
3581 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3586 public void ToCharArray_StartIndex_Overflow ()
3588 const string s
= "original";
3591 s
.ToCharArray (s
.Length
, 1);
3592 Assert
.Fail ("#A1");
3593 } catch (ArgumentOutOfRangeException ex
) {
3594 // Index was out of range. Must be non-negative and
3595 // less than the size of the collection
3596 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#A2");
3597 Assert
.IsNull (ex
.InnerException
, "#A3");
3598 Assert
.IsNotNull (ex
.Message
, "#A4");
3599 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#A5");
3603 s
.ToCharArray (Int32
.MaxValue
, 1);
3604 Assert
.Fail ("#B1");
3605 } catch (ArgumentOutOfRangeException ex
) {
3606 // Index was out of range. Must be non-negative and
3607 // less than the size of the collection
3608 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#B2");
3609 Assert
.IsNull (ex
.InnerException
, "#B3");
3610 Assert
.IsNotNull (ex
.Message
, "#B4");
3611 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#B5");
3615 [Test
] // ToLower ()
3616 public void ToLower1 ()
3618 string s
= "OrIgInAli";
3620 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
3622 Assert
.AreEqual ("\u006f\u0072\u0131\u0067\u0131\u006e\u0061\u006c\u0069", s
.ToLower(), "#1");
3624 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
3626 Assert
.AreEqual ("originali", s
.ToLower (), "#2");
3629 [Test
] // ToLower (CultureInfo)
3630 public void ToLower2 ()
3632 string s
= "OrIgInAli";
3634 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
3636 Assert
.AreEqual ("originali", s
.ToLower (new CultureInfo ("en-US")), "#A1");
3637 Assert
.AreEqual ("\u006f\u0072\u0131\u0067\u0131\u006e\u0061\u006c\u0069", s
.ToLower (new CultureInfo ("tr-TR")), "#A2");
3638 Assert
.AreEqual (string.Empty
, string.Empty
.ToLower (new CultureInfo ("en-US")), "#A3");
3639 Assert
.AreEqual (string.Empty
, string.Empty
.ToLower (new CultureInfo ("tr-TR")), "#A4");
3641 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
3643 Assert
.AreEqual ("originali", s
.ToLower (new CultureInfo ("en-US")), "#B1");
3644 Assert
.AreEqual ("\u006f\u0072\u0131\u0067\u0131\u006e\u0061\u006c\u0069", s
.ToLower (new CultureInfo ("tr-TR")), "#B2");
3645 Assert
.AreEqual (string.Empty
, string.Empty
.ToLower (new CultureInfo ("en-US")), "#B3");
3646 Assert
.AreEqual (string.Empty
, string.Empty
.ToLower (new CultureInfo ("tr-TR")), "#B4");
3649 [Test
] // ToLower (CultureInfo)
3650 public void ToLower2_Culture_Null ()
3652 string s
= "OrIgInAl";
3655 s
.ToLower ((CultureInfo
) null);
3656 Assert
.Fail ("#A1");
3657 } catch (ArgumentNullException ex
) {
3658 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
3659 Assert
.IsNull (ex
.InnerException
, "#A3");
3660 Assert
.IsNotNull (ex
.Message
, "#A4");
3661 Assert
.AreEqual ("culture", ex
.ParamName
, "#A5");
3665 string.Empty
.ToLower ((CultureInfo
) null);
3666 Assert
.Fail ("#B1");
3667 } catch (ArgumentNullException ex
) {
3668 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#B2");
3669 Assert
.IsNull (ex
.InnerException
, "#B3");
3670 Assert
.IsNotNull (ex
.Message
, "#B4");
3671 Assert
.AreEqual ("culture", ex
.ParamName
, "#B5");
3676 public void TestToString ()
3678 string s1
= "OrIgInAli";
3679 Assert
.AreEqual (s1
, s1
.ToString(), "ToString failed!");
3682 [Test
] // ToUpper ()
3683 public void ToUpper1 ()
3685 string s
= "OrIgInAli";
3687 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
3689 Assert
.AreEqual ("ORIGINAL\u0130", s
.ToUpper (), "#1");
3691 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
3693 Assert
.AreEqual ("ORIGINALI", s
.ToUpper (), "#2");
3696 [Test
] // ToUpper (CultureInfo)
3697 public void ToUpper2 ()
3699 string s
= "OrIgInAli";
3701 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("tr-TR");
3703 Assert
.AreEqual ("ORIGINALI", s
.ToUpper (new CultureInfo ("en-US")), "#A1");
3704 Assert
.AreEqual ("ORIGINAL\u0130", s
.ToUpper (new CultureInfo ("tr-TR")), "#A2");
3705 Assert
.AreEqual (string.Empty
, string.Empty
.ToUpper (new CultureInfo ("en-US")), "#A3");
3706 Assert
.AreEqual (string.Empty
, string.Empty
.ToUpper (new CultureInfo ("tr-TR")), "#A4");
3708 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
3710 Assert
.AreEqual ("ORIGINALI", s
.ToUpper (new CultureInfo ("en-US")), "#B1");
3711 Assert
.AreEqual ("ORIGINAL\u0130", s
.ToUpper (new CultureInfo ("tr-TR")), "#B2");
3712 Assert
.AreEqual (string.Empty
, string.Empty
.ToUpper (new CultureInfo ("en-US")), "#B3");
3713 Assert
.AreEqual (string.Empty
, string.Empty
.ToUpper (new CultureInfo ("tr-TR")), "#B4");
3716 [Test
] // ToUpper (CultureInfo)
3717 public void ToUpper2_Culture_Null ()
3719 string s
= "OrIgInAl";
3722 s
.ToUpper ((CultureInfo
) null);
3723 Assert
.Fail ("#A1");
3724 } catch (ArgumentNullException ex
) {
3725 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
3726 Assert
.IsNull (ex
.InnerException
, "#A3");
3727 Assert
.IsNotNull (ex
.Message
, "#A4");
3728 Assert
.AreEqual ("culture", ex
.ParamName
, "#A5");
3732 string.Empty
.ToUpper ((CultureInfo
) null);
3733 Assert
.Fail ("#B1");
3734 } catch (ArgumentNullException ex
) {
3735 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#B2");
3736 Assert
.IsNull (ex
.InnerException
, "#B3");
3737 Assert
.IsNotNull (ex
.Message
, "#B4");
3738 Assert
.AreEqual ("culture", ex
.ParamName
, "#B5");
3743 public void TestTrim ()
3745 string s1
= " original\t\n";
3746 Assert
.AreEqual ("original", s1
.Trim(), "basic trim failed");
3747 Assert
.AreEqual ("original", s1
.Trim(null), "basic trim failed");
3750 Assert
.AreEqual ("original", s1
.Trim(), "basic trim failed");
3751 Assert
.AreEqual ("original", s1
.Trim(null), "basic trim failed");
3754 Assert
.AreEqual (string.Empty
, s1
.Trim(), "empty trim failed");
3755 Assert
.AreEqual (string.Empty
, s1
.Trim(null), "empty trim failed");
3757 s1
= "aaaoriginalbbb";
3758 char[] delims
= {'a', 'b'}
;
3759 Assert
.AreEqual ("original", s1
.Trim(delims
), "custom trim failed");
3761 Assert
.AreEqual ("original", "\u2028original\u2029".Trim (), "net_2_0 additional char#1");
3762 Assert
.AreEqual ("original", "\u0085original\u1680".Trim (), "net_2_0 additional char#2");
3765 Assert
.AreEqual ("", "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x180e\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Trim (), "net_4_0 changes #1");
3770 public void TestTrimEnd ()
3772 string s1
= " original\t\n";
3773 Assert
.AreEqual (" original", s1
.TrimEnd(null), "basic TrimEnd failed");
3776 Assert
.AreEqual (" original", s1
.TrimEnd(null), "basic TrimEnd failed");
3779 Assert
.AreEqual (string.Empty
, s1
.TrimEnd(null), "empty TrimEnd failed");
3781 s1
= "aaaoriginalbbb";
3782 char[] delims
= {'a', 'b'}
;
3783 Assert
.AreEqual ("aaaoriginal", s1
.TrimEnd(delims
), "custom TrimEnd failed");
3787 public void TestTrimStart ()
3789 string s1
= " original\t\n";
3790 Assert
.AreEqual ("original\t\n", s1
.TrimStart(null), "basic TrimStart failed");
3792 s1
= "original\t\n";
3793 Assert
.AreEqual ("original\t\n", s1
.TrimStart(null), "basic TrimStart failed");
3796 Assert
.AreEqual (string.Empty
, s1
.TrimStart(null), "empty TrimStart failed");
3798 s1
= "aaaoriginalbbb";
3799 char[] delims
= {'a', 'b'}
;
3800 Assert
.AreEqual ("originalbbb", s1
.TrimStart(delims
), "custom TrimStart failed");
3804 public void TestChars ()
3811 Assert
.Fail ("#A1:" + c
);
3812 } catch (IndexOutOfRangeException ex
) {
3813 Assert
.AreEqual (typeof (IndexOutOfRangeException
), ex
.GetType (), "#A2");
3814 Assert
.IsNull (ex
.InnerException
, "#A3");
3815 Assert
.IsNotNull (ex
.Message
, "#A4");
3821 Assert
.Fail ("#B1:" + c
);
3822 } catch (IndexOutOfRangeException ex
) {
3823 Assert
.AreEqual (typeof (IndexOutOfRangeException
), ex
.GetType (), "#B2");
3824 Assert
.IsNull (ex
.InnerException
, "#B3");
3825 Assert
.IsNotNull (ex
.Message
, "#B4");
3830 public void TestComparePeriod ()
3832 // according to bug 63981, this behavior is for all cultures
3833 Assert
.AreEqual (-1, String
.Compare ("foo.obj", "foobar.obj", false), "#1");
3837 public void LastIndexOfAnyBounds1 ()
3839 string mono
= "Mono";
3840 char [] k
= { 'M' }
;
3842 mono
.LastIndexOfAny (k
, mono
.Length
, 1);
3844 } catch (ArgumentOutOfRangeException ex
) {
3845 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
3846 Assert
.IsNull (ex
.InnerException
, "#3");
3847 Assert
.IsNotNull (ex
.Message
, "#4");
3848 Assert
.AreEqual ("startIndex", ex
.ParamName
, "#5");
3853 public void TestSplit ()
3855 string s1
= "abcdefghijklm";
3856 char[] c1
= {'q', 'r'}
;
3857 Assert
.AreEqual (s1
, (s1
.Split(c1
))[0], "No splitters");
3859 char[] c2
= {'a', 'e', 'i', 'o', 'u'}
;
3860 string[] chunks
= s1
.Split(c2
);
3861 Assert
.AreEqual (string.Empty
, chunks
[0], "First chunk");
3862 Assert
.AreEqual ("bcd", chunks
[1], "Second chunk");
3863 Assert
.AreEqual ("fgh", chunks
[2], "Third chunk");
3864 Assert
.AreEqual ("jklm", chunks
[3], "Fourth chunk");
3867 bool errorThrown
= false;
3869 chunks
= s1
.Split(c2
, -1);
3870 } catch (ArgumentOutOfRangeException
) {
3873 Assert
.IsTrue (errorThrown
, "Split out of range");
3876 chunks
= s1
.Split(c2
, 2);
3877 Assert
.AreEqual (2, chunks
.Length
, "Limited chunk");
3878 Assert
.AreEqual (string.Empty
, chunks
[0], "First limited chunk");
3879 Assert
.AreEqual ("bcdefghijklm", chunks
[1], "Second limited chunk");
3883 chunks
= s3
.Split(c3
,2);
3884 Assert
.AreEqual (2, chunks
.Length
, "1.0 split length");
3885 Assert
.AreEqual ("1", chunks
[0], "1.0 split first chunk");
3886 Assert
.AreEqual ("0", chunks
[1], "1.0 split second chunk");
3888 string s4
= "1.0.0";
3890 chunks
= s4
.Split(c4
,2);
3891 Assert
.AreEqual (2, chunks
.Length
, "1.0.0 split length");
3892 Assert
.AreEqual ("1", chunks
[0], "1.0.0 split first chunk");
3893 Assert
.AreEqual ("0.0", chunks
[1], "1.0.0 split second chunk");
3897 chunks
= s5
.Split (c5
, 2);
3898 Assert
.AreEqual (2, chunks
.Length
, ".0.0 split length");
3899 Assert
.AreEqual (string.Empty
, chunks
[0], ".0.0 split first chunk");
3900 Assert
.AreEqual ("0.0", chunks
[1], ".0.0 split second chunk");
3904 chunks
= s6
.Split (c6
, 2);
3905 Assert
.AreEqual (2, chunks
.Length
, ".0 split length");
3906 Assert
.AreEqual (string.Empty
, chunks
[0], ".0 split first chunk");
3907 Assert
.AreEqual ("0", chunks
[1], ".0 split second chunk");
3911 chunks
= s7
.Split (c7
, 2);
3912 Assert
.AreEqual (2, chunks
.Length
, "0. split length");
3913 Assert
.AreEqual ("0", chunks
[0], "0. split first chunk");
3914 Assert
.AreEqual (string.Empty
, chunks
[1], "0. split second chunk");
3916 string s8
= "0.0000";
3918 chunks
= s8
.Split (c8
, 2);
3919 Assert
.AreEqual (2, chunks
.Length
, "0.0000/2 split length");
3920 Assert
.AreEqual ("0", chunks
[0], "0.0000/2 split first chunk");
3921 Assert
.AreEqual ("0000", chunks
[1], "0.0000/2 split second chunk");
3923 chunks
= s8
.Split (c8
, 3);
3924 Assert
.AreEqual (2, chunks
.Length
, "0.0000/3 split length");
3925 Assert
.AreEqual ("0", chunks
[0], "0.0000/3 split first chunk");
3926 Assert
.AreEqual ("0000", chunks
[1], "0.0000/3 split second chunk");
3928 chunks
= s8
.Split (c8
, 1);
3929 Assert
.AreEqual (1, chunks
.Length
, "0.0000/1 split length");
3930 Assert
.AreEqual ("0.0000", chunks
[0], "0.0000/1 split first chunk");
3932 chunks
= s1
.Split(c2
, 1);
3933 Assert
.AreEqual (1, chunks
.Length
, "Single split");
3934 Assert
.AreEqual (s1
, chunks
[0], "Single chunk");
3936 chunks
= s1
.Split(c2
, 0);
3937 Assert
.AreEqual (0, chunks
.Length
, "Zero split");
3940 Assert
.AreEqual (0, "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x180e\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Split ((char[]) null, StringSplitOptions
.RemoveEmptyEntries
).Length
, "net_4_0 changes");
3945 public void MoreSplit ()
3947 string test
= "123 456 789";
3948 string [] st
= test
.Split ();
3949 Assert
.AreEqual ("123", st
[0], "#01");
3950 st
= test
.Split (null);
3951 Assert
.AreEqual ("123", st
[0], "#02");
3953 Assert
.AreEqual (1, "encyclopædia".Split (new[] { "ae" }
, StringSplitOptions
.None
).Length
, "#03");
3956 [Test
] // Split (Char [], StringSplitOptions)
3957 public void Split3_Options_Invalid ()
3960 "A B".Split (new Char
[] { 'A' }
, (StringSplitOptions
) 4096);
3962 } catch (ArgumentException ex
) {
3963 // Illegal enum value: 4096
3964 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
3965 Assert
.IsNull (ex
.InnerException
, "#3");
3966 Assert
.IsNotNull (ex
.Message
, "#4");
3967 Assert
.IsTrue (ex
.Message
.IndexOf ("4096") != 1, "#5");
3968 Assert
.IsNull (ex
.ParamName
, "#6");
3972 [Test
] // Split (Char [], StringSplitOptions)
3973 public void Split4_Options_Invalid ()
3976 "A B".Split (new String
[] { "A" }
, (StringSplitOptions
) 4096);
3978 } catch (ArgumentException ex
) {
3979 // Illegal enum value: 4096
3980 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
3981 Assert
.IsNull (ex
.InnerException
, "#3");
3982 Assert
.IsNotNull (ex
.Message
, "#4");
3983 Assert
.IsTrue (ex
.Message
.IndexOf ("4096") != 1, "#5");
3984 Assert
.IsNull (ex
.ParamName
, "#6");
3988 [Test
] // Split (Char [], StringSplitOptions)
3989 public void Split5_Options_Invalid ()
3992 "A B".Split (new Char
[] { 'A' }
, 0, (StringSplitOptions
) 4096);
3994 } catch (ArgumentException ex
) {
3995 // Illegal enum value: 4096
3996 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
3997 Assert
.IsNull (ex
.InnerException
, "#3");
3998 Assert
.IsNotNull (ex
.Message
, "#4");
3999 Assert
.IsTrue (ex
.Message
.IndexOf ("4096") != 1, "#5");
4000 Assert
.IsNull (ex
.ParamName
, "#6");
4004 [Test
] // Split (String [], Int32, StringSplitOptions)
4005 public void Split6_Count_Negative ()
4008 "A B".Split (new String
[] { "A" }
, -1, StringSplitOptions
.None
);
4010 } catch (ArgumentOutOfRangeException ex
) {
4011 Assert
.AreEqual (typeof (ArgumentOutOfRangeException
), ex
.GetType (), "#2");
4012 Assert
.IsNull (ex
.InnerException
, "#3");
4013 Assert
.IsNotNull (ex
.Message
, "#4");
4014 Assert
.AreEqual ("count", ex
.ParamName
, "#5");
4018 [Test
] // Split (String [], Int32, StringSplitOptions)
4019 public void Split6_Options_Invalid ()
4022 "A B".Split (new String
[] { "A" }
, 0, (StringSplitOptions
) 4096);
4024 } catch (ArgumentException ex
) {
4025 // Illegal enum value: 4096
4026 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
4027 Assert
.IsNull (ex
.InnerException
, "#3");
4028 Assert
.IsNotNull (ex
.Message
, "#4");
4029 Assert
.IsTrue (ex
.Message
.IndexOf ("4096") != 1, "#5");
4030 Assert
.IsNull (ex
.ParamName
, "#6");
4035 public void SplitString ()
4040 res
= "A B C".Split (new String
[] { "A" }
, 0, StringSplitOptions
.None
);
4041 Assert
.AreEqual (0, res
.Length
);
4043 // empty and RemoveEmpty
4044 res
= string.Empty
.Split (new String
[] { "A" }
, StringSplitOptions
.RemoveEmptyEntries
);
4045 Assert
.AreEqual (0, res
.Length
);
4048 res
= "A B C".Split (new String
[] { "D" }
, StringSplitOptions
.None
);
4049 Assert
.AreEqual (1, res
.Length
);
4050 Assert
.AreEqual ("A B C", res
[0]);
4053 res
= "A B C DD E".Split (new String
[] { "B", "D" }
, StringSplitOptions
.None
);
4054 Assert
.AreEqual (4, res
.Length
);
4055 Assert
.AreEqual ("A ", res
[0]);
4056 Assert
.AreEqual (" C ", res
[1]);
4057 Assert
.AreEqual (string.Empty
, res
[2]);
4058 Assert
.AreEqual (" E", res
[3]);
4060 // Same with RemoveEmptyEntries
4061 res
= "A B C DD E".Split (new String
[] { "B", "D" }
, StringSplitOptions
.RemoveEmptyEntries
);
4062 Assert
.AreEqual (3, res
.Length
);
4063 Assert
.AreEqual ("A ", res
[0]);
4064 Assert
.AreEqual (" C ", res
[1]);
4065 Assert
.AreEqual (" E", res
[2]);
4067 // Delimiter matches once at the beginning of the string
4068 res
= "A B".Split (new String
[] { "A" }
, StringSplitOptions
.RemoveEmptyEntries
);
4069 Assert
.AreEqual (1, res
.Length
);
4070 Assert
.AreEqual (" B", res
[0]);
4072 // Delimiter at the beginning and at the end
4073 res
= "B C DD B".Split (new String
[] { "B" }
, StringSplitOptions
.None
);
4074 Assert
.AreEqual (3, res
.Length
);
4075 Assert
.AreEqual (string.Empty
, res
[0]);
4076 Assert
.AreEqual (" C DD ", res
[1]);
4077 Assert
.AreEqual (string.Empty
, res
[2]);
4079 res
= "B C DD B".Split (new String
[] { "B" }
, StringSplitOptions
.RemoveEmptyEntries
);
4080 Assert
.AreEqual (1, res
.Length
);
4081 Assert
.AreEqual (" C DD ", res
[0]);
4084 res
= "A B C DD E".Split (new String
[] { "B", "D" }
, 2, StringSplitOptions
.None
);
4085 Assert
.AreEqual (2, res
.Length
);
4086 Assert
.AreEqual ("A ", res
[0]);
4087 Assert
.AreEqual (" C DD E", res
[1]);
4090 res
= "ABCDEF".Split (new String
[] { "EF", "BCDE" }
, StringSplitOptions
.None
);
4091 Assert
.AreEqual (2, res
.Length
);
4092 Assert
.AreEqual ("A", res
[0]);
4093 Assert
.AreEqual ("F", res
[1]);
4095 res
= "ABCDEF".Split (new String
[] { "BCD", "BC" }
, StringSplitOptions
.None
);
4096 Assert
.AreEqual (2, res
.Length
);
4097 Assert
.AreEqual ("A", res
[0]);
4098 Assert
.AreEqual ("EF", res
[1]);
4101 res
= "A B\nC".Split ((String
[])null, StringSplitOptions
.None
);
4102 Assert
.AreEqual (3, res
.Length
);
4103 Assert
.AreEqual ("A", res
[0]);
4104 Assert
.AreEqual ("B", res
[1]);
4105 Assert
.AreEqual ("C", res
[2]);
4107 res
= "A B\nC".Split (new String
[0], StringSplitOptions
.None
);
4108 Assert
.AreEqual (3, res
.Length
);
4109 Assert
.AreEqual ("A", res
[0]);
4110 Assert
.AreEqual ("B", res
[1]);
4111 Assert
.AreEqual ("C", res
[2]);
4115 public void SplitStringChars ()
4120 res
= string.Empty
.Split (new Char
[] { 'A' }
);
4121 Assert
.AreEqual (1, res
.Length
);
4122 Assert
.AreEqual (string.Empty
, res
[0]);
4124 // empty and RemoveEmpty
4125 res
= string.Empty
.Split (new Char
[] { 'A' }
, StringSplitOptions
.RemoveEmptyEntries
);
4126 Assert
.AreEqual (0, res
.Length
);
4129 res
= "..A..B..".Split (new Char
[] { '.' }
, 0, StringSplitOptions
.None
);
4130 Assert
.AreEqual (0, res
.Length
, "#01-01");
4133 res
= "..A..B..".Split (new Char
[] { '.' }
, 1, StringSplitOptions
.None
);
4134 Assert
.AreEqual (1, res
.Length
, "#02-01");
4135 Assert
.AreEqual ("..A..B..", res
[0], "#02-02");
4137 // count == 1 + RemoveEmpty
4138 res
= "..A..B..".Split (new Char
[] { '.' }
, 1, StringSplitOptions
.RemoveEmptyEntries
);
4139 Assert
.AreEqual (1, res
.Length
, "#03-01");
4140 Assert
.AreEqual ("..A..B..", res
[0], "#03-02");
4142 // Strange Case A+B A
4143 res
= "...".Split (new Char
[] { '.' }
, 1, StringSplitOptions
.RemoveEmptyEntries
);
4144 Assert
.AreEqual (1, res
.Length
, "#ABA-01");
4145 Assert
.AreEqual ("...", res
[0], "#ABA-02");
4147 // Strange Case A+B B
4148 res
= "...".Split (new Char
[] { '.' }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4149 Assert
.AreEqual (0, res
.Length
, "#ABB-01");
4151 // Keeping Empties and multipe split chars
4152 res
= "..A;.B.;".Split (new Char
[] { '.', ';' }
, StringSplitOptions
.None
);
4153 Assert
.AreEqual (7, res
.Length
, "#04-01");
4154 Assert
.AreEqual (string.Empty
, res
[0], "#04-02");
4155 Assert
.AreEqual (string.Empty
, res
[1], "#04-03");
4156 Assert
.AreEqual ("A", res
[2], "#04-04");
4157 Assert
.AreEqual (string.Empty
, res
[3], "#04-05");
4158 Assert
.AreEqual ("B", res
[4], "#04-06");
4159 Assert
.AreEqual (string.Empty
, res
[5], "#04-07");
4160 Assert
.AreEqual (string.Empty
, res
[6], "#04-08");
4162 // Trimming (3 tests)
4163 res
= "..A".Split (new Char
[] { '.' }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4164 Assert
.AreEqual (1, res
.Length
, "#05-01");
4165 Assert
.AreEqual ("A", res
[0], "#05-02");
4167 res
= "A..".Split (new Char
[] { '.' }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4168 Assert
.AreEqual (1, res
.Length
, "#06-01");
4169 Assert
.AreEqual ("A", res
[0], "#06-02");
4171 res
= "..A..".Split (new Char
[] { '.' }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4172 Assert
.AreEqual (1, res
.Length
, "#07-01");
4173 Assert
.AreEqual ("A", res
[0], "#07-02");
4176 res
= "..A..B..".Split (new Char
[] { '.' }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4177 Assert
.AreEqual (2, res
.Length
, "#08-01");
4178 Assert
.AreEqual ("A", res
[0], "#08-02");
4179 Assert
.AreEqual ("B..", res
[1], "#08-03");
4181 // Whitespace and Long split chain (removing empty chars)
4182 res
= " A\tBC\n\rDEF GHI ".Split ((Char
[])null, StringSplitOptions
.RemoveEmptyEntries
);
4183 Assert
.AreEqual (4, res
.Length
, "#09-01");
4184 Assert
.AreEqual ("A", res
[0], "#09-02");
4185 Assert
.AreEqual ("BC", res
[1], "#09-03");
4186 Assert
.AreEqual ("DEF", res
[2], "#09-04");
4187 Assert
.AreEqual ("GHI", res
[3], "#09-05");
4189 // Nothing but separators
4190 res
= "..,.;.,".Split (new Char
[]{'.',',',';'}
,2,StringSplitOptions
.RemoveEmptyEntries
);
4191 Assert
.AreEqual (0, res
.Length
, "#10-01");
4193 // Complete testseries
4194 char[] dash
= new Char
[] { '/' }
;
4195 StringSplitOptions o
= StringSplitOptions
.RemoveEmptyEntries
;
4196 Assert
.AreEqual ("hi", "hi".Split (dash
, o
)[0], "#11-01");
4197 Assert
.AreEqual ("hi", "hi/".Split (dash
, o
)[0], "#11-02");
4198 Assert
.AreEqual ("hi", "/hi".Split (dash
, o
)[0], "#11-03");
4200 Assert
.AreEqual ("hi..", "hi../".Split (dash
, o
)[0], "#11-04-1");
4201 Assert
.AreEqual ("hi..", "/hi..".Split (dash
, o
)[0], "#11-04-2");
4203 res
= "/hi/..".Split (dash
, o
);
4204 Assert
.AreEqual ("hi", res
[0], "#11-05-1");
4205 Assert
.AreEqual ("..", res
[1], "#11-05-2");
4206 Assert
.AreEqual (2, res
.Length
, "#11-09-3");
4208 res
= "hi/..".Split (dash
, o
);
4209 Assert
.AreEqual ("hi", res
[0], "#11-06-1");
4210 Assert
.AreEqual ("..", res
[1], "#11-06-2");
4211 Assert
.AreEqual (2, res
.Length
, "#11-09-3");
4213 res
= "hi/../".Split (dash
, o
);
4214 Assert
.AreEqual ("hi", res
[0], "#11-07-1");
4215 Assert
.AreEqual ("..", res
[1], "#11-07-2");
4216 Assert
.AreEqual (2, res
.Length
, "#11-07-3");
4218 res
= "/hi../".Split (dash
, o
);
4219 Assert
.AreEqual ("hi..", res
[0], "#11-08-1");
4220 Assert
.AreEqual (1, res
.Length
, "#11-08-2");
4222 res
= "/hi/../".Split (dash
, o
);
4223 Assert
.AreEqual ("hi", res
[0], "#11-09-1");
4224 Assert
.AreEqual ("..", res
[1], "#11-09-2");
4225 Assert
.AreEqual (2, res
.Length
, "#11-09-3");
4227 Assert
.AreEqual (0, " ".Split ((char[]) null, 2, StringSplitOptions
.RemoveEmptyEntries
).Length
, "#12-00-0");
4229 res
= "not found".Split (new char[2]);
4230 Assert
.AreEqual ("not found", res
[0], "#12-04-27");
4231 Assert
.AreEqual (1, res
.Length
, "#12-04-27-A");
4235 public void SplitStringStrings ()
4240 res
= "..A..B..".Split (new String
[] { "." }
, 0, StringSplitOptions
.None
);
4241 Assert
.AreEqual (0, res
.Length
, "#01-01");
4244 res
= "..A..B..".Split (new String
[] { "." }
, 1, StringSplitOptions
.None
);
4245 Assert
.AreEqual (1, res
.Length
, "#02-01");
4246 Assert
.AreEqual ("..A..B..", res
[0], "#02-02");
4248 // count == 1 + RemoveEmpty
4249 res
= "..A..B..".Split (new String
[] { "." }
, 1, StringSplitOptions
.RemoveEmptyEntries
);
4250 Assert
.AreEqual (1, res
.Length
, "#03-01");
4251 Assert
.AreEqual ("..A..B..", res
[0], "#03-02");
4253 // Strange Case A+B A
4254 res
= "...".Split (new String
[] { "." }
, 1, StringSplitOptions
.RemoveEmptyEntries
);
4255 Assert
.AreEqual (1, res
.Length
, "#ABA-01");
4256 Assert
.AreEqual ("...", res
[0], "#ABA-02");
4258 // Strange Case A+B B
4259 res
= "...".Split (new String
[] { "." }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4260 Assert
.AreEqual (0, res
.Length
, "#ABB-01");
4262 // Keeping Empties and multipe split chars
4263 res
= "..A;.B.;".Split (new String
[] { ".", ";" }
, StringSplitOptions
.None
);
4264 Assert
.AreEqual (7, res
.Length
, "#04-01");
4265 Assert
.AreEqual (string.Empty
, res
[0], "#04-02");
4266 Assert
.AreEqual (string.Empty
, res
[1], "#04-03");
4267 Assert
.AreEqual ("A", res
[2], "#04-04");
4268 Assert
.AreEqual (string.Empty
, res
[3], "#04-05");
4269 Assert
.AreEqual ("B", res
[4], "#04-06");
4270 Assert
.AreEqual (string.Empty
, res
[5], "#04-07");
4271 Assert
.AreEqual (string.Empty
, res
[6], "#04-08");
4273 // Trimming (3 tests)
4274 res
= "..A".Split (new String
[] { "." }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4275 Assert
.AreEqual (1, res
.Length
, "#05-01");
4276 Assert
.AreEqual ("A", res
[0], "#05-02");
4278 res
= "A..".Split (new String
[] { "." }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4279 Assert
.AreEqual (1, res
.Length
, "#06-01");
4280 Assert
.AreEqual ("A", res
[0], "#06-02");
4282 res
= "..A..".Split (new String
[] { "." }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4283 Assert
.AreEqual (1, res
.Length
, "#07-01");
4284 Assert
.AreEqual ("A", res
[0], "#07-02");
4287 res
= "..A..B..".Split (new String
[] { "." }
, 2, StringSplitOptions
.RemoveEmptyEntries
);
4288 Assert
.AreEqual (2, res
.Length
, "#08-01");
4289 Assert
.AreEqual ("A", res
[0], "#08-02");
4290 Assert
.AreEqual ("B..", res
[1], "#08-03");
4292 // Whitespace and Long split chain (removing empty chars)
4293 res
= " A\tBC\n\rDEF GHI ".Split ((String
[])null, StringSplitOptions
.RemoveEmptyEntries
);
4294 Assert
.AreEqual (4, res
.Length
, "#09-01");
4295 Assert
.AreEqual ("A", res
[0], "#09-02");
4296 Assert
.AreEqual ("BC", res
[1], "#09-03");
4297 Assert
.AreEqual ("DEF", res
[2], "#09-04");
4298 Assert
.AreEqual ("GHI", res
[3], "#09-05");
4300 // Nothing but separators
4301 res
= "..,.;.,".Split (new String
[]{".",",",";"}
,2,StringSplitOptions
.RemoveEmptyEntries
);
4302 Assert
.AreEqual (0, res
.Length
, "#10-01");
4304 // Complete testseries
4305 String
[] dash
= new String
[] { "/" }
;
4306 StringSplitOptions o
= StringSplitOptions
.RemoveEmptyEntries
;
4307 Assert
.AreEqual ("hi", "hi".Split (dash
, o
)[0], "#11-01");
4308 Assert
.AreEqual ("hi", "hi/".Split (dash
, o
)[0], "#11-02");
4309 Assert
.AreEqual ("hi", "/hi".Split (dash
, o
)[0], "#11-03");
4311 Assert
.AreEqual ("hi..", "hi../".Split (dash
, o
)[0], "#11-04-1");
4312 Assert
.AreEqual ("hi..", "/hi..".Split (dash
, o
)[0], "#11-04-2");
4314 res
= "/hi/..".Split (dash
, o
);
4315 Assert
.AreEqual ("hi", res
[0], "#11-05-1");
4316 Assert
.AreEqual ("..", res
[1], "#11-05-2");
4317 Assert
.AreEqual (2, res
.Length
, "#11-09-3");
4319 res
= "hi/..".Split (dash
, o
);
4320 Assert
.AreEqual ("hi", res
[0], "#11-06-1");
4321 Assert
.AreEqual ("..", res
[1], "#11-06-2");
4322 Assert
.AreEqual (2, res
.Length
, "#11-09-3");
4324 res
= "hi/../".Split (dash
, o
);
4325 Assert
.AreEqual ("hi", res
[0], "#11-07-1");
4326 Assert
.AreEqual ("..", res
[1], "#11-07-2");
4327 Assert
.AreEqual (2, res
.Length
, "#11-07-3");
4329 res
= "/hi../".Split (dash
, o
);
4330 Assert
.AreEqual ("hi..", res
[0], "#11-08-1");
4331 Assert
.AreEqual (1, res
.Length
, "#11-08-2");
4333 res
= "/hi/../".Split (dash
, o
);
4334 Assert
.AreEqual ("hi", res
[0], "#11-09-1");
4335 Assert
.AreEqual ("..", res
[1], "#11-09-2");
4336 Assert
.AreEqual (2, res
.Length
, "#11-09-3");
4340 [Category ("NotDotNet")]
4341 public void Normalize1 ()
4343 // .NET does not combine them into U+1F80
4344 // seealso: http://demo.icu-project.org/icu-bin/nbrowser?t=\u03B1\u0313\u0345
4345 string s
= "\u03B1\u0313\u0345";
4346 Assert
.IsTrue (!s
.IsNormalized (NormalizationForm
.FormC
), "#1");
4347 Assert
.IsTrue (!s
.IsNormalized (NormalizationForm
.FormKC
), "#2");
4348 Assert
.AreEqual ("\u1F80", s
.Normalize (NormalizationForm
.FormC
), "#3");
4349 Assert
.AreEqual ("\u1F80", s
.Normalize (NormalizationForm
.FormKC
), "#4");
4353 [Category ("NotDotNet")]
4354 public void Normalize2 ()
4356 string s1
= "\u0061\u0301bc";
4357 string s2
= "\u00e1bc";
4358 // .NET does not combine \u0061\0301 into \u00E1
4359 // seealso: http://demo.icu-project.org/icu-bin/nbrowser?t=\u0061\u0301bc
4360 Assert
.AreEqual (s2
, s1
.Normalize (NormalizationForm
.FormC
), "#1");
4361 Assert
.AreEqual (s2
, s1
.Normalize (NormalizationForm
.FormKC
), "#2");
4365 public void Normalize3 ()
4367 var s
= new string (new char [] { '\u064A', '\u064F', '\u0648', '\u0654', '\u0652', '\u064A', '\u064F', '\u0648', '\u0654' }
);
4369 var formC
= new string (new char [] { '\u064A', '\u064F', '\u0624', '\u0652', '\u064a', '\u064f', '\u0624' }
);
4370 var formD
= new string (new char [] { '\u064A', '\u064F', '\u0648', '\u0652', '\u0654', '\u064a', '\u064f', '\u0648', '\u0654' }
);
4371 var formKC
= new string (new char [] { '\u064A', '\u064F', '\u0624', '\u0652', '\u064a', '\u064f', '\u0624' }
);
4372 var formKD
= new string (new char [] { '\u064A', '\u064F', '\u0648', '\u0652', '\u0654', '\u064a', '\u064f', '\u0648', '\u0654' }
);
4374 Assert
.AreEqual (formD
, s
.Normalize (NormalizationForm
.FormD
), "#1");
4375 Assert
.AreEqual (formC
, s
.Normalize (NormalizationForm
.FormC
), "#2");
4376 Assert
.AreEqual (formKD
, s
.Normalize (NormalizationForm
.FormKD
), "#3");
4377 Assert
.AreEqual (formKC
, s
.Normalize (NormalizationForm
.FormKC
), "#4");
4380 [Test
] // bug #480152, test cases by David Mitchell
4381 public void NormalizeFormD ()
4383 Assert
.AreEqual ("\u212B".Normalize (NormalizationForm
.FormD
), "\u0041\u030A", "#1");
4384 Assert
.AreEqual ("\u1E69".Normalize (NormalizationForm
.FormD
), "\u0073\u0323\u0307", "#2");
4385 Assert
.AreEqual ("\u1e4e".Normalize (NormalizationForm
.FormD
), "\u004f\u0303\u0308", "#3");
4386 Assert
.AreEqual ("\u1e2f".Normalize (NormalizationForm
.FormD
), "\u0069\u0308\u0301", "#4");
4389 [Test
] // bug #480152, test cases by David Mitchell
4390 public void NormalizeFormC ()
4392 Assert
.AreEqual ("\u0041\u030a\u0061\u030a".Normalize (NormalizationForm
.FormC
), "\u00c5\u00e5", "#1");
4393 Assert
.AreEqual ("\u006E\u0303".Normalize (NormalizationForm
.FormC
), "\u00F1", "#2");
4394 Assert
.AreEqual ("\u03B7\u0313\u0300\u0345".Normalize (NormalizationForm
.FormC
), "\u1F92", "#3");
4397 [Test
] // bug #480152, test cases by Tom Philpot
4398 public void NormalizeFormCCrashers ()
4400 string[][] entries
= new string[][] {
4401 new string[] { "\u05d0\u0307\u05dc", "#1" }
,
4402 new string[] { "\u05d0\u0307\u05dc\u05d9\u05d9\u05df", "#2" }
,
4403 new string[] { "\u05d4\u05d0\u0307\u05dc\u0307\u05d9\u0307\u05df\u0307", "#3" }
,
4404 new string[] { "\u05d9\u05e9\u05de\u05e2\u0307\u05d0\u0307\u05dc\u0307", "#4" }
,
4405 new string[] { "\u05d9\u05e9\u05e8\u05d0\u0307\u05dc\u0307", "#5" }
,
4408 foreach (string[] entry
in entries
)
4409 entry
[0].Normalize (NormalizationForm
.FormC
);
4413 public void NormalizeFormCHangul ()
4415 Assert
.AreEqual ("\u1100\u116C".Normalize (NormalizationForm
.FormC
), "\uAD34", "#1");
4416 Assert
.AreEqual ("\u1100\u116B\u11C2".Normalize (NormalizationForm
.FormC
), "\uAD33", "#2");
4417 Assert
.AreEqual ("\u1100!".Normalize (NormalizationForm
.FormC
), "\u1100!", "#3");
4418 Assert
.AreEqual ("\u1100\u116B!".Normalize (NormalizationForm
.FormC
), "\uAD18\u0021", "#4");
4419 Assert
.AreEqual ("!\u116C".Normalize (NormalizationForm
.FormC
), "!\u116C", "#5");
4420 Assert
.AreEqual ("!\u116B\u11C2".Normalize (NormalizationForm
.FormC
), "!\u116B\u11C2", "#6");
4424 public void MoreNormalizeFormC ()
4426 Assert
.AreEqual ("\u1E0A\u0323".Normalize (NormalizationForm
.FormC
), "\u1E0C\u0307", "#1");
4427 Assert
.AreEqual ("\u0044\u0323\u0307".Normalize (NormalizationForm
.FormC
), "\u1E0C\u0307", "#2");
4431 public void Emptiness ()
4433 // note: entries using AreEqual are in reality AreNotSame on MS FX
4434 // but I prefer Mono implementation ;-) and it minimize the changes
4435 Assert
.AreSame (String
.Empty
, "", "Empty");
4437 Assert
.AreSame (String
.Empty
, String
.Concat ((object) null), "Concat(null)");
4438 Assert
.AreSame (String
.Empty
, String
.Concat ((object) String
.Empty
), "Concat(empty)");
4439 Assert
.AreSame (String
.Empty
, String
.Concat ((object) String
.Empty
, (object) String
.Empty
), "Concat(object,object)");
4440 Assert
.AreSame (String
.Empty
, String
.Concat (String
.Empty
, String
.Empty
), "Concat(string,string)");
4441 Assert
.AreEqual (String
.Empty
, String
.Concat (String
.Empty
, String
.Empty
, String
.Empty
), "Concat(string,string,string)");
4442 Assert
.AreEqual (String
.Empty
, String
.Concat ((object) null, (object) (object) null, (object) null, (object) null), "Concat(null,null,null,null)-object");
4443 Assert
.AreSame (String
.Empty
, String
.Concat ((string) null, (string) (string) null, (string) null, (string) null), "Concat(null,null,null,null)-string");
4444 Assert
.AreNotSame (String
.Empty
, String
.Concat (String
.Empty
, String
.Empty
, String
.Empty
, String
.Empty
), "Concat(string,string,string,string)");
4445 Assert
.AreEqual (String
.Empty
, String
.Concat (new object [] { String.Empty, String.Empty }
), "Concat(object[])");
4446 Assert
.AreEqual (String
.Empty
, String
.Concat (new string [] { String.Empty, String.Empty }
), "Concat(string[])");
4448 Assert
.AreNotSame (String
.Empty
, String
.Copy (String
.Empty
), "Copy");
4450 Assert
.AreEqual (String
.Empty
, "".Insert (0, String
.Empty
), "Insert(Empty)");
4451 Assert
.AreEqual (String
.Empty
, String
.Empty
.Insert (0, ""), "Empty.Insert");
4453 Assert
.AreSame (String
.Empty
, String
.Empty
.PadLeft (0), "PadLeft(int)");
4454 Assert
.AreSame (String
.Empty
, String
.Empty
.PadLeft (0, '.'), "PadLeft(int.char)");
4455 Assert
.AreSame (String
.Empty
, String
.Empty
.PadRight (0), "PadRight(int)");
4456 Assert
.AreSame (String
.Empty
, String
.Empty
.PadRight (0, '.'), "PadRight(int.char)");
4458 Assert
.AreSame (String
.Empty
, "".Substring (0), "Substring(int)");
4459 Assert
.AreSame (String
.Empty
, "ab".Substring (1, 0), "Substring(int,int)");
4461 Assert
.AreSame (String
.Empty
, "".ToLower (), "ToLower");
4462 Assert
.AreSame (String
.Empty
, "".ToUpper (), "ToUpper");
4463 Assert
.AreSame (String
.Empty
, "".ToLower (CultureInfo
.CurrentCulture
), "ToLower(CultureInfo)");
4464 Assert
.AreSame (String
.Empty
, "".ToUpper (CultureInfo
.CurrentCulture
), "ToUpper(CultureInfo)");
4465 Assert
.AreSame (String
.Empty
, "".ToLowerInvariant (), "ToLowerInvariant");
4466 Assert
.AreSame (String
.Empty
, "".ToUpperInvariant (), "ToUpperInvariant");
4468 Assert
.AreSame (String
.Empty
, "".Trim (), "Trim()");
4469 Assert
.AreSame (String
.Empty
, "a".Trim ('a'), "Trim(char)");
4470 Assert
.AreSame (String
.Empty
, "a".TrimEnd ('a'), "TrimEnd(char)");
4471 Assert
.AreSame (String
.Empty
, "a".TrimStart ('a'), "TrimStart(char)");
4475 public void LastIndexOfAndEmptiness () {
4476 Assert
.AreEqual (-1, "".LastIndexOf('.'), "#1");
4477 Assert
.AreEqual (-1, "".LastIndexOf('.', -1), "#2");
4478 Assert
.AreEqual (-1, "".LastIndexOf('.', -1, -1), "#3");
4479 Assert
.AreEqual (0, "x".LastIndexOf('x', 0), "#4");
4480 Assert
.AreEqual (0 , "x".LastIndexOf('x', 0, 1), "#5");
4481 Assert
.AreEqual (-1 , "x".LastIndexOf('z', 0, 1), "#6");
4484 "".LastIndexOf(null);
4486 } catch (ArgumentNullException
) {}
4488 Assert
.AreEqual (0, "".LastIndexOf(""), "#8");
4489 Assert
.AreEqual (0, "".LastIndexOf("", -1), "#9");
4490 Assert
.AreEqual (0, "".LastIndexOf("", -1, 1), "#10");
4491 Assert
.AreEqual (0, "".LastIndexOf("", StringComparison
.Ordinal
), "#11");
4492 Assert
.AreEqual (0, "".LastIndexOf("", -1, StringComparison
.Ordinal
), "#12");
4493 Assert
.AreEqual (0, "".LastIndexOf("", -1, -1, StringComparison
.Ordinal
), "#13");
4494 Assert
.AreEqual (0, "x".LastIndexOf(""), "#14");
4496 Assert
.AreEqual (0, "x".LastIndexOf("x", 0), "#15");
4497 Assert
.AreEqual (0, "x".LastIndexOf("", 0), "#16");
4498 Assert
.AreEqual (0, "xxxx".LastIndexOf("", 0), "#17");
4499 Assert
.AreEqual (1, "xxxx".LastIndexOf("", 1), "#18");
4501 Assert
.AreEqual (1, "xy".LastIndexOf(""), "#19");
4502 Assert
.AreEqual (2, "xyz".LastIndexOf(""), "#20");
4503 Assert
.AreEqual (1, "xy".LastIndexOf(""), "#21");
4504 Assert
.AreEqual (1, "xy".LastIndexOf("", 2), "#22");
4505 Assert
.AreEqual (2, "xyz".LastIndexOf("", 2), "#23");
4506 Assert
.AreEqual (2, "xyz".LastIndexOf("", 2, 2), "#24");
4507 Assert
.AreEqual (2, "xyz".LastIndexOf("", 3, 3), "#25");
4510 "xy".LastIndexOf("", 29);
4511 Assert
.Fail ("#26");
4512 }catch (ArgumentOutOfRangeException
){}
4514 Assert
.AreEqual (-1, "".LastIndexOf("x"), "#27");
4515 Assert
.AreEqual (-1, "".LastIndexOf("x", -1), "#28");
4516 Assert
.AreEqual (-1, "".LastIndexOf("x", -1), "#29");
4517 Assert
.AreEqual (-1, "".LastIndexOf("x", StringComparison
.Ordinal
), "#30");
4518 Assert
.AreEqual (-1, "".LastIndexOf("x", -1, StringComparison
.Ordinal
), "#31");
4519 Assert
.AreEqual (-1, "".LastIndexOf("x", -1, -1, StringComparison
.Ordinal
), "#32");
4521 Assert
.AreEqual (1, "xx".LastIndexOf("", StringComparison
.Ordinal
), "#33");
4522 Assert
.AreEqual (1, "xx".LastIndexOf("", 2, StringComparison
.Ordinal
), "#34");
4523 Assert
.AreEqual (1, "xx".LastIndexOf("", 2, 2, StringComparison
.Ordinal
), "#35");
4525 Assert
.AreEqual (3, "xxxx".LastIndexOf("", StringComparison
.Ordinal
), "#36");
4526 Assert
.AreEqual (2, "xxxx".LastIndexOf("", 2, StringComparison
.Ordinal
), "#37");
4527 Assert
.AreEqual (2, "xxxx".LastIndexOf("", 2, 2, StringComparison
.Ordinal
), "#38");
4529 Assert
.AreEqual (3, "xxxx".LastIndexOf("", 3, StringComparison
.Ordinal
), "#39");
4530 Assert
.AreEqual (3, "xxxx".LastIndexOf("", 3, 3, StringComparison
.Ordinal
), "#40");
4535 public void LastIndexOfAnyAndEmptiness () {
4536 Assert
.AreEqual (-1, "".LastIndexOfAny(new char[] {'.', 'x'}
), "#1");
4537 Assert
.AreEqual (-1, "".LastIndexOfAny(new char[] {'.', 'x'}
, -1), "#2");
4538 Assert
.AreEqual (-1, "".LastIndexOfAny(new char[] {'.', 'x'}
, -1, -1), "#3");