2 // System.ComponentModel.DateTimeConverter test cases
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // (c) 2005 Novell, Inc. (http://www.ximian.com)
11 using System.ComponentModel;
12 using System.ComponentModel.Design.Serialization;
13 using System.Globalization;
15 using NUnit.Framework;
17 namespace MonoTests.System.ComponentModel
20 public class DateTimeConverterTests
22 private DateTimeConverter converter;
23 private string pattern;
28 converter = new DateTimeConverter ();
30 DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat;
31 pattern = info.ShortDatePattern + " " + info.ShortTimePattern;
35 public void CanConvertFrom ()
37 Assert.IsTrue (converter.CanConvertFrom (typeof (string)), "#1");
38 Assert.IsFalse (converter.CanConvertFrom (typeof (DateTime)), "#2");
39 Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#3");
40 Assert.IsTrue (converter.CanConvertFrom (typeof (InstanceDescriptor)), "#4");
44 public void CanConvertTo ()
46 Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#1");
47 Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#2");
48 Assert.IsTrue (converter.CanConvertTo (typeof (InstanceDescriptor)), "#3");
52 public void ConvertFrom_String ()
54 DateTime date = DateTime.Now;
55 DateTime newDate = (DateTime) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
56 date.ToString(CultureInfo.InvariantCulture));
58 Assert.AreEqual (date.Year, newDate.Year, "#1");
59 Assert.AreEqual (date.Month, newDate.Month, "#2");
60 Assert.AreEqual (date.Day, newDate.Day, "#3");
61 Assert.AreEqual (date.Hour, newDate.Hour, "#4");
62 Assert.AreEqual (date.Minute, newDate.Minute, "#5");
63 Assert.AreEqual (date.Second, newDate.Second, "#6");
64 Assert.AreEqual (0, newDate.Millisecond, "#7");
68 [ExpectedException (typeof (NotSupportedException))]
69 public void ConvertFrom_Object ()
71 converter.ConvertFrom (new object ());
75 [ExpectedException (typeof (NotSupportedException))]
76 public void ConvertFrom_Int32 ()
78 converter.ConvertFrom (10);
82 public void ConvertTo_MinValue ()
84 Assert.AreEqual (string.Empty, converter.ConvertTo (null,
85 CultureInfo.InvariantCulture, DateTime.MinValue, typeof (string)), "#1");
86 Assert.AreEqual (string.Empty, converter.ConvertTo (null,
87 CultureInfo.CurrentCulture, DateTime.MinValue, typeof (string)), "#2");
88 Assert.AreEqual (string.Empty, converter.ConvertTo (DateTime.MinValue,
89 typeof (string)), "#3");
93 public void ConvertTo_MaxValue ()
95 Assert.AreEqual (DateTime.MaxValue.ToString (CultureInfo.InvariantCulture),
96 converter.ConvertTo (null, CultureInfo.InvariantCulture, DateTime.MaxValue,
97 typeof (string)), "#1");
99 // FIXME: We probably shouldn't be using CurrentCulture in these tests.
100 if (CultureInfo.CurrentCulture == CultureInfo.InvariantCulture)
102 Assert.AreEqual (DateTime.MaxValue.ToString (pattern,
103 CultureInfo.CurrentCulture), converter.ConvertTo (null,
104 CultureInfo.CurrentCulture, DateTime.MaxValue, typeof (string)),
106 Assert.AreEqual (DateTime.MaxValue.ToString (pattern,
107 CultureInfo.CurrentCulture), converter.ConvertTo (DateTime.MaxValue,
108 typeof (string)), "#3");
112 public void ConvertToString_MinValue ()
114 Assert.AreEqual (string.Empty, converter.ConvertToString (null,
115 CultureInfo.InvariantCulture, DateTime.MinValue), "#1");
117 Assert.AreEqual (string.Empty, converter.ConvertToString (null,
118 DateTime.MinValue), "#2");
119 Assert.AreEqual (string.Empty, converter.ConvertToString (null,
120 CultureInfo.CurrentCulture, DateTime.MinValue), "#3");
121 Assert.AreEqual (string.Empty, converter.ConvertToString (DateTime.MinValue),
126 public void ConvertToString_MaxValue ()
128 Assert.AreEqual (DateTime.MaxValue.ToString (CultureInfo.InvariantCulture),
129 converter.ConvertToString (null, CultureInfo.InvariantCulture,
130 DateTime.MaxValue), "#1");
132 // FIXME: We probably shouldn't be using CurrentCulture in these tests.
133 if (CultureInfo.CurrentCulture == CultureInfo.InvariantCulture)
135 Assert.AreEqual (DateTime.MaxValue.ToString (pattern, CultureInfo.CurrentCulture),
136 converter.ConvertToString (null, DateTime.MaxValue), "#2");
137 Assert.AreEqual (DateTime.MaxValue.ToString (pattern, CultureInfo.CurrentCulture),
138 converter.ConvertToString (null, CultureInfo.CurrentCulture,
139 DateTime.MaxValue), "#3");
140 Assert.AreEqual (DateTime.MaxValue.ToString (pattern, CultureInfo.CurrentCulture),
141 converter.ConvertToString (DateTime.MaxValue), "#4");
145 public void ConvertToString ()
147 CultureInfo culture = new MyCultureInfo ();
148 DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
149 DateTime date = DateTime.Now;
151 Assert.AreEqual (date.ToString (info.ShortDatePattern + " " +
152 info.ShortTimePattern, culture), converter.ConvertToString (
153 null, culture, date));
157 public void ConvertFromString ()
159 CultureInfo culture = new MyCultureInfo ();
160 DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
161 DateTime date = DateTime.Now;
163 DateTime newDate = (DateTime) converter.ConvertFrom (null, culture, date.ToString("G", info));
165 Assert.AreEqual (date.Year, newDate.Year, "#1");
166 Assert.AreEqual (date.Month, newDate.Month, "#2");
167 Assert.AreEqual (date.Day, newDate.Day, "#3");
168 Assert.AreEqual (date.Hour, newDate.Hour, "#4");
169 Assert.AreEqual (date.Minute, newDate.Minute, "#5");
170 Assert.AreEqual (date.Second, newDate.Second, "#6");
171 Assert.AreEqual (0, newDate.Millisecond, "#7");
175 [ExpectedException (typeof (FormatException))]
176 public void ConvertFrom_InvalidValue ()
178 converter.ConvertFrom ("*1");
182 [ExpectedException (typeof (FormatException))]
183 public void ConvertFrom_InvalidValue_Invariant ()
185 converter.ConvertFrom (null, CultureInfo.InvariantCulture, "*1");
189 [ExpectedException (typeof (FormatException))]
190 public void ConvertFromString_InvalidValue ()
192 converter.ConvertFromString ("*1");
196 [ExpectedException (typeof (FormatException))]
197 public void ConvertFromString_InvalidValue_Invariant ()
199 converter.ConvertFromString (null, CultureInfo.InvariantCulture, "*1");
203 private sealed class MyCultureInfo : CultureInfo
205 internal MyCultureInfo () : base ("en-US")
209 public override object GetFormat (Type formatType)
211 if (formatType == typeof (DateTimeFormatInfo)) {
212 DateTimeFormatInfo info = (DateTimeFormatInfo) ((DateTimeFormatInfo) base.GetFormat (formatType)).Clone ();
213 info.ShortDatePattern = "MM?dd?yyyy";
214 info.ShortTimePattern = "hh!mm";
215 return DateTimeFormatInfo.ReadOnly (info);
217 return base.GetFormat (formatType);