* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlConvertTests.cs
index 420b480755a36c40b1527ca021792c67374a289a..cc5fd9e69d5e7a5190a1b2f61051634a244be12c 100644 (file)
@@ -7,9 +7,12 @@
 //
 
 using System;
+using System.Globalization;
 using System.Xml;
 using NUnit.Framework;
 
+using AssertType = NUnit.Framework.Assert;
+
 namespace MonoTests.System.Xml
 {
        [TestFixture]
@@ -215,26 +218,113 @@ namespace MonoTests.System.Xml
                }
        
                [Test]
-               public void ToInt16 ()//not done
+               public void ToInt16 ()
                {
-                       
+                       AssertType.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
+                       AssertType.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
+                       AssertType.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
+                       AssertType.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
+                       AssertType.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
+                       try {
+                               XmlConvert.ToInt16 ("32768");
+                               AssertType.Fail ("32768");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt16 ("-32769");
+                               AssertType.Fail ("-32769");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt16 ("0x100");
+                               AssertType.Fail ("0x100");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
-               public void ToInt32 ()//not done
+               public void ToInt32 ()
                {
-                       
+                       AssertType.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
+                       AssertType.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
+                       AssertType.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
+                       AssertType.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
+                       AssertType.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
+                       try {
+                               int.Parse ("2147483648", CultureInfo.CurrentCulture);
+                               AssertType.Fail ("int.Parse(current culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               int.Parse ("2147483648", CultureInfo.InvariantCulture);
+                               AssertType.Fail ("int.Parse(invariant culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt32 ("2147483648");
+                               AssertType.Fail ("2147483648");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt32 ("-2147483649");
+                               AssertType.Fail ("-2147483649");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt32 ("0x10000");
+                               AssertType.Fail ("0x10000");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
-               public void ToInt64 ()//not done
+               public void ToInt64 ()
                {
-                       
+                       AssertType.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
+                       AssertType.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
+                       AssertType.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
+                       AssertType.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
+                       AssertType.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
+                       try {
+                               XmlConvert.ToInt64 ("9223372036854775808");
+                               AssertType.Fail ("9223372036854775808");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt64 ("-9223372036854775809");
+                               AssertType.Fail ("-9223372036854775809");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToInt64 ("0x10000");
+                               AssertType.Fail ("0x10000");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
-               public void ToSByte ()//not done
+               public void ToSByte ()
                {
+                       AssertType.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
+                       AssertType.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
+                       AssertType.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
+                       AssertType.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
+                       AssertType.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
+                       try {
+                               XmlConvert.ToSByte ("128");
+                               AssertType.Fail ("128");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToSByte ("-129");
+                               AssertType.Fail ("-129");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToSByte ("0x80");
+                               AssertType.Fail ("0x80");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
@@ -252,38 +342,185 @@ namespace MonoTests.System.Xml
                        AssertEquals (33, dateString.Length);
                        AssertEquals ("2003-05-05T00:00:00.0000000", dateString.Substring (0, 27));
                }
-               
+
+               [Test]
+               public void FromTimeSpan ()
+               {
+                       // bug #77252
+                       TimeSpan t1 = TimeSpan.FromTicks (
+                               TimeSpan.TicksPerSecond + 1);
+                       AssertEquals ("PT1.0000001S", XmlConvert.ToString (t1));
+               }
+
                [Test]
-               public void ToTimeSpan ()//not done
+               public void ToTimeSpan ()
                {
                        AssertEquals ("#1", new TimeSpan (0, 0, 0, 0, 1),
                                XmlConvert.ToTimeSpan ("PT0.001S"));
+                       // bug #76328
+                       AssertEquals ("#2", new TimeSpan (0, 0, 0, 0, 100),
+                               XmlConvert.ToTimeSpan ("PT0.1S"));
+                       AssertEquals ("#3", new TimeSpan (0, 0, 0, 0, 100),
+                               XmlConvert.ToTimeSpan ("PT0.100S"));
+                       AssertEquals ("#4", new TimeSpan (0, 0, 0, 0, 10),
+                               XmlConvert.ToTimeSpan ("PT0.010S"));
+                       AssertEquals ("#5", new TimeSpan (0, 0, 0, 0, 10),
+                               XmlConvert.ToTimeSpan ("PT0.01S"));
+
+                       // bug #77252
+                       AssertEquals ("#6",
+                               TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1),
+                               XmlConvert.ToTimeSpan ("PT1.0000001S"));
+
+                       AssertEquals ("#7",
+                               TimeSpan.MinValue,
+                               XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"));
+
+                       AssertEquals ("#8",
+                               TimeSpan.MaxValue,
+                               XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"));
                }
                
                [Test]
-               public void ToUInt16 ()//not done
+               public void ToUInt16 ()
                {
-                       
+                       AssertType.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
+                       AssertType.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
+                       AssertType.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
+                       try {
+                               ushort.Parse ("65536", CultureInfo.CurrentCulture);
+                               AssertType.Fail ("ushort.Parse(current culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               ushort.Parse ("65536", CultureInfo.InvariantCulture);
+                               AssertType.Fail ("ushort.Parse(invariant culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToUInt16 ("65536");
+                               AssertType.Fail ("65536");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToUInt16 ("0x10000");
+                               AssertType.Fail ("0x10000");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
-               public void ToUInt32 ()//not done
+               public void ToUInt32 ()
                {
-                       
+                       AssertType.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
+                       AssertType.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
+                       AssertType.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
+                       try {
+                               uint.Parse ("4294967296", CultureInfo.CurrentCulture);
+                               AssertType.Fail ("uint.Parse(current culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               uint.Parse ("4294967296", CultureInfo.InvariantCulture);
+                               AssertType.Fail ("uint.Parse(invariant culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToUInt32 ("4294967296");
+                               AssertType.Fail ("4294967296");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToUInt32 ("0x10000");
+                               AssertType.Fail ("0x10000");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
-               public void ToUInt64 ()//not done
+               public void ToUInt64 ()
                {
-                       
+                       AssertType.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
+                       AssertType.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
+                       AssertType.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
+                       try {
+                               ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
+                               AssertType.Fail ("ulong.Parse(current culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
+                               AssertType.Fail ("ulong.Parse(invariant culture)");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToUInt64 ("18446744073709551616");
+                               AssertType.Fail ("18446744073709551616");
+                       } catch (OverflowException) {
+                       }
+                       try {
+                               XmlConvert.ToUInt64 ("0x10000");
+                               AssertType.Fail ("0x10000");
+                       } catch (FormatException) {
+                       }
                }
                
                [Test]
-               public void VerifyName ()//not done
+               public void VerifyName ()
                {
-                       
+                       VerifyNameValid ("a");
+                       VerifyNameValid ("a1");
+                       VerifyNameValid ("\u3041");
+                       VerifyNameValid ("a:b");
+                       VerifyNameValid ("_");
+                       VerifyNameValid ("__");
+                       VerifyNameValid ("_1");
+                       VerifyNameValid (":");
+                       VerifyNameValid (":a");
+                       VerifyNameValid ("a.b");
                }
-               
+
+               [Test]
+               public void VerifyNameInvalid ()
+               {
+                       VerifyNameInvalid ("!");
+                       VerifyNameInvalid ("_a!b");
+                       VerifyNameInvalid ("?a");
+                       VerifyNameInvalid (" ");
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void VerifyNameNull ()
+               {
+                       XmlConvert.VerifyName (null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void VerifyNameEmpty ()
+               {
+                       XmlConvert.VerifyName ("");
+               }
+
+               private void VerifyNameValid (string value)
+               {
+                       try {
+                               XmlConvert.VerifyName (value);
+                       } catch (XmlException) {
+                               AssertType.Fail (String.Format ("'{0}'", value));
+                       }
+               }
+
+               private void VerifyNameInvalid (string value)
+               {
+                       try {
+                               XmlConvert.VerifyName (value);
+                               AssertType.Fail (value);
+                       } catch (XmlException) {
+                       }
+               }
+
                [Test]
                public void VerifyNCName ()
                {
@@ -305,6 +542,57 @@ namespace MonoTests.System.Xml
                                Fail ();
                        } catch (XmlException) {}
                }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void VerifyNCNameNull ()
+               {
+                       XmlConvert.VerifyNCName (null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void VerifyNCNameEmpty ()
+               {
+                       XmlConvert.VerifyNCName ("");
+               }
+
+               [Test]
+               public void DurationZero () // bug #77350
+               {
+                       AssertEquals ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
+               }
+
+#if NET_2_0
+               [Test]
+               public void VerifyTOKEN ()
+               {
+                       VerifyToken ("", true);
+                       VerifyToken (" ", false);
+                       VerifyToken ("A", true);
+                       VerifyToken ("!", true);
+                       VerifyToken (" !", false);
+                       VerifyToken ("! ", false);
+                       VerifyToken ("! !", true);
+                       VerifyToken ("!\t!", false);
+                       VerifyToken ("!\n!", false);
+                       VerifyToken ("!\r!", false);
+                       VerifyToken ("###", true);
+               }
+
+               private void VerifyToken (string s, bool success)
+               {
+                       try {
+                               XmlConvert.VerifyTOKEN (s);
+                               if (success)
+                                       return;
+                               AssertType.Fail (s + "should fail");
+                       } catch (XmlException ex) {
+                               if (success)
+                                       AssertType.Fail (s + "should not fail");
+                       }
+               }
+#endif
        }
 }