svn path=/branches/mono-1-1-9/mcs/; revision=51206
[mono.git] / mcs / class / System / Test / System.ComponentModel / DateTimeConverterTests.cs
1 //
2 // System.ComponentModel.DateTimeConverter test cases
3 //
4 // Authors:
5 //      Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 // (c) 2005 Novell, Inc. (http://www.ximian.com)
8 //
9
10 using System;
11 using System.ComponentModel;
12 using System.ComponentModel.Design.Serialization;
13 using System.Globalization;
14
15 using NUnit.Framework;
16
17 namespace MonoTests.System.ComponentModel
18 {
19         [TestFixture]
20         public class DateTimeConverterTests
21         {
22                 private DateTimeConverter converter;
23                 private string pattern;
24                 
25                 [SetUp]
26                 public void SetUp ()
27                 {
28                         converter = new DateTimeConverter ();
29
30                         DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat;
31                         pattern = info.ShortDatePattern + " " + info.ShortTimePattern;
32                 }
33
34                 [Test]
35                 public void CanConvertFrom ()
36                 {
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");
41                 }
42
43                 [Test]
44                 public void CanConvertTo ()
45                 {
46                         Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#1");
47                         Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#2");
48                         Assert.IsTrue (converter.CanConvertTo (typeof (InstanceDescriptor)), "#3");
49                 }
50
51                 [Test]
52                 public void ConvertFrom_String ()
53                 {
54                         DateTime date = DateTime.Now;
55                         DateTime newDate = (DateTime) converter.ConvertFrom (null, CultureInfo.InvariantCulture, 
56                                 date.ToString(CultureInfo.InvariantCulture));
57
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");
65                 }
66
67                 [Test]
68                 [ExpectedException (typeof (NotSupportedException))]
69                 public void ConvertFrom_Object ()
70                 {
71                         converter.ConvertFrom (new object ());
72                 }
73
74                 [Test]
75                 [ExpectedException (typeof (NotSupportedException))]
76                 public void ConvertFrom_Int32 ()
77                 {
78                         converter.ConvertFrom (10);
79                 }
80
81                 [Test]
82                 public void ConvertTo_MinValue ()
83                 {
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");
90                 }
91
92                 [Test]
93                 public void ConvertTo_MaxValue ()
94                 {
95                         Assert.AreEqual (DateTime.MaxValue.ToString (CultureInfo.InvariantCulture), 
96                                 converter.ConvertTo (null, CultureInfo.InvariantCulture, DateTime.MaxValue, 
97                                 typeof (string)), "#1");
98                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, 
99                                 CultureInfo.CurrentCulture), converter.ConvertTo (null, 
100                                 CultureInfo.CurrentCulture, DateTime.MaxValue, typeof (string)),
101                                 "#2");
102                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, 
103                                 CultureInfo.CurrentCulture), converter.ConvertTo (DateTime.MaxValue, 
104                                 typeof (string)), "#3");
105                 }
106
107                 [Test]
108                 public void ConvertToString_MinValue ()
109                 {
110                         Assert.AreEqual (string.Empty, converter.ConvertToString (null, 
111                                 CultureInfo.InvariantCulture, DateTime.MinValue), "#1");
112
113                         Assert.AreEqual (string.Empty, converter.ConvertToString (null, 
114                                 DateTime.MinValue), "#2");
115                         Assert.AreEqual (string.Empty, converter.ConvertToString (null, 
116                                 CultureInfo.CurrentCulture, DateTime.MinValue), "#3");
117                         Assert.AreEqual (string.Empty, converter.ConvertToString (DateTime.MinValue),
118                                 "#4");
119                 }
120
121                 [Test]
122                 public void ConvertToString_MaxValue ()
123                 {
124                         Assert.AreEqual (DateTime.MaxValue.ToString (CultureInfo.InvariantCulture), 
125                                 converter.ConvertToString (null, CultureInfo.InvariantCulture, 
126                                 DateTime.MaxValue), "#1");
127
128                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, CultureInfo.CurrentCulture),
129                                 converter.ConvertToString (null, DateTime.MaxValue), "#2");
130                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, CultureInfo.CurrentCulture),
131                                 converter.ConvertToString (null, CultureInfo.CurrentCulture,
132                                 DateTime.MaxValue), "#3");
133                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, CultureInfo.CurrentCulture),
134                                 converter.ConvertToString (DateTime.MaxValue), "#4");
135                 }
136
137                 [Test]
138                 public void ConvertToString ()
139                 {
140                         CultureInfo culture = new MyCultureInfo ();
141                         DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
142                         DateTime date = DateTime.Now;
143
144                         Assert.AreEqual (date.ToString (info.ShortDatePattern + " " + 
145                                 info.ShortTimePattern, culture), converter.ConvertToString (
146                                 null, culture, date));
147                 }
148
149                 [Test]
150                 public void ConvertFromString ()
151                 {
152                         CultureInfo culture = new MyCultureInfo ();
153                         DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
154                         DateTime date = DateTime.Now;
155
156                         DateTime newDate = (DateTime) converter.ConvertFrom (null, culture, date.ToString("G", info));
157
158                         Assert.AreEqual (date.Year, newDate.Year, "#1");
159                         Assert.AreEqual (date.Month, newDate.Month, "#2");
160                         Assert.AreEqual (date.Day, newDate.Day, "#3");
161                         Assert.AreEqual (date.Hour, newDate.Hour, "#4");
162                         Assert.AreEqual (date.Minute, newDate.Minute, "#5");
163                         Assert.AreEqual (date.Second, newDate.Second, "#6");
164                         Assert.AreEqual (0, newDate.Millisecond, "#7");
165                 }
166
167                 [Test]
168                 [ExpectedException (typeof (FormatException))]
169                 public void ConvertFrom_InvalidValue ()
170                 {
171                         converter.ConvertFrom ("*1");
172                 }
173
174                 [Test]
175                 [ExpectedException (typeof (FormatException))]
176                 public void ConvertFrom_InvalidValue_Invariant ()
177                 {
178                         converter.ConvertFrom (null, CultureInfo.InvariantCulture, "*1");
179                 }
180
181                 [Test]
182                 [ExpectedException (typeof (FormatException))]
183                 public void ConvertFromString_InvalidValue ()
184                 {
185                         converter.ConvertFromString ("*1");
186                 }
187
188                 [Test]
189                 [ExpectedException (typeof (FormatException))]
190                 public void ConvertFromString_InvalidValue_Invariant ()
191                 {
192                         converter.ConvertFromString (null, CultureInfo.InvariantCulture, "*1");
193                 }
194
195                 [Serializable]
196                 private sealed class MyCultureInfo : CultureInfo
197                 {
198                         internal MyCultureInfo () : base ("en-US")
199                         {
200                         }
201
202                         public override object GetFormat (Type formatType)
203                         {
204                                 if (formatType == typeof (DateTimeFormatInfo)) {
205                                         DateTimeFormatInfo info = (DateTimeFormatInfo) ((DateTimeFormatInfo) base.GetFormat (formatType)).Clone ();
206                                         info.ShortDatePattern = "MM?dd?yyyy";
207                                         info.ShortTimePattern = "hh!mm";
208                                         return DateTimeFormatInfo.ReadOnly (info);
209                                 } else {
210                                         return base.GetFormat (formatType);
211                                 }
212                         }
213                 }
214         }
215 }