164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// Copyright (C) 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 48de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * COPYRIGHT: 58de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * Copyright (c) 2008-2016, International Business Machines Corporation and 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 158de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "dtptngts.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/calendar.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtptngen.h" 218de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "cmemory.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "loctest.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test. It doesn't test very many cases, and doesn't 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality. It just calls each function in the class and 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level. 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite DateTimePatternGeneratorAPI"); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(0, testAPI); 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(1, testOptions); 3559d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE(2, testAllFieldPatterns); 368de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert TESTCASE(3, testStaticGetSkeleton); 378de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert TESTCASE(4, testC); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 428de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#define MAX_LOCALE 11 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test various generic API methods of DateTimePatternGenerator for API coverage. 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/) 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternData[] = { 5027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yM"), // 00 5127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yMMM"), // 01 5227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yMd"), // 02 5327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yMMMd"), // 03 5427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Md"), // 04 5527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("MMMd"), // 05 56103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMMd"), // 06 57103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("yQQQ"), // 07 58103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("hhmm"), // 08 59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("HHmm"), // 09 60103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("jjmm"), // 10 61103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("mmss"), // 11 62103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("yyyyMMMM"), // 12 63103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMEd"), // 13 64103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Ed"), // 14 65103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("jmmssSSS"), // 15 6659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("JJmm"), // 16 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(), 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 698de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 70b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* testLocale[MAX_LOCALE][4] = { 7127f654740f2a26ad62a5c155af9199af9e69b889claireho {"en", "US", "", ""}, // 0 7227f654740f2a26ad62a5c155af9199af9e69b889claireho {"en", "US", "", "calendar=japanese"}, // 1 7327f654740f2a26ad62a5c155af9199af9e69b889claireho {"de", "DE", "", ""}, // 2 7427f654740f2a26ad62a5c155af9199af9e69b889claireho {"fi", "", "", ""}, // 3 75103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"es", "", "", ""}, // 4 76103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ja", "", "", ""}, // 5 77103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ja", "", "", "calendar=japanese"}, // 6 78103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"zh", "Hans", "CN", ""}, // 7 79103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"zh", "TW", "", "calendar=roc"}, // 8 80103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ru", "", "", ""}, // 9 81103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"zh", "", "", "calendar=chinese"}, // 10 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 838de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 8427f654740f2a26ad62a5c155af9199af9e69b889claireho // For Weds, Jan 13, 1999, 23:58:59 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternResults[] = { 8627f654740f2a26ad62a5c155af9199af9e69b889claireho // en_US // 0 en_US 8727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/1999"), // 00: yM 8827f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 1999"), // 01: yMMM 8927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13/1999"), // 02: yMd 9027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 13, 1999"), // 03: yMMMd 9127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md 9227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 13"), // 05: MMMd 93103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 13"), // 06: MMMMd 94103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Q1 1999"), // 07: yQQQ 95103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 08: hhmm 96103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 97103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 10: jjmm 98103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 99103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 1999"), // 12: yyyyMMMM 100103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Wed, Jan 13"), // 13: MMMEd -> EEE, MMM d 101103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13 Wed"), // 14: Ed -> d EEE 102103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58:59.123 PM"), // 15: jmmssSSS -> "h:mm:ss.SSS a" 10359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 10427f654740f2a26ad62a5c155af9199af9e69b889claireho 10527f654740f2a26ad62a5c155af9199af9e69b889claireho // en_US@calendar=japanese // 1 en_US@calendar=japanese 106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("1/11 H"), // 0: yM 10727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 11 Heisei"), // 1: yMMM 108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("1/13/11 H"), // 2: yMd 109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("Jan 13, 11 Heisei"), // 3: yMMMd 11027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 4: Md 11127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 13"), // 5: MMMd 112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 13"), // 6: MMMMd 113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Q1 11 Heisei"), // 7: yQQQ 114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 8: hhmm 115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 9: HHmm 116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 10: jjmm 117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 11 Heisei"), // 12: yyyyMMMM 119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Wed, Jan 13"), // 13: MMMEd -> EEE, MMM d" 120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13 Wed"), // 14: Ed -> d EEE 121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58:59.123 PM"), // 15: jmmssSSS -> "h:mm:ss.SSS a" 12259d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 12427f654740f2a26ad62a5c155af9199af9e69b889claireho // de_DE // 2 de_DE 12527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1.1999"), // 00: yM 12654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Jan. 1999"), // 01: yMMM 12727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1.1999"), // 02: yMd 12854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("13. Jan. 1999"), // 03: yMMMd 12927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1."), // 04: Md 13054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("13. Jan."), // 05: MMMd 131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13. Januar"), // 06: MMMMd 132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Q1 1999"), // 07: yQQQ 133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 nachm."), // 08: hhmm 134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm 136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Januar 1999"), // 12: yyyyMMMM 13854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Mi., 13. Jan."), // 13: MMMEd -> EEE, d. MMM 139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Mi., 13."), // 14: Ed -> EEE d. 140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "HH:mm:ss,SSS" 14159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 14327f654740f2a26ad62a5c155af9199af9e69b889claireho // fi // 3 fi 14427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1.1999"), // 00: yM (fixed expected result per ticket:6626:) 14527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("tammi 1999"), // 01: yMMM 14627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1.1999"), // 02: yMd 14764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("13. tammik. 1999"), // 03: yMMMd 14827f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1."), // 04: Md 14964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("13. tammik."), // 05: MMMd 150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13. tammikuuta"), // 06: MMMMd 151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("1. nelj. 1999"), // 07: yQQQ 152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11.58 ip."), // 08: hhmm 153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23.58"), // 09: HHmm 154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23.58"), // 10: jjmm 155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58.59"), // 11: mmss 156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("tammikuu 1999"), // 12: yyyyMMMM 15764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("ke 13. tammik."), // 13: MMMEd -> EEE d. MMM 158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("ke 13."), // 14: Ed -> ccc d. 159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23.58.59,123"), // 15: jmmssSSS -> "H.mm.ss,SSS" 16059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23.58"), // 16: JJmm 161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // es // 4 es 163103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("1/1999"), // 00: yM -> "M/y" 1641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString("ene. 1999"), // 01: yMMM -> "MMM y" 165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13/1/1999"), // 02: yMd -> "d/M/y" 1661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString("13 ene. 1999"), // 03: yMMMd -> "d MMM y" 167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13/1"), // 04: Md -> "d/M" 1681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString("13 ene."), // 05: MMMd -> "d 'de' MMM" 169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13 de enero"), // 06: MMMMd -> "d 'de' MMMM" 170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("T1 1999"), // 07: yQQQ -> "QQQ y" 17159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58 p. m."), // 08: hhmm -> "hh:mm a" 172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> "HH:mm" 173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm -> "HH:mm" 174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> "mm:ss" 175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("enero de 1999"), // 12: yyyyMMMM -> "MMMM 'de' yyyy" 1761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert CharsToUnicodeString("mi\\u00E9., 13 ene."), // 13: MMMEd -> "E, d MMM" 17759d709d503bab6e2b61931737e662dd293b40578ccornelius CharsToUnicodeString("mi\\u00E9. 13"), // 14: Ed -> "EEE d" 178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "H:mm:ss,SSS" 17959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // ja // 5 ja 18227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1999/1"), // 00: yM -> y/M 18327f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u6708"), // 01: yMMM -> y\u5E74M\u6708 18427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1999/1/13"), // 02: yMd -> y/M/d 18527f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> y\u5E74M\u6708d\u65E5 18627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md -> M/d 18727f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd -> M\u6708d\u65E5 18959d709d503bab6e2b61931737e662dd293b40578ccornelius CharsToUnicodeString("1999/Q1"), // 07: yQQQ -> y/QQQ 190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u5348\\u5F8C11:58"), // 08: hhmm 191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> HH:mm 192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm 193103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> mm:ss 194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1999\\u5E741\\u6708"), // 12: yyyyMMMM -> y\u5E74M\u6708 195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5(\\u6C34)"), // 13: MMMEd -> M\u6708d\u65E5(EEE) 196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5(\\u6C34)"), // 14: Ed -> d\u65E5(EEE) 197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59.123"), // 15: jmmssSSS -> "H:mm:ss.SSS" 19859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 200103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // ja@calendar=japanese // 6 ja@calendar=japanese 20127f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011/1"), // 00: yM -> Gy/m 20227f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708 20327f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011/1/13"), // 02: yMd -> Gy/m/d 20427f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5 20527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md -> M/d 20627f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd -> M\u6708d\u65E5 208f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius CharsToUnicodeString("\\u5E73\\u621011/Q1"), // 07: yQQQ -> Gy/QQQ 209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u5348\\u5F8C11:58"), // 08: hhmm -> 210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> HH:mm (as for ja) 211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm 212103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> mm:ss (as for ja) 213103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 12: yyyyMMMM -> Gyyyy\u5E74M\u6708 214103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5(\\u6C34)"), // 13: MMMEd -> M\u6708d\u65E5(EEE) 215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5(\\u6C34)"), // 14: Ed -> d\u65E5(EEE) 216103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59.123"), // 15: jmmssSSS -> "H:mm:ss.SSS" 21759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 218103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // zh_Hans_CN // 7 zh_Hans_CN 220f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius CharsToUnicodeString("1999\\u5E741\\u6708"), // 00: yM -> y\u5E74M\u6708 22127f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u6708"), // 01: yMMM -> yyyy\u5E74MMM (fixed expected result per ticket:6626:) 22254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("1999/1/13"), // 02: yMd 22327f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> yyyy\u5E74MMMd\u65E5 (fixed expected result per ticket:6626:) 22454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("1/13"), // 04: Md 225103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 (fixed expected result per ticket:6626:) 226103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd -> M\u6708d\u65E5 22754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("1999\\u5E74\\u7B2C1\\u5B63\\u5EA6"), // 07: yQQQ 228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm 229103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 230103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm 231103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 232103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1999\\u5E741\\u6708"), // 12: yyyyMMMM -> yyyy\u5E74MMM 233103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5\\u5468\\u4E09"), // 13: MMMEd -> MMMd\u65E5EEE 234103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE 235103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS" 23659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 237103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2388de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // zh_TW@calendar=roc // 8 zh_TW@calendar=roc 23927f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88/1"), // 00: yM -> Gy/M 24027f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708 24127f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88/1/13"), // 02: yMd -> Gy/M/d 24227f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5 24327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md -> M/d 24427f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd ->M\u6708d\u65E5 245103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd ->M\u6708d\u65E5 2468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u5B63"), // 07: yQQQ -> Gy QQQ 247103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm -> 248103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> 249103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm 250103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> 251103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u6708"), // 12: yyyyMMMM -> Gy\u5E74M\u670 252103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5\\u9031\\u4E09"), // 13: MMMEd -> M\u6708d\u65E5EEE 25364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("13 \\u9031\\u4E09"), // 14: Ed -> d E 254103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS" 25559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 256103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 257103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // ru // 9 ru 258103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("01.1999"), // 00: yM -> MM.y 259c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert CharsToUnicodeString("\\u044F\\u043D\\u0432. 1999 \\u0433."), // 01: yMMM -> LLL y 2608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString("13.01.1999"), // 02: yMd -> dd.MM.y 26154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("13 \\u044F\\u043D\\u0432. 1999 \\u0433."), // 03: yMMMd -> d MMM y 2628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString("13.01"), // 04: Md -> dd.MM 263103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13 \\u044F\\u043D\\u0432."), // 05: MMMd -> d MMM 264103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13 \\u044F\\u043D\\u0432\\u0430\\u0440\\u044F"), // 06: MMMMd -> d MMMM 26554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("1-\\u0439 \\u043A\\u0432. 1999 \\u0433."), // 07: yQQQ -> y QQQ 266c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert CharsToUnicodeString("11:58 \\u041F\\u041F"), // 08: hhmm -> hh:mm a 267103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> HH:mm 268103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm -> HH:mm 269103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> mm:ss 270c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert CharsToUnicodeString("\\u044F\\u043D\\u0432\\u0430\\u0440\\u044C 1999 \\u0433."), // 12: yyyyMMMM -> LLLL y 271c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert CharsToUnicodeString("\\u0441\\u0440, 13 \\u044F\\u043D\\u0432."), // 13: MMMEd -> ccc, d MMM 272c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert CharsToUnicodeString("\\u0441\\u0440, 13"), // 14: Ed -> EEE, d 273103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "H:mm:ss,SSS" 27459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 275103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 276103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // zh@calendar=chinese // 10 zh@calendar=chinese 27764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u5341\\u4E00\\u6708"), // 00: yMMM 27864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u5341\\u4E00\\u6708"), // 01: yMMM 27964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("1998\\u5E74\\u5341\\u4E00\\u670826"), // 02: yMMMd 28064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("1998\\u5E74\\u5341\\u4E00\\u670826"), // 03: yMMMd 28164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("11-26"), // 04: Md 28264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("\\u5341\\u4E00\\u670826\\u65E5"), // 05: MMMd 28364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("\\u5341\\u4E00\\u670826\\u65E5"), // 06: MMMMd 2841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u7b2c\\u56db\\u5B63\\u5EA6"), // 07: yQQQ 28564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm 28664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("23:58"), // 09: HHmm 28764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm 28864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("58:59"), // 11: mmss 28964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u5341\\u4E00\\u6708"), // 12: yyyyMMMM 29064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("\\u5341\\u4E00\\u670826\\u65E5\\u5468\\u4E09"), // 13: MMMEd 29164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("26\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE 29264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSS 29364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert UnicodeString("11:58"), // 16: JJmm 294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(), 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 298c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString patternTests2[] = { 299c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMMdd"), 300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("yyyyqqqq"), 301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("yMMMdd"), 302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EyyyyMMMdd"), 303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMdd"), 304c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMM"), 305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMM"), 306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyMM"), 307c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yMMMMMd"), 308c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EEEEEMMMMMd"), 309c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("MMMd"), 310c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("MMMdhmm"), 311c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EMMMdhmms"), 312c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("MMdhmm"), 313c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EEEEMMMdhmms"), 314c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMMddhhmmss"), 315c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EyyyyMMMddhhmmss"), 316c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("hmm"), 317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("hhmm"), 318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("hhmmVVVV"), 319c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(""), 320c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }; 321c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString patternResults2[] = { 322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Oct 14, 1999"), 323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("4th quarter 1999"), 324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("Oct 14, 1999"), 325c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Thu, Oct 14, 1999"), 326c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("10/14/1999"), 327c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Oct 1999"), 328c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("10/1999"), 329c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("10/99"), 330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("O 14, 1999"), 331c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("T, O 14"), 332c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Oct 14"), 33354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Oct 14, 6:58 AM"), 33454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Thu, Oct 14, 6:58:59 AM"), 33554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("10/14, 6:58 AM"), 33654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Thursday, Oct 14, 6:58:59 AM"), 33754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Oct 14, 1999, 6:58:59 AM"), 33854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Thu, Oct 14, 1999, 6:58:59 AM"), 339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("6:58 AM"), 34050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString("6:58 AM"), 341b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("6:58 AM GMT"), 342c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(""), 343c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }; 3448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // results for getSkeletons() and getPatternForSkeleton() 3468de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert const UnicodeString testSkeletonsResults[] = { 3478de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString("HH:mm"), 3488de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString("MMMMd"), 3498de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString("MMMMMdd"), 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 3518de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 3528de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert const UnicodeString testBaseSkeletonsResults[] = { 3538de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString("Hm"), 3548de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString("MMMMd"), 355103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMMMd"), 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newDecimal(" "); // space 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newAppendItemName("hrs."); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newAppendItemFormat("{1} {0}"); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newDateTimeFormat("{1} {0}"); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString conflictingPattern; 36459d709d503bab6e2b61931737e662dd293b40578ccornelius UDateTimePatternConflict conflictingStatus = UDATPG_NO_CONFLICT; 36559d709d503bab6e2b61931737e662dd293b40578ccornelius (void)conflictingStatus; // Suppress set but not used warning. 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test CreateInstance with default locale 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator createInstance from default locale"); 3698de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *instFromDefaultLocale=DateTimePatternGenerator::createInstance(status); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (default) - exitting"); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete instFromDefaultLocale; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3798de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // ======= Test CreateInstance with given locale 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator createInstance from French locale"); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *instFromLocale=DateTimePatternGenerator::createInstance(Locale::getFrench(), status); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exitting"); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3888de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // ======= Test clone DateTimePatternGenerator 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator::clone()"); 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3918de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString decimalSymbol = instFromLocale->getDecimal(); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newDecimalSymbol = UnicodeString("*"); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSymbol = instFromLocale->getDecimal(); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru instFromLocale->setDecimal(newDecimalSymbol); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *cloneDTPatternGen=instFromLocale->clone(); 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSymbol = cloneDTPatternGen->getDecimal(); 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (decimalSymbol != newDecimalSymbol) { 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: inconsistency is found in cloned object."); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( !(*cloneDTPatternGen == *instFromLocale) ) { 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: inconsistency is found in cloned object."); 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4058de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( *cloneDTPatternGen != *instFromLocale ) { 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: inconsistency is found in cloned object."); 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4098de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete instFromLocale; 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cloneDTPatternGen; 4128de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 4138de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // ======= Test simple use cases 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing simple use cases"); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale deLocale=Locale::getGermany(); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate sampleDate=LocaleTest::date(99, 9, 13, 23, 58, 59); 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *gen = DateTimePatternGenerator::createInstance(deLocale, status); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getGermany()) - exitting"); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString findPattern = gen->getBestPattern(UnicodeString("MMMddHmm"), status); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *format = new SimpleDateFormat(findPattern, deLocale, status); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create SimpleDateFormat (Locale::getGermany())"); 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gen; 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *zone = TimeZone::createTimeZone(UnicodeString("ECT")); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (zone==NULL) { 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create TimeZone ECT"); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gen; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->setTimeZone(*zone); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateReturned, expectedResult; 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 441f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius expectedResult=UnicodeString("14. Okt., 08:58", -1, US_INV); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Simple test in getBestPattern with Locale::getGermany())."); 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // add new pattern 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 4478de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert conflictingStatus = gen->addPattern(UnicodeString("d'. von' MMMM", -1, US_INV), true, conflictingPattern, status); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Could not addPattern - d\'. von\' MMMM"); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testPattern=gen->getBestPattern(UnicodeString("MMMMdd"), status); 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPattern=gen->getBestPattern(UnicodeString("MMMddHmm"), status); 45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho format->applyPattern(gen->getBestPattern(UnicodeString("MMMMdHmm"), status)); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 457f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius expectedResult=UnicodeString("14. von Oktober, 08:58", -1, US_INV); 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 45950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("ERROR: Simple test addPattern failed!: d\'. von\' MMMM Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult); 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 4628de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // get a pattern and modify it 4648de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert format = (SimpleDateFormat *)DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deLocale); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->setTimeZone(*zone); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern = format->toPattern(pattern); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 471f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius expectedResult=CharsToUnicodeString("Donnerstag, 14. Oktober 1999 um 08:58:59 Mitteleurop\\u00E4ische Sommerzeit"); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Simple test uses full date format."); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4768de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 4778de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // modify it to change the zone. 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newPattern = gen->replaceFieldTypes(pattern, UnicodeString("vvvv"), status); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->applyPattern(newPattern); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 482f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius expectedResult=CharsToUnicodeString("Donnerstag, 14. Oktober 1999 um 08:58:59 Mitteleurop\\u00E4ische Zeit"); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Simple test modify the timezone!"); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ")+ dateReturned + UnicodeString(" Expected: ") + expectedResult); 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4878de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setDeciaml(), getDeciaml() 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setDecimal(newDecimal); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDecimal != gen->getDecimal()) { 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setDecimal() and getDecimal()!.\n"); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4938de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setAppenItemName() , getAppendItemName() 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setAppendItemName(UDATPG_HOUR_FIELD, newAppendItemName); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newAppendItemName != gen->getAppendItemName(UDATPG_HOUR_FIELD)) { 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setAppendItemName() and getAppendItemName()!.\n"); 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4998de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setAppenItemFormat() , getAppendItemFormat() 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setAppendItemFormat(UDATPG_HOUR_FIELD, newAppendItemFormat); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newAppendItemFormat != gen->getAppendItemFormat(UDATPG_HOUR_FIELD)) { 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setAppendItemFormat() and getAppendItemFormat()!.\n"); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 5058de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setDateTimeFormat() , getDateTimeFormat() 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setDateTimeFormat(newDateTimeFormat); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDateTimeFormat != gen->getDateTimeFormat()) { 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setDateTimeFormat() and getDateTimeFormat()!.\n"); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 5118de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======== Test getSkeleton and getBaseSkeleton 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern = UnicodeString("dd-MMM"); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedSkeleton = UnicodeString("MMMdd"); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedBaseSkeleton = UnicodeString("MMMd"); 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString retSkeleton = gen->getSkeleton(pattern, status); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedSkeleton ) { 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getSkeleton().\n"); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ") + expectedSkeleton ); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retSkeleton = gen->getBaseSkeleton(pattern, status); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedBaseSkeleton) { 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getBaseSkeleton().\n"); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected:")+ expectedBaseSkeleton); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern = UnicodeString("dd/MMMM/yy"); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedSkeleton = UnicodeString("yyMMMMdd"); 530103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectedBaseSkeleton = UnicodeString("yMMMMd"); 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retSkeleton = gen->getSkeleton(pattern, status); 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedSkeleton ) { 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getSkeleton().\n"); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ") + expectedSkeleton ); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retSkeleton = gen->getBaseSkeleton(pattern, status); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedBaseSkeleton) { 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getBaseSkeleton().\n"); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected:")+ expectedBaseSkeleton); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete zone; 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gen; 5448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Trac# 6104 547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pattern = UnicodeString("YYYYMMM"); 549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString expR = CharsToUnicodeString("1999\\u5E741\\u6708"); // fixed expected result per ticket:6626: 550c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale loc("ja"); 551c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UDate testDate1= LocaleTest::date(99, 0, 13, 23, 58, 59); 552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator"); 555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bPattern = patGen->getBestPattern(pattern, status); 558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString rDate; 559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru SimpleDateFormat sdf(bPattern, loc, status); 560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate.remove(); 561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate = sdf.format(testDate1, rDate); 562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" ja locale with skeleton: YYYYMMM Best Pattern:") + bPattern); 564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" Formatted date:") + rDate); 565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( expR!= rDate ) { 5678de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert errln(UnicodeString("\nERROR: Test Japanese month hack Got: ") + rDate + 568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(" Expected: ") + expR ); 569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5708de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 573c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { // Trac# 6104 574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale loc("zh"); 575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString expR = CharsToUnicodeString("1999\\u5E741\\u6708"); // fixed expected result per ticket:6626: 576c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UDate testDate1= LocaleTest::date(99, 0, 13, 23, 58, 59); 577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 579c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator"); 580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 582c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bPattern = patGen->getBestPattern(pattern, status); 583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString rDate; 584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru SimpleDateFormat sdf(bPattern, loc, status); 585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate.remove(); 586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate = sdf.format(testDate1, rDate); 587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 588c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" zh locale with skeleton: YYYYMMM Best Pattern:") + bPattern); 589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" Formatted date:") + rDate); 590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( expR!= rDate ) { 5918de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert errln(UnicodeString("\nERROR: Test Chinese month hack Got: ") + rDate + 592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(" Expected: ") + expR ); 593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5948de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert delete patGen; 595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Trac# 6172 duplicate time pattern 599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pattern = UnicodeString("hmv"); 601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString expR = UnicodeString("h:mm a v"); // avail formats has hm -> "h:mm a" (fixed expected result per ticket:6626:) 602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale loc("en"); 603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator"); 606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 608c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bPattern = patGen->getBestPattern(pattern, status); 609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" en locale with skeleton: hmv Best Pattern:") + bPattern); 610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( expR!= bPattern ) { 6128de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert errln(UnicodeString("\nERROR: Test EN time format Got: ") + bPattern + 613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(" Expected: ") + expR ); 614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 6158de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 616c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 617c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 6188de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 6198de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test various skeletons. 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator with various skeleton"); 6228de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t localeIndex=0; 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultIndex=0; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString resultDate; 627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UDate testDate= LocaleTest::date(99, 0, 13, 23, 58, 59) + 123.0; 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (localeIndex < MAX_LOCALE ) 6298de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert { 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dataIndex=0; 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString bestPattern; 6328de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc(testLocale[localeIndex][0], testLocale[localeIndex][1], testLocale[localeIndex][2], testLocale[localeIndex][3]); 634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("\n\n Locale: %s_%s_%s@%s", testLocale[localeIndex][0], testLocale[localeIndex][1], testLocale[localeIndex][2], testLocale[localeIndex][3]); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator with locale index:%d . - exitting\n", localeIndex); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (patternData[dataIndex].length() > 0) { 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(patternData[dataIndex]); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bestPattern = patGen->getBestPattern(patternData[dataIndex++], status); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" -> ") + bestPattern); 6448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat sdf(bestPattern, loc, status); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultDate.remove(); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultDate = sdf.format(testDate, resultDate); 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( resultDate != patternResults[resultIndex] ) { 649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("\nERROR: Test various skeletons[") + (dataIndex-1) + UnicodeString("], localeIndex ") + localeIndex + 65027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString(". Got: \"") + resultDate + UnicodeString("\" Expected: \"") + patternResults[resultIndex] + "\"" ); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 6528de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultIndex++; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete patGen; 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localeIndex++; 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 6588de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // ======= More tests ticket#6110 660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln("Testing DateTimePatternGenerator with various skeleton"); 6618de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru localeIndex=0; 664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultIndex=0; 665c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru testDate= LocaleTest::date(99, 9, 13, 23, 58, 59); 6668de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert { 667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t dataIndex=0; 668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bestPattern; 669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln("\n\n Test various skeletons for English locale..."); 670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(Locale::getEnglish(), status); 671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator with locale English . - exitting\n"); 673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru TimeZone *enZone = TimeZone::createTimeZone(UnicodeString("ECT/GMT")); 676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (enZone==NULL) { 677c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create TimeZone ECT"); 678c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 679c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 680c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 6818de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert SimpleDateFormat *enFormat = (SimpleDateFormat *)DateFormat::createDateTimeInstance(DateFormat::kFull, 682c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateFormat::kFull, Locale::getEnglish()); 683c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru enFormat->setTimeZone(*enZone); 684c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru while (patternTests2[dataIndex].length() > 0) { 685c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(patternTests2[dataIndex]); 686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru bestPattern = patGen->getBestPattern(patternTests2[dataIndex], status); 687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" -> ") + bestPattern); 688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru enFormat->applyPattern(bestPattern); 689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultDate.remove(); 690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultDate = enFormat->format(testDate, resultDate); 691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( resultDate != patternResults2[resultIndex] ) { 692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString("\nERROR: Test various skeletons[") + dataIndex 6938de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert + UnicodeString("]. Got: ") + resultDate + UnicodeString(" Expected: ") + 694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru patternResults2[resultIndex] ); 695c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataIndex++; 697c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultIndex++; 698c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 699c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 700c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete enZone; 701c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete enFormat; 702c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7068de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // ======= Test random skeleton 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *randDTGen= DateTimePatternGenerator::createInstance(status); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exitting"); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar newChar; 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<10; ++i) { 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString randomSkeleton; 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = rand() % 20; 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t j=0; j<len; ++j ) { 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((newChar = (UChar)(rand()%0x7f))>=(UChar)0x20) { 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru randomSkeleton += newChar; 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString bestPattern = randDTGen->getBestPattern(randomSkeleton, status); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete randDTGen; 7258de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UnicodeString randomString=Unicode 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test getStaticClassID() 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing getStaticClassID()"); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *test= DateTimePatternGenerator::createInstance(status); 7328de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test->getDynamicClassID() != DateTimePatternGenerator::getStaticClassID()) { 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getDynamicClassID() didn't return the expected value"); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 7378de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ====== Test createEmptyInstance() 7398de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing createEmptyInstance()"); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 7428de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = DateTimePatternGenerator::createEmptyInstance(status); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail to create an empty instance ! - exitting.\n"); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 7498de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 7508de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert conflictingStatus = test->addPattern(UnicodeString("MMMMd"), true, conflictingPattern, status); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPattern=test->getBestPattern(UnicodeString("MMMMdd"), status); 7538de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert conflictingStatus = test->addPattern(UnicodeString("HH:mm"), true, conflictingPattern, status); 754103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius conflictingStatus = test->addPattern(UnicodeString("MMMMMdd"), true, conflictingPattern, status); //duplicate pattern 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration *output=NULL; 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru output = test->getRedundants(status); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult=UnicodeString("MMMMd"); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (output != NULL) { 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru output->reset(status); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString *dupPattern=output->snext(status); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (dupPattern==NULL) || (*dupPattern != expectedResult) ) { 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail in getRedundants !\n"); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 7658de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======== Test getSkeletons and getBaseSkeletons 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* ptrSkeletonEnum = test->getSkeletons(status); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail to get skeletons !\n"); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString returnPattern, *ptrSkeleton; 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptrSkeletonEnum->reset(status); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count=ptrSkeletonEnum->count(status); 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) { 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptrSkeleton = (UnicodeString *)ptrSkeletonEnum->snext(status); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnPattern = test->getPatternForSkeleton(*ptrSkeleton); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( returnPattern != testSkeletonsResults[i] ) { 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: Unexpected result from getSkeletons and getPatternForSkeleton\nGot: ") + returnPattern 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("\nExpected: ") + testSkeletonsResults[i] 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("\n")); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* ptrBaseSkeletonEnum = test->getBaseSkeletons(status); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail to get base skeletons !\n"); 7868de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert } 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ptrBaseSkeletonEnum->count(status); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) { 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptrSkeleton = (UnicodeString *)ptrBaseSkeletonEnum->snext(status); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( *ptrSkeleton != testBaseSkeletonsResults[i] ) { 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getBaseSkeletons() !\n"); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 795c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // ========= DateTimePatternGenerator sample code in Userguide 796c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // set up the generator 797c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale locale = Locale::getFrench(); 798c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 799c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *generator = DateTimePatternGenerator::createInstance( locale, status); 8008de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 801c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // get a pattern for an abbreviated month and day 8028de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert pattern = generator->getBestPattern(UnicodeString("MMMd"), status); 8038de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert SimpleDateFormat formatter(pattern, locale, status); 804c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 805c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru zone = TimeZone::createTimeZone(UnicodeString("GMT")); 806c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatter.setTimeZone(*zone); 807c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // use it to format (or parse) 808c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString formatted; 8098de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert formatted = formatter.format(Calendar::getNow(), formatted, status); 810c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // for French, the result is "13 sept." 811c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatted.remove(); 812c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // cannot use the result from getNow() because the value change evreyday. 813c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru testDate= LocaleTest::date(99, 0, 13, 23, 58, 59); 814c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatted = formatter.format(testDate, formatted, status); 815c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expectedResult=UnicodeString("14 janv."); 816c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( formatted != expectedResult ) { 817c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("ERROR: Userguide sample code result!"); 818c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString(" Got: ")+ formatted + UnicodeString(" Expected: ") + expectedResult); 819c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 820c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 821c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete zone; 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete output; 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ptrSkeletonEnum; 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ptrBaseSkeletonEnum; 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 826c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete generator; 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 83050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Test handling of options 83150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 83250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For reference, as of ICU 4.3.3, 83350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * root/gregorian has 83450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hm{"H:mm"} 83550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hms{"H:mm:ss"} 83650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hm{"h:mm a"} 83750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hms{"h:mm:ss a"} 83850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * en/gregorian has 83950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hm{"H:mm"} 84050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hms{"H:mm:ss"} 84150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hm{"h:mm a"} 84250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * be/gregorian has 84350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * HHmmss{"HH.mm.ss"} 84450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hm{"HH.mm"} 84550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hm{"h.mm a"} 84650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hms{"h.mm.ss a"} 84750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 84850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct DTPtnGenOptionsData { 84950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *locale; 85050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *skel; 85150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *expectedPattern; 85250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDateTimePatternMatchOptions options; 85350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} DTPtnGenOptionsData; 85450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IntlTestDateTimePatternGeneratorAPI::testOptions(/*char *par*/) 85550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 85650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DTPtnGenOptionsData testData[] = { 85750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale skel expectedPattern options 85850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "Hmm", "HH:mm", UDATPG_MATCH_NO_OPTIONS }, 85950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "HHmm", "HH:mm", UDATPG_MATCH_NO_OPTIONS }, 86050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "hhmm", "h:mm a", UDATPG_MATCH_NO_OPTIONS }, 86150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "Hmm", "HH:mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 86250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "HHmm", "HH:mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 86350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "hhmm", "hh:mm a", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 864c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { "da", "Hmm", "HH.mm", UDATPG_MATCH_NO_OPTIONS }, 865c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { "da", "HHmm", "HH.mm", UDATPG_MATCH_NO_OPTIONS }, 866c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { "da", "hhmm", "h.mm a", UDATPG_MATCH_NO_OPTIONS }, 867c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { "da", "Hmm", "H.mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 868c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { "da", "HHmm", "HH.mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 869c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { "da", "hhmm", "hh.mm a", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 87059d709d503bab6e2b61931737e662dd293b40578ccornelius // 871fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", "yyyy", "yyyy", UDATPG_MATCH_NO_OPTIONS }, 872fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", "YYYY", "YYYY", UDATPG_MATCH_NO_OPTIONS }, 873fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", "U", "y", UDATPG_MATCH_NO_OPTIONS }, 874fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=japanese", "yyyy", "y G", UDATPG_MATCH_NO_OPTIONS }, 875fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=japanese", "YYYY", "Y G", UDATPG_MATCH_NO_OPTIONS }, 876fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=japanese", "U", "y G", UDATPG_MATCH_NO_OPTIONS }, 8771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "yyyy", "r(U)", UDATPG_MATCH_NO_OPTIONS }, 8781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "YYYY", "Y(Y)", UDATPG_MATCH_NO_OPTIONS }, // not a good result, want r(Y) or r(U) 8791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "U", "r(U)", UDATPG_MATCH_NO_OPTIONS }, 8801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "Gy", "r(U)", UDATPG_MATCH_NO_OPTIONS }, 8811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "GU", "r(U)", UDATPG_MATCH_NO_OPTIONS }, 8821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "ULLL", "MMM U", UDATPG_MATCH_NO_OPTIONS }, 8831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "yMMM", "MMM r(U)", UDATPG_MATCH_NO_OPTIONS }, 8841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "en@calendar=chinese", "GUMMM", "MMM r(U)", UDATPG_MATCH_NO_OPTIONS }, 8851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "yyyy", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 8861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "YYYY", "YY\\u5E74", UDATPG_MATCH_NO_OPTIONS }, // not a good result, may want r(Y) or r(U) 8871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "U", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 8881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "Gy", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 8891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "GU", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 8901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "ULLL", "U\\u5E74MMM", UDATPG_MATCH_NO_OPTIONS }, 8911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "yMMM", "rU\\u5E74MMM", UDATPG_MATCH_NO_OPTIONS }, 8921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "zh@calendar=chinese", "GUMMM", "rU\\u5E74MMM", UDATPG_MATCH_NO_OPTIONS }, 89350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 8948de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 8958de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int count = UPRV_LENGTHOF(testData); 89650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const DTPtnGenOptionsData * testDataPtr = testData; 8978de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 89850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (; count-- > 0; ++testDataPtr) { 89950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 90050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 90150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale locale(testDataPtr->locale); 90250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString skel(testDataPtr->skel); 903fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString expectedPattern(UnicodeString(testDataPtr->expectedPattern).unescape()); 90450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDateTimePatternMatchOptions options = testDataPtr->options; 90550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 90650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DateTimePatternGenerator * dtpgen = DateTimePatternGenerator::createInstance(locale, status); 90750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 90850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Unable to create DateTimePatternGenerator instance for locale(%s): %s", locale.getName(), u_errorName(status)); 90950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete dtpgen; 91050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 91150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 91250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString pattern = dtpgen->getBestPattern(skel, options, status); 91350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (pattern.compare(expectedPattern) != 0) { 91450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln( UnicodeString("ERROR in getBestPattern, locale ") + UnicodeString(testDataPtr->locale) + 91550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString(", skeleton ") + skel + 91650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((options)?UnicodeString(", options!=0"):UnicodeString(", options==0")) + 91750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString(", expected pattern ") + expectedPattern + 91850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString(", got ") + pattern ); 91950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 92050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete dtpgen; 92150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 92250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 92350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 92459d709d503bab6e2b61931737e662dd293b40578ccornelius/** 92559d709d503bab6e2b61931737e662dd293b40578ccornelius * Test that DTPG can handle all valid pattern character / length combinations 92659d709d503bab6e2b61931737e662dd293b40578ccornelius * 92759d709d503bab6e2b61931737e662dd293b40578ccornelius */ 92859d709d503bab6e2b61931737e662dd293b40578ccornelius#define FIELD_LENGTHS_COUNT 6 92959d709d503bab6e2b61931737e662dd293b40578ccornelius#define FIELD_LENGTH_MAX 8 93059d709d503bab6e2b61931737e662dd293b40578ccornelius#define MUST_INCLUDE_COUNT 5 93159d709d503bab6e2b61931737e662dd293b40578ccornelius 93259d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct AllFieldsTestItem { 93359d709d503bab6e2b61931737e662dd293b40578ccornelius char patternChar; 93459d709d503bab6e2b61931737e662dd293b40578ccornelius int8_t fieldLengths[FIELD_LENGTHS_COUNT+1]; // up to FIELD_LENGTHS_COUNT lengths to try 93559d709d503bab6e2b61931737e662dd293b40578ccornelius // (length <=FIELD_LENGTH_MAX) plus 0 terminator 93659d709d503bab6e2b61931737e662dd293b40578ccornelius char mustIncludeOneOf[MUST_INCLUDE_COUNT+1];// resulting pattern must include at least one of 93759d709d503bab6e2b61931737e662dd293b40578ccornelius // these as a pattern char (0-terminated list) 93859d709d503bab6e2b61931737e662dd293b40578ccornelius} AllFieldsTestItem; 93959d709d503bab6e2b61931737e662dd293b40578ccornelius 94059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid IntlTestDateTimePatternGeneratorAPI::testAllFieldPatterns(/*char *par*/) 94159d709d503bab6e2b61931737e662dd293b40578ccornelius{ 94259d709d503bab6e2b61931737e662dd293b40578ccornelius const char * localeNames[] = { 94359d709d503bab6e2b61931737e662dd293b40578ccornelius "root", 94459d709d503bab6e2b61931737e662dd293b40578ccornelius "root@calendar=japanese", 94559d709d503bab6e2b61931737e662dd293b40578ccornelius "root@calendar=chinese", 94659d709d503bab6e2b61931737e662dd293b40578ccornelius "en", 94759d709d503bab6e2b61931737e662dd293b40578ccornelius "en@calendar=japanese", 94859d709d503bab6e2b61931737e662dd293b40578ccornelius "en@calendar=chinese", 94959d709d503bab6e2b61931737e662dd293b40578ccornelius NULL // terminator 95059d709d503bab6e2b61931737e662dd293b40578ccornelius }; 95159d709d503bab6e2b61931737e662dd293b40578ccornelius AllFieldsTestItem testData[] = { 95259d709d503bab6e2b61931737e662dd293b40578ccornelius //pat fieldLengths generated pattern must 95359d709d503bab6e2b61931737e662dd293b40578ccornelius //chr to test include one of these 95459d709d503bab6e2b61931737e662dd293b40578ccornelius { 'G', {1,2,3,4,5,0}, "G" }, // era 95559d709d503bab6e2b61931737e662dd293b40578ccornelius // year 95659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'y', {1,2,3,4,0}, "yU" }, // year 95759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'Y', {1,2,3,4,0}, "Y" }, // year for week of year 95859d709d503bab6e2b61931737e662dd293b40578ccornelius { 'u', {1,2,3,4,5,0}, "yuU" }, // extended year 95959d709d503bab6e2b61931737e662dd293b40578ccornelius { 'U', {1,2,3,4,5,0}, "yU" }, // cyclic year name 96059d709d503bab6e2b61931737e662dd293b40578ccornelius // quarter 96159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'Q', {1,2,3,4,0}, "Qq" }, // x 96259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'q', {1,2,3,4,0}, "Qq" }, // standalone 96359d709d503bab6e2b61931737e662dd293b40578ccornelius // month 96459d709d503bab6e2b61931737e662dd293b40578ccornelius { 'M', {1,2,3,4,5,0}, "ML" }, // x 96559d709d503bab6e2b61931737e662dd293b40578ccornelius { 'L', {1,2,3,4,5,0}, "ML" }, // standalone 96659d709d503bab6e2b61931737e662dd293b40578ccornelius // week 96759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'w', {1,2,0}, "w" }, // week of year 96859d709d503bab6e2b61931737e662dd293b40578ccornelius { 'W', {1,0}, "W" }, // week of month 96959d709d503bab6e2b61931737e662dd293b40578ccornelius // day 97059d709d503bab6e2b61931737e662dd293b40578ccornelius { 'd', {1,2,0}, "d" }, // day of month 97159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'D', {1,2,3,0}, "D" }, // day of year 97259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'F', {1,0}, "F" }, // day of week in month 97359d709d503bab6e2b61931737e662dd293b40578ccornelius { 'g', {7,0}, "g" }, // modified julian day 97459d709d503bab6e2b61931737e662dd293b40578ccornelius // weekday 97559d709d503bab6e2b61931737e662dd293b40578ccornelius { 'E', {1,2,3,4,5,6}, "Eec" }, // day of week 97659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'e', {1,2,3,4,5,6}, "Eec" }, // local day of week 97759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'c', {1,2,3,4,5,6}, "Eec" }, // standalone local day of week 97859d709d503bab6e2b61931737e662dd293b40578ccornelius // day period 97959d709d503bab6e2b61931737e662dd293b40578ccornelius // { 'a', {1,0}, "a" }, // am or pm // not clear this one is supposed to work (it doesn't) 98059d709d503bab6e2b61931737e662dd293b40578ccornelius // hour 98159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'h', {1,2,0}, "hK" }, // 12 (1-12) 98259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'H', {1,2,0}, "Hk" }, // 24 (0-23) 98359d709d503bab6e2b61931737e662dd293b40578ccornelius { 'K', {1,2,0}, "hK" }, // 12 (0-11) 98459d709d503bab6e2b61931737e662dd293b40578ccornelius { 'k', {1,2,0}, "Hk" }, // 24 (1-24) 98559d709d503bab6e2b61931737e662dd293b40578ccornelius { 'j', {1,2,0}, "hHKk" }, // locale default 98659d709d503bab6e2b61931737e662dd293b40578ccornelius // minute 98759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'm', {1,2,0}, "m" }, // x 98859d709d503bab6e2b61931737e662dd293b40578ccornelius // second & fractions 98959d709d503bab6e2b61931737e662dd293b40578ccornelius { 's', {1,2,0}, "s" }, // x 99059d709d503bab6e2b61931737e662dd293b40578ccornelius { 'S', {1,2,3,4,0}, "S" }, // fractional second 99159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'A', {8,0}, "A" }, // milliseconds in day 99259d709d503bab6e2b61931737e662dd293b40578ccornelius // zone 99359d709d503bab6e2b61931737e662dd293b40578ccornelius { 'z', {1,2,3,4,0}, "z" }, // x 99459d709d503bab6e2b61931737e662dd293b40578ccornelius { 'Z', {1,2,3,4,5,0}, "Z" }, // x 99559d709d503bab6e2b61931737e662dd293b40578ccornelius { 'O', {1,4,0}, "O" }, // x 99659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'v', {1,4,0}, "v" }, // x 99759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'V', {1,2,3,4,0}, "V" }, // x 99859d709d503bab6e2b61931737e662dd293b40578ccornelius { 'X', {1,2,3,4,5,0}, "X" }, // x 99959d709d503bab6e2b61931737e662dd293b40578ccornelius { 'x', {1,2,3,4,5,0}, "x" }, // x 100059d709d503bab6e2b61931737e662dd293b40578ccornelius }; 10018de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 100259d709d503bab6e2b61931737e662dd293b40578ccornelius const char ** localeNamesPtr = localeNames; 100359d709d503bab6e2b61931737e662dd293b40578ccornelius const char * localeName; 100459d709d503bab6e2b61931737e662dd293b40578ccornelius while ( (localeName = *localeNamesPtr++) != NULL) { 100559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 100659d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale = Locale::createFromName(localeName); 100759d709d503bab6e2b61931737e662dd293b40578ccornelius DateTimePatternGenerator * dtpg = DateTimePatternGenerator::createInstance(locale, status); 100859d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 100959d709d503bab6e2b61931737e662dd293b40578ccornelius const AllFieldsTestItem * testDataPtr = testData; 10108de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int itemCount = UPRV_LENGTHOF(testData); 101159d709d503bab6e2b61931737e662dd293b40578ccornelius for (; itemCount-- > 0; ++testDataPtr) { 101259d709d503bab6e2b61931737e662dd293b40578ccornelius char skelBuf[FIELD_LENGTH_MAX]; 101359d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t chrIndx, lenIndx; 101459d709d503bab6e2b61931737e662dd293b40578ccornelius for (chrIndx = 0; chrIndx < FIELD_LENGTH_MAX; chrIndx++) { 101559d709d503bab6e2b61931737e662dd293b40578ccornelius skelBuf[chrIndx] = testDataPtr->patternChar; 101659d709d503bab6e2b61931737e662dd293b40578ccornelius } 101759d709d503bab6e2b61931737e662dd293b40578ccornelius for (lenIndx = 0; lenIndx < FIELD_LENGTHS_COUNT; lenIndx++) { 101859d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t skelLen = testDataPtr->fieldLengths[lenIndx]; 101959d709d503bab6e2b61931737e662dd293b40578ccornelius if (skelLen <= 0) { 102059d709d503bab6e2b61931737e662dd293b40578ccornelius break; 102159d709d503bab6e2b61931737e662dd293b40578ccornelius } 102259d709d503bab6e2b61931737e662dd293b40578ccornelius if (skelLen > FIELD_LENGTH_MAX) { 102359d709d503bab6e2b61931737e662dd293b40578ccornelius continue; 102459d709d503bab6e2b61931737e662dd293b40578ccornelius } 102559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString skeleton(skelBuf, skelLen, US_INV); 102659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString pattern = dtpg->getBestPattern(skeleton, status); 102759d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 102859d709d503bab6e2b61931737e662dd293b40578ccornelius errln("DateTimePatternGenerator getBestPattern for locale %s, skelChar %c skelLength %d fails: %s", 102959d709d503bab6e2b61931737e662dd293b40578ccornelius locale.getName(), testDataPtr->patternChar, skelLen, u_errorName(status)); 103059d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (pattern.length() <= 0) { 103159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("DateTimePatternGenerator getBestPattern for locale %s, skelChar %c skelLength %d produces 0-length pattern", 103259d709d503bab6e2b61931737e662dd293b40578ccornelius locale.getName(), testDataPtr->patternChar, skelLen); 103359d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 103459d709d503bab6e2b61931737e662dd293b40578ccornelius // test that resulting pattern has at least one char in mustIncludeOneOf 103559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString mustIncludeOneOf(testDataPtr->mustIncludeOneOf, -1, US_INV); 103659d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t patIndx, patLen = pattern.length(); 103759d709d503bab6e2b61931737e662dd293b40578ccornelius UBool inQuoted = FALSE; 103859d709d503bab6e2b61931737e662dd293b40578ccornelius for (patIndx = 0; patIndx < patLen; patIndx++) { 103959d709d503bab6e2b61931737e662dd293b40578ccornelius UChar c = pattern.charAt(patIndx); 104059d709d503bab6e2b61931737e662dd293b40578ccornelius if (c == 0x27) { 104159d709d503bab6e2b61931737e662dd293b40578ccornelius inQuoted = !inQuoted; 104259d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (!inQuoted && c <= 0x007A && c >= 0x0041) { 104359d709d503bab6e2b61931737e662dd293b40578ccornelius if (mustIncludeOneOf.indexOf(c) >= 0) { 104459d709d503bab6e2b61931737e662dd293b40578ccornelius break; 104559d709d503bab6e2b61931737e662dd293b40578ccornelius } 104659d709d503bab6e2b61931737e662dd293b40578ccornelius } 104759d709d503bab6e2b61931737e662dd293b40578ccornelius } 104859d709d503bab6e2b61931737e662dd293b40578ccornelius if (patIndx >= patLen) { 104959d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("DateTimePatternGenerator getBestPattern for locale ") + 105059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString(locale.getName(),-1,US_INV) + 105159d709d503bab6e2b61931737e662dd293b40578ccornelius ", skeleton " + skeleton + 105259d709d503bab6e2b61931737e662dd293b40578ccornelius ", produces pattern without required chars: " + pattern); 105359d709d503bab6e2b61931737e662dd293b40578ccornelius } 10548de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 105559d709d503bab6e2b61931737e662dd293b40578ccornelius } 105659d709d503bab6e2b61931737e662dd293b40578ccornelius } 105759d709d503bab6e2b61931737e662dd293b40578ccornelius } 105859d709d503bab6e2b61931737e662dd293b40578ccornelius delete dtpg; 105959d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 106059d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("Create DateTimePatternGenerator instance for locale(%s) fails: %s", 106159d709d503bab6e2b61931737e662dd293b40578ccornelius locale.getName(), u_errorName(status)); 106259d709d503bab6e2b61931737e662dd293b40578ccornelius } 106359d709d503bab6e2b61931737e662dd293b40578ccornelius } 106459d709d503bab6e2b61931737e662dd293b40578ccornelius} 10658de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 10668de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubertvoid IntlTestDateTimePatternGeneratorAPI::testStaticGetSkeleton(/*char *par*/) 10678de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert{ 10688de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // Verify that staticGetSkeleton() doesn't mangle skeletons. (Ticket #11985) 10698de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert static const char* const testData[] = { 10708de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert "jmm", 10718de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert "jjmm", 10728de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert "Jmm", 10738de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert "JJmm" 10748de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert }; 10758de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 10768de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (size_t i = 0; i < UPRV_LENGTHOF(testData); i++) { 10778de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UErrorCode status = U_ZERO_ERROR; 10788de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString skeleton = DateTimePatternGenerator::staticGetSkeleton(testData[i], status); 10798de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert if (!assertSuccess("staticGetSkeleton", status)) { 10808de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert return; 10818de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert } 10828de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert assertEquals("Skeleton", testData[i], skeleton); 10838de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert } 10848de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert} 10858de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 10868de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubertvoid IntlTestDateTimePatternGeneratorAPI::testC() { 10878de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UErrorCode status = U_ZERO_ERROR; 10888de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert const int32_t numLocales = 6; 10898de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 10908de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert const char* tests[numLocales][3] = { 10918de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert {"zh", "Cm", "Bh:mm"}, 10928de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert {"de", "Cm", "HH:mm"}, 10938de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert {"en", "Cm", "h:mm a"}, 10948de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert {"en-BN", "Cm", "h:mm b"}, 10958de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert {"gu-IN", "Cm", "h:mm B"}, 10968de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert {"und-IN", "Cm", "h:mm a"}, 10978de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert }; 10988de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 10998de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t i = 0; i < numLocales; ++i) { 11008de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert DateTimePatternGenerator *gen = DateTimePatternGenerator::createInstance(Locale(tests[i][0]), status); 11018de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString pattern = gen->getBestPattern(tests[i][1], status); 11028de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UnicodeString expectedPattern = tests[i][2]; 11038de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 11048de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert char message[100] = "\0"; 11058de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert strcat(message, tests[i][0]); 11068de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert strcat(message, "/"); 11078de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert strcat(message, tests[i][1]); 11088de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert assertEquals(message, expectedPattern, pattern); 11098de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert delete gen; 11108de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert } 11118de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert} 11128de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1114