Merge pull request #900 from Blewzman/FixAggregateExceptionGetBaseException
[mono.git] / mcs / class / corlib / Test / System / StringTest.cs
index 429ff654f0ae92c055a4fc106c4bbc936e5a6019..68119d1c5afa8f28d8b940e92ce4cf602cee8cbc 100644 (file)
@@ -24,6 +24,20 @@ namespace MonoTests.System
 [TestFixture]
 public class StringTest
 {
+       class NullFormatter : IFormatProvider, ICustomFormatter
+       {
+               public string Format (string format, object arg, IFormatProvider provider)
+               {
+                       return null;
+               }
+
+               public object GetFormat (Type formatType)
+               {
+                       return this;
+               }
+       }
+
+
        private CultureInfo orgCulture;
 
        [SetUp]
@@ -634,6 +648,33 @@ public class StringTest
                }
        }
 
+       [Test]
+       public void CompareOrdinalWithOffset ()
+       {
+               string ab1 = "ab";
+               string ab2 = "a" + new string ('b', 1);
+               
+               Assert.IsTrue (string.CompareOrdinal (ab1, 0, ab1, 1, 1) < 0, "#1");
+               Assert.IsTrue (string.CompareOrdinal (ab2, 0, ab1, 1, 1) < 0, "#2");
+       }
+
+       [Test]
+       public void CompareOrdinalSubstringWithNull ()
+       {
+               string lesser = "abc";
+               string greater = "xyz";
+
+               Assert.AreEqual (0, string.CompareOrdinal (null, 0, null, 0, 0), "substring both null");
+               Assert.AreEqual (-1, string.CompareOrdinal (null, 0, greater, 0, 0), "substring strA null");
+               Assert.AreEqual (-1, string.CompareOrdinal (null, 4, greater, 0, 0), "substring strA null; indexA greater than strA.Length");
+               Assert.AreEqual (-1, string.CompareOrdinal (null, 0, greater, 4, 0), "substring strA null; indexB greater than strB.Length");
+               Assert.AreEqual (-1, string.CompareOrdinal (null, -1, greater, -1, -1), "substring strA null; indexA, indexB, length negative");
+               Assert.AreEqual (1, string.CompareOrdinal (lesser, 0, null, 0, 0), "substring strB null");
+               Assert.AreEqual (1, string.CompareOrdinal (lesser, 4, null, 0, 0), "substring strB null; indexA greater than strA.Length");
+               Assert.AreEqual (1, string.CompareOrdinal (lesser, 0, null, 4, 0), "substring strB null; indexB greater than strB.Length");
+               Assert.AreEqual (1, string.CompareOrdinal (lesser, -1, null, -1, -1), "substring strB null; indexA, indexB, length negative");
+       }
+
        [Test]
        public void CompareTo ()
        {
@@ -1161,6 +1202,13 @@ public class StringTest
                }
        }
 
+       [Test]
+       public void Format ()
+       {
+               var s = String.Format (new NullFormatter (), "{0:}", "test");
+               Assert.AreEqual ("test", s);
+       }
+
        [Test]
        public void TestGetEnumerator ()
        {
@@ -2226,7 +2274,25 @@ public class StringTest
                Assert.IsTrue ("ABC".Contains ("ABC"));
                Assert.IsTrue ("ABC".Contains ("AB"));
                Assert.IsTrue (!"ABC".Contains ("AD"));
-               Assert.IsTrue (!"encyclop�dia".Contains("encyclopaedia"));
+               Assert.IsTrue (!"encyclopædia".Contains("encyclopaedia"));
+       }
+
+       [Test]
+       public void IndexOfIsCultureAwareWhileContainsIsNot ()
+       {
+               string a = "encyclopædia";
+               string b = "encyclopaedia";
+               Assert.IsFalse (a.Contains (b), "#1");
+               Assert.IsTrue (a.Contains ("æ"), "#1.1");
+               Assert.IsFalse (b.Contains ("æ"), "#1.2");
+               Assert.AreEqual (0, a.IndexOf (b), "#2");
+               Assert.AreEqual (8, a.IndexOf ('æ'), "#3");
+               Assert.AreEqual (-1, b.IndexOf ('æ'), "#4");
+               Assert.AreEqual (8, a.IndexOf ("æ"), "#5");
+               Assert.AreEqual (8, b.IndexOf ("æ"), "#6");
+
+               Assert.AreEqual (0, CultureInfo.CurrentCulture.CompareInfo.IndexOf (a, b, 0, a.Length, CompareOptions.None), "#7");
+               Assert.AreEqual (-1, CultureInfo.CurrentCulture.CompareInfo.IndexOf (a, b, 0, a.Length, CompareOptions.Ordinal), "#8");
        }
 
        [Test]
@@ -2910,6 +2976,15 @@ public class StringTest
                }
        }
 
+       [Test]
+       public void PadLeft_Overflow ()
+       {
+               try {
+                       "x".PadLeft (int.MaxValue, '-');
+               } catch (OutOfMemoryException) {
+               }
+       }
+
        [Test] // PadRight (Int32)
        public void PadRight1 ()
        {
@@ -2951,6 +3026,15 @@ public class StringTest
                Assert.AreEqual ("000000000000", "".PadRight (12, '0'), "#2");
        }
 
+       [Test]
+       public void PadRight_Overflow ()
+       {
+               try {
+                       "x".PadRight (int.MaxValue, '-');
+               } catch (OutOfMemoryException) {
+               }
+       }
+
        [Test] // Remove (Int32, Int32)
        public void Remove2 ()
        {