add test for strptime() to locale_test

This commit is contained in:
Oliver Tappe
2012-11-05 09:38:21 +01:00
parent 73f7af4d6c
commit 735ef328db
+133 -3
View File
@@ -534,12 +534,12 @@ test_strftime(const char* locale, const strftime_data data[])
setlocale(LC_TIME, locale);
printf("strftime for '%s'\n", locale);
time_t nowSecs = 1279391169; // pure magic
tm* now = localtime(&nowSecs);
time_t testTimeInSecs = 1279391169; // Sat Jul 17 18:26:09 2010 UTC
tm* testTime = localtime(&testTimeInSecs);
int problemCount = 0;
for(int i = 0; data[i].format != NULL; ++i) {
char buf[100];
strftime(buf, 100, data[i].format, now);
strftime(buf, 100, data[i].format, testTime);
if (strcmp(buf, data[i].result) != 0) {
printf("\tPROBLEM: strftime(\"%s\") = \"%s\" (expected \"%s\")\n",
data[i].format, buf, data[i].result);
@@ -644,6 +644,135 @@ test_strftime()
}
// #pragma mark - strftime -----------------------------------------------------
struct strptime_data {
const char* format;
const char* dateString;
};
void
test_strptime(const char* locale, const strptime_data data[])
{
setlocale(LC_TIME, locale);
printf("strptime for '%s'\n", locale);
time_t expectedTimeInSecs = 1279391169; // Sat Jul 17 18:26:09 2010 UTC
int problemCount = 0;
for(int i = 0; data[i].format != NULL; ++i) {
struct tm resultTime;
if (strptime(data[i].dateString, data[i].format, &resultTime) == NULL) {
printf("\tPROBLEM: strptime(\"%s\", \"%s\") failed\n",
data[i].dateString, data[i].format);
problemCount++;
} else {
time_t resultTimeInSecs = mktime(&resultTime);
if (resultTimeInSecs != expectedTimeInSecs) {
printf("\tPROBLEM: strptime(\"%s\", \"%s\") = \"%d\" (expected \"%d\")\n",
data[i].dateString, data[i].format, resultTimeInSecs, expectedTimeInSecs);
problemCount++;
}
}
}
if (problemCount)
printf("\t%d problem(s) found!\n", problemCount);
else
printf("\tall fine\n");
}
void
test_strptime()
{
setenv("TZ", "GMT", 1);
const strptime_data strptime_posix[] = {
{ "%c", "Sat Jul 17 18:26:09 2010" },
{ "%x", "07/17/10" },
{ "%X", "18:26:09" },
{ "%a", "Sat" },
{ "%A", "Saturday" },
{ "%b", "Jul" },
{ "%B", "July" },
{ NULL, NULL }
};
test_strptime("POSIX", strptime_posix);
const strptime_data strptime_de[] = {
{ "%c", "Samstag, 17. Juli 2010 18:26:09 GMT" },
{ "%x", "17.07.2010" },
{ "%X", "18:26:09" },
{ "%a", "Sa." },
{ "%A", "Samstag" },
{ "%b", "Jul" },
{ "%B", "Juli" },
{ NULL, NULL }
};
test_strptime("de_DE.UTF-8", strptime_de);
const strptime_data strptime_hr[] = {
{ "%c", "subota, 17. srpnja 2010. 18:26:09 GMT" },
{ "%x", "17. 07. 2010." },
{ "%X", "18:26:09" },
{ "%a", "sub" },
{ "%A", "subota" },
{ "%b", "srp" },
{ "%B", "srpnja" },
{ NULL, NULL }
};
test_strptime("hr_HR.ISO8859-2", strptime_hr);
const strptime_data strptime_gu[] = {
{ "%c", "શનિવાર, 17 જુલાઈ, 2010 06:26:09 PM GMT" },
{ "%x", "17 જુલાઈ, 2010" },
{ "%X", "06:26:09 PM" },
{ "%a", "શનિ" },
{ "%A", "શનિવાર" },
{ "%b", "જુલાઈ" },
{ "%B", "જુલાઈ" },
{ NULL, NULL }
};
test_strptime("gu_IN", strptime_gu);
const strptime_data strptime_it[] = {
{ "%c", "sabato 17 luglio 2010 18:26:09 GMT" },
{ "%x", "17/lug/2010" },
{ "%X", "18:26:09" },
{ "%a", "sab" },
{ "%A", "sabato" },
{ "%b", "lug" },
{ "%B", "luglio" },
{ NULL, NULL }
};
test_strptime("it_IT", strptime_it);
const strptime_data strptime_nl[] = {
{ "%c", "zaterdag 17 juli 2010 18:26:09 GMT" },
{ "%x", "17 jul. 2010" },
{ "%X", "18:26:09" },
{ "%a", "za" },
{ "%A", "zaterdag" },
{ "%b", "jul." },
{ "%B", "juli" },
{ NULL, NULL }
};
test_strptime("nl_NL", strptime_nl);
const strptime_data strptime_nb[] = {
{ "%c", "kl. 18:26:09 GMT lørdag 17. juli 2010" },
{ "%x", "17. juli 2010" },
{ "%X", "18:26:09" },
{ "%a", "lør." },
{ "%A", "lørdag" },
{ "%b", "juli" },
{ "%B", "juli" },
{ NULL, NULL }
};
test_strptime("nb_NO", strptime_nb);
}
// #pragma mark - ctype --------------------------------------------------------
@@ -2087,6 +2216,7 @@ main(void)
test_setlocale();
test_localeconv();
test_strftime();
test_strptime();
test_ctype();
test_wctype();
test_wctrans();