summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c
diff options
context:
space:
mode:
authorJonathan Kew <jfkthame@googlemail.com>2008-03-04 13:26:36 +0000
committerJonathan Kew <jfkthame@googlemail.com>2008-03-04 13:26:36 +0000
commit53790d2a0c50915d8cec71df3e89cd24d887b2fe (patch)
tree16f6b4df067eb3c2024e0a7735cb7ccea86b3aba /Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c
parentf483a5de9331a257f597282e611ecfb63f5ab118 (diff)
update icu-xetex to 3.8.1-based code from xetex repository
git-svn-id: svn://tug.org/texlive/trunk@6842 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c')
-rw-r--r--Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c350
1 files changed, 350 insertions, 0 deletions
diff --git a/Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c b/Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c
new file mode 100644
index 00000000000..d19b7eedac4
--- /dev/null
+++ b/Build/source/libs/icu-xetex/test/cintltst/cdtdptst.c
@@ -0,0 +1,350 @@
+/********************************************************************
+ * COPYRIGHT:
+ * Copyright (c) 1997-2006, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ ********************************************************************/
+/********************************************************************************
+*
+* File CDTDPTST.C
+*
+* Modification History:
+* Name Description
+* Madhu Katragadda Creation
+*********************************************************************************
+*/
+/* INDEPTH TEST FOR DATE FORMAT */
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "unicode/uloc.h"
+#include "unicode/udat.h"
+#include "unicode/ucal.h"
+#include "unicode/unum.h"
+#include "unicode/ustring.h"
+#include "cintltst.h"
+#include "cdtdptst.h"
+#include "cformtst.h"
+
+#include "cmemory.h"
+
+void addDtFrDepTest(TestNode** root);
+
+void addDtFrDepTest(TestNode** root)
+{
+ addTest(root, &TestTwoDigitYearDSTParse, "tsformat/cdtdptst/TestTwoDigitYearDSTParse");
+ addTest(root, &TestPartialParse994, "tsformat/cdtdptst/TestPartialParse994");
+ addTest(root, &TestRunTogetherPattern985, "tsformat/cdtdptst/TestRunTogetherPattern985");
+ addTest(root, &TestCzechMonths459, "tsformat/cdtdptst/TestCzechMonths459");
+ addTest(root, &TestQuotePattern161, "tsformat/cdtdptst/TestQuotePattern161");
+
+}
+
+/**
+ * Test the parsing of 2-digit years.
+ */
+void TestTwoDigitYearDSTParse()
+{
+ UDateFormat *fullFmt, *fmt;
+ UErrorCode status = U_ZERO_ERROR;
+ UChar *pattern;
+ UDate d;
+ UChar *s;
+ int32_t pos;
+
+ ctest_setTimeZone(NULL, &status);
+
+ pattern=(UChar*)malloc(sizeof(UChar) * (strlen("EEE MMM dd HH:mm:ss.SSS zzz yyyy G")+1 ));
+ u_uastrcpy(pattern, "EEE MMM dd HH:mm:ss.SSS zzz yyyy G");
+ fullFmt= udat_open(UDAT_IGNORE, UDAT_IGNORE,"en_US",NULL,0,pattern, u_strlen(pattern),&status);
+ if(U_FAILURE(status)) {
+ log_err("FAIL: Error in creating a date format using udat_openPattern \n %s\n",
+ myErrorName(status) );
+ }
+ else {log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n");}
+
+ u_uastrcpy(pattern, "dd-MMM-yy h:mm:ss 'o''clock' a z");
+ fmt= udat_open(UDAT_IGNORE,UDAT_IGNORE,"en_US", NULL, 0,pattern, u_strlen(pattern), &status);
+
+
+ s=(UChar*)malloc(sizeof(UChar) * (strlen("03-Apr-04 2:20:47 o'clock AM PST")+1) );
+ u_uastrcpy(s, "03-Apr-04 2:20:47 o'clock AM PST");
+ pos=0;
+ d = udat_parse(fmt, s, u_strlen(s), &pos, &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL: Could not parse \"%s\"\n", austrdup(s));
+ } else {
+ UCalendar *cal = ucal_open(NULL, 0, uloc_getDefault(), UCAL_TRADITIONAL, &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL: Could not open calendar");
+ } else {
+ int32_t h;
+ ucal_setMillis(cal, d, &status);
+ h = ucal_get(cal, UCAL_HOUR_OF_DAY, &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL: Some calendar operations failed");
+ } else if (h != 2) {
+ log_err("FAIL: Parse of \"%s\" returned HOUR_OF_DAY %d\n",
+ austrdup(s), h);
+ }
+ ucal_close(cal);
+ }
+ }
+
+ udat_close(fullFmt);
+ udat_close(fmt);
+ free(pattern);
+ free(s);
+
+ ctest_resetTimeZone();
+}
+
+
+/**
+ * Verify that strings which contain incomplete specifications are parsed
+ * correctly. In some instances, this means not being parsed at all, and
+ * returning an appropriate error.
+ */
+void TestPartialParse994()
+{
+ int32_t pos;
+ UDateFormat *f;
+ UErrorCode status = U_ZERO_ERROR;
+ UChar *s;
+ UChar *fmtChars;
+ UDate d, null;
+ null=0;
+
+ /* this is supposed to open default date format, but later on it treats it like it is "en_US"
+ - very bad if you try to run the tests on machine where default locale is NOT "en_US" */
+ /* f = udat_open(UDAT_DEFAULT, UDAT_SHORT, NULL, NULL, 0, &status); */
+ f = udat_open(UDAT_DEFAULT, UDAT_SHORT, "en_US", NULL, 0, NULL, 0,&status);
+ if(U_FAILURE(status)){
+ log_err("FAIL: ErrorCode received during test: %s\n", myErrorName(status));
+ return;
+ }
+ s=(UChar*)malloc(sizeof(UChar) * (strlen("01/01/1997 10:11:42 AM")+1) );
+ u_uastrcpy(s, "01/01/1997 10:11:42 AM");
+ pos=0;
+ d = udat_parse(f, s, u_strlen(s), &pos, &status);
+ if(U_FAILURE(status)) {
+ log_data_err("FAIL: could not parse - exitting");
+ return;
+ }
+ fmtChars = myDateFormat(f, d);
+ if(fmtChars) {
+ log_verbose("%s\n", fmtChars);
+ } else {
+ log_data_err("FAIL: could not format \n");
+ return;
+ }
+ tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 10:11:42", d);
+ tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 10:", null);
+ tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 10", null);
+ tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 ", null);
+ tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01", null);
+ udat_close(f);
+ free(s);
+}
+
+
+
+void tryPat994(UDateFormat* format, const char* pattern, const char* s, UDate expected)
+{
+ UChar *f;
+ UChar *str, *pat;
+ UDate date;
+ UDate null=0;
+ int32_t pos;
+ UErrorCode status = U_ZERO_ERROR;
+ str=(UChar*)malloc(sizeof(UChar) * (strlen(s) + 1) );
+ u_uastrcpy(str, s);
+ pat=(UChar*)malloc(sizeof(UChar) * (strlen(pattern) + 1) );
+ u_uastrcpy(pat, pattern);
+ log_verbose("Pattern : %s ; String : %s\n", austrdup(pat), austrdup(str));
+ udat_applyPattern(format, FALSE, pat, u_strlen(pat));
+ pos=0;
+ date = udat_parse(format, str, u_strlen(str), &pos, &status);
+ if(U_FAILURE(status) || date == null) {
+ log_verbose("ParseException: : %s\n", myErrorName(status) );
+ if (expected != null)
+ log_err("FAIL: Expected: %s\n", austrdup(myDateFormat(format, expected)) );
+ }
+ else {
+ f=myDateFormat(format, date);
+ log_verbose(" parse( %s ) -> %s\n", austrdup(str), austrdup(f));
+ if (expected == null || date != expected)
+ log_err("FAIL: Expected null for \"%s\"\n", s);
+ if (u_strcmp(f, str) !=0)
+ log_err("FAIL: Expected : %s\n", austrdup(str) );
+ }
+
+ free(str);
+ free(pat);
+}
+
+
+/**
+ * Verify the behavior of patterns in which digits for different fields run together
+ * without intervening separators.
+ */
+void TestRunTogetherPattern985()
+{
+ int32_t pos;
+ UChar *pattern=NULL, *now=NULL, *then=NULL;
+ UDateFormat *format;
+ UDate date1, date2;
+ UErrorCode status = U_ZERO_ERROR;
+ pattern=(UChar*)malloc(sizeof(UChar) * (strlen("yyyyMMddHHmmssSSS")+1) );
+ u_uastrcpy(pattern, "yyyyMMddHHmmssSSS");
+ format = udat_open(UDAT_IGNORE, UDAT_IGNORE, NULL, NULL, 0,pattern, u_strlen(pattern), &status);
+ if(U_FAILURE(status)){
+ log_err("FAIL: Error in date format construction with pattern: %s\n", myErrorName(status));
+ return;
+ }
+ date1 = ucal_getNow();
+ now=myDateFormat(format, date1);
+ log_verbose("%s\n", austrdup(now) );
+ pos = 0;
+ date2 = udat_parse(format, now, u_strlen(now), &pos, &status);
+ if (date2 == 0) log_verbose("Parse stopped at : %d\n", pos);
+ else then=myDateFormat(format, date2);
+ log_verbose("%s\n", austrdup(then) );
+ if (!(date2 == date1)) log_err("FAIL\n");
+
+ udat_close(format);
+ free(pattern);
+
+}
+
+/**
+ * Verify the handling of Czech June and July, which have the unique attribute that
+ * one is a proper prefix substring of the other.
+ */
+void TestCzechMonths459()
+{
+ int32_t lneed, pos;
+ UChar *pattern=NULL, *tzID=NULL;
+ UChar *juneStr, *julyStr;
+ UDateFormat *fmt;
+ UCalendar *cal;
+ UDate june, july, d;
+ UErrorCode status = U_ZERO_ERROR;
+ UChar *date;
+
+ ctest_setTimeZone(NULL, &status);
+ fmt = udat_open(UDAT_FULL, UDAT_FULL, "cs", NULL, 0, NULL, 0, &status);
+ if(U_FAILURE(status)){
+ log_err("Error in constructing the date format\n");
+ ctest_resetTimeZone();
+ return;
+ }
+ lneed=0;
+ lneed=udat_toPattern(fmt, TRUE, NULL, lneed, &status);
+ if(status==U_BUFFER_OVERFLOW_ERROR){
+ status=U_ZERO_ERROR;
+ pattern=(UChar*)malloc(sizeof(UChar) * (lneed+1) );
+ udat_toPattern(fmt, TRUE, pattern, lneed+1, &status);
+ }
+ if(U_FAILURE(status)){ log_err("Error in extracting the pattern\n"); }
+ tzID=(UChar*)malloc(sizeof(UChar) * 4);
+ u_uastrcpy(tzID, "GMT");
+ cal=ucal_open(tzID, u_strlen(tzID), "cs", UCAL_GREGORIAN, &status);
+ if(U_FAILURE(status)){ log_err("error in ucal_open caldef : %s\n", myErrorName(status)); }
+
+ ucal_setDate(cal, 1997, UCAL_JUNE, 15, &status);
+ june=ucal_getMillis(cal, &status);
+ ucal_setDate(cal, 1997, UCAL_JULY, 15, &status);
+ july=ucal_getMillis(cal, &status);
+
+ juneStr = myDateFormat(fmt, june);
+ julyStr = myDateFormat(fmt, july);
+ pos=0;
+ if(juneStr == NULL) {
+ log_data_err("Can't load juneStr. Quitting.\n");
+ return;
+ }
+ d = udat_parse(fmt, juneStr, u_strlen(juneStr), &pos, &status);
+ date = myDateFormat(fmt, d);
+
+ if(U_SUCCESS(status)){
+ UChar* out1 = myDateFormat(fmt, june);
+ UChar* out2 = myDateFormat(fmt, d);
+ if(u_strcmp(out1, out2) !=0)
+ log_err("Error in handling the czech month june\n");
+ else
+ log_verbose("Pass: Date = %s (czech month June)\n", aescstrdup(date, -1));
+ }else{
+ log_err("udat_parse failed. Error. %s\n",u_errorName(status));
+ }
+ pos=0;
+ d = udat_parse(fmt, julyStr, u_strlen(julyStr), &pos, &status);
+ date = myDateFormat(fmt, d);
+ if(u_strcmp(myDateFormat(fmt, july), myDateFormat(fmt, d) ) !=0)
+ log_err("Error in handling the czech month july\n");
+ else
+ log_verbose("Pass: Date = %s (czech month July)\n", aescstrdup(date, -1));
+
+ ctest_resetTimeZone();
+ udat_close(fmt);
+ ucal_close(cal);
+ free(pattern);
+ free(tzID);
+}
+
+/**
+ * Test the handling of single quotes in patterns.
+ */
+void TestQuotePattern161()
+{
+ UDateFormat *format;
+ UCalendar *cal;
+ UDate currentTime_1;
+ UChar *pattern, *tzID, *exp;
+ UChar *dateString;
+ UErrorCode status = U_ZERO_ERROR;
+ const char* expStr = "04/13/1999 at 10:42:28 AM ";
+
+ ctest_setTimeZone(NULL, &status);
+
+ pattern=(UChar*)malloc(sizeof(UChar) * (strlen("MM/dd/yyyy 'at' hh:mm:ss a zzz")+1) );
+ u_uastrcpy(pattern, "MM/dd/yyyy 'at' hh:mm:ss a zzz");
+
+ /* this is supposed to open default date format, but later on it treats it like it is "en_US"
+ - very bad if you try to run the tests on machine where default locale is NOT "en_US" */
+ /* format= udat_openPattern(pattern, u_strlen(pattern), NULL, &status); */
+ format= udat_open(UDAT_IGNORE, UDAT_IGNORE,"en_US", NULL, 0,pattern, u_strlen(pattern), &status);
+ if(U_FAILURE(status)){
+ log_err("error in udat_open: %s\n", myErrorName(status));
+ return;
+ }
+ tzID=(UChar*)malloc(sizeof(UChar) * 4);
+ u_uastrcpy(tzID, "PST");
+ /* this is supposed to open default date format, but later on it treats it like it is "en_US"
+ - very bad if you try to run the tests on machine where default locale is NOT "en_US" */
+ /* cal=ucal_open(tzID, u_strlen(tzID), NULL, UCAL_TRADITIONAL, &status); */
+ cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
+ if(U_FAILURE(status)){ log_err("error in ucal_open cal : %s\n", myErrorName(status)); }
+
+ ucal_setDateTime(cal, 1999, UCAL_APRIL, 13, 10, 42, 28, &status);
+ currentTime_1 = ucal_getMillis(cal, &status);
+
+ dateString = myDateFormat(format, currentTime_1);
+ exp=(UChar*)malloc(sizeof(UChar) * (strlen(expStr) + 1) );
+ u_uastrcpy(exp, expStr);
+
+ log_verbose("%s\n", austrdup(dateString) );
+ if(u_strncmp(dateString, exp, (int32_t)strlen(expStr)) !=0)
+ log_err("Error in formatting a pattern with single quotes\n");
+
+ udat_close(format);
+ ucal_close(cal);
+ free(exp);
+ free(tzID);
+ free(pattern);
+
+ ctest_resetTimeZone();
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */