Merge pull request #1508 from slluis/fix-20966
[mono.git] / mcs / class / System / Test / System.ComponentModel / CultureInfoConverterTest.cs
1 //
2 // System.ComponentModel.CultureInfoConverter test cases
3 //
4 // Authors:
5 //      Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 // (c) 2008 Gert Driesen
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 CultureInfoConverterTest
21         {
22                 private CultureInfoConverter converter;
23                 
24                 [SetUp]
25                 public void SetUp ()
26                 {
27                         converter = new CultureInfoConverter ();
28                 }
29
30                 [Test]
31                 public void CanConvertFrom ()
32                 {
33                         Assert.IsTrue (converter.CanConvertFrom (typeof (string)), "#1");
34                         Assert.IsFalse (converter.CanConvertFrom (typeof (CultureInfo)), "#2");
35                         Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#3");
36                         Assert.IsFalse (converter.CanConvertFrom (typeof (int)), "#4");
37                         Assert.IsTrue (converter.CanConvertFrom (typeof (InstanceDescriptor)), "#5");
38                 }
39
40                 [Test]
41                 public void CanConvertTo ()
42                 {
43                         Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#1");
44                         Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#2");
45                         Assert.IsFalse (converter.CanConvertTo (typeof (CultureInfo)), "#3");
46                         Assert.IsFalse (converter.CanConvertTo (typeof (int)), "#4");
47                         Assert.IsTrue (converter.CanConvertTo (typeof (InstanceDescriptor)), "#5");
48                 }
49
50                 [Test]
51                 public void ConvertFrom_String ()
52                 {
53                         CultureInfo c;
54
55                         c = (CultureInfo) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
56                                 String.Empty);
57                         Assert.AreEqual (CultureInfo.InvariantCulture, c, "#1");
58
59                         c = (CultureInfo) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
60                                 "nl-BE");
61                         Assert.AreEqual (new CultureInfo ("nl-BE"), c, "#2");
62
63                         try {
64                                 c = (CultureInfo) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
65                                         "Dut");
66                                 Assert.Fail ("#3");
67                         } catch (ArgumentException) {
68                         }
69
70                         try {
71                                 c = (CultureInfo) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
72                                         "Dutch (Bel");
73                                 Assert.Fail ("#4");
74                         } catch (ArgumentException) {
75                         }
76
77                         try {
78                                 c = (CultureInfo) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
79                                         "duTcH (Bel");
80                                 Assert.Fail ("#5");
81                         } catch (ArgumentException) {
82                         }
83
84                         c = (CultureInfo) converter.ConvertFrom (null, CultureInfo.InvariantCulture,
85                                 "(Default)");
86                         Assert.AreEqual (CultureInfo.InvariantCulture, c, "#6");
87                 }
88
89                 [Test]
90                 public void ConvertFrom_String_IncompleteName ()
91                 {
92                         converter.ConvertFrom (null, CultureInfo.InvariantCulture,
93                                 "nl-B");
94                 }
95
96                 [Test]
97                 public void ConvertFrom_String_InvalidCulture ()
98                 {
99                         try {
100                                 converter.ConvertFrom (null, CultureInfo.InvariantCulture,
101                                         "(default)");
102                                 Assert.Fail ("#A1");
103                         } catch (ArgumentException ex) {
104                                 // The (default) culture cannot be converted to
105                                 // a CultureInfo object on this computer
106                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
107                                 Assert.IsNull (ex.InnerException, "#A3");
108                                 Assert.IsNotNull (ex.Message, "#A4");
109                                 Assert.IsTrue (ex.Message.IndexOf (typeof (CultureInfo).Name) != -1, "#A5");
110                                 Assert.IsTrue (ex.Message.IndexOf ("(default)") != -1, "#A6");
111                                 Assert.IsNull (ex.ParamName, "#A7");
112                         }
113
114                         try {
115                                 converter.ConvertFrom (null, CultureInfo.InvariantCulture,
116                                         " ");
117                                 Assert.Fail ("#B1");
118                         } catch (ArgumentException ex) {
119                                 // The   culture cannot be converted to
120                                 // a CultureInfo object on this computer
121                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
122                                 Assert.IsNull (ex.InnerException, "#B3");
123                                 Assert.IsNotNull (ex.Message, "#B4");
124                                 Assert.IsTrue (ex.Message.IndexOf (typeof (CultureInfo).Name) != -1, "#B5");
125                                 Assert.IsTrue (ex.Message.IndexOf ("   ") != -1, "#B6");
126                                 Assert.IsNull (ex.ParamName, "#B7");
127                         }
128
129                         try {
130                                 converter.ConvertFrom (null, CultureInfo.InvariantCulture,
131                                         "\r\n");
132                                 Assert.Fail ("#C1");
133                         } catch (ArgumentException ex) {
134                                 // The \r\n culture cannot be converted to
135                                 // a CultureInfo object on this computer
136                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
137                                 Assert.IsNull (ex.InnerException, "#C3");
138                                 Assert.IsNotNull (ex.Message, "#C4");
139                                 Assert.IsTrue (ex.Message.IndexOf (typeof (CultureInfo).Name) != -1, "#C5");
140                                 Assert.IsTrue (ex.Message.IndexOf ("\r\n") != -1, "#C6");
141                                 Assert.IsNull (ex.ParamName, "#C7");
142                         }
143                 }
144
145                 [Test]
146                 public void ConvertFrom_Value_Null ()
147                 {
148                         try {
149                                 converter.ConvertFrom (null, CultureInfo.InvariantCulture,
150                                         (string) null);
151                                 Assert.Fail ("#1");
152                         } catch (NotSupportedException ex) {
153                                 // CultureInfoConverter cannot convert from (null)
154                                 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
155                                 Assert.IsNull (ex.InnerException, "#3");
156                                 Assert.IsNotNull (ex.Message, "#4");
157                                 Assert.IsTrue (ex.Message.IndexOf (typeof (CultureInfoConverter).Name) != -1, "#5");
158                                 Assert.IsTrue (ex.Message.IndexOf ("(null)") != -1, "#6");
159                         }
160                 }
161
162                 [Test]
163                 public void ConvertToString ()
164                 {
165                         string result;
166
167                         result = converter.ConvertToString (null, CultureInfo.InvariantCulture,
168                                 new MyCultureInfo ());
169                         Assert.AreEqual ("nl-BE", result, "#1");
170
171                         result = converter.ConvertToString (null, CultureInfo.InvariantCulture,
172                                 null);
173                         Assert.AreEqual ("(Default)", result, "#2");
174
175                         result = converter.ConvertToString (null, CultureInfo.InvariantCulture,
176                                 CultureInfo.InvariantCulture);
177                         Assert.AreEqual ("(Default)", result, "#3");
178
179                         result = converter.ConvertToString (null, CultureInfo.InvariantCulture,
180                                 new CultureInfo ("nl-BE"));
181                         Assert.AreEqual ("nl-BE", result, "#4");
182                 }
183
184                 [Serializable]
185                 private sealed class MyCultureInfo : CultureInfo
186                 {
187                         internal MyCultureInfo () : base ("nl-BE")
188                         {
189                         }
190
191                         public override string DisplayName {
192                                 get { return "display"; }
193                         }
194
195                         public override string EnglishName {
196                                 get { return "english"; }
197                         }
198                 }
199
200 #if NET_4_0
201                 [Test]
202                 public void GetCultureName ()
203                 {
204                         CustomCultureInfoConverter custom_converter = new CustomCultureInfoConverter ();
205
206                         CultureInfo fr_culture = CultureInfo.GetCultureInfo ("fr-FR");
207                         Assert.AreEqual (fr_culture.Name, custom_converter.GetCultureName (fr_culture), "#A1");
208
209                         CultureInfo es_culture = CultureInfo.GetCultureInfo ("es-MX");
210                         Assert.AreEqual (es_culture.Name, custom_converter.GetCultureName (es_culture), "#A2");
211                 }
212
213                 class CustomCultureInfoConverter : CultureInfoConverter
214                 {
215                         public new string GetCultureName (CultureInfo culture)
216                         {
217                                 return base.GetCultureName (culture);
218                         }
219                 }
220 #endif
221         }
222 }