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;
20 using System.Diagnostics;
23 using NUnit.Framework;
25 namespace MonoTests.System
29 public class StringTest
31 class NullFormatter : IFormatProvider, ICustomFormatter
33 public string Format (string format, object arg, IFormatProvider provider)
38 public object GetFormat (Type formatType)
46 public override string ToString()
52 private CultureInfo orgCulture;
57 // save current culture
58 orgCulture = CultureInfo.CurrentCulture;
62 public void TearDown ()
64 // restore original culture
65 Thread.CurrentThread.CurrentCulture = orgCulture;
69 [Test] // ctor (Char [])
70 public unsafe void Constructor2 ()
72 Assert.AreEqual (String.Empty, new String ((char[]) null), "#1");
73 Assert.AreEqual (String.Empty, new String (new Char [0]), "#2");
74 Assert.AreEqual ("A", new String (new Char [1] {'A'}), "#3");
77 [Test] // ctor (Char, Int32)
78 public void Constructor4 ()
80 Assert.AreEqual (string.Empty, new String ('A', 0));
81 Assert.AreEqual (new String ('A', 3), "AAA");
84 [Test] // ctor (Char, Int32)
85 public void Constructor4_Count_Negative ()
90 } catch (ArgumentOutOfRangeException ex) {
91 // 'count' must be non-negative
92 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
93 Assert.IsNull (ex.InnerException, "#3");
94 Assert.IsNotNull (ex.Message, "#4");
95 Assert.AreEqual ("count", ex.ParamName, "#5");
99 // Several tests in this file, to run properly, allocate 4GB objects.
100 // Obviously this creates problems on several kinds of systems, so we
101 // conservatively skip these tests unless we find a high-RAM environment.
102 // Checking RAM requires PerformanceCounter which is absent on mobile,
103 // so any test that calls this must be category MobileNotWorking.
104 static void RequireHighMemoryTestEnvironment ()
107 Assert.Ignore("PerformanceCounter not available.");
109 if (!Environment.Is64BitProcess)
110 Assert.Ignore("This test cannot run on a 32-bit system.");
112 // Require 6 GB available RAM, for the 4GB string plus 2GB headroom
113 var pc = new PerformanceCounter ("Mono Memory", "Available Physical Memory");
115 if (pc.RawValue < 6L*1024L*1024L*1024L)
116 Assert.Ignore("This machine may not have enough RAM to run this test.");
120 [Test] // ctor (Char, Int32)
121 [Category ("MobileNotWorking")]
122 public void Constructor4_LargeString ()
124 RequireHighMemoryTestEnvironment();
126 var x = new String ('A', int.MaxValue);
127 Assert.AreEqual ('A', x[0]);
128 Assert.AreEqual ('A', x[int.MaxValue - 1]);
131 [Test] // ctor (Char [], Int32, Int32)
132 public void Constructor6 ()
134 char [] arr = new char [3] { 'A', 'B', 'C' };
135 Assert.AreEqual ("ABC", new String (arr, 0, arr.Length), "#1");
136 Assert.AreEqual ("BC", new String (arr, 1, 2), "#2");
137 Assert.AreEqual (string.Empty, new String (arr, 2, 0), "#3");
140 [Test] // ctor (Char [], Int32, Int32)
141 public void Constructor6_Length_Negative ()
143 char [] arr = new char [3] { 'A', 'B', 'C' };
146 new String (arr, 0, -1);
148 } catch (ArgumentOutOfRangeException ex) {
149 // Length cannot be less than zero
150 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
151 Assert.IsNull (ex.InnerException, "#3");
152 Assert.IsNotNull (ex.Message, "#4");
153 Assert.AreEqual ("length", ex.ParamName, "#5");
157 [Test] // ctor (Char [], Int32, Int32)
158 public void Constructor6_Length_Overflow ()
160 char [] arr = new char [3] { 'A', 'B', 'C' };
163 new String (arr, 1, 3);
165 } catch (ArgumentOutOfRangeException ex) {
166 // Index was out of range. Must be non-negative and
167 // less than the size of the collection
168 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
169 Assert.IsNull (ex.InnerException, "#3");
170 Assert.IsNotNull (ex.Message, "#4");
171 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
175 [Test] // ctor (Char [], Int32, Int32)
176 public void Constructor6_StartIndex_Negative ()
178 char [] arr = new char [3] { 'A', 'B', 'C' };
181 new String (arr, -1, 0);
183 } catch (ArgumentOutOfRangeException ex) {
184 // StartIndex cannot be less than zero
185 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
186 Assert.IsNull (ex.InnerException, "#3");
187 Assert.IsNotNull (ex.Message, "#4");
188 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
192 [Test] // ctor (Char [], Int32, Int32)
193 public void Constructor6_Value_Null ()
196 new String ((char []) null, 0, 0);
198 } catch (ArgumentNullException ex) {
199 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
200 Assert.IsNull (ex.InnerException, "#3");
201 Assert.IsNotNull (ex.Message, "#4");
202 Assert.AreEqual ("value", ex.ParamName, "#5");
207 public unsafe void CharPtrConstructor ()
209 Assert.AreEqual (String.Empty, new String ((char*) null), "char*");
210 Assert.AreEqual (String.Empty, new String ((char*) null, 0, 0), "char*,int,int");
214 public unsafe void TestSbytePtrConstructorASCII ()
216 Encoding encoding = Encoding.ASCII;
217 String s = "ASCII*\0";
218 byte[] bytes = encoding.GetBytes (s);
220 fixed (byte* bytePtr = bytes)
221 Assert.AreEqual (s, new String ((sbyte*) bytePtr, 0, bytes.Length, encoding));
225 public unsafe void TestSbytePtrConstructorDefault ()
227 Encoding encoding = Encoding.Default;
228 byte [] bytes = new byte [256];
230 for (int i = 0; i < 255; i++)
231 bytes [i] = (byte) (i + 1);
232 bytes [255] = (byte) 0;
234 // Ensure that bytes are valid for Encoding.Default
235 bytes = encoding.GetBytes (encoding.GetChars (bytes));
236 String s = encoding.GetString(bytes);
238 // Ensure null terminated array
239 bytes [bytes.Length - 1] = (byte) 0;
241 fixed (byte* bytePtr = bytes)
243 Assert.AreEqual (s.Substring (0, s.Length - 1), new String ((sbyte*) bytePtr));
244 Assert.AreEqual (s, new String ((sbyte*) bytePtr, 0, bytes.Length));
245 Assert.AreEqual (s, new String ((sbyte*) bytePtr, 0, bytes.Length, null));
246 Assert.AreEqual (s, new String ((sbyte*) bytePtr, 0, bytes.Length, encoding));
250 [Test] // ctor (SByte*)
251 public unsafe void Constructor3_Value_Null ()
253 Assert.AreEqual (String.Empty, new String ((sbyte*) null));
256 [Test] // ctor (SByte*)
257 [Ignore ("invalid test")]
258 public unsafe void Constructor3_Value_Invalid ()
261 new String ((sbyte*) (-1));
263 } catch (ArgumentOutOfRangeException ex) {
264 // Pointer startIndex and length do not refer to a
266 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
267 Assert.IsNull (ex.InnerException, "#3");
268 Assert.IsNotNull (ex.Message, "#4");
269 Assert.AreEqual ("ptr", ex.ParamName, "#5");
273 [Test] // ctor (SByte*, Int32, Int32)
274 public unsafe void Constructor7_Length_Negative ()
277 new String ((sbyte*) null, 0, -1);
279 } catch (ArgumentOutOfRangeException ex) {
280 // Length cannot be less than zero
281 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
282 Assert.IsNull (ex.InnerException, "#3");
283 Assert.IsNotNull (ex.Message, "#4");
284 Assert.AreEqual ("length", ex.ParamName, "#5");
288 [Test] // ctor (SByte*, Int32, Int32)
289 public unsafe void Constructor7_StartIndex_Negative ()
292 new String ((sbyte*) null, -1, 0);
294 } catch (ArgumentOutOfRangeException ex) {
295 // StartIndex cannot be less than zero
296 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
297 Assert.IsNull (ex.InnerException, "#3");
298 Assert.IsNotNull (ex.Message, "#4");
299 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
304 public unsafe void Constructor7_StartIndex_Overflow ()
307 new String ((sbyte*) (-1), 1, 0);
309 } catch (ArgumentOutOfRangeException ex) {
310 // Pointer startIndex and length do not refer to a
312 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
313 Assert.IsNull (ex.InnerException, "#A3");
314 Assert.IsNotNull (ex.Message, "#A4");
315 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
319 new String ((sbyte*) (-1), 1, 1);
321 } catch (ArgumentOutOfRangeException ex) {
322 // Pointer startIndex and length do not refer to a
324 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
325 Assert.IsNull (ex.InnerException, "#B3");
326 Assert.IsNotNull (ex.Message, "#B4");
327 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
331 [Test] // ctor (SByte*, Int32, Int32)
332 [Ignore ("invalid test")]
333 public unsafe void Constructor7_Value_Invalid ()
336 new String ((sbyte*) (-1), 0, 1);
338 } catch (ArgumentOutOfRangeException ex) {
339 // Pointer startIndex and length do not refer to a
341 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
342 Assert.IsNull (ex.InnerException, "#3");
343 Assert.IsNotNull (ex.Message, "#4");
344 Assert.AreEqual ("ptr", ex.ParamName, "#5");
348 [Test] // ctor (SByte*, Int32, Int32)
349 public unsafe void Constructor7_Value_Null ()
352 new String ((sbyte*) null, 0, 0);
354 } catch (ArgumentNullException ex) {
355 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
356 Assert.IsNull (ex.InnerException, "#A3");
357 Assert.IsNotNull (ex.Message, "#A4");
358 Assert.AreEqual ("value", ex.ParamName, "#A5");
362 new String ((sbyte*) null, 0, 1);
364 } catch (ArgumentNullException ex) {
365 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
366 Assert.IsNull (ex.InnerException, "#B3");
367 Assert.IsNotNull (ex.Message, "#B4");
368 Assert.AreEqual ("value", ex.ParamName, "#B5");
372 new String ((sbyte*) null, 1, 0);
374 } catch (ArgumentNullException ex) {
375 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#C2");
376 Assert.IsNull (ex.InnerException, "#C3");
377 Assert.IsNotNull (ex.Message, "#C4");
378 Assert.AreEqual ("value", ex.ParamName, "#C5");
382 [Test] // ctor (SByte*, Int32, Int32, Encoding)
383 public unsafe void Constructor8_Length_Negative ()
386 new String ((sbyte*) null, 0, -1, null);
388 } catch (ArgumentOutOfRangeException ex) {
389 // Length cannot be less than zero
390 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
391 Assert.IsNull (ex.InnerException, "#A3");
392 Assert.IsNotNull (ex.Message, "#A4");
393 Assert.AreEqual ("length", ex.ParamName, "#A5");
397 new String ((sbyte*) null, 0, -1, Encoding.Default);
399 } catch (ArgumentOutOfRangeException ex) {
400 // Non-negative number required
401 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
402 Assert.IsNull (ex.InnerException, "#B3");
403 Assert.IsNotNull (ex.Message, "#B4");
404 Assert.AreEqual ("length", ex.ParamName, "#B5");
408 [Test] // ctor (SByte*, Int32, Int32, Encoding)
409 public unsafe void Constructor8_StartIndex_Negative ()
412 new String ((sbyte*) null, -1, 0, null);
414 } catch (ArgumentOutOfRangeException ex) {
415 // StartIndex cannot be less than zero
416 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
417 Assert.IsNull (ex.InnerException, "#A3");
418 Assert.IsNotNull (ex.Message, "#A4");
419 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
423 new String ((sbyte*) null, -1, 0, Encoding.Default);
425 } catch (ArgumentOutOfRangeException ex) {
426 // StartIndex cannot be less than zero
427 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
428 Assert.IsNull (ex.InnerException, "#B3");
429 Assert.IsNotNull (ex.Message, "#B4");
430 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
435 public unsafe void Constructor8_StartIndex_Overflow ()
438 new String ((sbyte*) (-1), 1, 0, null);
440 } catch (ArgumentOutOfRangeException ex) {
441 // Pointer startIndex and length do not refer to a
443 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
444 Assert.IsNull (ex.InnerException, "#A3");
445 Assert.IsNotNull (ex.Message, "#A4");
446 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
450 new String ((sbyte*) (-1), 1, 1, null);
452 } catch (ArgumentOutOfRangeException ex) {
453 // Pointer startIndex and length do not refer to a
455 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
456 Assert.IsNull (ex.InnerException, "#B3");
457 Assert.IsNotNull (ex.Message, "#B4");
458 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
462 new String ((sbyte*) (-1), 1, 0, Encoding.Default);
464 } catch (ArgumentOutOfRangeException ex) {
465 // Pointer startIndex and length do not refer to a
467 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
468 Assert.IsNull (ex.InnerException, "#C3");
469 Assert.IsNotNull (ex.Message, "#C4");
470 Assert.AreEqual ("startIndex", ex.ParamName, "#C5");
474 new String ((sbyte*) (-1), 1, 1, Encoding.Default);
476 } catch (ArgumentOutOfRangeException ex) {
477 // Pointer startIndex and length do not refer to a
479 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#D2");
480 Assert.IsNull (ex.InnerException, "#D3");
481 Assert.IsNotNull (ex.Message, "#D4");
482 Assert.AreEqual ("startIndex", ex.ParamName, "#D5");
486 [Test] // ctor (SByte*, Int32, Int32, Encoding)
487 [Ignore ("invalid test")]
488 public unsafe void Constructor8_Value_Invalid ()
491 new String ((sbyte*) (-1), 0, 1, null);
493 } catch (ArgumentOutOfRangeException ex) {
494 // Pointer startIndex and length do not refer to a
496 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
497 Assert.IsNull (ex.InnerException, "#3");
498 Assert.IsNotNull (ex.Message, "#4");
499 Assert.AreEqual ("ptr", ex.ParamName, "#5");
504 [Ignore ("Runtime throws NullReferenceException instead of AccessViolationException")]
505 [ExpectedException (typeof (AccessViolationException))]
506 public unsafe void Constructor8_Value_Invalid2 ()
508 new String ((sbyte*) (-1), 0, 1, Encoding.Default);
511 [Test] // ctor (SByte*, Int32, Int32, Encoding)
512 public unsafe void Constructor8_Value_Null ()
515 new String ((sbyte*) null, 0, 0, null);
517 } catch (ArgumentNullException ex) {
518 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
519 Assert.IsNull (ex.InnerException, "#A3");
520 Assert.IsNotNull (ex.Message, "#A4");
521 Assert.AreEqual ("value", ex.ParamName, "#A5");
525 new String ((sbyte*) null, 0, 1, null);
527 } catch (ArgumentNullException ex) {
528 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
529 Assert.IsNull (ex.InnerException, "#B3");
530 Assert.IsNotNull (ex.Message, "#B4");
531 Assert.AreEqual ("value", ex.ParamName, "#B5");
535 new String ((sbyte*) null, 1, 0, null);
537 } catch (ArgumentNullException ex) {
538 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#C2");
539 Assert.IsNull (ex.InnerException, "#C3");
540 Assert.IsNotNull (ex.Message, "#C4");
541 Assert.AreEqual ("value", ex.ParamName, "#C5");
544 Assert.AreEqual (String.Empty, new String ((sbyte*) null, 0, 0, Encoding.Default), "#D");
547 new String ((sbyte*) null, 0, 1, Encoding.Default);
549 } catch (ArgumentOutOfRangeException ex) {
550 // Pointer startIndex and length do not refer to a
552 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#E2");
553 Assert.IsNull (ex.InnerException, "#E3");
554 Assert.IsNotNull (ex.Message, "#E4");
555 //Assert.AreEqual ("value", ex.ParamName, "#E5");
558 Assert.AreEqual (String.Empty, new String ((sbyte*) null, 1, 0, Encoding.Default), "#F");
561 public void Length ()
563 string str = "test string";
565 Assert.AreEqual (11, str.Length, "wrong length");
571 string s1 = "oRiGiNal";
572 Assert.AreEqual (s1, s1.Clone (), "#A1");
573 Assert.AreSame (s1, s1.Clone (), "#A2");
575 string s2 = new DateTime (2000, 6, 3).ToString ();
576 Assert.AreEqual (s2, s2.Clone (), "#B1");
577 Assert.AreSame (s2, s2.Clone (), "#B2");
580 [Test] // bug #316666
581 public void CompareNotWorking ()
583 Assert.AreEqual (String.Compare ("A", "a"), 1, "A03");
584 Assert.AreEqual (String.Compare ("a", "A"), -1, "A04");
588 public void CompareNotWorking2 ()
590 string needle = "ab";
591 string haystack = "abbcbacab";
592 Assert.AreEqual (0, String.Compare(needle, 0, haystack, 0, 2, false), "basic substring check #9");
593 for (int i = 1; i <= (haystack.Length - needle.Length); i++) {
595 Assert.AreEqual (-1, String.Compare(needle, 0, haystack, i, 2, false), "loop substring check #8/" + i);
601 public void Compare ()
603 string lesser = "abc";
604 string medium = "abcd";
605 string greater = "xyz";
608 Assert.AreEqual (0, String.Compare (null, null));
609 Assert.AreEqual (1, String.Compare (lesser, null));
611 Assert.IsTrue (String.Compare (lesser, greater) < 0);
612 Assert.IsTrue (String.Compare (greater, lesser) > 0);
613 Assert.IsTrue (String.Compare (lesser, lesser) == 0);
614 Assert.IsTrue (String.Compare (lesser, medium) < 0);
616 Assert.IsTrue (String.Compare (lesser, caps, true) == 0);
617 Assert.IsTrue (String.Compare (lesser, caps, false) != 0);
618 Assert.AreEqual (String.Compare ("a", "b"), -1, "A01");
619 Assert.AreEqual (String.Compare ("b", "a"), 1, "A02");
622 // TODO - test with CultureInfo
624 string needle = "ab";
625 string haystack = "abbcbacab";
626 Assert.AreEqual (0, String.Compare(needle, 0, haystack, 0, 2), "basic substring check #1");
627 Assert.AreEqual (-1, String.Compare(needle, 0, haystack, 0, 3), "basic substring check #2");
628 Assert.AreEqual (0, String.Compare("ab", 0, "ab", 0, 2), "basic substring check #3");
629 Assert.AreEqual (0, String.Compare("ab", 0, "ab", 0, 3), "basic substring check #4");
630 Assert.AreEqual (0, String.Compare("abc", 0, "ab", 0, 2), "basic substring check #5");
631 Assert.AreEqual (1, String.Compare("abc", 0, "ab", 0, 5), "basic substring check #6");
632 Assert.AreEqual (-1, String.Compare("ab", 0, "abc", 0, 5), "basic substring check #7");
634 for (int i = 1; i <= (haystack.Length - needle.Length); i++) {
636 Assert.IsTrue (String.Compare(needle, 0, haystack, i, 2) != 0, "loop substring check #1/" + i);
637 Assert.IsTrue (String.Compare(needle, 0, haystack, i, 3) != 0, "loop substring check #2/" + i);
639 Assert.AreEqual (0, String.Compare(needle, 0, haystack, i, 2), "loop substring check #3/" + i);
640 Assert.AreEqual (0, String.Compare(needle, 0, haystack, i, 3), "loop substring check #4/" + i);
645 Assert.AreEqual (0, String.Compare(needle, 0, haystack, 0, 2, true), "basic substring check #8");
646 for (int i = 1; i <= (haystack.Length - needle.Length); i++) {
648 Assert.IsTrue (String.Compare(needle, 0, haystack, i, 2, true) != 0, "loop substring check #5/" + i);
649 Assert.IsTrue (String.Compare(needle, 0, haystack, i, 2, false) != 0, "loop substring check #6/" + i);
651 Assert.AreEqual (0, String.Compare(needle, 0, haystack, i, 2, true), "loop substring check #7/" + i);
655 Assert.AreEqual (0, String.Compare (needle, 0, haystack, 0, 0), "Compare with 0 length");
657 // TODO - extended format call with CultureInfo
661 public void CompareOrdinal ()
663 string lesser = "abc";
664 string medium = "abcd";
665 string greater = "xyz";
667 Assert.AreEqual (0, String.CompareOrdinal (null, null));
668 Assert.AreEqual (1, String.CompareOrdinal (lesser, null));
670 Assert.IsTrue (String.CompareOrdinal (lesser, greater) < 0, "#1");
671 Assert.IsTrue (String.CompareOrdinal (greater, lesser) > 0, "#2");
672 Assert.IsTrue (String.CompareOrdinal (lesser, lesser) == 0, "#3");
673 Assert.IsTrue (String.CompareOrdinal (lesser, medium) < 0, "#4");
675 string needle = "ab";
676 string haystack = "abbcbacab";
677 Assert.AreEqual (0, String.CompareOrdinal(needle, 0, haystack, 0, 2), "basic substring check");
678 Assert.AreEqual (-1, String.CompareOrdinal(needle, 0, haystack, 0, 3), "basic substring miss");
679 for (int i = 1; i <= (haystack.Length - needle.Length); i++) {
681 Assert.IsTrue (String.CompareOrdinal(needle, 0, haystack, i, 2) != 0, "loop substring check " + i);
682 Assert.IsTrue (String.CompareOrdinal(needle, 0, haystack, i, 3) != 0, "loop substring check " + i);
684 Assert.AreEqual (0, String.CompareOrdinal(needle, 0, haystack, i, 2), "loop substring check " + i);
685 Assert.AreEqual (0, String.CompareOrdinal(needle, 0, haystack, i, 3), "loop substring check " + i);
691 [ExpectedException (typeof (ArgumentOutOfRangeException))]
692 public void CompareOrdinal_InvalidCount()
694 string.CompareOrdinal ("a", 0, "b", 0, -1);
698 public void CompareOrdinalWithOffset ()
701 string ab2 = "a" + new string ('b', 1);
703 Assert.IsTrue (string.CompareOrdinal (ab1, 0, ab1, 1, 1) < 0, "#1");
704 Assert.IsTrue (string.CompareOrdinal (ab2, 0, ab1, 1, 1) < 0, "#2");
708 public void CompareOrdinalSubstringWithNull ()
710 string lesser = "abc";
711 string greater = "xyz";
713 Assert.AreEqual (0, string.CompareOrdinal (null, 0, null, 0, 0), "substring both null");
714 Assert.AreEqual (-1, string.CompareOrdinal (null, 0, greater, 0, 0), "substring strA null");
715 Assert.AreEqual (-1, string.CompareOrdinal (null, 4, greater, 0, 0), "substring strA null; indexA greater than strA.Length");
716 Assert.AreEqual (-1, string.CompareOrdinal (null, 0, greater, 4, 0), "substring strA null; indexB greater than strB.Length");
717 Assert.AreEqual (-1, string.CompareOrdinal (null, -1, greater, -1, -1), "substring strA null; indexA, indexB, length negative");
718 Assert.AreEqual (1, string.CompareOrdinal (lesser, 0, null, 0, 0), "substring strB null");
719 Assert.AreEqual (1, string.CompareOrdinal (lesser, 4, null, 0, 0), "substring strB null; indexA greater than strA.Length");
720 Assert.AreEqual (1, string.CompareOrdinal (lesser, 0, null, 4, 0), "substring strB null; indexB greater than strB.Length");
721 Assert.AreEqual (1, string.CompareOrdinal (lesser, -1, null, -1, -1), "substring strB null; indexA, indexB, length negative");
725 public void CompareTo ()
727 string lower = "abc";
728 string greater = "xyz";
729 string lesser = "abc";
731 Assert.IsTrue (lower.CompareTo (greater) < 0);
732 Assert.IsTrue (lower.CompareTo (lower) == 0);
733 Assert.IsTrue (greater.CompareTo (lesser) > 0);
738 public override string ToString ()
745 public void Concat ()
747 string string1 = "string1";
748 string string2 = "string2";
749 string concat = "string1string2";
751 Assert.IsTrue (String.Concat (string1, string2) == concat);
753 Assert.AreEqual (string1, String.Concat (string1, null));
754 Assert.AreEqual (string1, String.Concat (null, string1));
755 Assert.AreEqual (string.Empty, String.Concat (null, null));
757 WeirdToString wts = new WeirdToString ();
758 Assert.AreEqual (string1, String.Concat (string1, wts));
759 Assert.AreEqual (string1, String.Concat (wts, string1));
760 Assert.AreEqual (string.Empty, String.Concat (wts, wts));
761 string [] allstr = new string []{ string1, null, string2, concat };
762 object [] allobj = new object []{ string1, null, string2, concat };
763 string astr = String.Concat (allstr);
764 Assert.AreEqual ("string1string2string1string2", astr);
765 string ostr = String.Concat (allobj);
766 Assert.AreEqual (astr, ostr);
772 string s1 = "original";
773 string s2 = String.Copy(s1);
774 Assert.AreEqual (s1, s2, "#1");
775 Assert.IsTrue (!object.ReferenceEquals (s1, s2), "#2");
779 public void Copy_Str_Null ()
782 String.Copy ((string) null);
784 } catch (ArgumentNullException ex) {
785 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
786 Assert.IsNull (ex.InnerException, "#3");
787 Assert.IsNotNull (ex.Message, "#4");
788 Assert.AreEqual ("str", ex.ParamName, "#5");
793 public void CopyTo ()
795 string s1 = "original";
796 char[] c1 = new char[s1.Length];
797 string s2 = new String(c1);
798 Assert.IsTrue (!s1.Equals(s2), "#1");
799 for (int i = 0; i < s1.Length; i++) {
800 s1.CopyTo(i, c1, i, 1);
803 Assert.AreEqual (s1, s2, "#2");
807 public void CopyTo_Count_Negative ()
809 char [] dest = new char [4];
811 "Mono".CopyTo (0, dest, 0, -1);
813 } catch (ArgumentOutOfRangeException ex) {
814 // Count cannot be less than zero
815 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
816 Assert.IsNull (ex.InnerException, "#3");
817 Assert.IsNotNull (ex.Message, "#4");
818 Assert.AreEqual ("count", ex.ParamName, "#5");
823 public void CopyTo_Count_Overflow ()
825 char [] dest = new char [4];
827 "Mono".CopyTo (0, dest, 0, Int32.MaxValue);
829 } catch (ArgumentOutOfRangeException ex) {
830 // Index and count must refer to a location within the
832 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
833 Assert.IsNull (ex.InnerException, "#3");
834 Assert.IsNotNull (ex.Message, "#4");
835 Assert.AreEqual ("sourceIndex", ex.ParamName, "#5");
840 public void CopyTo_Destination_Null ()
842 string s = "original";
845 s.CopyTo (0, (char []) null, 0, s.Length);
847 } catch (ArgumentNullException ex) {
848 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
849 Assert.IsNull (ex.InnerException, "#3");
850 Assert.IsNotNull (ex.Message, "#4");
851 Assert.AreEqual ("destination", ex.ParamName, "#5");
856 public void CopyTo_DestinationIndex_Negative ()
858 char [] dest = new char [4];
860 "Mono".CopyTo (0, dest, -1, 4);
862 } catch (ArgumentOutOfRangeException ex) {
863 // Index and count must refer to a location within the
865 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
866 Assert.IsNull (ex.InnerException, "#3");
867 Assert.IsNotNull (ex.Message, "#4");
868 Assert.AreEqual ("destinationIndex", ex.ParamName, "#5");
873 public void CopyTo_DestinationIndex_Overflow ()
875 char [] dest = new char [4];
877 "Mono".CopyTo (0, dest, Int32.MaxValue, 4);
879 } catch (ArgumentOutOfRangeException ex) {
880 // Index and count must refer to a location within the
882 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
883 Assert.IsNull (ex.InnerException, "#3");
884 Assert.IsNotNull (ex.Message, "#4");
885 Assert.AreEqual ("destinationIndex", ex.ParamName, "#5");
890 public void CopyTo_SourceIndex_Negative ()
892 char [] dest = new char [4];
894 "Mono".CopyTo (-1, dest, 0, 4);
896 } catch (ArgumentOutOfRangeException ex) {
897 // Index was out of range. Must be non-negative and
898 // less than the size of the collection
899 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
900 Assert.IsNull (ex.InnerException, "#3");
901 Assert.IsNotNull (ex.Message, "#4");
902 Assert.AreEqual ("sourceIndex", ex.ParamName, "#5");
907 public void CopyTo_SourceIndex_Overflow ()
909 char[] dest = new char [4];
911 "Mono".CopyTo (Int32.MaxValue, dest, 0, 4);
913 } catch (ArgumentOutOfRangeException ex) {
914 // Index and count must refer to a location within the
916 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
917 Assert.IsNull (ex.InnerException, "#3");
918 Assert.IsNotNull (ex.Message, "#4");
919 Assert.AreEqual ("sourceIndex", ex.ParamName, "#5");
923 [Test] // EndsWith (String)
924 public void EndsWith1 ()
928 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
931 Assert.IsTrue (s.EndsWith ("bC"), "#A1");
932 Assert.IsTrue (!s.EndsWith ("bc"), "#A1");
933 Assert.IsTrue (!s.EndsWith ("dc"), "#A2");
934 Assert.IsTrue (!s.EndsWith ("LAbC"), "#A3");
935 Assert.IsTrue (s.EndsWith (string.Empty), "#A4");
936 Assert.IsTrue (!s.EndsWith ("Ab"), "#A5");
937 Assert.IsTrue (!s.EndsWith ("Abc"), "#A6");
938 Assert.IsTrue (s.EndsWith ("AbC"), "#A7");
942 Assert.IsTrue (s.EndsWith ("ai"), "#B1");
943 Assert.IsTrue (!s.EndsWith ("AI"), "#B2");
944 Assert.IsTrue (!s.EndsWith ("LTai"), "#B3");
945 Assert.IsTrue (s.EndsWith (string.Empty), "#B4");
946 Assert.IsTrue (!s.EndsWith ("Ta"), "#B5");
947 Assert.IsTrue (!s.EndsWith ("tai"), "#B6");
948 Assert.IsTrue (s.EndsWith ("Tai"), "#B7");
950 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
952 Assert.IsTrue (s.EndsWith ("ai"), "#C1");
953 Assert.IsTrue (!s.EndsWith ("AI"), "#C2");
954 Assert.IsTrue (!s.EndsWith ("LTai"), "#C3");
955 Assert.IsTrue (s.EndsWith (string.Empty), "#C4");
956 Assert.IsTrue (!s.EndsWith ("Ta"), "#C5");
957 Assert.IsTrue (!s.EndsWith ("tai"), "#C6");
958 Assert.IsTrue (s.EndsWith ("Tai"), "#C7");
961 [Test] // EndsWith (String)
962 public void EndsWith1_Value_Null ()
965 "ABC".EndsWith ((string) null);
967 } catch (ArgumentNullException ex) {
968 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
969 Assert.IsNull (ex.InnerException, "#3");
970 Assert.IsNotNull (ex.Message, "#4");
971 Assert.AreEqual ("value", ex.ParamName, "#5");
975 [Test] // EndsWith (String, StringComparison)
976 public void EndsWith2_ComparisonType_Invalid ()
979 "ABC".EndsWith ("C", (StringComparison) 80);
981 } catch (ArgumentException ex) {
982 // The string comparison type passed in is currently
984 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
985 Assert.IsNull (ex.InnerException, "#3");
986 Assert.IsNotNull (ex.Message, "#4");
987 Assert.AreEqual ("comparisonType", ex.ParamName, "#5");
991 [Test] // EndsWith (String, StringComparison)
992 public void EndsWith2_Value_Null ()
995 "ABC".EndsWith ((string) null, StringComparison.CurrentCulture);
997 } catch (ArgumentNullException ex) {
998 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
999 Assert.IsNull (ex.InnerException, "#3");
1000 Assert.IsNotNull (ex.Message, "#4");
1001 Assert.AreEqual ("value", ex.ParamName, "#5");
1005 [Test] // EndsWith (String, Boolean, CultureInfo)
1006 public void EndsWith3 ()
1010 CultureInfo culture;
1012 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
1017 Assert.IsTrue (!s.EndsWith ("bc", ignorecase, culture), "#A1");
1018 Assert.IsTrue (!s.EndsWith ("dc", ignorecase, culture), "#A2");
1019 Assert.IsTrue (!s.EndsWith ("LAbC", ignorecase, culture), "#A3");
1020 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#A4");
1021 Assert.IsTrue (!s.EndsWith ("Ab", ignorecase, culture), "#A5");
1022 Assert.IsTrue (!s.EndsWith ("Abc", ignorecase, culture), "#A6");
1023 Assert.IsTrue (s.EndsWith ("AbC", ignorecase, culture), "#A7");
1026 Assert.IsTrue (s.EndsWith ("bc", ignorecase, culture), "#B1");
1027 Assert.IsTrue (!s.EndsWith ("dc", ignorecase, culture), "#B2");
1028 Assert.IsTrue (!s.EndsWith ("LAbC", ignorecase, culture), "#B3");
1029 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#B4");
1030 Assert.IsTrue (!s.EndsWith ("Ab", ignorecase, culture), "#B5");
1031 Assert.IsTrue (s.EndsWith ("Abc", ignorecase, culture), "#B6");
1032 Assert.IsTrue (s.EndsWith ("AbC", ignorecase, culture), "#B7");
1038 Assert.IsTrue (s.EndsWith ("ai", ignorecase, culture), "#C1");
1039 Assert.IsTrue (!s.EndsWith ("AI", ignorecase, culture), "#C2");
1040 Assert.IsTrue (!s.EndsWith ("LTai", ignorecase, culture), "#C3");
1041 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#C4");
1042 Assert.IsTrue (!s.EndsWith ("Ta", ignorecase, culture), "#C5");
1043 Assert.IsTrue (!s.EndsWith ("tai", ignorecase, culture), "#C6");
1044 Assert.IsTrue (s.EndsWith ("Tai", ignorecase, culture), "#C7");
1047 Assert.IsTrue (s.EndsWith ("ai", ignorecase, culture), "#D1");
1048 Assert.IsTrue (!s.EndsWith ("AI", ignorecase, culture), "#D2");
1049 Assert.IsTrue (!s.EndsWith ("LTai", ignorecase, culture), "#D3");
1050 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#D4");
1051 Assert.IsTrue (!s.EndsWith ("Ta", ignorecase, culture), "#D5");
1052 Assert.IsTrue (s.EndsWith ("tai", ignorecase, culture), "#D6");
1053 Assert.IsTrue (s.EndsWith ("Tai", ignorecase, culture), "#D7");
1056 culture = new CultureInfo ("en-US");
1059 Assert.IsTrue (s.EndsWith ("ai", ignorecase, culture), "#E1");
1060 Assert.IsTrue (!s.EndsWith ("AI", ignorecase, culture), "#E2");
1061 Assert.IsTrue (!s.EndsWith ("LTai", ignorecase, culture), "#E3");
1062 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#E4");
1063 Assert.IsTrue (!s.EndsWith ("Ta", ignorecase, culture), "#E5");
1064 Assert.IsTrue (!s.EndsWith ("tai", ignorecase, culture), "#E6");
1065 Assert.IsTrue (s.EndsWith ("Tai", ignorecase, culture), "#E7");
1068 Assert.IsTrue (s.EndsWith ("ai", ignorecase, culture), "#F1");
1069 Assert.IsTrue (s.EndsWith ("AI", ignorecase, culture), "#F2");
1070 Assert.IsTrue (!s.EndsWith ("LTai", ignorecase, culture), "#F3");
1071 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#F4");
1072 Assert.IsTrue (!s.EndsWith ("Ta", ignorecase, culture), "#F5");
1073 Assert.IsTrue (s.EndsWith ("tai", ignorecase, culture), "#F6");
1074 Assert.IsTrue (s.EndsWith ("Tai", ignorecase, culture), "#F7");
1076 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
1080 Assert.IsTrue (s.EndsWith ("ai", ignorecase, culture), "#G1");
1081 Assert.IsTrue (!s.EndsWith ("AI", ignorecase, culture), "#G2");
1082 Assert.IsTrue (!s.EndsWith ("LTai", ignorecase, culture), "#G3");
1083 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#G4");
1084 Assert.IsTrue (!s.EndsWith ("Ta", ignorecase, culture), "#G5");
1085 Assert.IsTrue (!s.EndsWith ("tai", ignorecase, culture), "#G6");
1086 Assert.IsTrue (s.EndsWith ("Tai", ignorecase, culture), "#G7");
1089 Assert.IsTrue (s.EndsWith ("ai", ignorecase, culture), "#H1");
1090 Assert.IsTrue (s.EndsWith ("AI", ignorecase, culture), "#H2");
1091 Assert.IsTrue (!s.EndsWith ("LTai", ignorecase, culture), "#H3");
1092 Assert.IsTrue (s.EndsWith (string.Empty, ignorecase, culture), "#H4");
1093 Assert.IsTrue (!s.EndsWith ("Ta", ignorecase, culture), "#H5");
1094 Assert.IsTrue (s.EndsWith ("tai", ignorecase, culture), "#H6");
1095 Assert.IsTrue (s.EndsWith ("Tai", ignorecase, culture), "#H7");
1098 [Test] // EndsWith (String, Boolean, CultureInfo)
1099 public void EndsWith3_Value_Null ()
1102 "ABC".EndsWith ((string) null, true, null);
1104 } catch (ArgumentNullException ex) {
1105 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1106 Assert.IsNull (ex.InnerException, "#3");
1107 Assert.IsNotNull (ex.Message, "#4");
1108 Assert.AreEqual ("value", ex.ParamName, "#5");
1113 public void TestEquals ()
1115 string s1 = "original";
1116 string yes = "original";
1119 string s1s1 = s1 + s1;
1121 Assert.IsTrue (!s1.Equals (null), "No match for null");
1122 Assert.IsTrue (s1.Equals (y), "Should match object");
1123 Assert.IsTrue (s1.Equals (yes), "Should match");
1124 Assert.IsTrue (!s1.Equals (no), "Shouldn't match");
1126 Assert.IsTrue (String.Equals (null, null), "Static nulls should match");
1127 Assert.IsTrue (String.Equals (s1, yes), "Should match");
1128 Assert.IsTrue (!String.Equals (s1, no), "Shouldn't match");
1130 Assert.AreEqual (false, s1s1.Equals (y), "Equals (object)");
1134 public void TestFormat ()
1136 Assert.AreEqual (string.Empty, String.Format (string.Empty, 0), "Empty format string.");
1137 Assert.AreEqual ("100", String.Format ("{0}", 100), "Single argument.");
1138 Assert.AreEqual ("X 37X", String.Format ("X{0,5}X", 37), "Single argument, right justified.");
1139 Assert.AreEqual ("X37 X", String.Format ("X{0,-5}X", 37), "Single argument, left justified.");
1140 Assert.AreEqual (" 7d", String.Format ("{0, 4:x}", 125), "Whitespace in specifier");
1141 Assert.AreEqual ("The 3 wise men.", String.Format ("The {0} wise {1}.", 3, "men"), "Two arguments.");
1142 Assert.AreEqual ("do re me fa so.", String.Format ("{0} re {1} fa {2}.", "do", "me", "so"), "Three arguments.");
1143 Assert.AreEqual ("###00c0ffee#", String.Format ("###{0:x8}#", 0xc0ffee), "Formatted argument.");
1144 Assert.AreEqual ("# 033#", String.Format ("#{0,5:x3}#", 0x33), "Formatted argument, right justified.");
1145 Assert.AreEqual ("#033 #", String.Format ("#{0,-5:x3}#", 0x33), "Formatted argument, left justified.");
1146 Assert.AreEqual ("typedef struct _MonoObject { ... } MonoObject;", String.Format ("typedef struct _{0} {{ ... }} MonoObject;", "MonoObject"), "Escaped bracket");
1147 Assert.AreEqual ("Could not find file \"a/b\"", String.Format ("Could not find file \"{0}\"", "a/b"), "With Slash");
1148 Assert.AreEqual ("Could not find file \"a\\b\"", String.Format ("Could not find file \"{0}\"", "a\\b"), "With BackSlash");
1149 Assert.AreEqual ("{d} ", string.Format ("{{{0:d}} }", 100));
1152 [Test] // Format (String, Object)
1153 public void Format1_Format_Null ()
1156 String.Format (null, 1);
1158 } catch (ArgumentNullException ex) {
1159 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1160 Assert.IsNull (ex.InnerException, "#3");
1161 Assert.IsNotNull (ex.Message, "#4");
1162 Assert.AreEqual ("format", ex.ParamName, "#5");
1166 [Test] // Format (String, Object [])
1167 public void Format2_Format_Null ()
1170 String.Format (null, new object [] { 2 });
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 ("format", ex.ParamName, "#5");
1180 [Test] // Format (String, Object [])
1181 public void Format2_Args_Null ()
1184 String.Format ("text", (object []) null);
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 ("args", ex.ParamName, "#5");
1194 [Test] // Format (IFormatProvider, String, Object [])
1195 public void Format3_Format_Null ()
1198 String.Format (CultureInfo.InvariantCulture, null,
1199 new object [] { 3 });
1201 } catch (ArgumentNullException ex) {
1202 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1203 Assert.IsNull (ex.InnerException, "#3");
1204 Assert.IsNotNull (ex.Message, "#4");
1205 Assert.AreEqual ("format", ex.ParamName, "#5");
1209 [Test] // Format (IFormatProvider, String, Object [])
1210 public void Format3_Args_Null ()
1213 String.Format (CultureInfo.InvariantCulture, "text",
1216 } catch (ArgumentNullException ex) {
1217 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1218 Assert.IsNull (ex.InnerException, "#3");
1219 Assert.IsNotNull (ex.Message, "#4");
1220 Assert.AreEqual ("args", ex.ParamName, "#5");
1224 [Test] // Format (String, Object, Object)
1225 public void Format4_Format_Null ()
1228 String.Format (null, 4, 5);
1230 } catch (ArgumentNullException ex) {
1231 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1232 Assert.IsNull (ex.InnerException, "#3");
1233 Assert.IsNotNull (ex.Message, "#4");
1234 Assert.AreEqual ("format", ex.ParamName, "#5");
1238 [Test] // Format (String, Object, Object, Object)
1239 public void Format5_Format_Null ()
1242 String.Format (null, 4, 5, 6);
1244 } catch (ArgumentNullException ex) {
1245 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1246 Assert.IsNull (ex.InnerException, "#3");
1247 Assert.IsNotNull (ex.Message, "#4");
1248 Assert.AreEqual ("format", ex.ParamName, "#5");
1253 public void Format ()
1255 var s = String.Format (new NullFormatter (), "{0:}", "test");
1256 Assert.AreEqual ("test", s);
1260 public void Format_Arg_ToNullStringer ()
1262 var s = String.Format ("{0}", new ToNullStringer ());
1263 Assert.AreEqual ("", s);
1267 public void TestGetEnumerator ()
1269 string s1 = "original";
1270 char[] c1 = new char[s1.Length];
1271 string s2 = new String(c1);
1272 Assert.IsTrue (!s1.Equals(s2), "pre-enumerated string should not match");
1273 CharEnumerator en = s1.GetEnumerator();
1274 Assert.IsNotNull (en, "null enumerator");
1276 for (int i = 0; i < s1.Length; i++) {
1280 s2 = new String(c1);
1281 Assert.AreEqual (s1, s2, "enumerated string should match");
1285 public void TestGetHashCode ()
1287 string s1 = "original";
1288 // TODO - weak test, currently. Just verifies determinicity.
1289 Assert.AreEqual (s1.GetHashCode(), s1.GetHashCode(), "same string, same hash code");
1293 public void TestGetType ()
1295 string s1 = "original";
1296 Assert.AreEqual ("System.String", s1.GetType().ToString(), "String type");
1300 public void TestGetTypeCode ()
1302 string s1 = "original";
1303 Assert.IsTrue (s1.GetTypeCode().Equals(TypeCode.String));
1307 public void IndexOf ()
1309 string s1 = "original";
1312 s1.IndexOf ('q', s1.Length + 1);
1313 Assert.Fail ("#A1");
1314 } catch (ArgumentOutOfRangeException ex) {
1315 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1316 Assert.IsNull (ex.InnerException, "#A3");
1317 Assert.IsNotNull (ex.Message, "#A4");
1318 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
1322 s1.IndexOf ('q', s1.Length + 1, 1);
1323 Assert.Fail ("#B1");
1324 } catch (ArgumentOutOfRangeException ex) {
1325 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1326 Assert.IsNull (ex.InnerException, "#B3");
1327 Assert.IsNotNull (ex.Message, "#B4");
1328 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
1332 s1.IndexOf ("huh", s1.Length + 1);
1333 Assert.Fail ("#C1");
1334 } catch (ArgumentOutOfRangeException ex) {
1335 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
1336 Assert.IsNull (ex.InnerException, "#C3");
1337 Assert.IsNotNull (ex.Message, "#C4");
1338 Assert.AreEqual ("startIndex", ex.ParamName, "#C5");
1341 Assert.AreEqual (1, s1.IndexOf('r'), "basic char index");
1342 Assert.AreEqual (2, s1.IndexOf('i'), "basic char index 2");
1343 Assert.AreEqual (-1, s1.IndexOf('q'), "basic char index - no");
1345 Assert.AreEqual (1, s1.IndexOf("rig"), "basic string index");
1346 Assert.AreEqual (2, s1.IndexOf("i"), "basic string index 2");
1347 Assert.AreEqual (0, string.Empty.IndexOf(string.Empty), "basic string index 3");
1348 Assert.AreEqual (0, "ABC".IndexOf(string.Empty), "basic string index 4");
1349 Assert.AreEqual (-1, s1.IndexOf("rag"), "basic string index - no");
1351 Assert.AreEqual (1, s1.IndexOf('r', 1), "stepped char index");
1352 Assert.AreEqual (2, s1.IndexOf('i', 1), "stepped char index 2");
1353 Assert.AreEqual (4, s1.IndexOf('i', 3), "stepped char index 3");
1354 Assert.AreEqual (-1, s1.IndexOf('i', 5), "stepped char index 4");
1355 Assert.AreEqual (-1, s1.IndexOf('l', s1.Length), "stepped char index 5");
1357 Assert.AreEqual (1, s1.IndexOf('r', 1, 1), "stepped limited char index");
1358 Assert.AreEqual (-1, s1.IndexOf('r', 0, 1), "stepped limited char index");
1359 Assert.AreEqual (2, s1.IndexOf('i', 1, 3), "stepped limited char index");
1360 Assert.AreEqual (4, s1.IndexOf('i', 3, 3), "stepped limited char index");
1361 Assert.AreEqual (-1, s1.IndexOf('i', 5, 3), "stepped limited char index");
1363 s1 = "original original";
1364 Assert.AreEqual (0, s1.IndexOf("original", 0), "stepped string index 1");
1365 Assert.AreEqual (9, s1.IndexOf("original", 1), "stepped string index 2");
1366 Assert.AreEqual (-1, s1.IndexOf("original", 10), "stepped string index 3");
1367 Assert.AreEqual (3, s1.IndexOf(string.Empty, 3), "stepped string index 4");
1368 Assert.AreEqual (1, s1.IndexOf("rig", 0, 5), "stepped limited string index 1");
1369 Assert.AreEqual (-1, s1.IndexOf("rig", 0, 3), "stepped limited string index 2");
1370 Assert.AreEqual (10, s1.IndexOf("rig", 2, 15), "stepped limited string index 3");
1371 Assert.AreEqual (-1, s1.IndexOf("rig", 2, 3), "stepped limited string index 4");
1372 Assert.AreEqual (2, s1.IndexOf(string.Empty, 2, 3), "stepped limited string index 5");
1374 string s2 = "QBitArray::bitarr_data";
1375 Assert.AreEqual (9, s2.IndexOf ("::"), "bug #62160");
1378 [Test] // IndexOf (String)
1379 public void IndexOf2_Value_Null ()
1382 "Mono".IndexOf ((string) null);
1384 } catch (ArgumentNullException ex) {
1385 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1386 Assert.IsNull (ex.InnerException, "#3");
1387 Assert.IsNotNull (ex.Message, "#4");
1388 Assert.AreEqual ("value", ex.ParamName, "#5");
1392 [Test] // IndexOf (Char, Int32)
1393 public void IndexOf3 ()
1395 string s = "testing123456";
1397 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
1399 Assert.AreEqual (-1, s.IndexOf ('a', s.Length), "#A1");
1400 Assert.AreEqual (-1, s.IndexOf ('6', s.Length), "#A2");
1401 Assert.AreEqual (-1, s.IndexOf ('t', s.Length), "#A3");
1402 Assert.AreEqual (-1, s.IndexOf ('T', s.Length), "#A4");
1403 Assert.AreEqual (-1, s.IndexOf ('i', s.Length), "#A5");
1404 Assert.AreEqual (-1, s.IndexOf ('I', s.Length), "#A6");
1405 Assert.AreEqual (-1, s.IndexOf ('q', s.Length), "#A7");
1406 Assert.AreEqual (-1, s.IndexOf ('3', s.Length), "#A8");
1408 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
1410 Assert.AreEqual (-1, s.IndexOf ('a', s.Length), "#B1");
1411 Assert.AreEqual (-1, s.IndexOf ('6', s.Length), "#B2");
1412 Assert.AreEqual (-1, s.IndexOf ('t', s.Length), "#B3");
1413 Assert.AreEqual (-1, s.IndexOf ('T', s.Length), "#B4");
1414 Assert.AreEqual (-1, s.IndexOf ('i', s.Length), "#B5");
1415 Assert.AreEqual (-1, s.IndexOf ('I', s.Length), "#B6");
1416 Assert.AreEqual (-1, s.IndexOf ('q', s.Length), "#B7");
1417 Assert.AreEqual (-1, s.IndexOf ('3', s.Length), "#B8");
1420 [Test] // IndexOf (String, Int32)
1421 public void IndexOf4 ()
1423 string s = "testing123456";
1425 Assert.AreEqual (-1, s.IndexOf ("IN", 3), "#1");
1426 Assert.AreEqual (4, s.IndexOf ("in", 3), "#2");
1427 Assert.AreEqual (-1, s.IndexOf ("in", 5), "#3");
1428 Assert.AreEqual (7, s.IndexOf ("1", 5), "#4");
1429 Assert.AreEqual (12, s.IndexOf ("6", 12), "#5");
1430 Assert.AreEqual (0, s.IndexOf ("testing123456", 0), "#6");
1431 Assert.AreEqual (-1, s.IndexOf ("testing123456", 1), "#7");
1432 Assert.AreEqual (5, s.IndexOf (string.Empty, 5), "#8");
1433 Assert.AreEqual (0, s.IndexOf (string.Empty, 0), "#9");
1436 [Test] // IndexOf (String, Int32)
1437 public void IndexOf4_Value_Null ()
1440 "Mono".IndexOf ((string) null, 1);
1442 } catch (ArgumentNullException ex) {
1443 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1444 Assert.IsNull (ex.InnerException, "#3");
1445 Assert.IsNotNull (ex.Message, "#4");
1446 Assert.AreEqual ("value", ex.ParamName, "#5");
1450 [Test] // IndexOf (String, StringComparison)
1451 public void IndexOf5 ()
1453 string s = "testing123456";
1454 StringComparison comparison_type;
1456 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
1458 comparison_type = StringComparison.CurrentCulture;
1459 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#A1");
1460 Assert.AreEqual (-1, s.IndexOf ("NG", comparison_type), "#A2");
1461 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#A3");
1462 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#A4");
1463 Assert.AreEqual (-1, s.IndexOf ("T", comparison_type), "#A5");
1464 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#A6");
1465 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#A7");
1466 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#A8");
1467 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#A9");
1469 comparison_type = StringComparison.CurrentCultureIgnoreCase;
1470 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#B1");
1471 Assert.AreEqual (5, s.IndexOf ("NG", comparison_type), "#B2");
1472 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#B3");
1473 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#B4");
1474 Assert.AreEqual (0, s.IndexOf ("T", comparison_type), "#B5");
1475 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#B6");
1476 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#B7");
1477 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#B8");
1478 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#B9");
1480 comparison_type = StringComparison.InvariantCulture;
1481 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#C1");
1482 Assert.AreEqual (-1, s.IndexOf ("NG", comparison_type), "#C2");
1483 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#C3");
1484 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#C4");
1485 Assert.AreEqual (-1, s.IndexOf ("T", comparison_type), "#C5");
1486 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#C6");
1487 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#C7");
1488 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#C8");
1489 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#C9");
1491 comparison_type = StringComparison.InvariantCultureIgnoreCase;
1492 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#D1");
1493 Assert.AreEqual (5, s.IndexOf ("NG", comparison_type), "#D2");
1494 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#D3");
1495 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#D4");
1496 Assert.AreEqual (0, s.IndexOf ("T", comparison_type), "#D5");
1497 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#D6");
1498 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#D7");
1499 Assert.AreEqual (3, s.IndexOf ("TIN", comparison_type), "#D8");
1500 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#D9");
1502 comparison_type = StringComparison.Ordinal;
1503 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#E1");
1504 Assert.AreEqual (-1, s.IndexOf ("NG", comparison_type), "#E2");
1505 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#E3");
1506 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#E4");
1507 Assert.AreEqual (-1, s.IndexOf ("T", comparison_type), "#E5");
1508 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#E6");
1509 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#E7");
1510 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#E8");
1511 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#E9");
1513 comparison_type = StringComparison.OrdinalIgnoreCase;
1514 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#F1");
1515 Assert.AreEqual (5, s.IndexOf ("NG", comparison_type), "#F2");
1516 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#F3");
1517 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#F4");
1518 Assert.AreEqual (0, s.IndexOf ("T", comparison_type), "#F5");
1519 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#F6");
1520 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#F7");
1521 Assert.AreEqual (3, s.IndexOf ("TIN", comparison_type), "#F8");
1522 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#F9");
1524 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
1526 comparison_type = StringComparison.CurrentCulture;
1527 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#G1");
1528 Assert.AreEqual (-1, s.IndexOf ("NG", comparison_type), "#G2");
1529 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#G3");
1530 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#G4");
1531 Assert.AreEqual (-1, s.IndexOf ("T", comparison_type), "#G5");
1532 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#G6");
1533 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#G7");
1534 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#G8");
1535 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#G9");
1537 comparison_type = StringComparison.CurrentCultureIgnoreCase;
1538 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#H1");
1539 Assert.AreEqual (5, s.IndexOf ("NG", comparison_type), "#H2");
1540 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#H3");
1541 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#H4");
1542 Assert.AreEqual (0, s.IndexOf ("T", comparison_type), "#H5");
1543 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#H6");
1544 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#H7");
1545 Assert.AreEqual (3, s.IndexOf ("TIN", comparison_type), "#H8");
1546 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#H9");
1548 comparison_type = StringComparison.InvariantCulture;
1549 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#I1");
1550 Assert.AreEqual (-1, s.IndexOf ("NG", comparison_type), "#I2");
1551 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#I3");
1552 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#I4");
1553 Assert.AreEqual (-1, s.IndexOf ("T", comparison_type), "#I5");
1554 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#I6");
1555 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#I7");
1556 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#I8");
1557 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#I9");
1559 comparison_type = StringComparison.InvariantCultureIgnoreCase;
1560 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#J1");
1561 Assert.AreEqual (5, s.IndexOf ("NG", comparison_type), "#J2");
1562 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#J3");
1563 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#J4");
1564 Assert.AreEqual (0, s.IndexOf ("T", comparison_type), "#J5");
1565 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#J6");
1566 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#J7");
1567 Assert.AreEqual (3, s.IndexOf ("TIN", comparison_type), "#J8");
1568 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#J9");
1570 comparison_type = StringComparison.Ordinal;
1571 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#K1");
1572 Assert.AreEqual (-1, s.IndexOf ("NG", comparison_type), "#K2");
1573 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#K3");
1574 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#K4");
1575 Assert.AreEqual (-1, s.IndexOf ("T", comparison_type), "#K5");
1576 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#K6");
1577 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#K7");
1578 Assert.AreEqual (-1, s.IndexOf ("TIN", comparison_type), "#K8");
1579 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#K9");
1581 comparison_type = StringComparison.OrdinalIgnoreCase;
1582 Assert.AreEqual (7, s.IndexOf ("123", comparison_type), "#L1");
1583 Assert.AreEqual (5, s.IndexOf ("NG", comparison_type), "#L2");
1584 Assert.AreEqual (-1, s.IndexOf ("nga", comparison_type), "#L3");
1585 Assert.AreEqual (0, s.IndexOf ("t", comparison_type), "#L4");
1586 Assert.AreEqual (0, s.IndexOf ("T", comparison_type), "#L5");
1587 Assert.AreEqual (12, s.IndexOf ("6", comparison_type), "#L6");
1588 Assert.AreEqual (3, s.IndexOf ("tin", comparison_type), "#L7");
1589 Assert.AreEqual (3, s.IndexOf ("TIN", comparison_type), "#L8");
1590 Assert.AreEqual (0, s.IndexOf (string.Empty, comparison_type), "#L9");
1592 Assert.AreEqual (0, string.Empty.IndexOf (string.Empty, comparison_type), "#M");
1595 [Test] // IndexOf (String, StringComparison)
1596 public void IndexOf5_ComparisonType_Invalid ()
1599 "Mono".IndexOf (string.Empty, (StringComparison) Int32.MinValue);
1601 } catch (ArgumentException ex) {
1602 // The string comparison type passed in is currently
1604 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1605 Assert.IsNull (ex.InnerException, "#3");
1606 Assert.IsNotNull (ex.Message, "#4");
1607 Assert.AreEqual ("comparisonType", ex.ParamName, "#5");
1611 [Test] // IndexOf (String, StringComparison)
1612 public void IndexOf5_Value_Null ()
1615 "Mono".IndexOf ((string) null, StringComparison.Ordinal);
1617 } catch (ArgumentNullException ex) {
1618 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1619 Assert.IsNull (ex.InnerException, "#3");
1620 Assert.IsNotNull (ex.Message, "#4");
1621 Assert.AreEqual ("value", ex.ParamName, "#5");
1626 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1627 public void IndexOfStringComparisonOrdinalRangeException1 ()
1629 "Mono".IndexOf ("no", 5, StringComparison.Ordinal);
1633 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1634 public void IndexOfStringComparisonOrdinalRangeException2 ()
1636 "Mono".IndexOf ("no", 1, 5, StringComparison.Ordinal);
1640 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1641 public void IndexOfStringComparisonOrdinalIgnoreCaseRangeException1 ()
1643 "Mono".IndexOf ("no", 5, StringComparison.OrdinalIgnoreCase);
1647 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1648 public void IndexOfStringComparisonOrdinalIgnoreCaseRangeException2 ()
1650 "Mono".IndexOf ("no", 1, 5, StringComparison.OrdinalIgnoreCase);
1654 public void IndexOfStringComparisonCurrentCulture_Empty ()
1656 Assert.AreEqual (1, "Mono".IndexOf ("", 1, StringComparison.CurrentCultureIgnoreCase));
1660 public void IndexOfStringComparison ()
1662 string text = "testing123456";
1663 string text2 = "123";
1664 string text3 = "NG";
1666 Assert.AreEqual (7, text.IndexOf (text2, StringComparison.Ordinal), "#1-1");
1667 Assert.AreEqual (5, text.IndexOf (text3, StringComparison.OrdinalIgnoreCase), "#2-1");
1669 Assert.AreEqual (7, text.IndexOf (text2, 0, StringComparison.Ordinal), "#1-2");
1670 Assert.AreEqual (5, text.IndexOf (text3, 0, StringComparison.OrdinalIgnoreCase), "#2-2");
1672 Assert.AreEqual (7, text.IndexOf (text2, 1, StringComparison.Ordinal), "#1-3");
1673 Assert.AreEqual (5, text.IndexOf (text3, 1, StringComparison.OrdinalIgnoreCase), "#2-3");
1675 Assert.AreEqual (7, text.IndexOf (text2, 6, StringComparison.Ordinal), "#1-4");
1676 Assert.AreEqual (-1, text.IndexOf (text3, 6, StringComparison.OrdinalIgnoreCase), "#2-4");
1678 Assert.AreEqual (7, text.IndexOf (text2, 7, 3, StringComparison.Ordinal), "#1-5");
1679 Assert.AreEqual (-1, text.IndexOf (text3, 7, 3, StringComparison.OrdinalIgnoreCase), "#2-5");
1681 Assert.AreEqual (-1, text.IndexOf (text2, 6, 0, StringComparison.Ordinal), "#1-6");
1682 Assert.AreEqual (-1, text.IndexOf (text3, 5, 0, StringComparison.OrdinalIgnoreCase), "#2-6");
1684 Assert.AreEqual (-1, text.IndexOf (text2, 7, 1, StringComparison.Ordinal), "#1-7");
1685 Assert.AreEqual (-1, text.IndexOf (text3, 5, 1, StringComparison.OrdinalIgnoreCase), "#2-7");
1687 Assert.AreEqual (0, text.IndexOf (text4, 0, StringComparison.Ordinal), "#3-1");
1688 Assert.AreEqual (0, text.IndexOf (text4, 0, StringComparison.OrdinalIgnoreCase), "#3-2");
1690 Assert.AreEqual (-1, text.IndexOf (text4, 13, StringComparison.Ordinal), "#4-1");
1691 Assert.AreEqual (-1, text.IndexOf (text4, 13, StringComparison.OrdinalIgnoreCase), "#4-2");
1693 Assert.AreEqual (-1, text.IndexOf (text4, 13, 0, StringComparison.Ordinal), "#4-1");
1694 Assert.AreEqual (-1, text.IndexOf (text4, 13, 0, StringComparison.OrdinalIgnoreCase), "#4-2");
1696 Assert.AreEqual (12, text.IndexOf ("6", 12, 1, StringComparison.Ordinal), "#5-1");
1697 Assert.AreEqual (12, text.IndexOf ("6", 12, 1, StringComparison.OrdinalIgnoreCase), "#5-2");
1701 public void IndexOfStringComparisonOrdinal ()
1703 string text = "testing123456";
1704 Assert.AreEqual (10, text.IndexOf ("456", StringComparison.Ordinal), "#1");
1705 Assert.AreEqual (-1, text.IndexOf ("4567", StringComparison.Ordinal), "#2");
1706 Assert.AreEqual (0, text.IndexOf ("te", StringComparison.Ordinal), "#3");
1707 Assert.AreEqual (2, text.IndexOf ("s", StringComparison.Ordinal), "#4");
1708 Assert.AreEqual (-1, text.IndexOf ("ates", StringComparison.Ordinal), "#5");
1709 Assert.AreEqual (-1, text.IndexOf ("S", StringComparison.Ordinal), "#6");
1713 public void IndexOfStringComparisonOrdinalIgnoreCase ()
1715 string text = "testing123456";
1716 Assert.AreEqual (10, text.IndexOf ("456", StringComparison.OrdinalIgnoreCase), "#1");
1717 Assert.AreEqual (-1, text.IndexOf ("4567", StringComparison.OrdinalIgnoreCase), "#2");
1718 Assert.AreEqual (0, text.IndexOf ("te", StringComparison.OrdinalIgnoreCase), "#3");
1719 Assert.AreEqual (2, text.IndexOf ("s", StringComparison.OrdinalIgnoreCase), "#4");
1720 Assert.AreEqual (-1, text.IndexOf ("ates", StringComparison.OrdinalIgnoreCase), "#5");
1721 Assert.AreEqual (2, text.IndexOf ("S", StringComparison.OrdinalIgnoreCase), "#6");
1725 public void IndexOfOrdinalCountSmallerThanValueString ()
1727 Assert.AreEqual (-1, "Test".IndexOf ("ST", 2, 1, StringComparison.Ordinal), "#1");
1728 Assert.AreEqual (-1, "Test".IndexOf ("ST", 2, 1, StringComparison.OrdinalIgnoreCase), "#2");
1729 Assert.AreEqual (-1, "Test".LastIndexOf ("ST", 2, 1, StringComparison.Ordinal), "#3");
1730 Assert.AreEqual (-1, "Test".LastIndexOf ("ST", 2, 1, StringComparison.OrdinalIgnoreCase), "#4");
1733 [Test] // IndexOf (Char, Int32, Int32)
1734 public void IndexOf6_Count_Negative ()
1737 "Mono".IndexOf ('o', 1, -1);
1739 } catch (ArgumentOutOfRangeException ex) {
1740 // Count must be positive and count must refer to a
1741 // location within the string/array/collection
1742 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
1743 Assert.IsNull (ex.InnerException, "#3");
1744 Assert.IsNotNull (ex.Message, "#4");
1745 Assert.AreEqual ("count", ex.ParamName, "#5");
1749 [Test] // IndexOf (Char, Int32, Int32)
1750 public void IndexOf6_Count_Overflow ()
1753 "Mono".IndexOf ('o', 1, Int32.MaxValue);
1755 } catch (ArgumentOutOfRangeException ex) {
1756 // Count must be positive and count must refer to a
1757 // location within the string/array/collection
1758 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
1759 Assert.IsNull (ex.InnerException, "#3");
1760 Assert.IsNotNull (ex.Message, "#4");
1761 Assert.AreEqual ("count", ex.ParamName, "#5");
1765 [Test] // IndexOf (Char, Int32, Int32)
1766 public void IndexOf6_StartIndex_Negative ()
1769 "Mono".IndexOf ('o', -1, 1);
1771 } catch (ArgumentOutOfRangeException ex) {
1772 // Index was out of range. Must be non-negative and
1773 // less than the size of the collection
1774 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
1775 Assert.IsNull (ex.InnerException, "#3");
1776 Assert.IsNotNull (ex.Message, "#4");
1777 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
1781 [Test] // IndexOf (Char, Int32, Int32)
1782 public void IndexOf6_StartIndex_Overflow ()
1784 string s = "testing123456";
1787 s.IndexOf ('o', s.Length + 1, 1);
1789 } catch (ArgumentOutOfRangeException ex) {
1790 // Index was out of range. Must be non-negative and
1791 // less than the size of the collection
1792 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
1793 Assert.IsNull (ex.InnerException, "#3");
1794 Assert.IsNotNull (ex.Message, "#4");
1795 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
1799 [Test] // IndexOf (String, Int32, Int32)
1800 public void IndexOf7 ()
1802 string s = "testing123456test";
1804 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
1806 Assert.AreEqual (-1, s.IndexOf ("123", 4, 5), "#A1");
1807 Assert.AreEqual (7, s.IndexOf ("123", 4, 6), "#A2");
1808 Assert.AreEqual (-1, s.IndexOf ("123", 5, 4), "#A3");
1809 Assert.AreEqual (7, s.IndexOf ("123", 5, 5), "#A4");
1810 Assert.AreEqual (7, s.IndexOf ("123", 0, s.Length), "#A5");
1811 Assert.AreEqual (-1, s.IndexOf ("123", s.Length, 0), "#A6");
1813 Assert.AreEqual (-1, s.IndexOf ("tin", 2, 3), "#B1");
1814 Assert.AreEqual (3, s.IndexOf ("tin", 3, 3), "#B2");
1815 Assert.AreEqual (-1, s.IndexOf ("tin", 2, 2), "#B3");
1816 Assert.AreEqual (-1, s.IndexOf ("tin", 1, 4), "#B4");
1817 Assert.AreEqual (3, s.IndexOf ("tin", 0, s.Length), "#B5");
1818 Assert.AreEqual (-1, s.IndexOf ("tin", s.Length, 0), "#B6");
1820 Assert.AreEqual (6, s.IndexOf ("g12", 4, 5), "#C1");
1821 Assert.AreEqual (-1, s.IndexOf ("g12", 5, 2), "#C2");
1822 Assert.AreEqual (-1, s.IndexOf ("g12", 5, 3), "#C3");
1823 Assert.AreEqual (6, s.IndexOf ("g12", 6, 4), "#C4");
1824 Assert.AreEqual (6, s.IndexOf ("g12", 0, s.Length), "#C5");
1825 Assert.AreEqual (-1, s.IndexOf ("g12", s.Length, 0), "#C6");
1827 Assert.AreEqual (1, s.IndexOf ("est", 0, 5), "#D1");
1828 Assert.AreEqual (-1, s.IndexOf ("est", 1, 2), "#D2");
1829 Assert.AreEqual (-1, s.IndexOf ("est", 2, 10), "#D3");
1830 Assert.AreEqual (14, s.IndexOf ("est", 7, 10), "#D4");
1831 Assert.AreEqual (1, s.IndexOf ("est", 0, s.Length), "#D5");
1832 Assert.AreEqual (-1, s.IndexOf ("est", s.Length, 0), "#D6");
1834 Assert.AreEqual (-1, s.IndexOf ("T", 0, s.Length), "#E1");
1835 Assert.AreEqual (4, s.IndexOf ("i", 0, s.Length), "#E2");
1836 Assert.AreEqual (-1, s.IndexOf ("I", 0, s.Length), "#E3");
1837 Assert.AreEqual (12, s.IndexOf ("6", 0, s.Length), "#E4");
1838 Assert.AreEqual (0, s.IndexOf ("testing123456", 0, s.Length), "#E5");
1839 Assert.AreEqual (-1, s.IndexOf ("testing1234567", 0, s.Length), "#E6");
1840 Assert.AreEqual (0, s.IndexOf (string.Empty, 0, 0), "#E7");
1841 Assert.AreEqual (4, s.IndexOf (string.Empty, 4, 3), "#E8");
1842 Assert.AreEqual (0, string.Empty.IndexOf (string.Empty, 0, 0), "#E9");
1843 Assert.AreEqual (-1, string.Empty.IndexOf ("abc", 0, 0), "#E10");
1845 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
1847 Assert.AreEqual (-1, s.IndexOf ("123", 4, 5), "#F1");
1848 Assert.AreEqual (7, s.IndexOf ("123", 4, 6), "#F2");
1849 Assert.AreEqual (-1, s.IndexOf ("123", 5, 4), "#F3");
1850 Assert.AreEqual (7, s.IndexOf ("123", 5, 5), "#F4");
1851 Assert.AreEqual (7, s.IndexOf ("123", 0, s.Length), "#F5");
1852 Assert.AreEqual (-1, s.IndexOf ("123", s.Length, 0), "#F6");
1854 Assert.AreEqual (-1, s.IndexOf ("tin", 2, 3), "#G1");
1855 Assert.AreEqual (3, s.IndexOf ("tin", 3, 3), "#G2");
1856 Assert.AreEqual (-1, s.IndexOf ("tin", 2, 2), "#G3");
1857 Assert.AreEqual (-1, s.IndexOf ("tin", 1, 4), "#G4");
1858 Assert.AreEqual (3, s.IndexOf ("tin", 0, s.Length), "#G5");
1859 Assert.AreEqual (-1, s.IndexOf ("tin", s.Length, 0), "#G6");
1861 Assert.AreEqual (6, s.IndexOf ("g12", 4, 5), "#H1");
1862 Assert.AreEqual (-1, s.IndexOf ("g12", 5, 2), "#H2");
1863 Assert.AreEqual (-1, s.IndexOf ("g12", 5, 3), "#H3");
1864 Assert.AreEqual (6, s.IndexOf ("g12", 6, 4), "#H4");
1865 Assert.AreEqual (6, s.IndexOf ("g12", 0, s.Length), "#H5");
1866 Assert.AreEqual (-1, s.IndexOf ("g12", s.Length, 0), "#H6");
1868 Assert.AreEqual (1, s.IndexOf ("est", 0, 5), "#I1");
1869 Assert.AreEqual (-1, s.IndexOf ("est", 1, 2), "#I2");
1870 Assert.AreEqual (-1, s.IndexOf ("est", 2, 10), "#I3");
1871 Assert.AreEqual (14, s.IndexOf ("est", 7, 10), "#I4");
1872 Assert.AreEqual (1, s.IndexOf ("est", 0, s.Length), "#I5");
1873 Assert.AreEqual (-1, s.IndexOf ("est", s.Length, 0), "#I6");
1875 Assert.AreEqual (-1, s.IndexOf ("T", 0, s.Length), "#J1");
1876 Assert.AreEqual (4, s.IndexOf ("i", 0, s.Length), "#J2");
1877 Assert.AreEqual (-1, s.IndexOf ("I", 0, s.Length), "#J3");
1878 Assert.AreEqual (12, s.IndexOf ("6", 0, s.Length), "#J4");
1879 Assert.AreEqual (0, s.IndexOf ("testing123456", 0, s.Length), "#J5");
1880 Assert.AreEqual (-1, s.IndexOf ("testing1234567", 0, s.Length), "#J6");
1881 Assert.AreEqual (0, s.IndexOf (string.Empty, 0, 0), "#J7");
1882 Assert.AreEqual (4, s.IndexOf (string.Empty, 4, 3), "#J8");
1883 Assert.AreEqual (0, string.Empty.IndexOf (string.Empty, 0, 0), "#J9");
1884 Assert.AreEqual (-1, string.Empty.IndexOf ("abc", 0, 0), "#J10");
1888 public void IndexOf7_Empty ()
1890 Assert.AreEqual (1, "FOO".IndexOf ("", 1, 2, StringComparison.Ordinal));
1891 Assert.AreEqual (1, "FOO".IndexOf ("", 1, 2, StringComparison.OrdinalIgnoreCase));
1894 [Test] // IndexOf (String, Int32, Int32)
1895 public void IndexOf7_Count_Negative ()
1898 "Mono".IndexOf ("no", 1, -1);
1900 } catch (ArgumentOutOfRangeException ex) {
1901 // Count must be positive and count must refer to a
1902 // location within the string/array/collection
1903 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
1904 Assert.IsNull (ex.InnerException, "#3");
1905 Assert.IsNotNull (ex.Message, "#4");
1906 Assert.AreEqual ("count", ex.ParamName, "#5");
1910 [Test] // IndexOf (String, Int32, Int32)
1911 public void IndexOf7_Count_Overflow ()
1913 string s = "testing123456";
1916 s.IndexOf ("no", 1, s.Length);
1917 Assert.Fail ("#A1");
1918 } catch (ArgumentOutOfRangeException ex) {
1919 // Count must be positive and count must refer to a
1920 // location within the string/array/collection
1921 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1922 Assert.IsNull (ex.InnerException, "#A3");
1923 Assert.IsNotNull (ex.Message, "#A4");
1924 Assert.AreEqual ("count", ex.ParamName, "#A5");
1928 s.IndexOf ("no", 1, s.Length + 1);
1929 Assert.Fail ("#B1");
1930 } catch (ArgumentOutOfRangeException ex) {
1931 // Count must be positive and count must refer to a
1932 // location within the string/array/collection
1933 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1934 Assert.IsNull (ex.InnerException, "#B3");
1935 Assert.IsNotNull (ex.Message, "#B4");
1936 Assert.AreEqual ("count", ex.ParamName, "#B5");
1940 s.IndexOf ("no", 1, int.MaxValue);
1941 Assert.Fail ("#C1");
1942 } catch (ArgumentOutOfRangeException ex) {
1943 // Count must be positive and count must refer to a
1944 // location within the string/array/collection
1945 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
1946 Assert.IsNull (ex.InnerException, "#C3");
1947 Assert.IsNotNull (ex.Message, "#C4");
1948 Assert.AreEqual ("count", ex.ParamName, "#C5");
1952 [Test] // IndexOf (String, Int32, Int32)
1953 public void IndexOf7_StartIndex_Negative ()
1956 "Mono".IndexOf ("no", -1, 1);
1958 } catch (ArgumentOutOfRangeException ex) {
1959 // Index was out of range. Must be non-negative and
1960 // less than the size of the collection
1961 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
1962 Assert.IsNull (ex.InnerException, "#3");
1963 Assert.IsNotNull (ex.Message, "#4");
1964 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
1968 [Test] // IndexOf (String, Int32, Int32)
1969 public void IndexOf7_StartIndex_Overflow ()
1971 string s = "testing123456";
1974 s.IndexOf ("no", s.Length + 1, 1);
1975 Assert.Fail ("#A1");
1976 } catch (ArgumentOutOfRangeException ex) {
1977 // Index was out of range. Must be non-negative and
1978 // less than the size of the collection
1979 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1980 Assert.IsNull (ex.InnerException, "#A3");
1981 Assert.IsNotNull (ex.Message, "#A4");
1982 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
1986 s.IndexOf ("no", int.MaxValue, 1);
1987 Assert.Fail ("#B1");
1988 } catch (ArgumentOutOfRangeException ex) {
1989 // Index was out of range. Must be non-negative and
1990 // less than the size of the collection
1991 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1992 Assert.IsNull (ex.InnerException, "#B3");
1993 Assert.IsNotNull (ex.Message, "#B4");
1994 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
1998 [Test] // IndexOf (String, Int32, Int32)
1999 public void IndexOf7_Value_Null ()
2002 "Mono".IndexOf ((string) null, 0, 1);
2004 } catch (ArgumentNullException ex) {
2005 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2006 Assert.IsNull (ex.InnerException, "#3");
2007 Assert.IsNotNull (ex.Message, "#4");
2008 Assert.AreEqual ("value", ex.ParamName, "#5");
2012 [Test] // IndexOf (String, Int32, StringComparison)
2013 public void IndexOf8_ComparisonType_Invalid ()
2016 "Mono".IndexOf (string.Empty, 1, (StringComparison) Int32.MinValue);
2018 } catch (ArgumentException ex) {
2019 // The string comparison type passed in is currently
2021 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
2022 Assert.IsNull (ex.InnerException, "#3");
2023 Assert.IsNotNull (ex.Message, "#4");
2024 Assert.AreEqual ("comparisonType", ex.ParamName, "#5");
2028 [Test] // IndexOf (String, Int32, StringComparison)
2029 public void IndexOf8_StartIndex_Negative ()
2032 "Mono".IndexOf ("o", -1, StringComparison.Ordinal);
2034 } catch (ArgumentOutOfRangeException ex) {
2035 // Index was out of range. Must be non-negative and
2036 // less than the size of the collection
2037 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2038 Assert.IsNull (ex.InnerException, "#3");
2039 Assert.IsNotNull (ex.Message, "#4");
2040 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2044 [Test] // IndexOf (String, Int32, Int32, StringComparison)
2045 public void IndexOf9_ComparisonType_Invalid ()
2048 "Mono".IndexOf (string.Empty, 0, 1, (StringComparison) Int32.MinValue);
2050 } catch (ArgumentException ex) {
2051 // The string comparison type passed in is currently
2053 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
2054 Assert.IsNull (ex.InnerException, "#3");
2055 Assert.IsNotNull (ex.Message, "#4");
2056 Assert.AreEqual ("comparisonType", ex.ParamName, "#5");
2060 [Test] // IndexOf (String, Int32, Int32, StringComparison)
2061 public void IndexOf9_Count_Negative ()
2064 "Mono".IndexOf ("o", 1, -1, StringComparison.Ordinal);
2067 } catch (ArgumentOutOfRangeException ex) {
2068 // Count must be positive and count must refer to a
2069 // location within the string/array/collection
2070 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2071 Assert.IsNull (ex.InnerException, "#3");
2072 Assert.IsNotNull (ex.Message, "#4");
2073 Assert.AreEqual ("count", ex.ParamName, "#5");
2077 [Test] // IndexOf (String, Int32, Int32, StringComparison)
2078 public void IndexOf9_StartIndex_Negative ()
2081 "Mono".IndexOf ("o", -1, 0, StringComparison.Ordinal);
2083 } catch (ArgumentOutOfRangeException ex) {
2084 // Index was out of range. Must be non-negative and
2085 // less than the size of the collection
2086 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2087 Assert.IsNull (ex.InnerException, "#3");
2088 Assert.IsNotNull (ex.Message, "#4");
2089 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2094 public void IndexOfAny1 ()
2096 string s = "abcdefghijklmd";
2099 c = new char [] {'a', 'e', 'i', 'o', 'u'};
2100 Assert.AreEqual (0, s.IndexOfAny (c), "#1");
2101 c = new char [] { 'd', 'z' };
2102 Assert.AreEqual (3, s.IndexOfAny (c), "#1");
2103 c = new char [] { 'q', 'm', 'z' };
2104 Assert.AreEqual (12, s.IndexOfAny (c), "#2");
2106 Assert.AreEqual (-1, s.IndexOfAny (c), "#3");
2110 [Test] // IndexOfAny (Char [])
2111 public void IndexOfAny1_AnyOf_Null ()
2114 "mono".IndexOfAny ((char []) null);
2116 } catch (ArgumentNullException ex) {
2117 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2118 Assert.IsNull (ex.InnerException, "#3");
2119 Assert.IsNotNull (ex.Message, "#4");
2120 Assert.IsNull (ex.ParamName, "#5");
2124 [Test] // IndexOfAny (Char [], Int32)
2125 public void IndexOfAny2 ()
2127 string s = "abcdefghijklmd";
2130 c = new char [] { 'a', 'e', 'i', 'o', 'u' };
2131 Assert.AreEqual (0, s.IndexOfAny (c, 0), "#A1");
2132 Assert.AreEqual (4, s.IndexOfAny (c, 1), "#A1");
2133 Assert.AreEqual (-1, s.IndexOfAny (c, 9), "#A2");
2134 Assert.AreEqual (-1, s.IndexOfAny (c, s.Length), "#A3");
2136 c = new char [] { 'd', 'z' };
2137 Assert.AreEqual (3, s.IndexOfAny (c, 0), "#B1");
2138 Assert.AreEqual (3, s.IndexOfAny (c, 3), "#B2");
2139 Assert.AreEqual (13, s.IndexOfAny (c, 4), "#B3");
2140 Assert.AreEqual (13, s.IndexOfAny (c, 9), "#B4");
2141 Assert.AreEqual (-1, s.IndexOfAny (c, s.Length), "#B5");
2142 Assert.AreEqual (13, s.IndexOfAny (c, s.Length - 1), "#B6");
2144 c = new char [] { 'q', 'm', 'z' };
2145 Assert.AreEqual (12, s.IndexOfAny (c, 0), "#C1");
2146 Assert.AreEqual (12, s.IndexOfAny (c, 4), "#C2");
2147 Assert.AreEqual (12, s.IndexOfAny (c, 12), "#C3");
2148 Assert.AreEqual (-1, s.IndexOfAny (c, s.Length), "#C4");
2151 Assert.AreEqual (-1, s.IndexOfAny (c, 0), "#D1");
2152 Assert.AreEqual (-1, s.IndexOfAny (c, 4), "#D2");
2153 Assert.AreEqual (-1, s.IndexOfAny (c, 9), "#D3");
2154 Assert.AreEqual (-1, s.IndexOfAny (c, s.Length), "#D4");
2157 [Test] // IndexOfAny (Char [], Int32)
2158 public void IndexOfAny2_AnyOf_Null ()
2161 "mono".IndexOfAny ((char []) null, 0);
2163 } catch (ArgumentNullException ex) {
2164 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2165 Assert.IsNull (ex.InnerException, "#3");
2166 Assert.IsNotNull (ex.Message, "#4");
2167 Assert.IsNull (ex.ParamName, "#5");
2171 [Test] // IndexOfAny (Char [], Int32)
2172 public void IndexOfAny2_StartIndex_Negative ()
2174 string s = "abcdefghijklm";
2177 s.IndexOfAny (new char [1] { 'd' }, -1, 1);
2179 } catch (ArgumentOutOfRangeException ex) {
2180 // Specified argument was out of the range of valid
2182 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2183 Assert.IsNull (ex.InnerException, "#3");
2184 Assert.IsNotNull (ex.Message, "#4");
2185 Assert.IsNull (ex.ParamName, "#5");
2189 [Test] // IndexOfAny (Char [], Int32, Int32)
2190 public void IndexOfAny2_StartIndex_Overflow ()
2192 string s = "abcdefghijklm";
2195 s.IndexOfAny (new char [1] { 'd' }, s.Length + 1);
2197 } catch (ArgumentOutOfRangeException ex) {
2198 // Specified argument was out of the range of valid
2200 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2201 Assert.IsNull (ex.InnerException, "#3");
2202 Assert.IsNotNull (ex.Message, "#4");
2203 Assert.IsNull (ex.ParamName, "#5");
2207 [Test] // IndexOfAny (Char [], Int32, Int32)
2208 public void IndexOfAny3 ()
2210 string s = "abcdefghijklmd";
2213 c = new char [] { 'a', 'e', 'i', 'o', 'u' };
2214 Assert.AreEqual (0, s.IndexOfAny (c, 0, 2), "#A1");
2215 Assert.AreEqual (-1, s.IndexOfAny (c, 1, 2), "#A2");
2216 Assert.AreEqual (-1, s.IndexOfAny (c, 1, 3), "#A3");
2217 Assert.AreEqual (4, s.IndexOfAny (c, 1, 4), "#A3");
2218 Assert.AreEqual (4, s.IndexOfAny (c, 1, s.Length - 1), "#A4");
2220 c = new char [] { 'd', 'z' };
2221 Assert.AreEqual (-1, s.IndexOfAny (c, 0, 2), "#B1");
2222 Assert.AreEqual (-1, s.IndexOfAny (c, 1, 2), "#B2");
2223 Assert.AreEqual (3, s.IndexOfAny (c, 1, 3), "#B3");
2224 Assert.AreEqual (3, s.IndexOfAny (c, 0, s.Length), "#B4");
2225 Assert.AreEqual (3, s.IndexOfAny (c, 1, s.Length - 1), "#B5");
2226 Assert.AreEqual (-1, s.IndexOfAny (c, s.Length, 0), "#B6");
2228 c = new char [] { 'q', 'm', 'z' };
2229 Assert.AreEqual (-1, s.IndexOfAny (c, 0, 10), "#C1");
2230 Assert.AreEqual (12, s.IndexOfAny (c, 10, 4), "#C2");
2231 Assert.AreEqual (-1, s.IndexOfAny (c, 1, 3), "#C3");
2232 Assert.AreEqual (12, s.IndexOfAny (c, 0, s.Length), "#C4");
2233 Assert.AreEqual (12, s.IndexOfAny (c, 1, s.Length - 1), "#C5");
2236 Assert.AreEqual (-1, s.IndexOfAny (c, 0, 3), "#D1");
2237 Assert.AreEqual (-1, s.IndexOfAny (c, 4, 9), "#D2");
2238 Assert.AreEqual (-1, s.IndexOfAny (c, 9, 5), "#D3");
2239 Assert.AreEqual (-1, s.IndexOfAny (c, 13, 1), "#D4");
2242 [Test] // IndexOfAny (Char [], Int32, Int32)
2243 public void IndexOfAny3_AnyOf_Null ()
2246 "mono".IndexOfAny ((char []) null, 0, 0);
2248 } catch (ArgumentNullException ex) {
2249 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2250 Assert.IsNull (ex.InnerException, "#3");
2251 Assert.IsNotNull (ex.Message, "#4");
2252 Assert.IsNull (ex.ParamName, "#5");
2256 [Test] // IndexOfAny (Char [], Int32, Int32)
2257 public void IndexOfAny3_Count_Negative ()
2260 "Mono".IndexOfAny (new char [1] { 'o' }, 1, -1);
2262 } catch (ArgumentOutOfRangeException ex) {
2263 // Count must be positive and count must refer to a
2264 // location within the string/array/collection
2265 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2266 Assert.IsNull (ex.InnerException, "#3");
2267 Assert.IsNotNull (ex.Message, "#4");
2268 Assert.AreEqual ("count", ex.ParamName, "#5");
2272 [Test] // IndexOfAny (Char [], Int32, Int32)
2273 public void IndexOfAny3_Length_Overflow ()
2275 string s = "abcdefghijklm";
2278 s.IndexOfAny (new char [1] { 'd' }, 1, s.Length);
2280 } catch (ArgumentOutOfRangeException ex) {
2281 // Count must be positive and count must refer to a
2282 // location within the string/array/collection
2283 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2284 Assert.IsNull (ex.InnerException, "#3");
2285 Assert.IsNotNull (ex.Message, "#4");
2286 Assert.AreEqual ("count", ex.ParamName, "#5");
2290 [Test] // IndexOfAny (Char [], Int32, Int32)
2291 public void IndexOfAny3_StartIndex_Negative ()
2294 "Mono".IndexOfAny (new char [1] { 'o' }, -1, 1);
2296 } catch (ArgumentOutOfRangeException ex) {
2297 // Specified argument was out of the range of valid
2299 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2300 Assert.IsNull (ex.InnerException, "#3");
2301 Assert.IsNotNull (ex.Message, "#4");
2302 Assert.IsNull (ex.ParamName, "#5");
2306 [Test] // IndexOfAny (Char [], Int32, Int32)
2307 public void IndexOfAny3_StartIndex_Overflow ()
2309 string s = "abcdefghijklm";
2312 s.IndexOfAny (new char [1] { 'o' }, s.Length + 1, 1);
2314 } catch (ArgumentOutOfRangeException ex) {
2315 // Specified argument was out of the range of valid
2317 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2318 Assert.IsNull (ex.InnerException, "#3");
2319 Assert.IsNotNull (ex.Message, "#4");
2320 Assert.IsNull (ex.ParamName, "#5");
2325 public void Contains ()
2327 Assert.IsTrue ("ABC".Contains (string.Empty));
2328 Assert.IsTrue ("ABC".Contains ("ABC"));
2329 Assert.IsTrue ("ABC".Contains ("AB"));
2330 Assert.IsTrue (!"ABC".Contains ("AD"));
2331 Assert.IsTrue (!"encyclopædia".Contains("encyclopaedia"));
2335 public void IndexOfIsCultureAwareWhileContainsIsNot ()
2337 string a = "encyclopædia";
2338 string b = "encyclopaedia";
2339 Assert.IsFalse (a.Contains (b), "#1");
2340 Assert.IsTrue (a.Contains ("æ"), "#1.1");
2341 Assert.IsFalse (b.Contains ("æ"), "#1.2");
2342 Assert.AreEqual (0, a.IndexOf (b), "#2");
2343 Assert.AreEqual (8, a.IndexOf ('æ'), "#3");
2344 Assert.AreEqual (-1, b.IndexOf ('æ'), "#4");
2345 Assert.AreEqual (8, a.IndexOf ("æ"), "#5");
2346 Assert.AreEqual (8, b.IndexOf ("æ"), "#6");
2348 Assert.AreEqual (0, CultureInfo.CurrentCulture.CompareInfo.IndexOf (a, b, 0, a.Length, CompareOptions.None), "#7");
2349 Assert.AreEqual (-1, CultureInfo.CurrentCulture.CompareInfo.IndexOf (a, b, 0, a.Length, CompareOptions.Ordinal), "#8");
2353 public void Contains_Value_Null ()
2356 "ABC".Contains (null);
2358 } catch (ArgumentNullException ex) {
2359 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2360 Assert.IsNull (ex.InnerException, "#3");
2361 Assert.IsNotNull (ex.Message, "#4");
2362 Assert.AreEqual ("value", ex.ParamName, "#5");
2367 public void IsNullOrEmpty ()
2369 Assert.IsTrue (String.IsNullOrEmpty (null));
2370 Assert.IsTrue (String.IsNullOrEmpty (String.Empty));
2371 Assert.IsTrue (String.IsNullOrEmpty (""));
2372 Assert.IsTrue (!String.IsNullOrEmpty ("A"));
2373 Assert.IsTrue (!String.IsNullOrEmpty (" "));
2374 Assert.IsTrue (!String.IsNullOrEmpty ("\t"));
2375 Assert.IsTrue (!String.IsNullOrEmpty ("\n"));
2379 public void TestInsert ()
2381 string s1 = "original";
2384 s1.Insert (0, null);
2385 Assert.Fail ("#A1");
2386 } catch (ArgumentNullException ex) {
2387 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
2388 Assert.IsNull (ex.InnerException, "#A3");
2389 Assert.IsNotNull (ex.Message, "#A4");
2390 Assert.AreEqual ("value", ex.ParamName, "#A5");
2394 s1.Insert (s1.Length + 1, "Hi!");
2395 Assert.Fail ("#B1");
2396 } catch (ArgumentOutOfRangeException ex) {
2397 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
2398 Assert.IsNull (ex.InnerException, "#B3");
2399 Assert.IsNotNull (ex.Message, "#B4");
2400 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
2403 Assert.AreEqual ("Hi!original", s1.Insert (0, "Hi!"), "#C1");
2404 Assert.AreEqual ("originalHi!", s1.Insert (s1.Length, "Hi!"), "#C2");
2405 Assert.AreEqual ("origHi!inal", s1.Insert (4, "Hi!"), "#C3");
2409 public void Intern ()
2411 string s1 = "original";
2412 Assert.AreSame (s1, String.Intern (s1), "#A1");
2413 Assert.AreSame (String.Intern(s1), String.Intern(s1), "#A2");
2415 string s2 = "originally";
2416 Assert.AreSame (s2, String.Intern (s2), "#B1");
2417 Assert.IsTrue (String.Intern(s1) != String.Intern(s2), "#B2");
2419 string s3 = new DateTime (2000, 3, 7).ToString ();
2420 Assert.IsNull (String.IsInterned (s3), "#C1");
2422 string s4 = String.Intern (s3);
2423 Assert.AreEqual (s3, s4, "#C2");
2424 Assert.AreSame (s4, String.IsInterned (s4), "#C3");
2425 Assert.AreSame (s4, String.IsInterned (new DateTime (2000, 3, 7).ToString ()), "#C4");
2426 Assert.AreSame (s4, String.Intern (new DateTime (2000, 3, 7).ToString ()), "#C5");
2430 public void Intern_Str_Null ()
2433 String.Intern (null);
2435 } catch (ArgumentNullException ex) {
2436 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2437 Assert.IsNull (ex.InnerException, "#3");
2438 Assert.IsNotNull (ex.Message, "#4");
2439 Assert.AreEqual ("str", ex.ParamName, "#5");
2444 public void IsInterned ()
2446 Assert.IsNull (String.IsInterned (new DateTime (2000, 3, 6).ToString ()), "#1");
2447 string s1 = "original";
2448 Assert.AreSame (s1, String.IsInterned (s1), "#2");
2452 public void IsInterned_Str_Null ()
2455 String.IsInterned (null);
2457 } catch (ArgumentNullException ex) {
2458 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2459 Assert.IsNull (ex.InnerException, "#3");
2460 Assert.IsNotNull (ex.Message, "#4");
2461 Assert.AreEqual ("str", ex.ParamName, "#5");
2466 public void TestJoin ()
2469 string s = String.Join(" ", null);
2470 Assert.Fail ("#A1");
2471 } catch (ArgumentNullException ex) {
2472 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
2473 Assert.IsNull (ex.InnerException, "#A3");
2474 Assert.IsNotNull (ex.Message, "#A4");
2475 Assert.AreEqual ("value", ex.ParamName, "#A5");
2478 string[] chunks = {"this", "is", "a", "test"};
2479 Assert.AreEqual ("this is a test", String.Join(" ", chunks), "Basic join");
2480 Assert.AreEqual ("this.is.a.test", String.Join(".", chunks), "Basic join");
2482 Assert.AreEqual ("is a", String.Join(" ", chunks, 1, 2), "Subset join");
2483 Assert.AreEqual ("is.a", String.Join(".", chunks, 1, 2), "Subset join");
2484 Assert.AreEqual ("is a test", String.Join(" ", chunks, 1, 3), "Subset join");
2487 string s = String.Join(" ", chunks, 2, 3);
2488 Assert.Fail ("#C1");
2489 } catch (ArgumentOutOfRangeException ex) {
2490 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
2491 Assert.IsNull (ex.InnerException, "#C3");
2492 Assert.IsNotNull (ex.Message, "#C4");
2493 Assert.AreEqual ("startIndex", ex.ParamName, "#C5");
2498 public void Join_SeparatorNull ()
2500 string[] chunks = {"this", "is", "a", "test"};
2501 Assert.AreEqual ("thisisatest", String.Join (null, chunks), "SeparatorNull");
2505 public void Join_ValuesNull ()
2507 string[] chunks1 = {null, "is", "a", null};
2508 Assert.AreEqual (" is a ", String.Join (" ", chunks1), "SomeNull");
2510 string[] chunks2 = {null, "is", "a", null};
2511 Assert.AreEqual ("isa", String.Join (null, chunks2), "Some+Sep=Null");
2513 string[] chunks3 = {null, null, null, null};
2514 Assert.AreEqual (" ", String.Join (" ", chunks3), "AllValuesNull");
2518 public void Join_AllNull ()
2520 string[] chunks = {null, null, null};
2521 Assert.AreEqual (string.Empty, String.Join (null, chunks), "AllNull");
2525 public void Join_StartIndexNegative ()
2527 string[] values = { "Mo", "no" };
2529 String.Join ("o", values, -1, 1);
2531 } catch (ArgumentOutOfRangeException ex) {
2532 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2533 Assert.IsNull (ex.InnerException, "#3");
2534 Assert.IsNotNull (ex.Message, "#4");
2535 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2540 public void Join_StartIndexOverflow ()
2542 string[] values = { "Mo", "no" };
2544 String.Join ("o", values, Int32.MaxValue, 1);
2546 } catch (ArgumentOutOfRangeException ex) {
2547 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2548 Assert.IsNull (ex.InnerException, "#3");
2549 Assert.IsNotNull (ex.Message, "#4");
2550 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2555 public void Join_LengthNegative ()
2557 string[] values = { "Mo", "no" };
2559 String.Join ("o", values, 1, -1);
2561 } catch (ArgumentOutOfRangeException ex) {
2562 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2563 Assert.IsNull (ex.InnerException, "#3");
2564 Assert.IsNotNull (ex.Message, "#4");
2565 Assert.AreEqual ("count", ex.ParamName, "#5");
2570 public void Join_LengthOverflow ()
2572 string[] values = { "Mo", "no" };
2574 String.Join ("o", values, 1, Int32.MaxValue);
2576 } catch (ArgumentOutOfRangeException ex) {
2577 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2578 Assert.IsNull (ex.InnerException, "#3");
2579 Assert.IsNotNull (ex.Message, "#4");
2580 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2585 public void LastIndexOf ()
2587 string s1 = "original";
2590 s1.LastIndexOf ('q', -1);
2591 Assert.Fail ("#A1");
2592 } catch (ArgumentOutOfRangeException ex) {
2593 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
2594 Assert.IsNull (ex.InnerException, "#A3");
2595 Assert.IsNotNull (ex.Message, "#A4");
2596 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
2600 s1.LastIndexOf ('q', -1, 1);
2601 Assert.Fail ("#B1");
2602 } catch (ArgumentOutOfRangeException ex) {
2603 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
2604 Assert.IsNull (ex.InnerException, "#B3");
2605 Assert.IsNotNull (ex.Message, "#B4");
2606 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
2610 s1.LastIndexOf ("huh", s1.Length + 1);
2611 Assert.Fail ("#C1");
2612 } catch (ArgumentOutOfRangeException ex) {
2613 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
2614 Assert.IsNull (ex.InnerException, "#C3");
2615 Assert.IsNotNull (ex.Message, "#C4");
2616 Assert.AreEqual ("startIndex", ex.ParamName, "#C5");
2620 int i = s1.LastIndexOf ("huh", s1.Length + 1, 3);
2621 Assert.Fail ("#D1");
2622 } catch (ArgumentOutOfRangeException ex) {
2623 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#D2");
2624 Assert.IsNull (ex.InnerException, "#D3");
2625 Assert.IsNotNull (ex.Message, "#D4");
2626 Assert.AreEqual ("startIndex", ex.ParamName, "#D5");
2630 s1.LastIndexOf (null);
2631 Assert.Fail ("#E1");
2632 } catch (ArgumentNullException ex) {
2633 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#E2");
2634 Assert.IsNull (ex.InnerException, "#E3");
2635 Assert.IsNotNull (ex.Message, "#E4");
2636 Assert.AreEqual ("value", ex.ParamName, "#E5");
2640 s1.LastIndexOf (null, 0);
2641 Assert.Fail ("#F1");
2642 } catch (ArgumentNullException ex) {
2643 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#F2");
2644 Assert.IsNull (ex.InnerException, "#F3");
2645 Assert.IsNotNull (ex.Message, "#F4");
2646 Assert.AreEqual ("value", ex.ParamName, "#F5");
2650 s1.LastIndexOf (null, 0, 1);
2651 Assert.Fail ("#G1");
2652 } catch (ArgumentNullException ex) {
2653 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#G2");
2654 Assert.IsNull (ex.InnerException, "#G3");
2655 Assert.IsNotNull (ex.Message, "#G4");
2656 Assert.AreEqual ("value", ex.ParamName, "#G5");
2659 Assert.AreEqual (1, s1.LastIndexOf('r'), "basic char index");
2660 Assert.AreEqual (4, s1.LastIndexOf('i'), "basic char index");
2661 Assert.AreEqual (-1, s1.LastIndexOf('q'), "basic char index - no");
2663 Assert.AreEqual (7, s1.LastIndexOf(string.Empty), "basic string index");
2664 Assert.AreEqual (1, s1.LastIndexOf("rig"), "basic string index");
2665 Assert.AreEqual (4, s1.LastIndexOf("i"), "basic string index");
2666 Assert.AreEqual (-1, s1.LastIndexOf("rag"), "basic string index - no");
2668 Assert.AreEqual (1, s1.LastIndexOf('r', s1.Length-1), "stepped char index");
2669 Assert.AreEqual (4, s1.LastIndexOf('i', s1.Length-1), "stepped char index");
2670 Assert.AreEqual (2, s1.LastIndexOf('i', 3), "stepped char index");
2671 Assert.AreEqual (-1, s1.LastIndexOf('i', 1), "stepped char index");
2673 Assert.AreEqual (1, s1.LastIndexOf('r', 1, 1), "stepped limited char index");
2674 Assert.AreEqual (-1, s1.LastIndexOf('r', 0, 1), "stepped limited char index");
2675 Assert.AreEqual (4, s1.LastIndexOf('i', 6, 3), "stepped limited char index");
2676 Assert.AreEqual (2, s1.LastIndexOf('i', 3, 3), "stepped limited char index");
2677 Assert.AreEqual (-1, s1.LastIndexOf('i', 1, 2), "stepped limited char index");
2679 s1 = "original original";
2680 Assert.AreEqual (9, s1.LastIndexOf("original", s1.Length), "stepped string index #1");
2681 Assert.AreEqual (0, s1.LastIndexOf("original", s1.Length-2), "stepped string index #2");
2682 Assert.AreEqual (-1, s1.LastIndexOf("original", s1.Length-11), "stepped string index #3");
2683 Assert.AreEqual (-1, s1.LastIndexOf("translator", 2), "stepped string index #4");
2684 Assert.AreEqual (0, string.Empty.LastIndexOf(string.Empty, 0), "stepped string index #5");
2685 Assert.AreEqual (-1, string.Empty.LastIndexOf("A", -1), "stepped string index #6");
2686 Assert.AreEqual (10, s1.LastIndexOf("rig", s1.Length-1, 10), "stepped limited string index #1");
2687 Assert.AreEqual (-1, s1.LastIndexOf("rig", s1.Length, 3), "stepped limited string index #2");
2688 Assert.AreEqual (10, s1.LastIndexOf("rig", s1.Length-2, 15), "stepped limited string index #3");
2689 Assert.AreEqual (-1, s1.LastIndexOf("rig", s1.Length-2, 3), "stepped limited string index #4");
2691 string s2 = "QBitArray::bitarr_data";
2692 Assert.AreEqual (9, s2.LastIndexOf ("::"), "bug #62160");
2694 string s3 = "test123";
2695 Assert.AreEqual (0, s3.LastIndexOf ("test123"), "bug #77412");
2697 Assert.AreEqual (0, "\u267B RT \u30FC".LastIndexOf ("\u267B RT "), "bug #605094");
2701 [ExpectedException (typeof (ArgumentException))]
2702 public void LastIndexOf_StringComparison ()
2704 " ".LastIndexOf (string.Empty, 0, 1, (StringComparison)Int32.MinValue);
2708 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2709 public void LastIndexOfStringComparisonOrdinalRangeException1 ()
2711 "Mono".LastIndexOf ("no", 5, StringComparison.Ordinal);
2715 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2716 public void LastIndexOfStringComparisonOrdinalRangeException2 ()
2718 "Mono".LastIndexOf ("no", 1, 3, StringComparison.Ordinal);
2722 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2723 public void LastIndexOfStringComparisonOrdinalIgnoreCaseRangeException1 ()
2725 "Mono".LastIndexOf ("no", 5, StringComparison.OrdinalIgnoreCase);
2729 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2730 public void LastIndexOfStringComparisonOrdinalIgnoreCaseRangeException2 ()
2732 "Mono".LastIndexOf ("no", 1, 3, StringComparison.OrdinalIgnoreCase);
2736 public void LastIndexOfStringComparison ()
2738 string text = "testing123456";
2739 string text2 = "123";
2740 string text3 = "NG";
2742 Assert.AreEqual (7, text.LastIndexOf (text2, StringComparison.Ordinal), "#1-1");
2743 Assert.AreEqual (5, text.LastIndexOf (text3, StringComparison.OrdinalIgnoreCase), "#2-1");
2745 Assert.AreEqual (7, text.LastIndexOf (text2, 12, StringComparison.Ordinal), "#1-2");
2746 Assert.AreEqual (5, text.LastIndexOf (text3, 12, StringComparison.OrdinalIgnoreCase), "#2-2");
2748 Assert.AreEqual (-1, text.LastIndexOf (text2, 0, StringComparison.Ordinal), "#1-3");
2749 Assert.AreEqual (-1, text.LastIndexOf (text3, 0, StringComparison.OrdinalIgnoreCase), "#2-3");
2751 Assert.AreEqual (-1, text.LastIndexOf (text2, 6, StringComparison.Ordinal), "#1-4");
2752 Assert.AreEqual (5, text.LastIndexOf (text3, 6, StringComparison.OrdinalIgnoreCase), "#2-4");
2754 Assert.AreEqual (-1, text.LastIndexOf (text2, 7, 3, StringComparison.Ordinal), "#1-5");
2755 Assert.AreEqual (5, text.LastIndexOf (text3, 7, 3, StringComparison.OrdinalIgnoreCase), "#2-5");
2757 Assert.AreEqual (-1, text.LastIndexOf (text2, 6, 0, StringComparison.Ordinal), "#1-6");
2758 Assert.AreEqual (-1, text.LastIndexOf (text3, 5, 0, StringComparison.OrdinalIgnoreCase), "#2-6");
2760 Assert.AreEqual (-1, text.LastIndexOf (text2, 7, 1, StringComparison.Ordinal), "#1-7");
2761 Assert.AreEqual (-1, text.LastIndexOf (text3, 5, 1, StringComparison.OrdinalIgnoreCase), "#2-7");
2763 Assert.AreEqual (0, text.LastIndexOf (text4, 0, StringComparison.Ordinal), "#3-1");
2764 Assert.AreEqual (0, text.LastIndexOf (text4, 0, StringComparison.OrdinalIgnoreCase), "#3-2");
2766 Assert.AreEqual (3, text.LastIndexOf (text4, 13, StringComparison.Ordinal), "#4-1");
2767 Assert.AreEqual (3, text.LastIndexOf (text4, 13, StringComparison.OrdinalIgnoreCase), "#4-2");
2769 Assert.AreEqual (3, text.LastIndexOf (text4, 13, 14, StringComparison.Ordinal), "#4-1");
2770 Assert.AreEqual (3, text.LastIndexOf (text4, 13, 14, StringComparison.OrdinalIgnoreCase), "#4-2");
2772 Assert.AreEqual (0, text.LastIndexOf (text4, 1, 2, StringComparison.Ordinal), "#5-1");
2773 Assert.AreEqual (0, text.LastIndexOf (text4, 1, 2, StringComparison.OrdinalIgnoreCase), "#5-2");
2775 Assert.AreEqual (-1, "".LastIndexOf ("FOO", StringComparison.Ordinal));
2776 Assert.AreEqual (0, "".LastIndexOf ("", StringComparison.Ordinal));
2780 public void LastIndexOfStringComparisonOrdinal ()
2782 string text = "testing123456";
2783 Assert.AreEqual (10, text.LastIndexOf ("456", StringComparison.Ordinal), "#1");
2784 Assert.AreEqual (-1, text.LastIndexOf ("4567", StringComparison.Ordinal), "#2");
2785 Assert.AreEqual (0, text.LastIndexOf ("te", StringComparison.Ordinal), "#3");
2786 Assert.AreEqual (2, text.LastIndexOf ("s", StringComparison.Ordinal), "#4");
2787 Assert.AreEqual (-1, text.LastIndexOf ("ates", StringComparison.Ordinal), "#5");
2788 Assert.AreEqual (-1, text.LastIndexOf ("S", StringComparison.Ordinal), "#6");
2792 public void LastIndexOfStringComparisonOrdinalIgnoreCase ()
2794 string text = "testing123456";
2795 Assert.AreEqual (10, text.LastIndexOf ("456", StringComparison.OrdinalIgnoreCase), "#1");
2796 Assert.AreEqual (-1, text.LastIndexOf ("4567", StringComparison.OrdinalIgnoreCase), "#2");
2797 Assert.AreEqual (0, text.LastIndexOf ("te", StringComparison.OrdinalIgnoreCase), "#3");
2798 Assert.AreEqual (2, text.LastIndexOf ("s", StringComparison.OrdinalIgnoreCase), "#4");
2799 Assert.AreEqual (-1, text.LastIndexOf ("ates", StringComparison.OrdinalIgnoreCase), "#5");
2800 Assert.AreEqual (2, text.LastIndexOf ("S", StringComparison.OrdinalIgnoreCase), "#6");
2804 public void LastIndexOf_Char_StartIndexStringLength ()
2808 s.LastIndexOf ('n', s.Length, 1);
2810 } catch (ArgumentOutOfRangeException ex) {
2811 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2812 Assert.IsNull (ex.InnerException, "#3");
2813 Assert.IsNotNull (ex.Message, "#4");
2814 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2816 // this works for string but not for a char
2820 public void LastIndexOf_Char_StartIndexOverflow ()
2823 "Mono".LastIndexOf ('o', Int32.MaxValue, 1);
2825 } catch (ArgumentOutOfRangeException ex) {
2826 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2827 Assert.IsNull (ex.InnerException, "#3");
2828 Assert.IsNotNull (ex.Message, "#4");
2829 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2834 public void LastIndexOf_Char_LengthOverflow ()
2837 "Mono".LastIndexOf ('o', 1, Int32.MaxValue);
2839 } catch (ArgumentOutOfRangeException ex) {
2840 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2841 Assert.IsNull (ex.InnerException, "#3");
2842 Assert.IsNotNull (ex.Message, "#4");
2843 Assert.AreEqual ("count", ex.ParamName, "#5");
2848 public void LastIndexOf_String_StartIndexStringLength ()
2851 Assert.AreEqual (-1, s.LastIndexOf ("n", s.Length, 1));
2852 // this works for string but not for a char
2856 public void LastIndexOf_String_StartIndexStringLength_Plus1 ()
2860 s.LastIndexOf ("n", s.Length + 1, 1);
2862 } catch (ArgumentOutOfRangeException ex) {
2863 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2864 Assert.IsNull (ex.InnerException, "#3");
2865 Assert.IsNotNull (ex.Message, "#4");
2866 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2871 public void LastIndexOf_String_StartIndexOverflow ()
2874 "Mono".LastIndexOf ("no", Int32.MaxValue, 1);
2876 } catch (ArgumentOutOfRangeException ex) {
2877 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2878 Assert.IsNull (ex.InnerException, "#3");
2879 Assert.IsNotNull (ex.Message, "#4");
2880 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2885 public void LastIndexOf_String_LengthOverflow ()
2888 "Mono".LastIndexOf ("no", 1, Int32.MaxValue);
2890 } catch (ArgumentOutOfRangeException ex) {
2891 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2892 Assert.IsNull (ex.InnerException, "#3");
2893 Assert.IsNotNull (ex.Message, "#4");
2894 Assert.AreEqual ("count", ex.ParamName, "#5");
2899 public void LastIndexOfAny ()
2901 string s1 = ".bcdefghijklm";
2904 s1.LastIndexOfAny (null);
2905 Assert.Fail ("#A1");
2906 } catch (ArgumentNullException ex) {
2907 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
2908 Assert.IsNull (ex.InnerException, "#A3");
2909 Assert.IsNotNull (ex.Message, "#A4");
2910 Assert.IsNull (ex.ParamName, "#A5");
2914 s1.LastIndexOfAny (null, s1.Length);
2915 Assert.Fail ("#B1");
2916 } catch (ArgumentNullException ex) {
2917 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
2918 Assert.IsNull (ex.InnerException, "#B3");
2919 Assert.IsNotNull (ex.Message, "#B4");
2920 Assert.IsNull (ex.ParamName, "#B5");
2924 s1.LastIndexOfAny (null, s1.Length, 1);
2925 Assert.Fail ("#C1");
2926 } catch (ArgumentNullException ex) {
2927 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#C2");
2928 Assert.IsNull (ex.InnerException, "#C3");
2929 Assert.IsNotNull (ex.Message, "#C4");
2930 Assert.IsNull (ex.ParamName, "#C5");
2933 char[] c1 = {'a', 'e', 'i', 'o', 'u'};
2934 Assert.AreEqual (8, s1.LastIndexOfAny (c1), "#D1");
2935 Assert.AreEqual (4, s1.LastIndexOfAny (c1, 7), "#D2");
2936 Assert.AreEqual (-1, s1.LastIndexOfAny (c1, 3), "#D3");
2937 Assert.AreEqual (4, s1.LastIndexOfAny (c1, s1.Length - 6, 4), "#D4");
2938 Assert.AreEqual (-1, s1.LastIndexOfAny (c1, s1.Length - 6, 3), "#D5");
2941 s1.LastIndexOfAny (c1, -1);
2942 Assert.Fail ("#E1");
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 (), "#E2");
2947 Assert.IsNull (ex.InnerException, "#E3");
2948 Assert.IsNotNull (ex.Message, "#E4");
2949 Assert.AreEqual ("startIndex", ex.ParamName, "#E5");
2953 s1.LastIndexOfAny (c1, -1, 1);
2954 Assert.Fail ("#F1");
2955 } catch (ArgumentOutOfRangeException ex) {
2956 // Index was out of range. Must be non-negative and
2957 // less than the size of the collection
2958 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#F2");
2959 Assert.IsNull (ex.InnerException, "#F3");
2960 Assert.IsNotNull (ex.Message, "#F4");
2961 Assert.AreEqual ("startIndex", ex.ParamName, "#F5");
2966 public void LastIndexOfAny_Length_Overflow ()
2969 "Mono".LastIndexOfAny (new char [1] { 'o' }, 1, Int32.MaxValue);
2971 } catch (ArgumentOutOfRangeException ex) {
2972 // Count must be positive and count must refer to a
2973 // location within the string/array/collection
2974 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2975 Assert.IsNull (ex.InnerException, "#3");
2976 Assert.IsNotNull (ex.Message, "#4");
2977 Assert.AreEqual ("count", ex.ParamName, "#5");
2982 public void LastIndexOfAny_StartIndex_Overflow ()
2985 "Mono".LastIndexOfAny (new char [1] { 'o' }, Int32.MaxValue, 1);
2987 } catch (ArgumentOutOfRangeException ex) {
2988 // Index was out of range. Must be non-negative and
2989 // less than the size of the collection
2990 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
2991 Assert.IsNull (ex.InnerException, "#3");
2992 Assert.IsNotNull (ex.Message, "#4");
2993 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
2997 [Test] // PadLeft (Int32)
2998 public void PadLeft1 ()
3003 result = s1.PadLeft (0);
3004 Assert.AreSame (s1, result, "#A");
3006 result = s1.PadLeft (s1.Length - 1);
3007 Assert.AreSame (s1, result, "#B");
3009 result = s1.PadLeft (s1.Length);
3010 Assert.AreEqual (s1, result, "#C1");
3011 Assert.IsTrue (object.ReferenceEquals (s1, result), "#C2");
3013 result = s1.PadLeft (s1.Length + 1);
3014 Assert.AreEqual (" Hi!", result, "#D");
3017 [Test] // PadLeft (Int32)
3018 public void PadLeft1_TotalWidth_Negative ()
3021 "Mono".PadLeft (-1);
3023 } catch (ArgumentOutOfRangeException ex) {
3024 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3025 Assert.IsNull (ex.InnerException, "#3");
3026 Assert.IsNotNull (ex.Message, "#4");
3027 Assert.AreEqual ("totalWidth", ex.ParamName, "#5");
3032 [Category ("MobileNotWorking")]
3033 public void PadLeft_LargeString ()
3035 RequireHighMemoryTestEnvironment();
3037 var x = "x".PadLeft (int.MaxValue, '-');
3038 Assert.AreEqual ('-', x[0]);
3039 Assert.AreEqual ('x', x[int.MaxValue - 1]);
3042 [Test] // PadRight (Int32)
3043 public void PadRight1 ()
3048 result = s1.PadRight (0);
3049 Assert.AreSame (s1, result, "#A");
3051 result = s1.PadRight (s1.Length - 1);
3052 Assert.AreSame (s1, result, "#B");
3054 result = s1.PadRight (s1.Length);
3055 Assert.AreEqual (s1, result, "#C1");
3056 Assert.IsTrue (object.ReferenceEquals (s1, result), "#C2");
3058 result = s1.PadRight (s1.Length + 1);
3059 Assert.AreEqual ("Hi! ", result, "#D");
3062 [Test] // PadRight1 (Int32)
3063 public void PadRight1_TotalWidth_Negative ()
3066 "Mono".PadRight (-1);
3068 } catch (ArgumentOutOfRangeException ex) {
3069 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3070 Assert.IsNull (ex.InnerException, "#3");
3071 Assert.IsNotNull (ex.Message, "#4");
3072 Assert.AreEqual ("totalWidth", ex.ParamName, "#5");
3077 public void PadRight2 ()
3079 Assert.AreEqual ("100000000000", "1".PadRight (12, '0'), "#1");
3080 Assert.AreEqual ("000000000000", "".PadRight (12, '0'), "#2");
3084 [Category ("MobileNotWorking")]
3085 public void PadRight_LargeString ()
3087 RequireHighMemoryTestEnvironment();
3089 var x = "x".PadRight (int.MaxValue, '-');
3090 Assert.AreEqual ('x', x[0]);
3091 Assert.AreEqual ('-', x[int.MaxValue - 1]);
3094 [Test] // Remove (Int32, Int32)
3095 public void Remove2 ()
3097 string s1 = "original";
3101 Assert.Fail ("#A1");
3102 } catch (ArgumentOutOfRangeException ex) {
3103 // StartIndex cannot be less than zero
3104 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3105 Assert.IsNull (ex.InnerException, "#A3");
3106 Assert.IsNotNull (ex.Message, "#A4");
3107 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
3112 Assert.Fail ("#B1");
3113 } catch (ArgumentOutOfRangeException ex) {
3114 // Count cannot be less than zero
3115 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3116 Assert.IsNull (ex.InnerException, "#B3");
3117 Assert.IsNotNull (ex.Message, "#B4");
3118 Assert.AreEqual ("count", ex.ParamName, "#B5");
3122 s1.Remove (s1.Length, s1.Length);
3123 Assert.Fail ("#C1");
3124 } catch (ArgumentOutOfRangeException ex) {
3125 // Index and count must refer to a location within the
3127 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3128 Assert.IsNull (ex.InnerException, "#C3");
3129 Assert.IsNotNull (ex.Message, "#C4");
3130 Assert.AreEqual ("count", ex.ParamName, "#C5");
3133 Assert.AreEqual ("oinal", s1.Remove(1, 3), "#D1");
3134 Assert.AreEqual (s1, s1.Remove (0, 0), "#D2");
3135 Assert.IsTrue (!object.ReferenceEquals (s1, s1.Remove (0, 0)), "#D3");
3136 Assert.AreEqual ("riginal", s1.Remove (0, 1), "#D4");
3137 Assert.AreEqual ("origina", s1.Remove (7, 1), "#D5");
3140 [Test] // Remove (Int32, Int32)
3141 public void Remove2_Length_Overflow ()
3144 "Mono".Remove (1, Int32.MaxValue);
3146 } catch (ArgumentOutOfRangeException ex) {
3147 // Index and count must refer to a location within the
3149 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3150 Assert.IsNull (ex.InnerException, "#3");
3151 Assert.IsNotNull (ex.Message, "#4");
3152 Assert.AreEqual ("count", ex.ParamName, "#5");
3156 [Test] // Remove (Int32, Int32)
3157 public void Remove2_StartIndex_Overflow ()
3160 "Mono".Remove (Int32.MaxValue, 1);
3162 } catch (ArgumentOutOfRangeException ex) {
3163 // Index and count must refer to a location within the
3165 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3166 Assert.IsNull (ex.InnerException, "#3");
3167 Assert.IsNotNull (ex.Message, "#4");
3168 Assert.AreEqual ("count", ex.ParamName, "#5");
3172 [Test] // Remove (Int32)
3173 public void Remove1_StartIndex_Negative ()
3178 } catch (ArgumentOutOfRangeException ex) {
3179 // StartIndex cannot be less than zero
3180 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3181 Assert.IsNull (ex.InnerException, "#3");
3182 Assert.IsNotNull (ex.Message, "#4");
3183 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3187 [Test] // Remove (Int32)
3188 public void Remove1_StartIndex_Overflow ()
3193 } catch (ArgumentOutOfRangeException ex) {
3194 // startIndex must be less than length of string
3195 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3196 Assert.IsNull (ex.InnerException, "#3");
3197 Assert.IsNotNull (ex.Message, "#4");
3198 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3202 [Test] // Remove (Int32)
3203 public void Remove1 ()
3207 Assert.AreEqual ("AB", s.Remove (2), "#1");
3208 Assert.AreEqual (string.Empty, s.Remove (0), "#2");
3209 Assert.AreEqual ("A", s.Remove (1), "#3");
3213 public void Replace()
3215 string s1 = "original";
3217 Assert.AreEqual (s1, s1.Replace('q', 's'), "non-hit char");
3218 Assert.AreEqual ("oxiginal", s1.Replace('r', 'x'), "single char");
3219 Assert.AreEqual ("orxgxnal", s1.Replace('i', 'x'), "double char");
3221 bool errorThrown = false;
3223 string s = s1.Replace(null, "feh");
3224 } catch (ArgumentNullException) {
3227 Assert.IsTrue (errorThrown, "should get null arg exception");
3229 Assert.AreEqual ("ornal", s1.Replace("igi", null), "replace as remove");
3230 Assert.AreEqual (s1, s1.Replace("spam", "eggs"), "non-hit string");
3231 Assert.AreEqual ("orirumal", s1.Replace("gin", "rum"), "single string");
3232 Assert.AreEqual ("oreigeinal", s1.Replace("i", "ei"), "double string");
3234 Assert.AreEqual ("ooriginal", s1.Replace("o", "oo"), "start");
3235 Assert.AreEqual ("originall", s1.Replace("l", "ll"), "end");
3237 Assert.AreEqual ("riginal", s1.Replace("o", string.Empty), "start empty");
3238 Assert.AreEqual ("origina", s1.Replace("l", string.Empty), "end empty");
3240 Assert.AreEqual ("original", s1.Replace("original2", "original3"), "replace bigger that original");
3242 Assert.AreEqual (":!:", "::".Replace ("::", ":!:"), "result longer");
3244 // Test overlapping matches (bug #54988)
3245 string s2 = "...aaaaaaa.bbbbbbbbb,............ccccccc.u...";
3246 Assert.AreEqual (s2.Replace("..", "."), "..aaaaaaa.bbbbbbbbb,......ccccccc.u..");
3248 // Test replacing null characters (bug #67395)
3249 Assert.AreEqual ("is this ok ?", "is \0 ok ?".Replace ("\0", "this"), "should not strip content after nullchar");
3253 public void ReplaceStringBeginEndTest ()
3255 string s1 = "original";
3257 Assert.AreEqual ("riginal", s1.Replace ("o", ""), "#1");
3258 Assert.AreEqual ("origina", s1.Replace ("l", ""), "#2");
3259 Assert.AreEqual ("ariginal", s1.Replace ("o", "a"), "#3");
3260 Assert.AreEqual ("originaa", s1.Replace ("l", "a"), "#4");
3261 Assert.AreEqual ("aariginal", s1.Replace ("o", "aa"), "#5");
3262 Assert.AreEqual ("originaaa", s1.Replace ("l", "aa"), "#6");
3263 Assert.AreEqual ("original", s1.Replace ("o", "o"), "#7");
3264 Assert.AreEqual ("original", s1.Replace ("l", "l"), "#8");
3265 Assert.AreEqual ("original", s1.Replace ("original", "original"), "#9");
3266 Assert.AreEqual ("", s1.Replace ("original", ""), "#10");
3270 public void ReplaceStringBeginEndTestFallback ()
3272 string prev = new String ('o', 300);
3273 string s1 = prev + "riginal";
3275 Assert.AreEqual ("riginal", s1.Replace ("o", ""), "#1");
3276 Assert.AreEqual (prev + "rigina", s1.Replace ("l", ""), "#2");
3277 Assert.AreEqual (new String ('a', 300) + "riginal", s1.Replace ("o", "a"), "#3");
3278 Assert.AreEqual (prev + "riginaa", s1.Replace ("l", "a"), "#4");
3279 Assert.AreEqual (new String ('a', 600) + "riginal", s1.Replace ("o", "aa"), "#5");
3280 Assert.AreEqual (prev + "riginaaa", s1.Replace ("l", "aa"), "#6");
3281 Assert.AreEqual (s1, s1.Replace ("o", "o"), "#7");
3282 Assert.AreEqual (s1, s1.Replace ("l", "l"), "#8");
3283 Assert.AreEqual (s1, s1.Replace (s1, s1), "#9");
3284 Assert.AreEqual ("", s1.Replace (prev + "riginal", ""), "#10");
3288 public void ReplaceStringOffByOne ()
3290 Assert.AreEqual ("", new String ('o', 199).Replace ("o", ""), "#-1");
3291 Assert.AreEqual ("", new String ('o', 200).Replace ("o", ""), "#0");
3292 Assert.AreEqual ("", new String ('o', 201).Replace ("o", ""), "#+1");
3296 public void ReplaceStringCultureTests ()
3298 // LAMESPEC: According to MSDN Replace with String parameter is culture-senstive.
3299 // However this does not currently seem to be the case. Otherwise following code should
3300 // produce "check" instead of "AE"
3302 CultureInfo old = Thread.CurrentThread.CurrentCulture;
3303 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
3304 Assert.AreEqual ("AE", "AE".Replace ("\u00C6", "check"), "#1");
3305 Thread.CurrentThread.CurrentCulture = old;
3308 [Test] // StartsWith (String)
3309 public void StartsWith1 ()
3311 string s1 = "original";
3313 Assert.IsTrue (s1.StartsWith ("o"), "#1");
3314 Assert.IsTrue (s1.StartsWith ("orig"), "#2");
3315 Assert.IsTrue (!s1.StartsWith ("rig"), "#3");
3316 Assert.IsTrue (s1.StartsWith (String.Empty), "#4");
3317 Assert.IsTrue (String.Empty.StartsWith (String.Empty), "#5");
3318 Assert.IsTrue (!String.Empty.StartsWith ("rig"), "#6");
3321 [Test] // StartsWith (String)
3322 public void StartsWith1_Value_Null ()
3325 "A".StartsWith (null);
3327 } catch (ArgumentNullException ex) {
3328 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3329 Assert.IsNull (ex.InnerException, "#3");
3330 Assert.IsNotNull (ex.Message, "#4");
3331 Assert.AreEqual ("value", ex.ParamName, "#5");
3335 [Test] // StartsWith (String, StringComparison)
3336 public void StartsWith2_ComparisonType_Invalid ()
3339 "ABC".StartsWith ("A", (StringComparison) 80);
3341 } catch (ArgumentException ex) {
3342 // The string comparison type passed in is currently
3344 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3345 Assert.IsNull (ex.InnerException, "#3");
3346 Assert.IsNotNull (ex.Message, "#4");
3347 Assert.AreEqual ("comparisonType", ex.ParamName, "#5");
3351 [Test] // StartsWith (String, StringComparison)
3352 public void StartsWith2_Value_Null ()
3355 "A".StartsWith (null, StringComparison.CurrentCulture);
3357 } catch (ArgumentNullException ex) {
3358 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3359 Assert.IsNull (ex.InnerException, "#3");
3360 Assert.IsNotNull (ex.Message, "#4");
3361 Assert.AreEqual ("value", ex.ParamName, "#5");
3365 [Test] // StartsWith (String, Boolean, CultureInfo)
3366 public void StartsWith3_Culture_Null ()
3368 // This should not crash
3371 s.StartsWith ("this", true, null);
3374 [Test] // SubString (Int32)
3375 public void Substring1 ()
3377 string s = "original";
3379 Assert.AreEqual ("inal", s.Substring (4), "#1");
3380 Assert.AreEqual (string.Empty, s.Substring (s.Length), "#2");
3381 Assert.AreSame (s, s.Substring (0), "#3");
3384 [Test] // SubString (Int32)
3385 public void SubString1_StartIndex_Negative ()
3387 string s = "original";
3392 } catch (ArgumentOutOfRangeException ex) {
3393 // StartIndex cannot be less than zero
3394 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3395 Assert.IsNull (ex.InnerException, "#3");
3396 Assert.IsNotNull (ex.Message, "#4");
3397 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3401 [Test] // SubString (Int32)
3402 public void SubString1_StartIndex_Overflow ()
3404 string s = "original";
3407 s.Substring (s.Length + 1);
3409 } catch (ArgumentOutOfRangeException ex) {
3410 // startIndex cannot be larger than length of string
3411 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3412 Assert.IsNull (ex.InnerException, "#3");
3413 Assert.IsNotNull (ex.Message, "#4");
3414 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3418 [Test] // SubString (Int32, Int32)
3419 public void Substring2 ()
3421 string s = "original";
3423 Assert.AreEqual ("igin", s.Substring (2, 4), "#1");
3424 Assert.AreEqual (string.Empty, s.Substring (s.Length, 0), "#2");
3425 Assert.AreEqual ("origina", s.Substring (0, s.Length - 1), "#3");
3426 Assert.AreEqual (s, s.Substring (0, s.Length), "#4");
3427 Assert.AreSame (s, s.Substring (0, s.Length), "#5");
3430 [Test] // SubString (Int32, Int32)
3431 public void SubString2_Length_Negative ()
3433 string s = "original";
3436 s.Substring (1, -1);
3438 } catch (ArgumentOutOfRangeException ex) {
3439 // Length cannot be less than zero
3440 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3441 Assert.IsNull (ex.InnerException, "#3");
3442 Assert.IsNotNull (ex.Message, "#4");
3443 Assert.AreEqual ("length", ex.ParamName, "#5");
3447 [Test] // SubString (Int32, Int32)
3448 public void Substring2_Length_Overflow ()
3450 string s = "original";
3453 s.Substring (s.Length, 1);
3454 Assert.Fail ("#A1");
3455 } catch (ArgumentOutOfRangeException ex) {
3456 // Index and length must refer to a location within
3458 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3459 Assert.IsNull (ex.InnerException, "#A3");
3460 Assert.IsNotNull (ex.Message, "#A4");
3461 Assert.AreEqual ("length", ex.ParamName, "#A5");
3465 s.Substring (1, s.Length);
3466 Assert.Fail ("#B1");
3467 } catch (ArgumentOutOfRangeException ex) {
3468 // Index and length must refer to a location within
3470 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3471 Assert.IsNull (ex.InnerException, "#B3");
3472 Assert.IsNotNull (ex.Message, "#B4");
3473 Assert.AreEqual ("length", ex.ParamName, "#B5");
3477 s.Substring (1, Int32.MaxValue);
3478 Assert.Fail ("#C1");
3479 } catch (ArgumentOutOfRangeException ex) {
3480 // Index and length must refer to a location within
3482 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3483 Assert.IsNull (ex.InnerException, "#C3");
3484 Assert.IsNotNull (ex.Message, "#C4");
3485 Assert.AreEqual ("length", ex.ParamName, "#C5");
3489 [Test] // SubString (Int32, Int32)
3490 public void SubString2_StartIndex_Negative ()
3492 string s = "original";
3495 s.Substring (-1, 1);
3497 } catch (ArgumentOutOfRangeException ex) {
3498 // StartIndex cannot be less than zero
3499 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3500 Assert.IsNull (ex.InnerException, "#3");
3501 Assert.IsNotNull (ex.Message, "#4");
3502 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3506 [Test] // SubString (Int32, Int32)
3507 public void Substring2_StartIndex_Overflow ()
3509 string s = "original";
3512 s.Substring (s.Length + 1, 0);
3513 Assert.Fail ("#A1");
3514 } catch (ArgumentOutOfRangeException ex) {
3515 // startIndex cannot be larger than length of string
3516 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3517 Assert.IsNull (ex.InnerException, "#A3");
3518 Assert.IsNotNull (ex.Message, "#A4");
3519 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
3523 "Mono".Substring (Int32.MaxValue, 1);
3524 Assert.Fail ("#B1");
3525 } catch (ArgumentOutOfRangeException ex) {
3526 // startIndex cannot be larger than length of string
3527 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3528 Assert.IsNull (ex.InnerException, "#B3");
3529 Assert.IsNotNull (ex.Message, "#B4");
3530 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
3535 public void ToCharArray ()
3537 const string s = "original";
3540 c = s.ToCharArray ();
3541 Assert.AreEqual (s.Length, c.Length, "#A1");
3542 Assert.AreEqual (s, new String (c), "#A2");
3544 c = s.ToCharArray (0, s.Length);
3545 Assert.AreEqual (s.Length, c.Length, "#B1");
3546 Assert.AreEqual (s, new String (c), "#B2");
3548 c = s.ToCharArray (1, s.Length - 1);
3549 Assert.AreEqual (7, c.Length, "#C1");
3550 Assert.AreEqual ("riginal", new String (c), "#C2");
3552 c = s.ToCharArray (0, 3);
3553 Assert.AreEqual (3, c.Length, "#D1");
3554 Assert.AreEqual ("ori", new String (c), "#D2");
3556 c = s.ToCharArray (2, 0);
3557 Assert.AreEqual (0, c.Length, "#E1");
3558 Assert.AreEqual (string.Empty, new String (c), "#E2");
3560 c = s.ToCharArray (3, 2);
3561 Assert.AreEqual (2, c.Length, "#F1");
3562 Assert.AreEqual ("gi", new String (c), "#F2");
3564 c = s.ToCharArray (s.Length, 0);
3565 Assert.AreEqual (0, c.Length, "#G1");
3566 Assert.AreEqual (string.Empty, new String (c), "#G2");
3570 public void ToCharArray_Length_Negative ()
3572 const string s = "original";
3575 s.ToCharArray (1, -1);
3577 } catch (ArgumentOutOfRangeException ex) {
3578 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3579 Assert.IsNull (ex.InnerException, "#3");
3580 Assert.IsNotNull (ex.Message, "#4");
3581 Assert.AreEqual ("length", ex.ParamName, "#5");
3586 public void ToCharArray_Length_Overflow ()
3588 const string s = "original";
3591 s.ToCharArray (1, s.Length);
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 (1, Int32.MaxValue);
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");
3616 public void ToCharArray_StartIndex_Negative ()
3618 const string s = "original";
3621 s.ToCharArray (-1, 1);
3623 } catch (ArgumentOutOfRangeException ex) {
3624 // Index was out of range. Must be non-negative and
3625 // less than the size of the collection
3626 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3627 Assert.IsNull (ex.InnerException, "#3");
3628 Assert.IsNotNull (ex.Message, "#4");
3629 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3634 public void ToCharArray_StartIndex_Overflow ()
3636 const string s = "original";
3639 s.ToCharArray (s.Length, 1);
3640 Assert.Fail ("#A1");
3641 } catch (ArgumentOutOfRangeException ex) {
3642 // Index was out of range. Must be non-negative and
3643 // less than the size of the collection
3644 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3645 Assert.IsNull (ex.InnerException, "#A3");
3646 Assert.IsNotNull (ex.Message, "#A4");
3647 Assert.AreEqual ("startIndex", ex.ParamName, "#A5");
3651 s.ToCharArray (Int32.MaxValue, 1);
3652 Assert.Fail ("#B1");
3653 } catch (ArgumentOutOfRangeException ex) {
3654 // Index was out of range. Must be non-negative and
3655 // less than the size of the collection
3656 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3657 Assert.IsNull (ex.InnerException, "#B3");
3658 Assert.IsNotNull (ex.Message, "#B4");
3659 Assert.AreEqual ("startIndex", ex.ParamName, "#B5");
3663 [Test] // ToLower ()
3664 public void ToLower1 ()
3666 string s = "OrIgInAli";
3668 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
3670 Assert.AreEqual ("\u006f\u0072\u0131\u0067\u0131\u006e\u0061\u006c\u0069", s.ToLower(), "#1");
3672 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
3674 Assert.AreEqual ("originali", s.ToLower (), "#2");
3677 [Test] // ToLower (CultureInfo)
3678 public void ToLower2 ()
3680 string s = "OrIgInAli";
3682 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
3684 Assert.AreEqual ("originali", s.ToLower (new CultureInfo ("en-US")), "#A1");
3685 Assert.AreEqual ("\u006f\u0072\u0131\u0067\u0131\u006e\u0061\u006c\u0069", s.ToLower (new CultureInfo ("tr-TR")), "#A2");
3686 Assert.AreEqual (string.Empty, string.Empty.ToLower (new CultureInfo ("en-US")), "#A3");
3687 Assert.AreEqual (string.Empty, string.Empty.ToLower (new CultureInfo ("tr-TR")), "#A4");
3689 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
3691 Assert.AreEqual ("originali", s.ToLower (new CultureInfo ("en-US")), "#B1");
3692 Assert.AreEqual ("\u006f\u0072\u0131\u0067\u0131\u006e\u0061\u006c\u0069", s.ToLower (new CultureInfo ("tr-TR")), "#B2");
3693 Assert.AreEqual (string.Empty, string.Empty.ToLower (new CultureInfo ("en-US")), "#B3");
3694 Assert.AreEqual (string.Empty, string.Empty.ToLower (new CultureInfo ("tr-TR")), "#B4");
3697 [Test] // ToLower (CultureInfo)
3698 public void ToLower2_Culture_Null ()
3700 string s = "OrIgInAl";
3703 s.ToLower ((CultureInfo) null);
3704 Assert.Fail ("#A1");
3705 } catch (ArgumentNullException ex) {
3706 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
3707 Assert.IsNull (ex.InnerException, "#A3");
3708 Assert.IsNotNull (ex.Message, "#A4");
3709 Assert.AreEqual ("culture", ex.ParamName, "#A5");
3713 string.Empty.ToLower ((CultureInfo) null);
3714 Assert.Fail ("#B1");
3715 } catch (ArgumentNullException ex) {
3716 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
3717 Assert.IsNull (ex.InnerException, "#B3");
3718 Assert.IsNotNull (ex.Message, "#B4");
3719 Assert.AreEqual ("culture", ex.ParamName, "#B5");
3724 public void TestToString ()
3726 string s1 = "OrIgInAli";
3727 Assert.AreEqual (s1, s1.ToString(), "ToString failed!");
3730 [Test] // ToUpper ()
3731 public void ToUpper1 ()
3733 string s = "OrIgInAli";
3735 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
3737 Assert.AreEqual ("ORIGINAL\u0130", s.ToUpper (), "#1");
3739 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
3741 Assert.AreEqual ("ORIGINALI", s.ToUpper (), "#2");
3744 [Test] // ToUpper (CultureInfo)
3745 public void ToUpper2 ()
3747 string s = "OrIgInAli";
3749 Thread.CurrentThread.CurrentCulture = new CultureInfo ("tr-TR");
3751 Assert.AreEqual ("ORIGINALI", s.ToUpper (new CultureInfo ("en-US")), "#A1");
3752 Assert.AreEqual ("ORIGINAL\u0130", s.ToUpper (new CultureInfo ("tr-TR")), "#A2");
3753 Assert.AreEqual (string.Empty, string.Empty.ToUpper (new CultureInfo ("en-US")), "#A3");
3754 Assert.AreEqual (string.Empty, string.Empty.ToUpper (new CultureInfo ("tr-TR")), "#A4");
3756 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
3758 Assert.AreEqual ("ORIGINALI", s.ToUpper (new CultureInfo ("en-US")), "#B1");
3759 Assert.AreEqual ("ORIGINAL\u0130", s.ToUpper (new CultureInfo ("tr-TR")), "#B2");
3760 Assert.AreEqual (string.Empty, string.Empty.ToUpper (new CultureInfo ("en-US")), "#B3");
3761 Assert.AreEqual (string.Empty, string.Empty.ToUpper (new CultureInfo ("tr-TR")), "#B4");
3764 [Test] // ToUpper (CultureInfo)
3765 public void ToUpper2_Culture_Null ()
3767 string s = "OrIgInAl";
3770 s.ToUpper ((CultureInfo) null);
3771 Assert.Fail ("#A1");
3772 } catch (ArgumentNullException ex) {
3773 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
3774 Assert.IsNull (ex.InnerException, "#A3");
3775 Assert.IsNotNull (ex.Message, "#A4");
3776 Assert.AreEqual ("culture", ex.ParamName, "#A5");
3780 string.Empty.ToUpper ((CultureInfo) null);
3781 Assert.Fail ("#B1");
3782 } catch (ArgumentNullException ex) {
3783 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
3784 Assert.IsNull (ex.InnerException, "#B3");
3785 Assert.IsNotNull (ex.Message, "#B4");
3786 Assert.AreEqual ("culture", ex.ParamName, "#B5");
3791 public void TestTrim ()
3793 string s1 = " original\t\n";
3794 Assert.AreEqual ("original", s1.Trim(), "basic trim failed");
3795 Assert.AreEqual ("original", s1.Trim(null), "basic trim failed");
3798 Assert.AreEqual ("original", s1.Trim(), "basic trim failed");
3799 Assert.AreEqual ("original", s1.Trim(null), "basic trim failed");
3802 Assert.AreEqual (string.Empty, s1.Trim(), "empty trim failed");
3803 Assert.AreEqual (string.Empty, s1.Trim(null), "empty trim failed");
3805 s1 = "aaaoriginalbbb";
3806 char[] delims = {'a', 'b'};
3807 Assert.AreEqual ("original", s1.Trim(delims), "custom trim failed");
3809 Assert.AreEqual ("original", "\u2028original\u2029".Trim (), "net_2_0 additional char#1");
3810 Assert.AreEqual ("original", "\u0085original\u1680".Trim (), "net_2_0 additional char#2");
3812 Assert.AreEqual ("", "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Trim (), "net_4_0 changes #1");
3816 public void TestTrimEnd ()
3818 string s1 = " original\t\n";
3819 Assert.AreEqual (" original", s1.TrimEnd(null), "basic TrimEnd failed");
3822 Assert.AreEqual (" original", s1.TrimEnd(null), "basic TrimEnd failed");
3825 Assert.AreEqual (string.Empty, s1.TrimEnd(null), "empty TrimEnd failed");
3827 s1 = "aaaoriginalbbb";
3828 char[] delims = {'a', 'b'};
3829 Assert.AreEqual ("aaaoriginal", s1.TrimEnd(delims), "custom TrimEnd failed");
3833 public void TestTrimStart ()
3835 string s1 = " original\t\n";
3836 Assert.AreEqual ("original\t\n", s1.TrimStart(null), "basic TrimStart failed");
3838 s1 = "original\t\n";
3839 Assert.AreEqual ("original\t\n", s1.TrimStart(null), "basic TrimStart failed");
3842 Assert.AreEqual (string.Empty, s1.TrimStart(null), "empty TrimStart failed");
3844 s1 = "aaaoriginalbbb";
3845 char[] delims = {'a', 'b'};
3846 Assert.AreEqual ("originalbbb", s1.TrimStart(delims), "custom TrimStart failed");
3850 public void TestChars ()
3857 Assert.Fail ("#A1:" + c);
3858 } catch (IndexOutOfRangeException ex) {
3859 Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#A2");
3860 Assert.IsNull (ex.InnerException, "#A3");
3861 Assert.IsNotNull (ex.Message, "#A4");
3867 Assert.Fail ("#B1:" + c);
3868 } catch (IndexOutOfRangeException ex) {
3869 Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#B2");
3870 Assert.IsNull (ex.InnerException, "#B3");
3871 Assert.IsNotNull (ex.Message, "#B4");
3876 public void TestComparePeriod ()
3878 // according to bug 63981, this behavior is for all cultures
3879 Assert.AreEqual (-1, String.Compare ("foo.obj", "foobar.obj", false), "#1");
3883 public void LastIndexOfAnyBounds1 ()
3885 string mono = "Mono";
3886 char [] k = { 'M' };
3888 mono.LastIndexOfAny (k, mono.Length, 1);
3890 } catch (ArgumentOutOfRangeException ex) {
3891 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
3892 Assert.IsNull (ex.InnerException, "#3");
3893 Assert.IsNotNull (ex.Message, "#4");
3894 Assert.AreEqual ("startIndex", ex.ParamName, "#5");
3899 public void TestSplit ()
3901 string s1 = "abcdefghijklm";
3902 char[] c1 = {'q', 'r'};
3903 Assert.AreEqual (s1, (s1.Split(c1))[0], "No splitters");
3905 char[] c2 = {'a', 'e', 'i', 'o', 'u'};
3906 string[] chunks = s1.Split(c2);
3907 Assert.AreEqual (string.Empty, chunks[0], "First chunk");
3908 Assert.AreEqual ("bcd", chunks[1], "Second chunk");
3909 Assert.AreEqual ("fgh", chunks[2], "Third chunk");
3910 Assert.AreEqual ("jklm", chunks[3], "Fourth chunk");
3913 bool errorThrown = false;
3915 chunks = s1.Split(c2, -1);
3916 } catch (ArgumentOutOfRangeException) {
3919 Assert.IsTrue (errorThrown, "Split out of range");
3922 chunks = s1.Split(c2, 2);
3923 Assert.AreEqual (2, chunks.Length, "Limited chunk");
3924 Assert.AreEqual (string.Empty, chunks[0], "First limited chunk");
3925 Assert.AreEqual ("bcdefghijklm", chunks[1], "Second limited chunk");
3929 chunks = s3.Split(c3,2);
3930 Assert.AreEqual (2, chunks.Length, "1.0 split length");
3931 Assert.AreEqual ("1", chunks[0], "1.0 split first chunk");
3932 Assert.AreEqual ("0", chunks[1], "1.0 split second chunk");
3934 string s4 = "1.0.0";
3936 chunks = s4.Split(c4,2);
3937 Assert.AreEqual (2, chunks.Length, "1.0.0 split length");
3938 Assert.AreEqual ("1", chunks[0], "1.0.0 split first chunk");
3939 Assert.AreEqual ("0.0", chunks[1], "1.0.0 split second chunk");
3943 chunks = s5.Split (c5, 2);
3944 Assert.AreEqual (2, chunks.Length, ".0.0 split length");
3945 Assert.AreEqual (string.Empty, chunks[0], ".0.0 split first chunk");
3946 Assert.AreEqual ("0.0", chunks[1], ".0.0 split second chunk");
3950 chunks = s6.Split (c6, 2);
3951 Assert.AreEqual (2, chunks.Length, ".0 split length");
3952 Assert.AreEqual (string.Empty, chunks[0], ".0 split first chunk");
3953 Assert.AreEqual ("0", chunks[1], ".0 split second chunk");
3957 chunks = s7.Split (c7, 2);
3958 Assert.AreEqual (2, chunks.Length, "0. split length");
3959 Assert.AreEqual ("0", chunks[0], "0. split first chunk");
3960 Assert.AreEqual (string.Empty, chunks[1], "0. split second chunk");
3962 string s8 = "0.0000";
3964 chunks = s8.Split (c8, 2);
3965 Assert.AreEqual (2, chunks.Length, "0.0000/2 split length");
3966 Assert.AreEqual ("0", chunks[0], "0.0000/2 split first chunk");
3967 Assert.AreEqual ("0000", chunks[1], "0.0000/2 split second chunk");
3969 chunks = s8.Split (c8, 3);
3970 Assert.AreEqual (2, chunks.Length, "0.0000/3 split length");
3971 Assert.AreEqual ("0", chunks[0], "0.0000/3 split first chunk");
3972 Assert.AreEqual ("0000", chunks[1], "0.0000/3 split second chunk");
3974 chunks = s8.Split (c8, 1);
3975 Assert.AreEqual (1, chunks.Length, "0.0000/1 split length");
3976 Assert.AreEqual ("0.0000", chunks[0], "0.0000/1 split first chunk");
3978 chunks = s1.Split(c2, 1);
3979 Assert.AreEqual (1, chunks.Length, "Single split");
3980 Assert.AreEqual (s1, chunks[0], "Single chunk");
3982 chunks = s1.Split(c2, 0);
3983 Assert.AreEqual (0, chunks.Length, "Zero split");
3985 Assert.AreEqual (0, "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\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");
3989 public void MoreSplit ()
3991 string test = "123 456 789";
3992 string [] st = test.Split ();
3993 Assert.AreEqual ("123", st [0], "#01");
3994 st = test.Split (null);
3995 Assert.AreEqual ("123", st [0], "#02");
3997 Assert.AreEqual (1, "encyclopædia".Split (new[] { "ae" }, StringSplitOptions.None).Length, "#03");
4000 [Test] // Split (Char [], StringSplitOptions)
4001 public void Split3_Options_Invalid ()
4004 "A B".Split (new Char [] { 'A' }, (StringSplitOptions) 4096);
4006 } catch (ArgumentException ex) {
4007 // Illegal enum value: 4096
4008 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4009 Assert.IsNull (ex.InnerException, "#3");
4010 Assert.IsNotNull (ex.Message, "#4");
4011 Assert.IsTrue (ex.Message.IndexOf ("4096") != 1, "#5");
4012 Assert.IsNull (ex.ParamName, "#6");
4016 [Test] // Split (Char [], StringSplitOptions)
4017 public void Split4_Options_Invalid ()
4020 "A B".Split (new String [] { "A" }, (StringSplitOptions) 4096);
4022 } catch (ArgumentException ex) {
4023 // Illegal enum value: 4096
4024 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4025 Assert.IsNull (ex.InnerException, "#3");
4026 Assert.IsNotNull (ex.Message, "#4");
4027 Assert.IsTrue (ex.Message.IndexOf ("4096") != 1, "#5");
4028 Assert.IsNull (ex.ParamName, "#6");
4032 [Test] // Split (Char [], StringSplitOptions)
4033 public void Split5_Options_Invalid ()
4036 "A B".Split (new Char [] { 'A' }, 0, (StringSplitOptions) 4096);
4038 } catch (ArgumentException ex) {
4039 // Illegal enum value: 4096
4040 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4041 Assert.IsNull (ex.InnerException, "#3");
4042 Assert.IsNotNull (ex.Message, "#4");
4043 Assert.IsTrue (ex.Message.IndexOf ("4096") != 1, "#5");
4044 Assert.IsNull (ex.ParamName, "#6");
4048 [Test] // Split (String [], Int32, StringSplitOptions)
4049 public void Split6_Count_Negative ()
4052 "A B".Split (new String [] { "A" }, -1, StringSplitOptions.None);
4054 } catch (ArgumentOutOfRangeException ex) {
4055 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
4056 Assert.IsNull (ex.InnerException, "#3");
4057 Assert.IsNotNull (ex.Message, "#4");
4058 Assert.AreEqual ("count", ex.ParamName, "#5");
4062 [Test] // Split (String [], Int32, StringSplitOptions)
4063 public void Split6_Options_Invalid ()
4066 "A B".Split (new String [] { "A" }, 0, (StringSplitOptions) 4096);
4068 } catch (ArgumentException ex) {
4069 // Illegal enum value: 4096
4070 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4071 Assert.IsNull (ex.InnerException, "#3");
4072 Assert.IsNotNull (ex.Message, "#4");
4073 Assert.IsTrue (ex.Message.IndexOf ("4096") != 1, "#5");
4074 Assert.IsNull (ex.ParamName, "#6");
4079 public void SplitString ()
4084 res = "A B C".Split (new String [] { "A" }, 0, StringSplitOptions.None);
4085 Assert.AreEqual (0, res.Length);
4087 // empty and RemoveEmpty
4088 res = string.Empty.Split (new String [] { "A" }, StringSplitOptions.RemoveEmptyEntries);
4089 Assert.AreEqual (0, res.Length);
4092 res = "A B C".Split (new String [] { "D" }, StringSplitOptions.None);
4093 Assert.AreEqual (1, res.Length);
4094 Assert.AreEqual ("A B C", res [0]);
4097 res = "A B C DD E".Split (new String[] { "B", "D" }, StringSplitOptions.None);
4098 Assert.AreEqual (4, res.Length);
4099 Assert.AreEqual ("A ", res [0]);
4100 Assert.AreEqual (" C ", res [1]);
4101 Assert.AreEqual (string.Empty, res [2]);
4102 Assert.AreEqual (" E", res [3]);
4104 // Same with RemoveEmptyEntries
4105 res = "A B C DD E".Split (new String[] { "B", "D" }, StringSplitOptions.RemoveEmptyEntries);
4106 Assert.AreEqual (3, res.Length);
4107 Assert.AreEqual ("A ", res [0]);
4108 Assert.AreEqual (" C ", res [1]);
4109 Assert.AreEqual (" E", res [2]);
4111 // Delimiter matches once at the beginning of the string
4112 res = "A B".Split (new String [] { "A" }, StringSplitOptions.RemoveEmptyEntries);
4113 Assert.AreEqual (1, res.Length);
4114 Assert.AreEqual (" B", res [0]);
4116 // Delimiter at the beginning and at the end
4117 res = "B C DD B".Split (new String[] { "B" }, StringSplitOptions.None);
4118 Assert.AreEqual (3, res.Length);
4119 Assert.AreEqual (string.Empty, res [0]);
4120 Assert.AreEqual (" C DD ", res [1]);
4121 Assert.AreEqual (string.Empty, res [2]);
4123 res = "B C DD B".Split (new String[] { "B" }, StringSplitOptions.RemoveEmptyEntries);
4124 Assert.AreEqual (1, res.Length);
4125 Assert.AreEqual (" C DD ", res [0]);
4128 res = "A B C DD E".Split (new String[] { "B", "D" }, 2, StringSplitOptions.None);
4129 Assert.AreEqual (2, res.Length);
4130 Assert.AreEqual ("A ", res [0]);
4131 Assert.AreEqual (" C DD E", res [1]);
4134 res = "ABCDEF".Split (new String[] { "EF", "BCDE" }, StringSplitOptions.None);
4135 Assert.AreEqual (2, res.Length);
4136 Assert.AreEqual ("A", res [0]);
4137 Assert.AreEqual ("F", res [1]);
4139 res = "ABCDEF".Split (new String[] { "BCD", "BC" }, StringSplitOptions.None);
4140 Assert.AreEqual (2, res.Length);
4141 Assert.AreEqual ("A", res [0]);
4142 Assert.AreEqual ("EF", res [1]);
4145 res = "A B\nC".Split ((String[])null, StringSplitOptions.None);
4146 Assert.AreEqual (3, res.Length);
4147 Assert.AreEqual ("A", res [0]);
4148 Assert.AreEqual ("B", res [1]);
4149 Assert.AreEqual ("C", res [2]);
4151 res = "A B\nC".Split (new String [0], StringSplitOptions.None);
4152 Assert.AreEqual (3, res.Length);
4153 Assert.AreEqual ("A", res [0]);
4154 Assert.AreEqual ("B", res [1]);
4155 Assert.AreEqual ("C", res [2]);
4159 public void SplitStringChars ()
4164 res = string.Empty.Split (new Char [] { 'A' });
4165 Assert.AreEqual (1, res.Length);
4166 Assert.AreEqual (string.Empty, res [0]);
4168 // empty and RemoveEmpty
4169 res = string.Empty.Split (new Char [] { 'A' }, StringSplitOptions.RemoveEmptyEntries);
4170 Assert.AreEqual (0, res.Length);
4173 res = "..A..B..".Split (new Char[] { '.' }, 0, StringSplitOptions.None);
4174 Assert.AreEqual (0, res.Length, "#01-01");
4177 res = "..A..B..".Split (new Char[] { '.' }, 1, StringSplitOptions.None);
4178 Assert.AreEqual (1, res.Length, "#02-01");
4179 Assert.AreEqual ("..A..B..", res [0], "#02-02");
4181 // count == 1 + RemoveEmpty
4182 res = "..A..B..".Split (new Char[] { '.' }, 1, StringSplitOptions.RemoveEmptyEntries);
4183 Assert.AreEqual (1, res.Length, "#03-01");
4184 Assert.AreEqual ("..A..B..", res [0], "#03-02");
4186 // Strange Case A+B A
4187 res = "...".Split (new Char[] { '.' }, 1, StringSplitOptions.RemoveEmptyEntries);
4188 Assert.AreEqual (1, res.Length, "#ABA-01");
4189 Assert.AreEqual ("...", res [0], "#ABA-02");
4191 // Strange Case A+B B
4192 res = "...".Split (new Char[] { '.' }, 2, StringSplitOptions.RemoveEmptyEntries);
4193 Assert.AreEqual (0, res.Length, "#ABB-01");
4195 // Keeping Empties and multipe split chars
4196 res = "..A;.B.;".Split (new Char[] { '.', ';' }, StringSplitOptions.None);
4197 Assert.AreEqual (7, res.Length, "#04-01");
4198 Assert.AreEqual (string.Empty, res [0], "#04-02");
4199 Assert.AreEqual (string.Empty, res [1], "#04-03");
4200 Assert.AreEqual ("A", res [2], "#04-04");
4201 Assert.AreEqual (string.Empty, res [3], "#04-05");
4202 Assert.AreEqual ("B", res [4], "#04-06");
4203 Assert.AreEqual (string.Empty, res [5], "#04-07");
4204 Assert.AreEqual (string.Empty, res [6], "#04-08");
4206 // Trimming (3 tests)
4207 res = "..A".Split (new Char[] { '.' }, 2, StringSplitOptions.RemoveEmptyEntries);
4208 Assert.AreEqual (1, res.Length, "#05-01");
4209 Assert.AreEqual ("A", res [0], "#05-02");
4211 res = "A..".Split (new Char[] { '.' }, 2, StringSplitOptions.RemoveEmptyEntries);
4212 Assert.AreEqual (1, res.Length, "#06-01");
4213 Assert.AreEqual ("A", res [0], "#06-02");
4215 res = "..A..".Split (new Char[] { '.' }, 2, StringSplitOptions.RemoveEmptyEntries);
4216 Assert.AreEqual (1, res.Length, "#07-01");
4217 Assert.AreEqual ("A", res [0], "#07-02");
4220 res = "..A..B..".Split (new Char[] { '.' }, 2, StringSplitOptions.RemoveEmptyEntries);
4221 Assert.AreEqual (2, res.Length, "#08-01");
4222 Assert.AreEqual ("A", res [0], "#08-02");
4223 Assert.AreEqual ("B..", res [1], "#08-03");
4225 // Whitespace and Long split chain (removing empty chars)
4226 res = " A\tBC\n\rDEF GHI ".Split ((Char[])null, StringSplitOptions.RemoveEmptyEntries);
4227 Assert.AreEqual (4, res.Length, "#09-01");
4228 Assert.AreEqual ("A", res [0], "#09-02");
4229 Assert.AreEqual ("BC", res [1], "#09-03");
4230 Assert.AreEqual ("DEF", res [2], "#09-04");
4231 Assert.AreEqual ("GHI", res [3], "#09-05");
4233 // Nothing but separators
4234 res = "..,.;.,".Split (new Char[]{'.',',',';'},2,StringSplitOptions.RemoveEmptyEntries);
4235 Assert.AreEqual (0, res.Length, "#10-01");
4237 // Complete testseries
4238 char[] dash = new Char[] { '/' };
4239 StringSplitOptions o = StringSplitOptions.RemoveEmptyEntries;
4240 Assert.AreEqual ("hi", "hi".Split (dash, o)[0], "#11-01");
4241 Assert.AreEqual ("hi", "hi/".Split (dash, o)[0], "#11-02");
4242 Assert.AreEqual ("hi", "/hi".Split (dash, o)[0], "#11-03");
4244 Assert.AreEqual ("hi..", "hi../".Split (dash, o)[0], "#11-04-1");
4245 Assert.AreEqual ("hi..", "/hi..".Split (dash, o)[0], "#11-04-2");
4247 res = "/hi/..".Split (dash, o);
4248 Assert.AreEqual ("hi", res[0], "#11-05-1");
4249 Assert.AreEqual ("..", res[1], "#11-05-2");
4250 Assert.AreEqual (2, res.Length, "#11-09-3");
4252 res = "hi/..".Split (dash, o);
4253 Assert.AreEqual ("hi", res[0], "#11-06-1");
4254 Assert.AreEqual ("..", res[1], "#11-06-2");
4255 Assert.AreEqual (2, res.Length, "#11-09-3");
4257 res = "hi/../".Split (dash, o);
4258 Assert.AreEqual ("hi", res[0], "#11-07-1");
4259 Assert.AreEqual ("..", res[1], "#11-07-2");
4260 Assert.AreEqual (2, res.Length, "#11-07-3");
4262 res = "/hi../".Split (dash, o);
4263 Assert.AreEqual ("hi..", res[0], "#11-08-1");
4264 Assert.AreEqual (1, res.Length, "#11-08-2");
4266 res = "/hi/../".Split (dash, o);
4267 Assert.AreEqual ("hi", res[0], "#11-09-1");
4268 Assert.AreEqual ("..", res[1], "#11-09-2");
4269 Assert.AreEqual (2, res.Length, "#11-09-3");
4271 Assert.AreEqual (0, " ".Split ((char[]) null, 2, StringSplitOptions.RemoveEmptyEntries).Length, "#12-00-0");
4273 res = "not found".Split (new char[2]);
4274 Assert.AreEqual ("not found", res[0], "#12-04-27");
4275 Assert.AreEqual (1, res.Length, "#12-04-27-A");
4279 public void SplitStringStrings ()
4284 res = "..A..B..".Split (new String[] { "." }, 0, StringSplitOptions.None);
4285 Assert.AreEqual (0, res.Length, "#01-01");
4288 res = "..A..B..".Split (new String[] { "." }, 1, StringSplitOptions.None);
4289 Assert.AreEqual (1, res.Length, "#02-01");
4290 Assert.AreEqual ("..A..B..", res [0], "#02-02");
4292 // count == 1 + RemoveEmpty
4293 res = "..A..B..".Split (new String[] { "." }, 1, StringSplitOptions.RemoveEmptyEntries);
4294 Assert.AreEqual (1, res.Length, "#03-01");
4295 Assert.AreEqual ("..A..B..", res [0], "#03-02");
4297 // Strange Case A+B A
4298 res = "...".Split (new String[] { "." }, 1, StringSplitOptions.RemoveEmptyEntries);
4299 Assert.AreEqual (1, res.Length, "#ABA-01");
4300 Assert.AreEqual ("...", res [0], "#ABA-02");
4302 // Strange Case A+B B
4303 res = "...".Split (new String[] { "." }, 2, StringSplitOptions.RemoveEmptyEntries);
4304 Assert.AreEqual (0, res.Length, "#ABB-01");
4306 // Keeping Empties and multipe split chars
4307 res = "..A;.B.;".Split (new String[] { ".", ";" }, StringSplitOptions.None);
4308 Assert.AreEqual (7, res.Length, "#04-01");
4309 Assert.AreEqual (string.Empty, res [0], "#04-02");
4310 Assert.AreEqual (string.Empty, res [1], "#04-03");
4311 Assert.AreEqual ("A", res [2], "#04-04");
4312 Assert.AreEqual (string.Empty, res [3], "#04-05");
4313 Assert.AreEqual ("B", res [4], "#04-06");
4314 Assert.AreEqual (string.Empty, res [5], "#04-07");
4315 Assert.AreEqual (string.Empty, res [6], "#04-08");
4317 // Trimming (3 tests)
4318 res = "..A".Split (new String[] { "." }, 2, StringSplitOptions.RemoveEmptyEntries);
4319 Assert.AreEqual (1, res.Length, "#05-01");
4320 Assert.AreEqual ("A", res [0], "#05-02");
4322 res = "A..".Split (new String[] { "." }, 2, StringSplitOptions.RemoveEmptyEntries);
4323 Assert.AreEqual (1, res.Length, "#06-01");
4324 Assert.AreEqual ("A", res [0], "#06-02");
4326 res = "..A..".Split (new String[] { "." }, 2, StringSplitOptions.RemoveEmptyEntries);
4327 Assert.AreEqual (1, res.Length, "#07-01");
4328 Assert.AreEqual ("A", res [0], "#07-02");
4331 res = "..A..B..".Split (new String[] { "." }, 2, StringSplitOptions.RemoveEmptyEntries);
4332 Assert.AreEqual (2, res.Length, "#08-01");
4333 Assert.AreEqual ("A", res [0], "#08-02");
4334 Assert.AreEqual ("B..", res [1], "#08-03");
4336 // Whitespace and Long split chain (removing empty chars)
4337 res = " A\tBC\n\rDEF GHI ".Split ((String[])null, StringSplitOptions.RemoveEmptyEntries);
4338 Assert.AreEqual (4, res.Length, "#09-01");
4339 Assert.AreEqual ("A", res [0], "#09-02");
4340 Assert.AreEqual ("BC", res [1], "#09-03");
4341 Assert.AreEqual ("DEF", res [2], "#09-04");
4342 Assert.AreEqual ("GHI", res [3], "#09-05");
4344 // Nothing but separators
4345 res = "..,.;.,".Split (new String[]{".",",",";"},2,StringSplitOptions.RemoveEmptyEntries);
4346 Assert.AreEqual (0, res.Length, "#10-01");
4348 // Complete testseries
4349 String[] dash = new String[] { "/" };
4350 StringSplitOptions o = StringSplitOptions.RemoveEmptyEntries;
4351 Assert.AreEqual ("hi", "hi".Split (dash, o)[0], "#11-01");
4352 Assert.AreEqual ("hi", "hi/".Split (dash, o)[0], "#11-02");
4353 Assert.AreEqual ("hi", "/hi".Split (dash, o)[0], "#11-03");
4355 Assert.AreEqual ("hi..", "hi../".Split (dash, o)[0], "#11-04-1");
4356 Assert.AreEqual ("hi..", "/hi..".Split (dash, o)[0], "#11-04-2");
4358 res = "/hi/..".Split (dash, o);
4359 Assert.AreEqual ("hi", res[0], "#11-05-1");
4360 Assert.AreEqual ("..", res[1], "#11-05-2");
4361 Assert.AreEqual (2, res.Length, "#11-09-3");
4363 res = "hi/..".Split (dash, o);
4364 Assert.AreEqual ("hi", res[0], "#11-06-1");
4365 Assert.AreEqual ("..", res[1], "#11-06-2");
4366 Assert.AreEqual (2, res.Length, "#11-09-3");
4368 res = "hi/../".Split (dash, o);
4369 Assert.AreEqual ("hi", res[0], "#11-07-1");
4370 Assert.AreEqual ("..", res[1], "#11-07-2");
4371 Assert.AreEqual (2, res.Length, "#11-07-3");
4373 res = "/hi../".Split (dash, o);
4374 Assert.AreEqual ("hi..", res[0], "#11-08-1");
4375 Assert.AreEqual (1, res.Length, "#11-08-2");
4377 res = "/hi/../".Split (dash, o);
4378 Assert.AreEqual ("hi", res[0], "#11-09-1");
4379 Assert.AreEqual ("..", res[1], "#11-09-2");
4380 Assert.AreEqual (2, res.Length, "#11-09-3");
4384 [Category ("NotDotNet")]
4385 public void Normalize1 ()
4387 // .NET does not combine them into U+1F80
4388 // seealso: http://demo.icu-project.org/icu-bin/nbrowser?t=\u03B1\u0313\u0345
4389 string s = "\u03B1\u0313\u0345";
4390 Assert.IsTrue (!s.IsNormalized (NormalizationForm.FormC), "#1");
4391 Assert.IsTrue (!s.IsNormalized (NormalizationForm.FormKC), "#2");
4392 Assert.AreEqual ("\u1F80", s.Normalize (NormalizationForm.FormC), "#3");
4393 Assert.AreEqual ("\u1F80", s.Normalize (NormalizationForm.FormKC), "#4");
4397 [Category ("NotDotNet")]
4398 public void Normalize2 ()
4400 string s1 = "\u0061\u0301bc";
4401 string s2 = "\u00e1bc";
4402 // .NET does not combine \u0061\0301 into \u00E1
4403 // seealso: http://demo.icu-project.org/icu-bin/nbrowser?t=\u0061\u0301bc
4404 Assert.AreEqual (s2, s1.Normalize (NormalizationForm.FormC), "#1");
4405 Assert.AreEqual (s2, s1.Normalize (NormalizationForm.FormKC), "#2");
4409 public void Normalize3 ()
4411 var s = new string (new char [] { '\u064A', '\u064F', '\u0648', '\u0654', '\u0652', '\u064A', '\u064F', '\u0648', '\u0654' });
4413 var formC = new string (new char [] { '\u064A', '\u064F', '\u0624', '\u0652', '\u064a', '\u064f', '\u0624' });
4414 var formD = new string (new char [] { '\u064A', '\u064F', '\u0648', '\u0652', '\u0654', '\u064a', '\u064f', '\u0648', '\u0654' });
4415 var formKC = new string (new char [] { '\u064A', '\u064F', '\u0624', '\u0652', '\u064a', '\u064f', '\u0624' });
4416 var formKD = new string (new char [] { '\u064A', '\u064F', '\u0648', '\u0652', '\u0654', '\u064a', '\u064f', '\u0648', '\u0654' });
4418 Assert.AreEqual (formD, s.Normalize (NormalizationForm.FormD), "#1");
4419 Assert.AreEqual (formC, s.Normalize (NormalizationForm.FormC), "#2");
4420 Assert.AreEqual (formKD, s.Normalize (NormalizationForm.FormKD), "#3");
4421 Assert.AreEqual (formKC, s.Normalize (NormalizationForm.FormKC), "#4");
4424 [Test] // bug #480152, test cases by David Mitchell
4425 public void NormalizeFormD ()
4427 Assert.AreEqual ("\u212B".Normalize (NormalizationForm.FormD), "\u0041\u030A", "#1");
4428 Assert.AreEqual ("\u1E69".Normalize (NormalizationForm.FormD), "\u0073\u0323\u0307", "#2");
4429 Assert.AreEqual ("\u1e4e".Normalize (NormalizationForm.FormD), "\u004f\u0303\u0308", "#3");
4430 Assert.AreEqual ("\u1e2f".Normalize (NormalizationForm.FormD), "\u0069\u0308\u0301", "#4");
4433 [Test] // bug #480152, test cases by David Mitchell
4434 public void NormalizeFormC ()
4436 Assert.AreEqual ("\u0041\u030a\u0061\u030a".Normalize (NormalizationForm.FormC), "\u00c5\u00e5", "#1");
4437 Assert.AreEqual ("\u006E\u0303".Normalize (NormalizationForm.FormC), "\u00F1", "#2");
4438 Assert.AreEqual ("\u03B7\u0313\u0300\u0345".Normalize (NormalizationForm.FormC), "\u1F92", "#3");
4441 [Test] // bug #480152, test cases by Tom Philpot
4442 public void NormalizeFormCCrashers ()
4444 string[][] entries = new string[][] {
4445 new string[] { "\u05d0\u0307\u05dc", "#1" },
4446 new string[] { "\u05d0\u0307\u05dc\u05d9\u05d9\u05df", "#2" },
4447 new string[] { "\u05d4\u05d0\u0307\u05dc\u0307\u05d9\u0307\u05df\u0307", "#3" },
4448 new string[] { "\u05d9\u05e9\u05de\u05e2\u0307\u05d0\u0307\u05dc\u0307", "#4" },
4449 new string[] { "\u05d9\u05e9\u05e8\u05d0\u0307\u05dc\u0307", "#5" },
4452 foreach (string[] entry in entries)
4453 entry [0].Normalize (NormalizationForm.FormC);
4457 public void NormalizeFormCHangul ()
4459 Assert.AreEqual ("\u1100\u116C".Normalize (NormalizationForm.FormC), "\uAD34", "#1");
4460 Assert.AreEqual ("\u1100\u116B\u11C2".Normalize (NormalizationForm.FormC), "\uAD33", "#2");
4461 Assert.AreEqual ("\u1100!".Normalize (NormalizationForm.FormC), "\u1100!", "#3");
4462 Assert.AreEqual ("\u1100\u116B!".Normalize (NormalizationForm.FormC), "\uAD18\u0021", "#4");
4463 Assert.AreEqual ("!\u116C".Normalize (NormalizationForm.FormC), "!\u116C", "#5");
4464 Assert.AreEqual ("!\u116B\u11C2".Normalize (NormalizationForm.FormC), "!\u116B\u11C2", "#6");
4468 public void MoreNormalizeFormC ()
4470 Assert.AreEqual ("\u1E0A\u0323".Normalize (NormalizationForm.FormC), "\u1E0C\u0307", "#1");
4471 Assert.AreEqual ("\u0044\u0323\u0307".Normalize (NormalizationForm.FormC), "\u1E0C\u0307", "#2");
4475 public void Emptiness ()
4477 // note: entries using AreEqual are in reality AreNotSame on MS FX
4478 // but I prefer Mono implementation ;-) and it minimize the changes
4479 Assert.AreSame (String.Empty, "", "Empty");
4481 Assert.AreSame (String.Empty, String.Concat ((object) null), "Concat(null)");
4482 Assert.AreSame (String.Empty, String.Concat ((object) String.Empty), "Concat(empty)");
4483 Assert.AreSame (String.Empty, String.Concat ((object) String.Empty, (object) String.Empty), "Concat(object,object)");
4484 Assert.AreSame (String.Empty, String.Concat (String.Empty, String.Empty), "Concat(string,string)");
4485 Assert.AreEqual (String.Empty, String.Concat (String.Empty, String.Empty, String.Empty), "Concat(string,string,string)");
4486 Assert.AreEqual (String.Empty, String.Concat ((object) null, (object) (object) null, (object) null, (object) null), "Concat(null,null,null,null)-object");
4487 Assert.AreSame (String.Empty, String.Concat ((string) null, (string) (string) null, (string) null, (string) null), "Concat(null,null,null,null)-string");
4488 Assert.AreNotSame (String.Empty, String.Concat (String.Empty, String.Empty, String.Empty, String.Empty), "Concat(string,string,string,string)");
4489 Assert.AreEqual (String.Empty, String.Concat (new object [] { String.Empty, String.Empty }), "Concat(object[])");
4490 Assert.AreEqual (String.Empty, String.Concat (new string [] { String.Empty, String.Empty }), "Concat(string[])");
4492 Assert.AreNotSame (String.Empty, String.Copy (String.Empty), "Copy");
4494 Assert.AreEqual (String.Empty, "".Insert (0, String.Empty), "Insert(Empty)");
4495 Assert.AreEqual (String.Empty, String.Empty.Insert (0, ""), "Empty.Insert");
4497 Assert.AreSame (String.Empty, String.Empty.PadLeft (0), "PadLeft(int)");
4498 Assert.AreSame (String.Empty, String.Empty.PadLeft (0, '.'), "PadLeft(int.char)");
4499 Assert.AreSame (String.Empty, String.Empty.PadRight (0), "PadRight(int)");
4500 Assert.AreSame (String.Empty, String.Empty.PadRight (0, '.'), "PadRight(int.char)");
4502 Assert.AreSame (String.Empty, "".Substring (0), "Substring(int)");
4503 Assert.AreSame (String.Empty, "ab".Substring (1, 0), "Substring(int,int)");
4505 Assert.AreSame (String.Empty, "".ToLower (), "ToLower");
4506 Assert.AreSame (String.Empty, "".ToUpper (), "ToUpper");
4507 Assert.AreSame (String.Empty, "".ToLower (CultureInfo.CurrentCulture), "ToLower(CultureInfo)");
4508 Assert.AreSame (String.Empty, "".ToUpper (CultureInfo.CurrentCulture), "ToUpper(CultureInfo)");
4509 Assert.AreSame (String.Empty, "".ToLowerInvariant (), "ToLowerInvariant");
4510 Assert.AreSame (String.Empty, "".ToUpperInvariant (), "ToUpperInvariant");
4512 Assert.AreSame (String.Empty, "".Trim (), "Trim()");
4513 Assert.AreSame (String.Empty, "a".Trim ('a'), "Trim(char)");
4514 Assert.AreSame (String.Empty, "a".TrimEnd ('a'), "TrimEnd(char)");
4515 Assert.AreSame (String.Empty, "a".TrimStart ('a'), "TrimStart(char)");
4519 public void LastIndexOfAndEmptiness () {
4520 Assert.AreEqual (-1, "".LastIndexOf('.'), "#1");
4521 Assert.AreEqual (-1, "".LastIndexOf('.', -1), "#2");
4522 Assert.AreEqual (-1, "".LastIndexOf('.', -1, -1), "#3");
4523 Assert.AreEqual (0, "x".LastIndexOf('x', 0), "#4");
4524 Assert.AreEqual (0 , "x".LastIndexOf('x', 0, 1), "#5");
4525 Assert.AreEqual (-1 , "x".LastIndexOf('z', 0, 1), "#6");
4528 "".LastIndexOf(null);
4530 } catch (ArgumentNullException) {}
4532 Assert.AreEqual (0, "".LastIndexOf(""), "#8");
4533 Assert.AreEqual (0, "".LastIndexOf("", -1), "#9");
4534 Assert.AreEqual (0, "".LastIndexOf("", -1, 1), "#10");
4535 Assert.AreEqual (0, "".LastIndexOf("", StringComparison.Ordinal), "#11");
4536 Assert.AreEqual (0, "".LastIndexOf("", -1, StringComparison.Ordinal), "#12");
4537 Assert.AreEqual (0, "".LastIndexOf("", -1, -1, StringComparison.Ordinal), "#13");
4538 Assert.AreEqual (0, "x".LastIndexOf(""), "#14");
4540 Assert.AreEqual (0, "x".LastIndexOf("x", 0), "#15");
4541 Assert.AreEqual (0, "x".LastIndexOf("", 0), "#16");
4542 Assert.AreEqual (0, "xxxx".LastIndexOf("", 0), "#17");
4543 Assert.AreEqual (1, "xxxx".LastIndexOf("", 1), "#18");
4545 Assert.AreEqual (1, "xy".LastIndexOf(""), "#19");
4546 Assert.AreEqual (2, "xyz".LastIndexOf(""), "#20");
4547 Assert.AreEqual (1, "xy".LastIndexOf(""), "#21");
4548 Assert.AreEqual (1, "xy".LastIndexOf("", 2), "#22");
4549 Assert.AreEqual (2, "xyz".LastIndexOf("", 2), "#23");
4550 Assert.AreEqual (2, "xyz".LastIndexOf("", 2, 2), "#24");
4551 Assert.AreEqual (2, "xyz".LastIndexOf("", 3, 3), "#25");
4554 "xy".LastIndexOf("", 29);
4555 Assert.Fail ("#26");
4556 }catch (ArgumentOutOfRangeException){}
4558 Assert.AreEqual (-1, "".LastIndexOf("x"), "#27");
4559 Assert.AreEqual (-1, "".LastIndexOf("x", -1), "#28");
4560 Assert.AreEqual (-1, "".LastIndexOf("x", -1), "#29");
4561 Assert.AreEqual (-1, "".LastIndexOf("x", StringComparison.Ordinal), "#30");
4562 Assert.AreEqual (-1, "".LastIndexOf("x", -1, StringComparison.Ordinal), "#31");
4563 Assert.AreEqual (-1, "".LastIndexOf("x", -1, -1, StringComparison.Ordinal), "#32");
4565 Assert.AreEqual (1, "xx".LastIndexOf("", StringComparison.Ordinal), "#33");
4566 Assert.AreEqual (1, "xx".LastIndexOf("", 2, StringComparison.Ordinal), "#34");
4567 Assert.AreEqual (1, "xx".LastIndexOf("", 2, 2, StringComparison.Ordinal), "#35");
4569 Assert.AreEqual (3, "xxxx".LastIndexOf("", StringComparison.Ordinal), "#36");
4570 Assert.AreEqual (2, "xxxx".LastIndexOf("", 2, StringComparison.Ordinal), "#37");
4571 Assert.AreEqual (2, "xxxx".LastIndexOf("", 2, 2, StringComparison.Ordinal), "#38");
4573 Assert.AreEqual (3, "xxxx".LastIndexOf("", 3, StringComparison.Ordinal), "#39");
4574 Assert.AreEqual (3, "xxxx".LastIndexOf("", 3, 3, StringComparison.Ordinal), "#40");
4579 public void LastIndexOfAnyAndEmptiness () {
4580 Assert.AreEqual (-1, "".LastIndexOfAny(new char[] {'.', 'x'}), "#1");
4581 Assert.AreEqual (-1, "".LastIndexOfAny(new char[] {'.', 'x'}, -1), "#2");
4582 Assert.AreEqual (-1, "".LastIndexOfAny(new char[] {'.', 'x'}, -1, -1), "#3");