+ {"Zambia time", 0, "en_US", UTZFMT_STYLE_GENERIC_LOCATION,
+ UTZFMT_PARSE_OPTION_NONE, "Africa/Lusaka", 11, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"Zambia time", 0, "en_US", UTZFMT_STYLE_ISO_BASIC_LOCAL_FULL,
+ UTZFMT_PARSE_OPTION_ALL_STYLES, "Africa/Lusaka", 11, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"+00:00", 0, "en_US", UTZFMT_STYLE_ISO_EXTENDED_FULL,
+ UTZFMT_PARSE_OPTION_NONE, "Etc/GMT", 6, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"-01:30:45", 0, "en_US", UTZFMT_STYLE_ISO_EXTENDED_FULL,
+ UTZFMT_PARSE_OPTION_NONE, "GMT-01:30:45", 9, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"-7", 0, "en_US", UTZFMT_STYLE_ISO_BASIC_LOCAL_FULL,
+ UTZFMT_PARSE_OPTION_NONE, "GMT-07:00", 2, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"-2222", 0, "en_US", UTZFMT_STYLE_ISO_BASIC_LOCAL_FULL,
+ UTZFMT_PARSE_OPTION_NONE, "GMT-22:22", 5, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"-3333", 0, "en_US", UTZFMT_STYLE_ISO_BASIC_LOCAL_FULL,
+ UTZFMT_PARSE_OPTION_NONE, "GMT-03:33", 4, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"XXX+01:30YYY", 3, "en_US", UTZFMT_STYLE_LOCALIZED_GMT,
+ UTZFMT_PARSE_OPTION_NONE, "GMT+01:30", 9, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"GMT0", 0, "en_US", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, "Etc/GMT", 3, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"EST", 0, "en_US", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, "America/New_York", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"ESTx", 0, "en_US", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, "America/New_York", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"EDTx", 0, "en_US", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, "America/New_York", 3, UTZFMT_TIME_TYPE_DAYLIGHT},
+
+ {"EST", 0, "en_US", UTZFMT_STYLE_SPECIFIC_LONG,
+ UTZFMT_PARSE_OPTION_NONE, NULL, 0, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"EST", 0, "en_US", UTZFMT_STYLE_SPECIFIC_LONG,
+ UTZFMT_PARSE_OPTION_ALL_STYLES, "America/New_York", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"EST", 0, "en_CA", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, "America/Toronto", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"CST", 0, "en_US", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, "America/Chicago", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"CST", 0, "en_GB", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_NONE, NULL, 0, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"CST", 0, "en_GB", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS, "America/Chicago", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"--CST--", 2, "en_GB", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS, "America/Chicago", 5, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"CST", 0, "zh_CN", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS, "Asia/Shanghai", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"AEST", 0, "en_AU", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS, "Australia/Sydney", 4, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"AST", 0, "ar_SA", UTZFMT_STYLE_SPECIFIC_SHORT,
+ UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS, "Asia/Riyadh", 3, UTZFMT_TIME_TYPE_STANDARD},
+
+ {"AQTST", 0, "en", UTZFMT_STYLE_SPECIFIC_LONG,
+ UTZFMT_PARSE_OPTION_NONE, NULL, 0, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"AQTST", 0, "en", UTZFMT_STYLE_SPECIFIC_LONG,
+ UTZFMT_PARSE_OPTION_ALL_STYLES, NULL, 0, UTZFMT_TIME_TYPE_UNKNOWN},
+
+ {"AQTST", 0, "en", UTZFMT_STYLE_SPECIFIC_LONG,
+ UTZFMT_PARSE_OPTION_ALL_STYLES | UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS, "Asia/Aqtobe", 5, UTZFMT_TIME_TYPE_DAYLIGHT},
+
+ {NULL, 0, NULL, UTZFMT_STYLE_GENERIC_LOCATION,
+ UTZFMT_PARSE_OPTION_NONE, NULL, 0, UTZFMT_TIME_TYPE_UNKNOWN}
+ };
+
+ for (int32_t i = 0; DATA[i].text; i++) {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<TimeZoneFormat> tzfmt(TimeZoneFormat::createInstance(Locale(DATA[i].locale), status));
+ if (U_FAILURE(status)) {
+ dataerrln("Fail TimeZoneFormat::createInstance: %s", u_errorName(status));
+ continue;
+ }
+ UTimeZoneFormatTimeType ttype = UTZFMT_TIME_TYPE_UNKNOWN;
+ ParsePosition pos(DATA[i].inPos);
+ TimeZone* tz = tzfmt->parse(DATA[i].style, DATA[i].text, pos, DATA[i].parseOptions, &ttype);
+
+ UnicodeString errMsg;
+ if (tz) {
+ UnicodeString outID;
+ tz->getID(outID);
+ if (outID != UnicodeString(DATA[i].expected)) {
+ errMsg = (UnicodeString)"Time zone ID: " + outID + " - expected: " + DATA[i].expected;
+ } else if (pos.getIndex() != DATA[i].outPos) {
+ errMsg = (UnicodeString)"Parsed pos: " + pos.getIndex() + " - expected: " + DATA[i].outPos;
+ } else if (ttype != DATA[i].timeType) {
+ errMsg = (UnicodeString)"Time type: " + ttype + " - expected: " + DATA[i].timeType;
+ }
+ delete tz;
+ } else {
+ if (DATA[i].expected) {
+ errln((UnicodeString)"Fail: Parse failure - expected: " + DATA[i].expected);
+ }
+ }
+ if (errMsg.length() > 0) {
+ errln((UnicodeString)"Fail: " + errMsg + " [text=" + DATA[i].text + ", pos=" + DATA[i].inPos + ", style=" + DATA[i].style + "]");