* support-test-*.cs: Rename from test-*-p2.cs.
[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
99                         // FIXME: We probably shouldn't be using CurrentCulture in these tests.
100                         if (CultureInfo.CurrentCulture == CultureInfo.InvariantCulture)
101                                 return;
102                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, 
103                                 CultureInfo.CurrentCulture), converter.ConvertTo (null, 
104                                 CultureInfo.CurrentCulture, DateTime.MaxValue, typeof (string)),
105                                 "#2");
106                         Assert.AreEqual (DateTime.MaxValue.ToString (pattern, 
107                                 CultureInfo.CurrentCulture), converter.ConvertTo (DateTime.MaxValue, 
108                                 typeof (string)), "#3");
109                 }
110
111                 [Test]
112                 public void ConvertToString_MinValue ()
113                 {
114                         Assert.AreEqual (string.Empty, converter.ConvertToString (null, 
115                                 CultureInfo.InvariantCulture, DateTime.MinValue), "#1");
116
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),
122                                 "#4");
123                 }
124
125                 [Test]
126                 public void ConvertToString_MaxValue ()
127                 {
128                         Assert.AreEqual (DateTime.MaxValue.ToString (CultureInfo.InvariantCulture), 
129                                 converter.ConvertToString (null, CultureInfo.InvariantCulture, 
130                                 DateTime.MaxValue), "#1");
131
132                         // FIXME: We probably shouldn't be using CurrentCulture in these tests.
133                         if (CultureInfo.CurrentCulture == CultureInfo.InvariantCulture)
134                                 return;
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");
142                 }
143
144                 [Test]
145                 public void ConvertToString ()
146                 {
147                         CultureInfo culture = new MyCultureInfo ();
148                         DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
149                         DateTime date = DateTime.Now;
150
151                         Assert.AreEqual (date.ToString (info.ShortDatePattern + " " + 
152                                 info.ShortTimePattern, culture), converter.ConvertToString (
153                                 null, culture, date));
154                 }
155
156                 [Test]
157                 public void ConvertFromString ()
158                 {
159                         CultureInfo culture = new MyCultureInfo ();
160                         DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
161                         DateTime date = DateTime.Now;
162
163                         DateTime newDate = (DateTime) converter.ConvertFrom (null, culture, date.ToString("G", info));
164
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");
172                 }
173
174                 [Test]
175                 [ExpectedException (typeof (FormatException))]
176                 public void ConvertFrom_InvalidValue ()
177                 {
178                         converter.ConvertFrom ("*1");
179                 }
180
181                 [Test]
182                 [ExpectedException (typeof (FormatException))]
183                 public void ConvertFrom_InvalidValue_Invariant ()
184                 {
185                         converter.ConvertFrom (null, CultureInfo.InvariantCulture, "*1");
186                 }
187
188                 [Test]
189                 [ExpectedException (typeof (FormatException))]
190                 public void ConvertFromString_InvalidValue ()
191                 {
192                         converter.ConvertFromString ("*1");
193                 }
194
195                 [Test]
196                 [ExpectedException (typeof (FormatException))]
197                 public void ConvertFromString_InvalidValue_Invariant ()
198                 {
199                         converter.ConvertFromString (null, CultureInfo.InvariantCulture, "*1");
200                 }
201
202                 [Serializable]
203                 private sealed class MyCultureInfo : CultureInfo
204                 {
205                         internal MyCultureInfo () : base ("en-US")
206                         {
207                         }
208
209                         public override object GetFormat (Type formatType)
210                         {
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);
216                                 } else {
217                                         return base.GetFormat (formatType);
218                                 }
219                         }
220                 }
221         }
222 }