}
}
+ [Test]
+ public void CreateSpecificCulture ()
+ {
+ var ci = CultureInfo.CreateSpecificCulture ("en");
+ Assert.AreEqual ("en-US", ci.Name, "#1");
+
+ ci = CultureInfo.CreateSpecificCulture ("en-GB");
+ Assert.AreEqual ("en-GB", ci.Name, "#2");
+
+ ci = CultureInfo.CreateSpecificCulture ("en-----");
+ Assert.AreEqual ("en-US", ci.Name, "#3");
+
+ ci = CultureInfo.CreateSpecificCulture ("en-GB-");
+ Assert.AreEqual ("en-US", ci.Name, "#4");
+
+ ci = CultureInfo.CreateSpecificCulture ("");
+ Assert.AreEqual (CultureInfo.InvariantCulture, ci, "#5");
+ }
+
+ [Test]
+ public void CreateSpecificCulture_Invalid ()
+ {
+ try {
+ CultureInfo.CreateSpecificCulture ("uy32");
+ Assert.Fail ("#1");
+#if NET_4_0
+ } catch (CultureNotFoundException) {
+#else
+ } catch (ArgumentException) {
+#endif
+ }
+
+ try {
+ CultureInfo.CreateSpecificCulture (null);
+ Assert.Fail ("#2");
+ } catch (ArgumentNullException) {
+ // .NET throws NRE which is lame
+ }
+ }
+
[Test]
public void DateTimeFormat_Neutral_Culture ()
{
CultureInfo ci = new CultureInfo ("nl");
try {
DateTimeFormatInfo dfi = ci.DateTimeFormat;
+#if NET_4_0
+ Assert.IsNotNull (dfi, "#1");
+#else
Assert.Fail ("#1:" + (dfi != null));
+#endif
} catch (NotSupportedException ex) {
Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
}
[Test]
+#if !NET_4_0
[ExpectedException (typeof (NotSupportedException))]
+#endif
public void TrySetNeutralCultureNotInvariant ()
{
Thread.CurrentThread.CurrentCulture = new CultureInfo ("ar");
// make sure that all CultureInfo holds non-null calendars.
public void OptionalCalendars ()
{
+#if MOBILE
+ // ensure the linker does not remove them so we can test them
+ Assert.IsNotNull (typeof (UmAlQuraCalendar), "UmAlQuraCalendar");
+#endif
foreach (CultureInfo ci in CultureInfo.GetCultures (
CultureTypes.AllCultures))
Assert.IsNotNull (ci.OptionalCalendars, String.Format ("{0} {1}",
Assert.IsTrue (culture.Equals (cultureClone));
}
+ [Test]
+ public void IsNeutral ()
+ {
+ var ci = new CultureInfo (0x6C1A);
+ Assert.IsTrue (ci.IsNeutralCulture, "#1");
+ Assert.AreEqual ("srp", ci.ThreeLetterISOLanguageName, "#2");
+
+ ci = new CultureInfo ("en-US");
+ Assert.IsFalse (ci.IsNeutralCulture, "#1a");
+ Assert.AreEqual ("eng", ci.ThreeLetterISOLanguageName, "#2a");
+ }
+
[Test] // bug #81930
public void IsReadOnly ()
{
CultureInfo ci = new CultureInfo ("nl");
try {
NumberFormatInfo nfi = ci.NumberFormat;
+#if NET_4_0
+ Assert.IsNotNull (nfi, "#1");
+#else
Assert.Fail ("#1:" + (nfi != null));
+#endif
} catch (NotSupportedException ex) {
Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
}
}
-#if NET_2_0
[Test]
[Category ("NotDotNet")] // On MS, the NumberFormatInfo of the CultureInfo matching the current locale is not read-only
public void GetCultureInfo_Identifier ()
CultureInfo.GetCultureInfo (666);
Assert.Fail ("#1");
} catch (ArgumentException ex) {
+#if NET_4_0
+ Assert.AreEqual (typeof (CultureNotFoundException), ex.GetType (), "#2");
+#else
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
+#endif
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
CultureInfo.GetCultureInfo ("666");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
+#if NET_4_0
+ Assert.AreEqual (typeof (CultureNotFoundException), ex.GetType (), "#2");
+#else
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
+#endif
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("name", ex.ParamName, "#6");
}
}
-#endif
[Test]
public void UseUserOverride_CurrentCulture ()
Assert.AreEqual (expected, ci.UseUserOverride, "#2");
}
-#if NET_2_0
[Test]
public void UseUserOverride_GetCultureInfo ()
{
Assert.IsFalse (culture.UseUserOverride, "#2: " + cultureMsg);
}
}
-#endif
[Test]
public void UseUserOverride_GetCultures ()
{
foreach (CultureInfo ci in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
string cultureMsg = String.Format ("{0} {1}", ci.LCID, ci.Name);
-#if NET_2_0
if (ci.LCID == CultureInfo.InvariantCulture.LCID)
Assert.IsFalse (ci.UseUserOverride, cultureMsg);
else
Assert.IsTrue (ci.UseUserOverride, cultureMsg);
-#else
- Assert.IsTrue (ci.UseUserOverride, cultureMsg);
-#endif
}
}
public void ZhHant ()
{
Assert.AreEqual (31748, new CultureInfo ("zh-Hant").LCID);
-#if NET_2_0
Assert.AreEqual (31748, CultureInfo.GetCultureInfo ("zh-Hant").LCID);
+ Assert.AreEqual (31748, new CultureInfo ("zh-CHT").LCID);
+ Assert.AreEqual (31748, new CultureInfo ("zh-CHT").Parent.LCID);
+ }
+
+ [Test]
+ [SetCulture ("zh-TW")]
+ public void ParentOfZh ()
+ {
+ Assert.AreEqual (31748, CultureInfo.CurrentCulture.Parent.LCID);
+ Assert.AreEqual (31748, CultureInfo.CurrentCulture.Parent.Parent.LCID);
+ }
+
+ [Test]
+ public void CurrentCulture ()
+ {
+ Assert.IsNotNull (CultureInfo.CurrentCulture, "CurrentCulture");
+ }
+
+ [Test]
+#if NET_4_0
+ [ExpectedException (typeof (CultureNotFoundException))]
+#else
+ [ExpectedException (typeof (ArgumentException))]
#endif
+ public void CultureNotFound ()
+ {
+ // that's how the 'locale' gets defined for a device with an English UI
+ // and it's international settings set for Hong Kong
+ // https://bugzilla.xamarin.com/show_bug.cgi?id=3471
+ new CultureInfo ("en-HK");
+ }
+
+#if NET_4_5
+ CountdownEvent barrier = new CountdownEvent (3);
+ AutoResetEvent[] evt = new AutoResetEvent [] { new AutoResetEvent (false), new AutoResetEvent (false), new AutoResetEvent (false)};
+
+ CultureInfo[] initial_culture = new CultureInfo[3];
+ CultureInfo[] changed_culture = new CultureInfo[3];
+ CultureInfo[] changed_culture2 = new CultureInfo[3];
+ CultureInfo alternative_culture = new CultureInfo("pt-BR");
+
+ void StepAllPhases (int index)
+ {
+ initial_culture [index] = CultureInfo.CurrentCulture;
+ /*Phase 1 - we witness the original value */
+ barrier.Signal ();
+
+ /*Phase 2 - main thread changes culture */
+ evt [index].WaitOne ();
+
+ /*Phase 3 - we witness the new value */
+ changed_culture [index] = CultureInfo.CurrentCulture;
+ barrier.Signal ();
+
+ /* Phase 4 - main thread changes culture back */
+ evt [index].WaitOne ();
+
+ /*Phase 5 - we witness the new value */
+ changed_culture2 [index] = CultureInfo.CurrentCulture;
+ barrier.Signal ();
+ }
+
+ void ThreadWithoutChange () {
+ StepAllPhases (0);
+ }
+
+ void ThreadWithChange () {
+ Thread.CurrentThread.CurrentCulture = alternative_culture;
+ StepAllPhases (1);
}
+
+ void ThreadPoolWithoutChange () {
+ StepAllPhases (2);
+ }
+
+ [Test]
+ public void DefaultThreadCurrentCulture () {
+ var orig_culture = CultureInfo.CurrentCulture;
+ var new_culture = new CultureInfo("fr-FR");
+
+ // The test doesn't work if the current culture is already set
+ if (orig_culture != CultureInfo.InvariantCulture)
+ return;
+
+ /* Phase 0 - warm up */
+ new Thread (ThreadWithoutChange).Start ();
+ new Thread (ThreadWithChange).Start ();
+ Action x = ThreadPoolWithoutChange;
+ x.BeginInvoke (null, null);
+
+ /* Phase 1 - let everyone witness initial values */
+ initial_culture [0] = CultureInfo.CurrentCulture;
+ barrier.Wait ();
+ barrier.Reset ();
+
+ /* Phase 2 - change the default culture*/
+ CultureInfo.DefaultThreadCurrentCulture = new_culture;
+ evt [0].Set ();
+ evt [1].Set ();
+ evt [2].Set ();
+ /* Phase 3 - let everyone witness the new value */
+ changed_culture [0] = CultureInfo.CurrentCulture;
+ barrier.Wait ();
+ barrier.Reset ();
+
+ /* Phase 4 - revert the default culture back to null */
+ CultureInfo.DefaultThreadCurrentCulture = null;
+ evt [0].Set ();
+ evt [1].Set ();
+ evt [2].Set ();
+
+ /* Phase 5 - let everyone witness the new value */
+ changed_culture2 [0] = CultureInfo.CurrentCulture;
+ barrier.Wait ();
+ barrier.Reset ();
+
+ CultureInfo.DefaultThreadCurrentCulture = null;
+
+ Assert.AreEqual (orig_culture, initial_culture [0], "#2");
+ Assert.AreEqual (alternative_culture, initial_culture [1], "#3");
+ Assert.AreEqual (orig_culture, initial_culture [2], "#4");
+
+ Assert.AreEqual (new_culture, changed_culture [0], "#6");
+ Assert.AreEqual (alternative_culture, changed_culture [1], "#7");
+ Assert.AreEqual (new_culture, changed_culture [2], "#8");
+
+ Assert.AreEqual (orig_culture, changed_culture2 [0], "#10");
+ Assert.AreEqual (alternative_culture, changed_culture2 [1], "#11");
+ Assert.AreEqual (orig_culture, changed_culture2 [2], "#12");
+ }
+
+ [Test]
+ public void DefaultThreadCurrentCultureAndNumberFormaters () {
+ string us_str = null;
+ string br_str = null;
+ var thread = new Thread (() => {
+ CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
+ us_str = 100000.ToString ("C");
+ CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-BR");
+ br_str = 100000.ToString ("C");
+ });
+ thread.Start ();
+ thread.Join ();
+ CultureInfo.DefaultThreadCurrentCulture = null;
+ Assert.AreEqual ("$100,000.00", us_str, "#1");
+ Assert.AreEqual ("R$ 100.000,00", br_str, "#2");
+ }
+#endif
}
}