New locale test

Mehmet YASAR myasar at free.fr
Thu May 23 11:22:33 CDT 2002


Hi,

Here are some functions to test locale support in Wine through functions
like GetLocaleInfoA/GetTimeFormatA/CompareStringA ...
They are very basic tests since it's the first time I use them.

Nevertheless, I've found few "bugs" or differences, some are the same as
GetLocaleInfoA so I'm going to send a patch for them.

Mehmet



-------------- next part --------------
/*
 * Copyright (c) 2002 YASAR Mehmet
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Very basic unit test for locale functions
 * Test runned on win2K (French)
 */

#include "wine/test.h"
#include "winbase.h"
#include "winerror.h"
#include "winnls.h"


#define eq(received, expected, label, type) \
        ok((received) == (expected), "%s: got " type " instead of " type, (label),(received),(expected))



#define BUFFER_SIZE		50
// Buffer used by callback function
char GlobalBuffer[BUFFER_SIZE];

// TODO :
// Unicode versions 
// EnumTimeFormatsA
// EnumDateFormatsA
// LCMapStringA
// GetUserDefaultLangID
// ...



void TestGetLocaleInfoA()
{
int ret, size, cmp;
LCID lcid;
char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE];

	strcpy(Expected, "Monday");
	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
	ok (lcid == 0x409, "wrong LCID calculated");

	strcpy(Expected, "xxxxx");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetLocaleInfoA(lcid, LOCALE_SDAYNAME1, buffer, 0);
	cmp = strncmp (buffer, Expected, strlen(Expected));
	ok (cmp == 0, "GetLocaleInfoA got %s instead of %s", buffer, Expected);
	eq (ret, strlen("Monday") + 1, "GetLocaleInfoA with len=0", "%d");	

	strcpy(Expected, "Monxx");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetLocaleInfoA(lcid, LOCALE_SDAYNAME1, buffer, 3);
	cmp = strncmp (buffer, Expected, strlen(Expected));
	ok (cmp == 0, "GetLocaleInfoA got %s instead of %s", buffer, Expected);
	eq (ret, 0, "GetLocaleInfoA with len = 3", "%d");
			
	strcpy(Expected, "Monday");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetLocaleInfoA(lcid, LOCALE_SDAYNAME1, buffer, 10);
	/* Check also presence of '\0' */
	cmp = strncmp (buffer, Expected, strlen(Expected) + 1);
	ok (cmp == 0, "GetLocaleInfoA got %s instead of %s", buffer, Expected);
	eq (ret, strlen(Expected)+1, "GetLocaleInfoA with len = 10", "%d" );
}


void TestGetTimeFormatA()
{
int ret, error, cmp;
SYSTEMTIME  curtime;
char buffer[BUFFER_SIZE], format[BUFFER_SIZE], Expected[BUFFER_SIZE];
LCID lcid;

	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
	strcpy(format, "tt HH':'mm'@'ss");

	/* fill curtime with dummy data */
	memset(&curtime, 2, sizeof(SYSTEMTIME));
	ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, format, buffer, sizeof(buffer));
	error = GetLastError ();
	ok (ret == 0, "GetTimeFormat should fail on dummy data");
	eq (error, ERROR_INVALID_PARAMETER, "GetTimeFormat GetLastError()", "%d");

	strcpy(Expected, "AM 08:56 at 13");
	curtime.wHour = 8;  curtime.wMinute = 56; 
	curtime.wSecond = 13; curtime.wMilliseconds = 22;
	ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, format, buffer, sizeof(buffer));
	cmp = strncmp (Expected, buffer, strlen(Expected)+1);
	ok (cmp == 0, "GetTimeFormat got %s instead of %s", buffer, Expected);
	eq (ret, strlen(Expected)+1, "GetTimeFormat", "%d");

	/* test with too small buffers */
	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	strcpy(Expected, "xxxx");
	ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, format, buffer, 0);
	cmp = strncmp (Expected, buffer, 4);
	ok (cmp == 0, "GetTimeFormat with len=0 got %s instead of %s", buffer, Expected);
	eq (ret, 12, "GetTimeFormat with len=0", "%d");

	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	strcpy(Expected, "AMxx");
	ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, format, buffer, 2);
	cmp = strncmp (Expected, buffer, 4);
	ok (cmp == 0, "GetTimeFormat with len=2 got %s instead of %s", buffer, Expected);
	eq (ret, 0, "GetTimeFormat with len=0", "%d");

}

void TestGetDateFormatA()
{
int ret, error, cmp;
SYSTEMTIME  curtime;
char buffer[BUFFER_SIZE], format[BUFFER_SIZE], Expected[BUFFER_SIZE];
LCID lcid;

	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
	strcpy(format, "ddd',' MMM dd yy");

	/* fill curtime with dummy data */
	memset(&curtime, 2, sizeof(SYSTEMTIME));
	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetDateFormatA(lcid, 0, &curtime, format, buffer, sizeof(buffer));
	error = GetLastError ();
	ok (ret== 0, "GetDateFormat should fail on dummy data");
	eq (error, ERROR_INVALID_PARAMETER, "GetDateFormat", "%d");

	strcpy(Expected, "Sat, May 04 02");
	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	curtime.wYear = 2002; curtime.wMonth = 5; 
	curtime.wDay = 4;	curtime.wDayOfWeek = "3";
	ret = GetDateFormatA(lcid, 0, &curtime, format, buffer, sizeof(buffer));
	cmp = strncmp (Expected, buffer, strlen(Expected)+1);
	ok (cmp == 0, "GetDateFormat got %s instead of %s", buffer, Expected);
	eq (ret, strlen(Expected)+1, "GetDateFormat", "%d");

	/* test format with "'" */
	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	strcpy(format, "ddd',' MMM dd ''''yy");
	strcpy(Expected, "Sat, May 04 '02");
	ret = GetDateFormatA(lcid, 0, &curtime, format, buffer, sizeof(buffer));
	cmp = strncmp (Expected, buffer, strlen(Expected)+1);
	ok (cmp == 0, "GetDateFormat got %s instead of %s", buffer, Expected);
	eq (ret, (strlen(Expected)+1), "GetDateFormat", "%d");

	/* test with too small buffers */
	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	strcpy(Expected, "xxxx");
	ret = GetDateFormatA(lcid, 0, &curtime, format, buffer, 0);
	cmp = strncmp (Expected, buffer, 4);
	ok (cmp == 0, "GetDateFormat got %s instead of %s", buffer, Expected);
	eq (ret, 16, "GetDateFormat with len=0", "%d");

	memset(buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	strcpy(Expected, "Saxx");
	ret = GetDateFormatA(lcid, 0, &curtime, format, buffer, 2);
	cmp = strncmp (Expected, buffer, 4);
	ok (cmp == 0, "GetDateFormat got %s instead of %s", buffer, Expected);
	eq (ret, 0, "GetDateFormat with len=2", "%d");

}


void TestGetCurrencyFormat()
{
int ret, error, cmp;
char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], format[BUFFER_SIZE];
LCID lcid;

	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
//	lcid = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT );

	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetCurrencyFormatA(lcid, 0, "23,65", NULL, buffer, sizeof(buffer));
	error = GetLastError ();
	cmp = strncmp ("xxxx", buffer, 4);

	ok (cmp == 0, "GetCurrencyFormat should fail with ','");
	eq (ret, 0, "GetCurrencyFormat with ','", "%d");
	eq (error, ERROR_INVALID_PARAMETER, "GetCurrencyFormat", "%d");

	strcpy (Expected, "$23.53");
	strcpy (format, "23.53");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetCurrencyFormatA(lcid, 0, format, NULL, buffer, 0);
	cmp = strncmp ("xxx", buffer, 3);
	ok (cmp == 0, "GetCurrencyFormat with 0 buffer size");
	eq (ret, strlen(Expected)+1, "GetCurrencyFormat with len=0", "%d");

	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetCurrencyFormatA(lcid, 0, format, NULL, buffer, 2);
	cmp = strncmp ("$2xx", buffer, 4);
	ok (cmp == 0, "GetCurrencyFormat got %s instead of %s", buffer, Expected);
	eq (ret, 0, "GetCurrencyFormat with len=2", "%d");

	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetCurrencyFormatA(lcid, 0, format, NULL, buffer, sizeof(buffer));
	cmp = strncmp (Expected, buffer, 6);
	ok (cmp == 0, "GetCurrencyFormat got %s instead of %s", buffer, Expected);
	eq (ret, strlen(Expected)+1, "GetCurrencyFormat","%d");

}


void TestGetNumberFormat()
{
int ret, error, cmp;
char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE];
LCID lcid;

	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );

	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetNumberFormatA(lcid, 0, "23,65", NULL, buffer, sizeof(buffer));
	error = GetLastError ();
	cmp = strncmp ("xxx", buffer, 3);
	ok (cmp == 0, "GetCurrencyFormat");
	ok (ret == 0, "GetNumberFormat should return 0");
	eq (error, ERROR_INVALID_PARAMETER, "GetNumberFormat", "%d");

	strcpy(input, "2353");
	strcpy(Expected, "2,353.00");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, 0);
	cmp = strncmp ("xxx", buffer, 3);
	ok (cmp == 0, "GetNumberFormat with len=0 got %s instead of %s", buffer, "xxx");
	eq (ret, strlen(Expected)+1, "GetNumberFormat", "%d");

	strcpy(Expected, "2,xx");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, 2);
	cmp = strncmp (Expected, buffer, 4);
	ok (cmp == 0, "GetNumberFormat with len=2 got %s instead of %s", buffer, Expected);
	eq (ret, 0, "GetNumberFormat", "%d");

	strcpy(Expected, "2,353.00");
	memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
	ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, sizeof(buffer));
	cmp = strncmp (Expected, buffer, 9);
	ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected);
	eq (ret, strlen(Expected)+1, "GetNumberFormat", "%d");
}


/* Callback function used by TestEnumTimeFormats */
BOOL CALLBACK EnumTimeFormatsProc(char * lpTimeFormatString)
{
	printf("%s\n", lpTimeFormatString);
	strcpy(GlobalBuffer, lpTimeFormatString);
//	return TRUE;
	return FALSE;
}

void TestEnumTimeFormats()
{
int ret;
LCID lcid;
char Expected[BUFFER_SIZE];

	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
	memset( GlobalBuffer, 'x', sizeof (GlobalBuffer)/sizeof(GlobalBuffer[0]) );
	strcpy(Expected, "h:mm:ss tt");
	ret = EnumTimeFormatsA(EnumTimeFormatsProc, lcid, 0);

	eq (ret, 1, "EnumTimeFormats should return 1", "one");
	ok (strncmp (GlobalBuffer, Expected, strlen(Expected)) == 0, 
				"EnumTimeFormats failed");
	ok (ret == 1, "EnumTimeFormats should return 1");
}


void TestCompareStringA()
{
int ret;
LCID lcid;
char buffer1[BUFFER_SIZE], buffer2[BUFFER_SIZE];

	lcid = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT );

	strcpy(buffer1, "Salut"); strcpy(buffer2, "Salute");
	ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, BUFFER_SIZE, buffer2, BUFFER_SIZE);
	ok (ret== 1, "CompareStringA (st1=%s str2=%s) expected result=1", buffer1, buffer2);

	strcpy(buffer1, "Salut"); strcpy(buffer2, "saLuT");
	ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, BUFFER_SIZE, buffer2, BUFFER_SIZE);
	ok (ret== 2, "CompareStringA (st1=%s str2=%s) expected result=2", buffer1, buffer2);

	strcpy(buffer1, "Salut"); strcpy(buffer2, "hola");
	ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, BUFFER_SIZE, buffer2, BUFFER_SIZE);
	ok (ret== 3, "CompareStringA (st1=%s str2=%s) expected result=3", buffer1, buffer2);

	strcpy(buffer1, "héhé"); strcpy(buffer2, "hèhè");
	ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, BUFFER_SIZE, buffer2, BUFFER_SIZE);
	ok (ret== 1, "CompareStringA (st1=%s str2=%s) expected result=1", buffer1, buffer2);

	lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
	
	strcpy(buffer1, "héhé"); strcpy(buffer2, "hèhè");
	ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, BUFFER_SIZE, buffer2, BUFFER_SIZE);
	ok (ret== 1, "CompareStringA (st1=%s str2=%s) expected result=1", buffer1, buffer2);

	ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, BUFFER_SIZE, buffer2, 0);
	ok (ret== 3, "CompareStringA (st1=%s str2=%s) expected result=3", buffer1, buffer2, );
}


START_TEST(locale)
{
//	TestEnumTimeFormats();
	TestGetLocaleInfoA();
	TestGetTimeFormatA();
	TestGetDateFormatA();
	TestGetNumberFormat();
	TestGetCurrencyFormat();
	TestCompareStringA();
}



-------------- next part --------------
--- /home/mehmet/CVS/wine/ole/Makefile.in	Thu May 16 11:00:25 2002
+++ Makefile.in	Thu May 23 17:48:00 2002
@@ -3,12 +3,16 @@
 TOPOBJDIR = ..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
-MODULE    = none
+MODULE    = locale
 
 C_SRCS = \
 	uuid.c
 
 all: libwine_uuid.a
+
+CTESTS = \
+	 tests/locale.c
+		 
 
 @MAKE_RULES@
 





More information about the wine-patches mailing list