[Mono-devel-list] CultureInfo

Lee Mallabone mono-docs at fonicmonkey.net
Tue Apr 15 17:31:49 EDT 2003

Hi all,

A diff is attached, along with a test case.

The patch is still unfinished, but it compiles and I thought it best to
post here in case others have any advice or criticism.

The test case succeeds on the MS runtime but still fails after applying
my patch - there is more work to be done.

However, the patch does implement methods that were TODO before - the
country code and Parent properties.

If I should commit this, let me know. I'll try and keep working on it -
the GetCultures() in particular will require some further changes to

If anyone has any insight on implementing the Calendar and
OptionalCalendars properties in particular, I'd love to hear it -
reading the API docs make the implementation sound non-trivial.



-------------- next part --------------
// CultureInfo.cs - NUnit Test Cases for ensuring culture correctness 
// between the Microsoft runtime and Mono.
// Lee Mallabone <gnome at fonicmonkey.net>

using NUnit.Framework;
using System;
using System.Globalization;

namespace MonoTests.System.Globalization

public class CultureInfoTest {
	// this method is run before each [Test] method is called. You can put
	// variable initialization, etc. here that is common to each test.
	public void GetReady() {}

	// this method is run after each Test* method is called. You can put
	// clean-up code, etc. here.  Whatever needs to be done after each test.
	public void Clean() {}

	/// Checks that the total, specific and neutral number of cultures we are returning is consistent
	/// with Microsoft's 1.0 .NET runtime.
	public void testNumberOfCultures() 
		Assertion.AssertEquals ("Total # of cultures", 202, CultureInfo.GetCultures (CultureTypes.AllCultures).Length);
		Assertion.AssertEquals ("Neutral # of cultures", 68, CultureInfo.GetCultures (CultureTypes.NeutralCultures).Length);
		Assertion.AssertEquals ("Specific # of cultures", 134, CultureInfo.GetCultures (CultureTypes.SpecificCultures).Length);

	// Tests that all cultures are parented as expected
	public void testParentCultures()
		// Neutral cultures should have the InvariantCulture as their parent.
		// This includes the InvariantCulture having InvariantCulture as its parent.
		CultureInfo[] neutralCultures = CultureInfo.GetCultures (CultureTypes.NeutralCultures);
		foreach (CultureInfo info in neutralCultures)
			Assertion.AssertEquals (CultureInfo.InvariantCulture, info.Parent);
		CultureInfo[] specificCultures = CultureInfo.GetCultures (CultureTypes.SpecificCultures);
		foreach (CultureInfo info in specificCultures)
			// Need to do two special cases for chinese cultures.
			switch (info.LCID)
				case 0x0404:
					Assertion.AssertEquals(0x7c04, info.Parent.LCID);
				case 0x0c04:
					Assertion.AssertEquals(0x7c04, info.Parent.LCID);
					Assertion.AssertEquals (info+" Parent", new CultureInfo(info.LCID & 0xff), info.Parent);

	// Ensures that all the cultures with alternative sort orders can
	// be created without exceptions getting thrown.
	public void testAlternateSortOrdersExist()
		Assertion.AssertNotNull(new CultureInfo(0x0000040A)); // es-ES Spanish - Spain International: 0x00000C0A Traditional: 0x0000040A 
		Assertion.AssertNotNull(new CultureInfo(0x00030404)); // zh-TW Chinese - Taiwan Stroke Count: 0x00000404 Bopomofo: 0x00030404 
		Assertion.AssertNotNull(new CultureInfo(0x00020804)); // zh-CN  Chinese - China Pronunciation: 0x00000804 Stroke Count: 0x00020804 
		Assertion.AssertNotNull(new CultureInfo(0x00020c04)); // zh-HK Chinese - Hong Kong SAR Stroke Count: 0x00000c04 Stroke Count: 0x00020c04 
		Assertion.AssertNotNull(new CultureInfo(0x00021004)); // zh-SG Chinese - Singapore Pronunciation: 0x00001004 Stroke Count: 0x00021004 
		Assertion.AssertNotNull(new CultureInfo(0x00021404)); // zh-MO Chinese - Macau SAR Pronunciation: 0x00001404 Stroke Count: 0x00021404 
		Assertion.AssertNotNull(new CultureInfo(0x00010411)); // ja-JP Japanese - Japan Default: 0x00000411 Unicode: 0x00010411 
		Assertion.AssertNotNull(new CultureInfo(0x00010412)); // ko-KR Korean - Korea Default: 0x00000412 Korean Xwansung - Unicode: 0x00010412 
		Assertion.AssertNotNull(new CultureInfo(0x00010407)); // de-DE German - Germany Dictionary: 0x00000407 Phone Book Sort DIN: 0x00010407 
		Assertion.AssertNotNull(new CultureInfo(0x0001040e)); // hu-HU Hungarian - Hungary Default: 0x0000040e Technical Sort: 0x0001040e 
		Assertion.AssertNotNull(new CultureInfo(0x00010437)); // ka-GE Georgian - Georgia Traditional: 0x00000437 Modern Sort: 0x00010437 


	// An nice way to test for exceptions the class under test should 
	// throw is:
// 	[ExpectedException(typeof(ArgumentNullException))]

-------------- next part --------------
A non-text attachment was scrubbed...
Name: CultureInfo.diff
Type: text/x-patch
Size: 41679 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20030415/ded10d38/attachment.bin 

More information about the Mono-devel-list mailing list