Merge pull request #194 from QuickJack/master
[mono.git] / mcs / class / System / Test / System.Text.RegularExpressions / MatchTest.cs
index eb9ce6ae5a3dfc0d0cd215765e133b0c163c829d..58a9744adb30cac91db228d7386460749deb71a4 100644 (file)
@@ -31,16 +31,24 @@ using NUnit.Framework;
 using System;
 using System.Text.RegularExpressions;
 
-namespace MonoTests.System.Text.RegularExpressions {
-
+namespace MonoTests.System.Text.RegularExpressions
+{
        [TestFixture]
-       public class MatchTest {
-
+       public class MatchTest
+       {
                [Test]
-               [ExpectedException (typeof (ArgumentNullException))]
-               public void Synchronized_Null ()
+               public void Synchronized_Inner_Null ()
                {
-                       Match.Synchronized (null);
+                       try {
+                               Match.Synchronized (null);
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("inner", ex.ParamName, "#6");
+                       }
                }
 
                [Test]
@@ -48,21 +56,53 @@ namespace MonoTests.System.Text.RegularExpressions {
                {
                        Match em = Match.Empty;
                        Match sm = Match.Synchronized (em);
-                       Assert.IsTrue (Object.ReferenceEquals (em, sm), "Synchronized");
+                       Assert.AreSame (em, sm, "Synchronized");
+               }
+
+               [Test]
+               public void Result_Replacement_Null ()
+               {
+                       try {
+                               Match.Empty.Result (null);
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("replacement", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test]
+               public void Result_Replacement_Empty ()
+               {
+                       Regex email = new Regex ("(?<user>[^@]+)@(?<domain>.+)");
+                       Match m = email.Match ("mono@go-mono.com");
+                       string exp = m.Result (string.Empty);
+                       Assert.AreEqual (string.Empty, exp);
                }
 
                [Test]
-               [ExpectedException (typeof (ArgumentNullException))]
-               public void Result_Null ()
+               public void Result_Match_Empty ()
                {
-                       Match.Empty.Result (null);
+                       try {
+                               Match.Empty.Result ("whatever");
+                               Assert.Fail ("#1");
+                       } catch (NotSupportedException ex) {
+                               // Result cannot be called on failed Match
+                               Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       }
                }
 
                [Test]
-               [ExpectedException (typeof (NotSupportedException))]
-               public void Result_Empty ()
+               public void Match_Backref ()
                {
-                       Match.Empty.Result (String.Empty);
+                       Assert.IsTrue (Regex.IsMatch ("F2345678910LL1", @"(F)(2)(3)(4)(5)(6)(7)(8)(9)(10)(L)\11"), "ltr");
+                       // FIXME
+                       //Assert.IsTrue (Regex.IsMatch ("F2345678910LL1", @"(F)(2)(3)(4)(5)(6)(7)(8)(9)(10)(L)\11", RegexOptions.RightToLeft), "rtl");
                }
        }
 }