Merge pull request #268 from pcc/menudeactivate
[mono.git] / mcs / class / System / Test / System.ComponentModel / Int16ConverterTests.cs
index 6cad225e95f5b47a838911e5aec8b941d19ad477..9b7b0dc9408325081e3f89513fae1a7cbfc668b4 100644 (file)
@@ -9,6 +9,7 @@
 
 using System;
 using System.ComponentModel;
+using System.ComponentModel.Design.Serialization;
 using System.Globalization;
 
 using NUnit.Framework;
@@ -31,7 +32,8 @@ namespace MonoTests.System.ComponentModel
                {
                        Assert.IsTrue (converter.CanConvertFrom (typeof (string)), "#1");
                        Assert.IsFalse (converter.CanConvertFrom (typeof (short)), "#2");
-                       Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#2");
+                       Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#3");
+                       Assert.IsTrue (converter.CanConvertFrom (typeof (InstanceDescriptor)), "#4");
                }
 
                [Test]
@@ -39,12 +41,47 @@ namespace MonoTests.System.ComponentModel
                {
                        Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#1");
                        Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#2");
+                       Assert.IsTrue (converter.CanConvertTo (typeof (int)), "#3");
                }
 
                [Test]
-               public void ConvertFrom_String ()
+               public void ConvertFrom_MinValue ()
                {
-                       Assert.AreEqual ((short) 10, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "10"), "#1");
+                       Assert.AreEqual (short.MinValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#8000"), "#1");
+                       Assert.AreEqual (short.MinValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#0x8000"), "#2");
+                       Assert.AreEqual (short.MinValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#0X8000"), "#3");
+                       Assert.AreEqual (short.MinValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "0x8000"), "#4");
+                       Assert.AreEqual (short.MinValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "0X8000"), "#5");
+               }
+
+               [Test]
+               public void ConvertFrom_MaxValue ()
+               {
+                       Assert.AreEqual (short.MaxValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#7fff"), "#1");
+                       Assert.AreEqual (short.MaxValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#7FFF"), "#2");
+                       Assert.AreEqual (short.MaxValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#0x7fff"), "#3");
+                       Assert.AreEqual (short.MaxValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "#0X7FFF"), "#4");
+                       Assert.AreEqual (short.MaxValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "0x7fff"), "#5");
+                       Assert.AreEqual (short.MaxValue, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "0X7FFF"), "#6");
+               }
+
+               [Test]
+               public void ConvertToString ()
+               {
+                       CultureInfo culture = new MyCultureInfo ();
+                       NumberFormatInfo numberFormatInfo = (NumberFormatInfo) culture.GetFormat (typeof (NumberFormatInfo));
+
+                       Assert.AreEqual (numberFormatInfo.NegativeSign + "5", converter.ConvertToString (null, culture, (short) -5), "#1");
+                       Assert.AreEqual (culture.NumberFormat.NegativeSign + "5", converter.ConvertToString (null, culture, (int) -5), "#2");
+               }
+
+               [Test]
+               public void ConvertFromString ()
+               {
+                       CultureInfo culture = new MyCultureInfo ();
+                       NumberFormatInfo numberFormatInfo = (NumberFormatInfo) culture.GetFormat (typeof (NumberFormatInfo));
+
+                       Assert.AreEqual (-5, converter.ConvertFrom (null, culture, numberFormatInfo.NegativeSign + "5"));
                }
 
                [Test]
@@ -69,18 +106,71 @@ namespace MonoTests.System.ComponentModel
                }
 
                [Test]
-               public void ConvertTo_Invariant ()
+               public void ConvertTo_MinValue ()
+               {
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.InvariantCulture),
+                               converter.ConvertTo (null, CultureInfo.InvariantCulture, short.MinValue,
+                               typeof (string)), "#1");
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertTo (null, CultureInfo.CurrentCulture, short.MinValue,
+                               typeof (string)), "#2");
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertTo (short.MinValue, typeof (string)), "#3");
+               }
+
+               [Test]
+               public void ConvertTo_MaxValue ()
+               {
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.InvariantCulture),
+                               converter.ConvertTo (null, CultureInfo.InvariantCulture, short.MaxValue,
+                               typeof (string)), "#1");
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertTo (null, CultureInfo.CurrentCulture, short.MaxValue,
+                               typeof (string)), "#2");
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertTo (short.MaxValue, typeof (string)), "#3");
+               }
+
+               [Test]
+               public void ConvertToString_MinValue ()
+               {
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.InvariantCulture),
+                               converter.ConvertToString (null, CultureInfo.InvariantCulture,
+                               short.MinValue), "#1");
+
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertToString (null, short.MinValue), "#2");
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertToString (null, CultureInfo.CurrentCulture,
+                               short.MinValue), "#3");
+                       Assert.AreEqual (short.MinValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertToString (short.MinValue), "#4");
+               }
+
+               [Test]
+               public void ConvertToString_MaxValue ()
                {
-                       Assert.AreEqual ("10", converter.ConvertTo (null, CultureInfo.InvariantCulture, 
-                               (short) 10, typeof (string)), "#1");
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.InvariantCulture),
+                               converter.ConvertToString (null, CultureInfo.InvariantCulture,
+                               short.MaxValue), "#1");
+
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertToString (null, short.MaxValue), "#2");
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertToString (null, CultureInfo.CurrentCulture,
+                               short.MaxValue), "#3");
+                       Assert.AreEqual (short.MaxValue.ToString (CultureInfo.CurrentCulture),
+                               converter.ConvertToString (short.MaxValue), "#4");
                }
 
                [Test]
-               public void ConvertFromString_Invalid1 ()
+               public void ConvertFrom_InvalidValue ()
                {
                        try {
-                               converter.ConvertFromString (null, CultureInfo.InvariantCulture, "*1");
+                               converter.ConvertFrom ("*1");
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
@@ -89,12 +179,13 @@ namespace MonoTests.System.ComponentModel
                }
 
                [Test]
-               public void ConvertFromString_Invalid2 ()
+               public void ConvertFrom_InvalidValue_Invariant ()
                {
                        try {
-                               converter.ConvertFromString (null, CultureInfo.InvariantCulture,
-                                       double.MaxValue.ToString(CultureInfo.InvariantCulture));
+                               converter.ConvertFrom (null, CultureInfo.InvariantCulture, "*1");
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
@@ -103,64 +194,182 @@ namespace MonoTests.System.ComponentModel
                }
 
                [Test]
-               public void ConvertFromString_Invalid3 ()
+               public void ConvertFrom_Base10_MinOverflow ()
                {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString (
+                               CultureInfo.CurrentCulture);
+
                        try {
-                               converter.ConvertFromString ("*1");
+                               converter.ConvertFrom (minOverflow);
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
-                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
                        }
                }
 
                [Test]
-               public void ConvertFromString_Invalid4 ()
+               public void ConvertFrom_Base10_MinOverflow_Invariant ()
                {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString (
+                               CultureInfo.InvariantCulture);
+
                        try {
-                               converter.ConvertFromString (double.MaxValue.ToString (CultureInfo.CurrentCulture));
+                               converter.ConvertFrom (null, CultureInfo.InvariantCulture,
+                                       minOverflow);
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
-                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
                        }
                }
 
                [Test]
-               public void ConvertFrom_InvalidString1 ()
+               public void ConvertFrom_Base10_MaxOverflow ()
                {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString (
+                               CultureInfo.CurrentCulture);
+
                        try {
-                               converter.ConvertFrom (null, CultureInfo.InvariantCulture, "*1");
+                               converter.ConvertFrom (maxOverflow);
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
-                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
                        }
                }
 
                [Test]
-               public void ConvertFrom_InvalidString2 ()
+               public void ConvertFrom_Base10_MaxOverflow_Invariant ()
                {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString (
+                               CultureInfo.InvariantCulture);
+
                        try {
                                converter.ConvertFrom (null, CultureInfo.InvariantCulture,
-                                       double.MaxValue.ToString (CultureInfo.InvariantCulture));
+                                       maxOverflow);
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
-                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
                        }
                }
 
                [Test]
-               public void ConvertFrom_InvalidString3 ()
+               public void ConvertFrom_Base16_MinOverflow ()
                {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString ("x",
+                               CultureInfo.CurrentCulture);
+
                        try {
-                               converter.ConvertFrom ("*1");
+                               converter.ConvertFrom ("#" + minOverflow);
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFrom_Base16_MinOverflow_Invariant ()
+               {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString ("x",
+                               CultureInfo.InvariantCulture);
+
+                       try {
+                               converter.ConvertFrom (null, CultureInfo.InvariantCulture,
+                                       "#" + minOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#4");
+                       }
+               }
+
+               [Test]
+               public void ConvertFrom_Base16_MaxOverflow ()
+               {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString ("x",
+                               CultureInfo.CurrentCulture);
+                       Assert.AreEqual (-32768, converter.ConvertFrom (null, CultureInfo.CurrentCulture,
+                               "#" + maxOverflow), "#1");
+
+                       maxOverflow = ((int) (ushort.MaxValue)).ToString ("x",
+                               CultureInfo.CurrentCulture);
+                       Assert.AreEqual (-1, converter.ConvertFrom (null, CultureInfo.CurrentCulture,
+                               "#" + maxOverflow), "#2");
+
+                       maxOverflow = (ushort.MaxValue + 1).ToString ("x",
+                               CultureInfo.CurrentCulture);
+
+                       try {
+                               converter.ConvertFrom (null, CultureInfo.CurrentCulture,
+                                       "#" + maxOverflow);
+                               Assert.Fail ("#3");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#4");
+                               Assert.IsNotNull (ex.InnerException, "#5");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#6");
+                       }
+               }
+
+               [Test]
+               public void ConvertFrom_Base16_MaxOverflow_Invariant ()
+               {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString ("x",
+                               CultureInfo.InvariantCulture);
+                       Assert.AreEqual (-32768, converter.ConvertFrom (null, CultureInfo.InvariantCulture,
+                               "#" + maxOverflow), "#1");
+
+                       maxOverflow = ((int) (ushort.MaxValue)).ToString ("x",
+                               CultureInfo.InvariantCulture);
+                       Assert.AreEqual (-1, converter.ConvertFrom (null, CultureInfo.InvariantCulture,
+                               "#" + maxOverflow), "#2");
+
+                       maxOverflow = (ushort.MaxValue + 1).ToString ("x",
+                               CultureInfo.InvariantCulture);
+
+                       try {
+                               converter.ConvertFrom (null, CultureInfo.InvariantCulture,
+                                       "#" + maxOverflow);
+                               Assert.Fail ("#3");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#4");
+                               Assert.IsNotNull (ex.InnerException, "#5");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#6");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_InvalidValue ()
+               {
+                       try {
+                               converter.ConvertFromString ("*1");
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
@@ -169,17 +378,212 @@ namespace MonoTests.System.ComponentModel
                }
 
                [Test]
-               public void ConvertFrom_InvalidString4 ()
+               public void ConvertFromString_InvalidValue_Invariant ()
                {
                        try {
-                               converter.ConvertFrom (double.MaxValue.ToString (CultureInfo.CurrentCulture));
+                               converter.ConvertFromString (null, CultureInfo.InvariantCulture, "*1");
                                Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
                        } catch (Exception ex) {
                                Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
                                Assert.IsNotNull (ex.InnerException, "#3");
                                Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
                        }
                }
+
+               [Test]
+               public void ConvertFromString_Base10_MinOverflow ()
+               {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString (
+                               CultureInfo.CurrentCulture);
+
+                       try {
+                               converter.ConvertFromString (minOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base10_MinOverflow_Invariant ()
+               {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString (
+                               CultureInfo.InvariantCulture);
+
+                       try {
+                               converter.ConvertFromString (null, CultureInfo.InvariantCulture,
+                                       minOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base10_MaxOverflow ()
+               {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString (
+                               CultureInfo.CurrentCulture);
+
+                       try {
+                               converter.ConvertFromString (maxOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base10_MaxOverflow_Invariant ()
+               {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString (
+                               CultureInfo.InvariantCulture);
+
+                       try {
+                               converter.ConvertFromString (null, CultureInfo.InvariantCulture,
+                                       maxOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base16_MinOverflow ()
+               {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString ("x",
+                               CultureInfo.CurrentCulture);
+
+                       try {
+                               converter.ConvertFromString ("#" + minOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base16_MinOverflow_Invariant ()
+               {
+                       string minOverflow = ((int) (short.MinValue - 1)).ToString ("x",
+                               CultureInfo.InvariantCulture);
+
+                       try {
+                               converter.ConvertFromString (null, CultureInfo.InvariantCulture,
+                                       "#" + minOverflow);
+                               Assert.Fail ("#1");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#3");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base16_MaxOverflow ()
+               {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString ("x",
+                               CultureInfo.CurrentCulture);
+                       Assert.AreEqual (-32768, converter.ConvertFromString ("#" + maxOverflow), "#1");
+
+                       maxOverflow = (ushort.MaxValue).ToString ("x",
+                               CultureInfo.CurrentCulture);
+                       Assert.AreEqual (-1, converter.ConvertFromString ("#" + maxOverflow), "#2");
+
+                       maxOverflow = (ushort.MaxValue + 1).ToString ("x",
+                               CultureInfo.CurrentCulture);
+
+                       try {
+                               converter.ConvertFromString ("#" + maxOverflow);
+                               Assert.Fail ("#3");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#4");
+                               Assert.IsNotNull (ex.InnerException, "#5");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#6");
+                       }
+               }
+
+               [Test]
+               public void ConvertFromString_Base16_MaxOverflow_Invariant ()
+               {
+                       string maxOverflow = ((int) (short.MaxValue + 1)).ToString ("x",
+                               CultureInfo.CurrentCulture);
+                       Assert.AreEqual (-32768, converter.ConvertFromString ("#" + maxOverflow), "#1");
+
+                       maxOverflow = (ushort.MaxValue + 1).ToString ("x",
+                               CultureInfo.CurrentCulture);
+
+                       try {
+                               converter.ConvertFromString (null, CultureInfo.InvariantCulture,
+                                       "#" + maxOverflow);
+                               Assert.Fail ("#2");
+                       } catch (AssertionException) {
+                               throw;
+                       } catch (Exception ex) {
+                               Assert.AreEqual (typeof (Exception), ex.GetType (), "#3");
+                               Assert.IsNotNull (ex.InnerException, "#4");
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#5");
+                       }
+               }
+
+               [Serializable]
+               private sealed class MyCultureInfo : CultureInfo
+               {
+                       internal MyCultureInfo ()
+                               : base ("en-US")
+                       {
+                       }
+
+                       public override object GetFormat (Type formatType)
+                       {
+                               if (formatType == typeof (NumberFormatInfo)) {
+                                       NumberFormatInfo nfi = (NumberFormatInfo) ((NumberFormatInfo) base.GetFormat (formatType)).Clone ();
+
+                                       nfi.NegativeSign = "myNegativeSign";
+                                       return NumberFormatInfo.ReadOnly (nfi);
+                               } else {
+                                       return base.GetFormat (formatType);
+                               }
+                       }
+
+#if NET_2_0
+// adding this override in 1.x shows different result in .NET (it is ignored).
+// Some compatibility kids might want to fix this issue.
+                       public override NumberFormatInfo NumberFormat {
+                               get {
+                                       NumberFormatInfo nfi = (NumberFormatInfo) base.NumberFormat.Clone ();
+                                       nfi.NegativeSign = "myNegativeSign";
+                                       return nfi;
+                               }
+                               set { throw new NotSupportedException (); }
+                       }
+#endif
+               }
        }
 }
-