2 // System.Globalization.CultureInfo Test Cases
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // (c) 2005 Novell, Inc. (http://www.novell.com)
11 using System.Globalization;
13 using System.Runtime.Serialization.Formatters.Binary;
14 using System.Threading;
16 using NUnit.Framework;
18 namespace MonoTests.System.Globalization
21 public class CultureInfoTest
23 CultureInfo old_culture;
28 old_culture = Thread.CurrentThread.CurrentCulture;
32 public void TearDown ()
34 Thread.CurrentThread.CurrentCulture = old_culture;
38 public void Constructor0 ()
40 CultureInfo ci = new CultureInfo (2067);
41 Assert.IsFalse (ci.IsReadOnly, "#1");
42 Assert.AreEqual (2067, ci.LCID, "#2");
43 Assert.AreEqual ("nl-BE", ci.Name, "#3");
44 Assert.IsTrue (ci.UseUserOverride, "#4");
48 public void Constructor0_Identifier_Negative ()
53 } catch (ArgumentOutOfRangeException ex) {
54 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
55 Assert.IsNull (ex.InnerException, "#3");
56 Assert.IsNotNull (ex.Message, "#4");
57 Assert.IsNotNull (ex.ParamName, "#5");
58 Assert.AreEqual ("culture", ex.ParamName, "#6");
63 public void Constructor1 ()
65 CultureInfo ci = new CultureInfo ("nl-BE");
66 Assert.IsFalse (ci.IsReadOnly, "#1");
67 Assert.AreEqual (2067, ci.LCID, "#2");
68 Assert.AreEqual ("nl-BE", ci.Name, "#3");
69 Assert.IsTrue (ci.UseUserOverride, "#4");
73 public void Constructor1_Name_Null ()
76 new CultureInfo ((string) null);
78 } catch (ArgumentNullException ex) {
79 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
80 Assert.IsNull (ex.InnerException, "#3");
81 Assert.IsNotNull (ex.Message, "#4");
82 Assert.IsNotNull (ex.ParamName, "#5");
83 Assert.AreEqual ("name", ex.ParamName, "#6");
88 public void Constructor2 ()
90 CultureInfo ci = new CultureInfo (2067, false);
91 Assert.IsFalse (ci.IsReadOnly, "#A1");
92 Assert.AreEqual (2067, ci.LCID, "#A2");
93 Assert.AreEqual ("nl-BE", ci.Name, "#A3");
94 Assert.IsFalse (ci.UseUserOverride, "#A4");
96 ci = new CultureInfo (2067, true);
97 Assert.IsFalse (ci.IsReadOnly, "#B1");
98 Assert.AreEqual (2067, ci.LCID, "#B2");
99 Assert.AreEqual ("nl-BE", ci.Name, "#B3");
100 Assert.IsTrue (ci.UseUserOverride, "#B4");
104 public void Constructor2_Identifier_Negative ()
107 new CultureInfo (-1, false);
109 } catch (ArgumentOutOfRangeException ex) {
110 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
111 Assert.IsNull (ex.InnerException, "#3");
112 Assert.IsNotNull (ex.Message, "#4");
113 Assert.IsNotNull (ex.ParamName, "#5");
114 Assert.AreEqual ("culture", ex.ParamName, "#6");
119 public void Constructor3 ()
121 CultureInfo ci = new CultureInfo ("nl-BE", false);
122 Assert.IsFalse (ci.IsReadOnly, "#A1");
123 Assert.AreEqual (2067, ci.LCID, "#A2");
124 Assert.AreEqual ("nl-BE", ci.Name, "#A3");
125 Assert.IsFalse (ci.UseUserOverride, "#A4");
127 ci = new CultureInfo ("nl-BE", true);
128 Assert.IsFalse (ci.IsReadOnly, "#B1");
129 Assert.AreEqual (2067, ci.LCID, "#B2");
130 Assert.AreEqual ("nl-BE", ci.Name, "#B3");
131 Assert.IsTrue (ci.UseUserOverride, "#B4");
135 public void Constructor3_Name_Null ()
138 new CultureInfo ((string) null, false);
140 } catch (ArgumentNullException ex) {
141 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
142 Assert.IsNull (ex.InnerException, "#3");
143 Assert.IsNotNull (ex.Message, "#4");
144 Assert.IsNotNull (ex.ParamName, "#5");
145 Assert.AreEqual ("name", ex.ParamName, "#6");
150 public void DateTimeFormat_Neutral_Culture ()
152 CultureInfo ci = new CultureInfo ("nl");
154 DateTimeFormatInfo dfi = ci.DateTimeFormat;
156 Assert.IsNotNull (dfi, "#1");
158 Assert.Fail ("#1:" + (dfi != null));
160 } catch (NotSupportedException ex) {
161 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
162 Assert.IsNull (ex.InnerException, "#3");
163 Assert.IsNotNull (ex.Message, "#4");
168 public void GetAllCulturesInvariant ()
170 CultureInfo invariant = CultureInfo.InvariantCulture;
171 CultureInfo [] infos = CultureInfo.GetCultures (CultureTypes.AllCultures);
172 foreach (CultureInfo culture in infos) {
173 if (culture.Equals (invariant))
177 Assert.Fail ("InvariantCulture not found in the array from GetCultures()");
182 [ExpectedException (typeof (NotSupportedException))]
184 public void TrySetNeutralCultureNotInvariant ()
186 Thread.CurrentThread.CurrentCulture = new CultureInfo ("ar");
190 [Category ("TargetJvmNotWorking")] //OptionalCalendars not yet supported for TARGET_JVM.
191 // make sure that all CultureInfo holds non-null calendars.
192 public void OptionalCalendars ()
194 foreach (CultureInfo ci in CultureInfo.GetCultures (
195 CultureTypes.AllCultures))
196 Assert.IsNotNull (ci.OptionalCalendars, String.Format ("{0} {1}",
201 public void CloneNeutral ()
203 CultureInfo culture = new CultureInfo ("en");
204 CultureInfo cultureClone = culture.Clone () as CultureInfo;
205 Assert.IsTrue (culture.Equals (cultureClone));
209 public void IsNeutral ()
211 var ci = new CultureInfo (0x6C1A);
212 Assert.IsTrue (ci.IsNeutralCulture, "#1");
213 Assert.AreEqual ("srp", ci.ThreeLetterISOLanguageName, "#2");
215 ci = new CultureInfo ("en-US");
216 Assert.IsFalse (ci.IsNeutralCulture, "#1a");
217 Assert.AreEqual ("eng", ci.ThreeLetterISOLanguageName, "#2a");
221 public void IsReadOnly ()
225 ci = new CultureInfo ("en-US");
226 Assert.IsFalse (ci.IsReadOnly, "#A1");
227 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#A2");
228 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#A3");
229 ci.NumberFormat.NumberGroupSeparator = ",";
230 ci.NumberFormat = new NumberFormatInfo ();
231 ci.DateTimeFormat.DateSeparator = "/";
232 ci.DateTimeFormat = new DateTimeFormatInfo ();
233 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#A4");
234 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#A5");
236 ci = new CultureInfo (CultureInfo.InvariantCulture.LCID);
237 Assert.IsFalse (ci.IsReadOnly, "#B1");
238 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#B2");
239 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#B3");
240 ci.NumberFormat.NumberGroupSeparator = ",";
241 ci.NumberFormat = new NumberFormatInfo ();
242 ci.DateTimeFormat.DateSeparator = "/";
243 ci.DateTimeFormat = new DateTimeFormatInfo ();
244 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#B4");
245 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#B5");
247 ci = CultureInfo.CurrentCulture;
248 Assert.IsTrue (ci.IsReadOnly, "#C1:" + ci.DisplayName);
249 Assert.IsTrue (ci.NumberFormat.IsReadOnly, "#C2");
250 Assert.IsTrue (ci.DateTimeFormat.IsReadOnly, "#C3");
252 ci.NumberFormat.NumberGroupSeparator = ",";
254 } catch (InvalidOperationException ex) {
255 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C5");
256 Assert.IsNull (ex.InnerException, "#C6");
257 Assert.IsNotNull (ex.Message, "#C7");
260 ci = CultureInfo.CurrentUICulture;
261 Assert.IsTrue (ci.IsReadOnly, "#D1");
262 Assert.IsTrue (ci.NumberFormat.IsReadOnly, "#D2");
263 Assert.IsTrue (ci.DateTimeFormat.IsReadOnly, "#D3");
265 ci.NumberFormat.NumberGroupSeparator = ",";
267 } catch (InvalidOperationException ex) {
268 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D5");
269 Assert.IsNull (ex.InnerException, "#D6");
270 Assert.IsNotNull (ex.Message, "#D7");
273 ci = CultureInfo.InvariantCulture;
274 Assert.IsTrue (ci.IsReadOnly, "#F1");
275 Assert.IsTrue (ci.NumberFormat.IsReadOnly, "#F2");
276 Assert.IsTrue (ci.DateTimeFormat.IsReadOnly, "#F3");
278 ci.NumberFormat.NumberGroupSeparator = ",";
280 } catch (InvalidOperationException ex) {
281 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F5");
282 Assert.IsNull (ex.InnerException, "#F6");
283 Assert.IsNotNull (ex.Message, "#F7");
286 ci = new CultureInfo (string.Empty);
287 Assert.IsFalse (ci.IsReadOnly, "#G1");
288 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#G2");
289 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#G3");
290 ci.NumberFormat.NumberGroupSeparator = ",";
291 ci.NumberFormat = new NumberFormatInfo ();
292 ci.DateTimeFormat.DateSeparator = "/";
293 ci.DateTimeFormat = new DateTimeFormatInfo ();
294 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#G4");
295 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#G5");
299 public void IsReadOnly_GetCultures ()
301 foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
302 string cultureMsg = String.Format ("{0} {1}", ci.LCID, ci.Name);
303 Assert.IsFalse (ci.IsReadOnly, "#1:" + cultureMsg);
304 if (ci.IsNeutralCulture)
306 Assert.IsFalse (ci.NumberFormat.IsReadOnly, "#2:" + cultureMsg);
307 Assert.IsFalse (ci.DateTimeFormat.IsReadOnly, "#3:" + cultureMsg);
312 [Category ("NotWorking")]
313 public void IsReadOnly_InstalledUICulture ()
315 CultureInfo ci = CultureInfo.InstalledUICulture;
316 Assert.IsTrue (ci.IsReadOnly, "#1");
317 Assert.IsTrue (ci.NumberFormat.IsReadOnly, "#2");
318 Assert.IsTrue (ci.DateTimeFormat.IsReadOnly, "#3");
320 ci.NumberFormat.NumberGroupSeparator = ",";
322 } catch (InvalidOperationException ex) {
323 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#5");
324 Assert.IsNull (ex.InnerException, "#6");
325 Assert.IsNotNull (ex.Message, "#7");
330 public void Norwegian ()
332 new CultureInfo ("no");
333 new CultureInfo ("nb-NO");
334 new CultureInfo ("nn-NO");
338 public void NumberFormat_Neutral_Culture ()
340 CultureInfo ci = new CultureInfo ("nl");
342 NumberFormatInfo nfi = ci.NumberFormat;
344 Assert.IsNotNull (nfi, "#1");
346 Assert.Fail ("#1:" + (nfi != null));
348 } catch (NotSupportedException ex) {
349 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
350 Assert.IsNull (ex.InnerException, "#3");
351 Assert.IsNotNull (ex.Message, "#4");
356 [Category ("NotDotNet")] // On MS, the NumberFormatInfo of the CultureInfo matching the current locale is not read-only
357 public void GetCultureInfo_Identifier ()
359 foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
360 string cultureMsg = String.Format ("{0} {1}", ci.LCID, ci.Name);
361 CultureInfo culture = CultureInfo.GetCultureInfo (ci.LCID);
362 Assert.IsTrue (culture.IsReadOnly, "#1:" + cultureMsg);
363 if (culture.IsNeutralCulture)
365 Assert.IsTrue (culture.NumberFormat.IsReadOnly, "#2:" + cultureMsg);
366 Assert.IsTrue (culture.DateTimeFormat.IsReadOnly, "#3:" + cultureMsg);
371 public void GetCultureInfo_Identifier_Negative ()
374 CultureInfo.GetCultureInfo (-1);
376 } catch (ArgumentOutOfRangeException ex) {
377 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
378 Assert.IsNull (ex.InnerException, "#3");
379 Assert.IsNotNull (ex.Message, "#4");
380 Assert.IsNotNull (ex.ParamName, "#5");
381 Assert.AreEqual ("culture", ex.ParamName, "#6");
386 public void GetCultureInfo_Identifier_NotSupported ()
389 CultureInfo.GetCultureInfo (666);
391 } catch (ArgumentException ex) {
393 Assert.AreEqual (typeof (CultureNotFoundException), ex.GetType (), "#2");
395 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
397 Assert.IsNull (ex.InnerException, "#3");
398 Assert.IsNotNull (ex.Message, "#4");
399 Assert.IsNotNull (ex.ParamName, "#5");
400 Assert.AreEqual ("culture", ex.ParamName, "#6");
405 [Category ("NotDotNet")] // On MS, the NumberFormatInfo of the CultureInfo matching the current locale is not read-only
406 public void GetCultureInfo_Name ()
408 foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
409 string cultureMsg = String.Format ("{0} {1}", ci.LCID, ci.Name);
410 CultureInfo culture = CultureInfo.GetCultureInfo (ci.Name);
411 Assert.IsTrue (culture.IsReadOnly, "#1:" + cultureMsg);
412 if (culture.IsNeutralCulture)
414 Assert.IsTrue (culture.NumberFormat.IsReadOnly, "#2:" + cultureMsg);
415 Assert.IsTrue (culture.DateTimeFormat.IsReadOnly, "#3:" + cultureMsg);
420 public void GetCultureInfo_Name_NotSupported ()
423 CultureInfo.GetCultureInfo ("666");
425 } catch (ArgumentException ex) {
427 Assert.AreEqual (typeof (CultureNotFoundException), ex.GetType (), "#2");
429 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
431 Assert.IsNull (ex.InnerException, "#3");
432 Assert.IsNotNull (ex.Message, "#4");
433 Assert.IsNotNull (ex.ParamName, "#5");
434 Assert.AreEqual ("name", ex.ParamName, "#6");
439 public void GetCultureInfo_Name_Null ()
442 CultureInfo.GetCultureInfo ((string) null);
444 } catch (ArgumentNullException ex) {
445 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
446 Assert.IsNull (ex.InnerException, "#3");
447 Assert.IsNotNull (ex.Message, "#4");
448 Assert.IsNotNull (ex.ParamName, "#5");
449 Assert.AreEqual ("name", ex.ParamName, "#6");
454 public void UseUserOverride_CurrentCulture ()
456 CultureInfo ci = CultureInfo.CurrentCulture;
457 bool expected = (ci.LCID != CultureInfo.InvariantCulture.LCID);
458 Assert.AreEqual (expected, ci.UseUserOverride, "#1");
460 ci = (CultureInfo) ci.Clone ();
461 Assert.AreEqual (expected, ci.UseUserOverride, "#2");
465 public void UseUserOverride_CurrentUICulture ()
467 CultureInfo ci = CultureInfo.CurrentCulture;
468 bool expected = (ci.LCID != CultureInfo.InvariantCulture.LCID);
469 Assert.AreEqual (expected, ci.UseUserOverride, "#1");
471 ci = (CultureInfo) ci.Clone ();
472 Assert.AreEqual (expected, ci.UseUserOverride, "#2");
476 public void UseUserOverride_GetCultureInfo ()
480 foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
481 string cultureMsg = String.Format ("{0} {1}", ci.LCID, ci.Name);
482 culture = CultureInfo.GetCultureInfo (ci.Name);
483 Assert.IsFalse (culture.UseUserOverride, "#1: " + cultureMsg);
484 culture = CultureInfo.GetCultureInfo (ci.LCID);
485 Assert.IsFalse (culture.UseUserOverride, "#2: " + cultureMsg);
490 public void UseUserOverride_GetCultures ()
492 foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
493 string cultureMsg = String.Format ("{0} {1}", ci.LCID, ci.Name);
494 if (ci.LCID == CultureInfo.InvariantCulture.LCID)
495 Assert.IsFalse (ci.UseUserOverride, cultureMsg);
497 Assert.IsTrue (ci.UseUserOverride, cultureMsg);
502 public void UseUserOverride_InvariantCulture ()
504 CultureInfo ci = CultureInfo.InvariantCulture;
505 Assert.IsFalse (ci.UseUserOverride, "#21");
507 ci = (CultureInfo) ci.Clone ();
508 Assert.IsFalse (ci.UseUserOverride, "#2");
512 public void Bug402128 ()
514 var culture = new CultureInfo ("en-US");
515 var ms = new MemoryStream ();
516 var formatter = new BinaryFormatter ();
517 formatter.Serialize (ms, culture);
518 ms.Seek (0, SeekOrigin.Begin);
519 var deserializedCulture = (CultureInfo) formatter.Deserialize (ms);
523 public void ZhHant ()
525 Assert.AreEqual (31748, new CultureInfo ("zh-Hant").LCID);
526 Assert.AreEqual (31748, CultureInfo.GetCultureInfo ("zh-Hant").LCID);