2010-05-17 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Mon, 17 May 2010 08:42:03 +0000 (08:42 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Mon, 17 May 2010 08:42:03 +0000 (08:42 -0000)
* Enum.cs : TryParse() should raise ArgumentException when the
  type parameter is not an enum. Fixed bug #604134

* EnumTest.cs : add test for bug #604134.

svn path=/trunk/mcs/; revision=157416

mcs/class/corlib/System/ChangeLog
mcs/class/corlib/System/Enum.cs
mcs/class/corlib/Test/System/ChangeLog
mcs/class/corlib/Test/System/EnumTest.cs

index c0de79f74a7af828f1776fe043130ea1c5e3667b..55c18019a31535749b40eb1b2cd6da9e50db4561 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-17  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * Enum.cs : TryParse() should raise ArgumentException when the
+         type parameter is not an enum. Fixed bug #604134
+
 2010-05-11 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * GC.cs: Add EPHEMERON_TOMBSTONE reandonly variable.
index 5015fa097a4639412d717bcefe3ea9aeaaab6436..eda7e1461e22c0bf14ed5238acb5e9643a7bfd57 100644 (file)
@@ -628,9 +628,12 @@ namespace System
                public static bool TryParse<TEnum> (string value, bool ignoreCase, out TEnum result) where TEnum : struct
                {
                        Type tenum_type = typeof (TEnum);
+                       if (!tenum_type.IsEnum)
+                               throw new ArgumentException("TEnum is not an Enum type.", "enumType");
+
                        result = default (TEnum);
 
-                       if (value == null || value.Trim ().Length == 0 || !tenum_type.IsEnum)
+                       if (value == null || value.Trim ().Length == 0)
                                return false;
 
                        return Parse (tenum_type, value, ignoreCase, out result);
index 36f47eb37e25f3768f523b00de04cc0a0bdae700..2f1ca07020c05f0b130c016b51ee97a9cbed1e4c 100644 (file)
@@ -1,3 +1,7 @@
+2010-05-17  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * EnumTest.cs : add test for bug #604134.
+
 2010-05-17  Atsushi Enomoto  <atsushi@ximian.com>
 
        * StringTest.cs : add test for bug #605094.
index ba0982dee570ebaf1ec980aafdc9efe0c78b98b4..86a95c818d67a44196a80fff5a2f77602c7c44ee 100644 (file)
@@ -705,11 +705,18 @@ namespace MonoTests.System
                        Assert.AreEqual (false, success, "#D1");
                        Assert.AreEqual (TestingEnum.This, result, "#D2");
 
-                       // TryParse can accept any struct derived type
-                       int n;
-                       success = Enum.TryParse<int> ("31416", out n);
-                       Assert.AreEqual (false, success, "#E1");
-                       Assert.AreEqual (0, n, "#E2");
+                       // TryParse throws ArgumentException if TEnum is not an enumeration type
+                       try {
+                               int n;
+                               Enum.TryParse<int> ("31416", out n);
+                               Assert.Fail ("#E1");
+                       } catch (ArgumentException ex) {
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");
+                               Assert.IsNull (ex.InnerException, "#E3");
+                               Assert.IsNotNull (ex.Message, "#E4");
+                               Assert.IsNotNull (ex.ParamName, "#E5");
+                               Assert.AreEqual ("enumType", ex.ParamName, "#E6");
+                       }
                }
 
                [Test]