1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 2008-2014, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dtptngts.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/calendar.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtptngen.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "loctest.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test. It doesn't test very many cases, and doesn't 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality. It just calls each function in the class and 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level. 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite DateTimePatternGeneratorAPI"); 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(0, testAPI); 3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(1, testOptions); 3259d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE(2, testAllFieldPatterns); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define MAX_LOCALE 11 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test various generic API methods of DateTimePatternGenerator for API coverage. 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/) 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternData[] = { 4527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yM"), // 00 4627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yMMM"), // 01 4727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yMd"), // 02 4827f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("yMMMd"), // 03 4927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Md"), // 04 5027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("MMMd"), // 05 51103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMMd"), // 06 52103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("yQQQ"), // 07 53103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("hhmm"), // 08 54103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("HHmm"), // 09 55103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("jjmm"), // 10 56103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("mmss"), // 11 57103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("yyyyMMMM"), // 12 58103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMEd"), // 13 59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Ed"), // 14 60103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("jmmssSSS"), // 15 6159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("JJmm"), // 16 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(), 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* testLocale[MAX_LOCALE][4] = { 6627f654740f2a26ad62a5c155af9199af9e69b889claireho {"en", "US", "", ""}, // 0 6727f654740f2a26ad62a5c155af9199af9e69b889claireho {"en", "US", "", "calendar=japanese"}, // 1 6827f654740f2a26ad62a5c155af9199af9e69b889claireho {"de", "DE", "", ""}, // 2 6927f654740f2a26ad62a5c155af9199af9e69b889claireho {"fi", "", "", ""}, // 3 70103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"es", "", "", ""}, // 4 71103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ja", "", "", ""}, // 5 72103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ja", "", "", "calendar=japanese"}, // 6 73103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"zh", "Hans", "CN", ""}, // 7 74103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"zh", "TW", "", "calendar=roc"}, // 8 75103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ru", "", "", ""}, // 9 76103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"zh", "", "", "calendar=chinese"}, // 10 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 7827f654740f2a26ad62a5c155af9199af9e69b889claireho 7927f654740f2a26ad62a5c155af9199af9e69b889claireho // For Weds, Jan 13, 1999, 23:58:59 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternResults[] = { 8127f654740f2a26ad62a5c155af9199af9e69b889claireho // en_US // 0 en_US 8227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/1999"), // 00: yM 8327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 1999"), // 01: yMMM 8427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13/1999"), // 02: yMd 8527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 13, 1999"), // 03: yMMMd 8627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md 8727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 13"), // 05: MMMd 88103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 13"), // 06: MMMMd 89103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Q1 1999"), // 07: yQQQ 90103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 08: hhmm 91103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 92103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 10: jjmm 93103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 94103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 1999"), // 12: yyyyMMMM 95103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Wed, Jan 13"), // 13: MMMEd -> EEE, MMM d 96103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13 Wed"), // 14: Ed -> d EEE 97103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58:59.123 PM"), // 15: jmmssSSS -> "h:mm:ss.SSS a" 9859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 9927f654740f2a26ad62a5c155af9199af9e69b889claireho 10027f654740f2a26ad62a5c155af9199af9e69b889claireho // en_US@calendar=japanese // 1 en_US@calendar=japanese 101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("1/11 H"), // 0: yM 10227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 11 Heisei"), // 1: yMMM 103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("1/13/11 H"), // 2: yMd 104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("Jan 13, 11 Heisei"), // 3: yMMMd 10527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 4: Md 10627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("Jan 13"), // 5: MMMd 107103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 13"), // 6: MMMMd 108103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Q1 11 Heisei"), // 7: yQQQ 109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 8: hhmm 110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 9: HHmm 111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 PM"), // 10: jjmm 112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("January 11 Heisei"), // 12: yyyyMMMM 114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Wed, Jan 13"), // 13: MMMEd -> EEE, MMM d" 115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13 Wed"), // 14: Ed -> d EEE 116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58:59.123 PM"), // 15: jmmssSSS -> "h:mm:ss.SSS a" 11759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 11927f654740f2a26ad62a5c155af9199af9e69b889claireho // de_DE // 2 de_DE 12027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1.1999"), // 00: yM 12154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Jan. 1999"), // 01: yMMM 12227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1.1999"), // 02: yMd 12354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("13. Jan. 1999"), // 03: yMMMd 12427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1."), // 04: Md 12554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("13. Jan."), // 05: MMMd 126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13. Januar"), // 06: MMMMd 127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Q1 1999"), // 07: yQQQ 128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11:58 nachm."), // 08: hhmm 129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm 131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Januar 1999"), // 12: yyyyMMMM 13354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Mi., 13. Jan."), // 13: MMMEd -> EEE, d. MMM 134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("Mi., 13."), // 14: Ed -> EEE d. 135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "HH:mm:ss,SSS" 13659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 13827f654740f2a26ad62a5c155af9199af9e69b889claireho // fi // 3 fi 13927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1.1999"), // 00: yM (fixed expected result per ticket:6626:) 14027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("tammi 1999"), // 01: yMMM 14127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1.1999"), // 02: yMd 14227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13. tammikuuta 1999"), // 03: yMMMd 14327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13.1."), // 04: Md 14427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("13. tammikuuta"), // 05: MMMd 145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13. tammikuuta"), // 06: MMMMd 146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("1. nelj. 1999"), // 07: yQQQ 147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11.58 ip."), // 08: hhmm 148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23.58"), // 09: HHmm 149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23.58"), // 10: jjmm 150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58.59"), // 11: mmss 151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("tammikuu 1999"), // 12: yyyyMMMM 152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("ke 13. tammikuuta"), // 13: MMMEd -> EEE d. MMM 153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("ke 13."), // 14: Ed -> ccc d. 154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23.58.59,123"), // 15: jmmssSSS -> "H.mm.ss,SSS" 15559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23.58"), // 16: JJmm 156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // es // 4 es 158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("1/1999"), // 00: yM -> "M/y" 15959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("ene. de 1999"), // 01: yMMM -> "MMM 'de' y" 160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13/1/1999"), // 02: yMd -> "d/M/y" 16159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("13 de ene. de 1999"), // 03: yMMMd -> "d 'de' MMM 'de' y" 162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13/1"), // 04: Md -> "d/M" 16359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("13 de ene."), // 05: MMMd -> "d 'de' MMM" 164103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("13 de enero"), // 06: MMMMd -> "d 'de' MMMM" 165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("T1 1999"), // 07: yQQQ -> "QQQ y" 16659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58 p. m."), // 08: hhmm -> "hh:mm a" 167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> "HH:mm" 168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm -> "HH:mm" 169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> "mm:ss" 170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("enero de 1999"), // 12: yyyyMMMM -> "MMMM 'de' yyyy" 17159d709d503bab6e2b61931737e662dd293b40578ccornelius CharsToUnicodeString("mi\\u00E9. 13 de ene."), // 13: MMMEd -> "E d 'de' MMM" 17259d709d503bab6e2b61931737e662dd293b40578ccornelius CharsToUnicodeString("mi\\u00E9. 13"), // 14: Ed -> "EEE d" 173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "H:mm:ss,SSS" 17459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 176103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // ja // 5 ja 17727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1999/1"), // 00: yM -> y/M 17827f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u6708"), // 01: yMMM -> y\u5E74M\u6708 17927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1999/1/13"), // 02: yMd -> y/M/d 18027f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> y\u5E74M\u6708d\u65E5 18127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md -> M/d 18227f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 183103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd -> M\u6708d\u65E5 18459d709d503bab6e2b61931737e662dd293b40578ccornelius CharsToUnicodeString("1999/Q1"), // 07: yQQQ -> y/QQQ 185103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u5348\\u5F8C11:58"), // 08: hhmm 186103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> HH:mm 187103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm 188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> mm:ss 189103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1999\\u5E741\\u6708"), // 12: yyyyMMMM -> y\u5E74M\u6708 190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5(\\u6C34)"), // 13: MMMEd -> M\u6708d\u65E5(EEE) 191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5(\\u6C34)"), // 14: Ed -> d\u65E5(EEE) 192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59.123"), // 15: jmmssSSS -> "H:mm:ss.SSS" 19359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // ja@calendar=japanese // 6 ja@calendar=japanese 19627f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011/1"), // 00: yM -> Gy/m 19727f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708 19827f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011/1/13"), // 02: yMd -> Gy/m/d 19927f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5 20027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md -> M/d 20127f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 202103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd -> M\u6708d\u65E5 20359d709d503bab6e2b61931737e662dd293b40578ccornelius CharsToUnicodeString("\\u5E73\\u6210 11 Q1"), // 07: yQQQ -> G y QQQ 204103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u5348\\u5F8C11:58"), // 08: hhmm -> 205103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> HH:mm (as for ja) 206103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm 207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> mm:ss (as for ja) 208103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 12: yyyyMMMM -> Gyyyy\u5E74M\u6708 209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5(\\u6C34)"), // 13: MMMEd -> M\u6708d\u65E5(EEE) 210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5(\\u6C34)"), // 14: Ed -> d\u65E5(EEE) 211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59.123"), // 15: jmmssSSS -> "H:mm:ss.SSS" 21259d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 213103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 214103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // zh_Hans_CN // 7 zh_Hans_CN 21554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("1999/1", -1, US_INV), // 00: yM 21627f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u6708"), // 01: yMMM -> yyyy\u5E74MMM (fixed expected result per ticket:6626:) 21754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("1999/1/13"), // 02: yMd 21827f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> yyyy\u5E74MMMd\u65E5 (fixed expected result per ticket:6626:) 21954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("1/13"), // 04: Md 220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5 (fixed expected result per ticket:6626:) 221103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd -> M\u6708d\u65E5 22254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("1999\\u5E74\\u7B2C1\\u5B63\\u5EA6"), // 07: yQQQ 223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm 224103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 225103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm 226103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1999\\u5E741\\u6708"), // 12: yyyyMMMM -> yyyy\u5E74MMM 228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5\\u5468\\u4E09"), // 13: MMMEd -> MMMd\u65E5EEE 229103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE 230103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS" 23159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 232103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 233103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // zh_TW@calendar=roc // 8 zh_TW@calendar=roc 23427f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88/1"), // 00: yM -> Gy/M 23527f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708 23627f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88/1/13"), // 02: yMd -> Gy/M/d 23727f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5 23827f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString("1/13"), // 04: Md -> M/d 23927f654740f2a26ad62a5c155af9199af9e69b889claireho CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd ->M\u6708d\u65E5 240103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5"), // 06: MMMMd ->M\u6708d\u65E5 2418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u5B63"), // 07: yQQQ -> Gy QQQ 242103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm -> 243103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> 244103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm 245103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> 246103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u6708"), // 12: yyyyMMMM -> Gy\u5E74M\u670 247103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("1\\u670813\\u65E5\\u9031\\u4E09"), // 13: MMMEd -> M\u6708d\u65E5EEE 248103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13\\u65E5\\uff08\\u9031\\u4E09\\uff09"), // 14: Ed -> d\u65E5\\uff08EEEi\\uff09 249103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS" 25059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 251103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 252103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // ru // 9 ru 253103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("01.1999"), // 00: yM -> MM.y 254b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho CharsToUnicodeString("\\u042F\\u043D\\u0432. 1999"), // 01: yMMM -> LLL y 2558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString("13.01.1999"), // 02: yMd -> dd.MM.y 25654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("13 \\u044F\\u043D\\u0432. 1999 \\u0433."), // 03: yMMMd -> d MMM y 2578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString("13.01"), // 04: Md -> dd.MM 258103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13 \\u044F\\u043D\\u0432."), // 05: MMMd -> d MMM 259103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("13 \\u044F\\u043D\\u0432\\u0430\\u0440\\u044F"), // 06: MMMMd -> d MMMM 26054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("1-\\u0439 \\u043A\\u0432. 1999 \\u0433."), // 07: yQQQ -> y QQQ 261fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString("11:58 PM"), // 07: hhmm -> hh:mm a 262103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm -> HH:mm 263103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 10: jjmm -> HH:mm 264103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss -> mm:ss 265103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u042F\\u043D\\u0432\\u0430\\u0440\\u044C 1999"), // 12: yyyyMMMM -> LLLL y 266103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u0421\\u0440, 13 \\u044F\\u043D\\u0432."), // 13: MMMEd -> ccc, d MMM 267103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u0421\\u0440, 13"), // 14: Ed -> EEE, d 268103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "H:mm:ss,SSS" 26959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("23:58"), // 16: JJmm 270103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 271103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // zh@calendar=chinese // 10 zh@calendar=chinese 272fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u620A\\u5BC5\\u5E74\\u51AC\\u6708"), // 00: yMMM 273fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u620A\\u5BC5\\u5E74\\u51AC\\u6708"), // 01: yMMM 274fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u620A\\u5BC5\\u5E74\\u51AC\\u670826\\u65E5"), // 02: yMMMd 275fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u620A\\u5BC5\\u5E74\\u51AC\\u670826\\u65E5"), // 03: yMMMd 276103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("11-26"), // 04: Md 277fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u51AC\\u670826\\u65E5"), // 05: MMMd 278fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u51AC\\u670826\\u65E5"), // 06: MMMMd 27954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius CharsToUnicodeString("\\u620A\\u5BC5\\u5E74\\u7b2c\\u56db\\u5B63\\u5EA6"), // 07: yQQQ 280103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm 281103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("23:58"), // 09: HHmm 282103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm 283103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("58:59"), // 11: mmss 284fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u620A\\u5BC5\\u5E74\\u51AC\\u6708"), // 12: yyyyMMMM 285fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CharsToUnicodeString("\\u51AC\\u670826\\u65E5\\u5468\\u4E09"), // 13: MMMEd 286103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("26\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE 287103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSS 28859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString("11:58"), // 16: JJmm 289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(), 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString patternTests2[] = { 294c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMMdd"), 295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("yyyyqqqq"), 296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("yMMMdd"), 297c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EyyyyMMMdd"), 298c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMdd"), 299c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMM"), 300c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMM"), 301c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyMM"), 302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yMMMMMd"), 303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EEEEEMMMMMd"), 304c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("MMMd"), 305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("MMMdhmm"), 306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EMMMdhmms"), 307c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("MMdhmm"), 308c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EEEEMMMdhmms"), 309c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("yyyyMMMddhhmmss"), 310c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("EyyyyMMMddhhmmss"), 311c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("hmm"), 312c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("hhmm"), 313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("hhmmVVVV"), 314c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(""), 315c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }; 316c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString patternResults2[] = { 317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Oct 14, 1999"), 318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("4th quarter 1999"), 319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("Oct 14, 1999"), 320c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Thu, Oct 14, 1999"), 321c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("10/14/1999"), 322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Oct 1999"), 323c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("10/1999"), 324c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("10/99"), 325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString("O 14, 1999"), 326c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("T, O 14"), 327c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("Oct 14"), 32854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Oct 14, 6:58 AM"), 32954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Thu, Oct 14, 6:58:59 AM"), 33054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("10/14, 6:58 AM"), 33154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Thursday, Oct 14, 6:58:59 AM"), 33254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Oct 14, 1999, 6:58:59 AM"), 33354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString("Thu, Oct 14, 1999, 6:58:59 AM"), 334c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("6:58 AM"), 33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString("6:58 AM"), 336b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString("6:58 AM GMT"), 337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(""), 338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }; 339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // results for getSkeletons() and getPatternForSkeleton() 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString testSkeletonsResults[] = { 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("HH:mm"), 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("MMMMd"), 344103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMMMdd"), 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString testBaseSkeletonsResults[] = { 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("Hm"), 349103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMMd"), 350103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString("MMMMMd"), 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newDecimal(" "); // space 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newAppendItemName("hrs."); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newAppendItemFormat("{1} {0}"); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newDateTimeFormat("{1} {0}"); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString conflictingPattern; 35959d709d503bab6e2b61931737e662dd293b40578ccornelius UDateTimePatternConflict conflictingStatus = UDATPG_NO_CONFLICT; 36059d709d503bab6e2b61931737e662dd293b40578ccornelius (void)conflictingStatus; // Suppress set but not used warning. 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test CreateInstance with default locale 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator createInstance from default locale"); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *instFromDefaultLocale=DateTimePatternGenerator::createInstance(status); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (default) - exitting"); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete instFromDefaultLocale; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test CreateInstance with given locale 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator createInstance from French locale"); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *instFromLocale=DateTimePatternGenerator::createInstance(Locale::getFrench(), status); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exitting"); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test clone DateTimePatternGenerator 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator::clone()"); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString decimalSymbol = instFromLocale->getDecimal(); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newDecimalSymbol = UnicodeString("*"); 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSymbol = instFromLocale->getDecimal(); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru instFromLocale->setDecimal(newDecimalSymbol); 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *cloneDTPatternGen=instFromLocale->clone(); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSymbol = cloneDTPatternGen->getDecimal(); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (decimalSymbol != newDecimalSymbol) { 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: inconsistency is found in cloned object."); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( !(*cloneDTPatternGen == *instFromLocale) ) { 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: inconsistency is found in cloned object."); 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( *cloneDTPatternGen != *instFromLocale ) { 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: inconsistency is found in cloned object."); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete instFromLocale; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cloneDTPatternGen; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test simple use cases 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing simple use cases"); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale deLocale=Locale::getGermany(); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate sampleDate=LocaleTest::date(99, 9, 13, 23, 58, 59); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *gen = DateTimePatternGenerator::createInstance(deLocale, status); 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getGermany()) - exitting"); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString findPattern = gen->getBestPattern(UnicodeString("MMMddHmm"), status); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *format = new SimpleDateFormat(findPattern, deLocale, status); 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create SimpleDateFormat (Locale::getGermany())"); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gen; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *zone = TimeZone::createTimeZone(UnicodeString("ECT")); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (zone==NULL) { 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create TimeZone ECT"); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gen; 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->setTimeZone(*zone); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateReturned, expectedResult; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 43654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius expectedResult=UnicodeString("14. Okt. 08:58", -1, US_INV); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Simple test in getBestPattern with Locale::getGermany())."); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // add new pattern 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru conflictingStatus = gen->addPattern(UnicodeString("d'. von' MMMM", -1, US_INV), true, conflictingPattern, status); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Could not addPattern - d\'. von\' MMMM"); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testPattern=gen->getBestPattern(UnicodeString("MMMMdd"), status); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPattern=gen->getBestPattern(UnicodeString("MMMddHmm"), status); 44950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho format->applyPattern(gen->getBestPattern(UnicodeString("MMMMdHmm"), status)); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 45250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectedResult=UnicodeString("14. von Oktober 08:58", -1, US_INV); 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("ERROR: Simple test addPattern failed!: d\'. von\' MMMM Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // get a pattern and modify it 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format = (SimpleDateFormat *)DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru deLocale); 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->setTimeZone(*zone); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern = format->toPattern(pattern); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expectedResult=CharsToUnicodeString("Donnerstag, 14. Oktober 1999 08:58:59 Mitteleurop\\u00E4ische Sommerzeit"); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Simple test uses full date format."); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // modify it to change the zone. 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newPattern = gen->replaceFieldTypes(pattern, UnicodeString("vvvv"), status); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->applyPattern(newPattern); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned.remove(); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateReturned = format->format(sampleDate, dateReturned, status); 477103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectedResult=CharsToUnicodeString("Donnerstag, 14. Oktober 1999 08:58:59 Mitteleurop\\u00E4ische Zeit"); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( dateReturned != expectedResult ) { 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Simple test modify the timezone!"); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ")+ dateReturned + UnicodeString(" Expected: ") + expectedResult); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setDeciaml(), getDeciaml() 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setDecimal(newDecimal); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDecimal != gen->getDecimal()) { 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setDecimal() and getDecimal()!.\n"); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setAppenItemName() , getAppendItemName() 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setAppendItemName(UDATPG_HOUR_FIELD, newAppendItemName); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newAppendItemName != gen->getAppendItemName(UDATPG_HOUR_FIELD)) { 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setAppendItemName() and getAppendItemName()!.\n"); 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setAppenItemFormat() , getAppendItemFormat() 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setAppendItemFormat(UDATPG_HOUR_FIELD, newAppendItemFormat); 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newAppendItemFormat != gen->getAppendItemFormat(UDATPG_HOUR_FIELD)) { 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setAppendItemFormat() and getAppendItemFormat()!.\n"); 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // setDateTimeFormat() , getDateTimeFormat() 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gen->setDateTimeFormat(newDateTimeFormat); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDateTimeFormat != gen->getDateTimeFormat()) { 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: unexpected result from setDateTimeFormat() and getDateTimeFormat()!.\n"); 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======== Test getSkeleton and getBaseSkeleton 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern = UnicodeString("dd-MMM"); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedSkeleton = UnicodeString("MMMdd"); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedBaseSkeleton = UnicodeString("MMMd"); 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString retSkeleton = gen->getSkeleton(pattern, status); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedSkeleton ) { 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getSkeleton().\n"); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ") + expectedSkeleton ); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retSkeleton = gen->getBaseSkeleton(pattern, status); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedBaseSkeleton) { 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getBaseSkeleton().\n"); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected:")+ expectedBaseSkeleton); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern = UnicodeString("dd/MMMM/yy"); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedSkeleton = UnicodeString("yyMMMMdd"); 525103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectedBaseSkeleton = UnicodeString("yMMMMd"); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retSkeleton = gen->getSkeleton(pattern, status); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedSkeleton ) { 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getSkeleton().\n"); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ") + expectedSkeleton ); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retSkeleton = gen->getBaseSkeleton(pattern, status); 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || retSkeleton != expectedBaseSkeleton) { 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getBaseSkeleton().\n"); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected:")+ expectedBaseSkeleton); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete zone; 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gen; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 541c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Trac# 6104 542c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pattern = UnicodeString("YYYYMMM"); 544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString expR = CharsToUnicodeString("1999\\u5E741\\u6708"); // fixed expected result per ticket:6626: 545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale loc("ja"); 546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UDate testDate1= LocaleTest::date(99, 0, 13, 23, 58, 59); 547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 549c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator"); 550c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 551c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bPattern = patGen->getBestPattern(pattern, status); 553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString rDate; 554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru SimpleDateFormat sdf(bPattern, loc, status); 555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate.remove(); 556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate = sdf.format(testDate1, rDate); 557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" ja locale with skeleton: YYYYMMM Best Pattern:") + bPattern); 559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" Formatted date:") + rDate); 560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( expR!= rDate ) { 562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString("\nERROR: Test Japanese month hack Got: ") + rDate + 563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(" Expected: ") + expR ); 564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { // Trac# 6104 569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale loc("zh"); 570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString expR = CharsToUnicodeString("1999\\u5E741\\u6708"); // fixed expected result per ticket:6626: 571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UDate testDate1= LocaleTest::date(99, 0, 13, 23, 58, 59); 572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 573c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator"); 575c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 576c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bPattern = patGen->getBestPattern(pattern, status); 578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString rDate; 579c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru SimpleDateFormat sdf(bPattern, loc, status); 580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate.remove(); 581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru rDate = sdf.format(testDate1, rDate); 582c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" zh locale with skeleton: YYYYMMM Best Pattern:") + bPattern); 584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" Formatted date:") + rDate); 585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( expR!= rDate ) { 586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString("\nERROR: Test Chinese month hack Got: ") + rDate + 587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(" Expected: ") + expR ); 588c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Trac# 6172 duplicate time pattern 594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pattern = UnicodeString("hmv"); 596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString expR = UnicodeString("h:mm a v"); // avail formats has hm -> "h:mm a" (fixed expected result per ticket:6626:) 597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale loc("en"); 598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator"); 601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bPattern = patGen->getBestPattern(pattern, status); 604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" en locale with skeleton: hmv Best Pattern:") + bPattern); 605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( expR!= bPattern ) { 607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString("\nERROR: Test EN time format Got: ") + bPattern + 608c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString(" Expected: ") + expR ); 609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test various skeletons. 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateTimePatternGenerator with various skeleton"); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t localeIndex=0; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultIndex=0; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString resultDate; 622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UDate testDate= LocaleTest::date(99, 0, 13, 23, 58, 59) + 123.0; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (localeIndex < MAX_LOCALE ) 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dataIndex=0; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString bestPattern; 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc(testLocale[localeIndex][0], testLocale[localeIndex][1], testLocale[localeIndex][2], testLocale[localeIndex][3]); 629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("\n\n Locale: %s_%s_%s@%s", testLocale[localeIndex][0], testLocale[localeIndex][1], testLocale[localeIndex][2], testLocale[localeIndex][3]); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator with locale index:%d . - exitting\n", localeIndex); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (patternData[dataIndex].length() > 0) { 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(patternData[dataIndex]); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bestPattern = patGen->getBestPattern(patternData[dataIndex++], status); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" -> ") + bestPattern); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat sdf(bestPattern, loc, status); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultDate.remove(); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultDate = sdf.format(testDate, resultDate); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( resultDate != patternResults[resultIndex] ) { 644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("\nERROR: Test various skeletons[") + (dataIndex-1) + UnicodeString("], localeIndex ") + localeIndex + 64527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString(". Got: \"") + resultDate + UnicodeString("\" Expected: \"") + patternResults[resultIndex] + "\"" ); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultIndex++; 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete patGen; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localeIndex++; 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 654c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // ======= More tests ticket#6110 655c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln("Testing DateTimePatternGenerator with various skeleton"); 656c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 657c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru localeIndex=0; 659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultIndex=0; 660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru testDate= LocaleTest::date(99, 9, 13, 23, 58, 59); 661c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t dataIndex=0; 663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString bestPattern; 664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln("\n\n Test various skeletons for English locale..."); 665c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(Locale::getEnglish(), status); 666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)) { 667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator with locale English . - exitting\n"); 668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru TimeZone *enZone = TimeZone::createTimeZone(UnicodeString("ECT/GMT")); 671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (enZone==NULL) { 672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataerrln("ERROR: Could not create TimeZone ECT"); 673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru SimpleDateFormat *enFormat = (SimpleDateFormat *)DateFormat::createDateTimeInstance(DateFormat::kFull, 677c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateFormat::kFull, Locale::getEnglish()); 678c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru enFormat->setTimeZone(*enZone); 679c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru while (patternTests2[dataIndex].length() > 0) { 680c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(patternTests2[dataIndex]); 681c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru bestPattern = patGen->getBestPattern(patternTests2[dataIndex], status); 682c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString(" -> ") + bestPattern); 683c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru enFormat->applyPattern(bestPattern); 684c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultDate.remove(); 685c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultDate = enFormat->format(testDate, resultDate); 686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( resultDate != patternResults2[resultIndex] ) { 687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString("\nERROR: Test various skeletons[") + dataIndex 688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru + UnicodeString("]. Got: ") + resultDate + UnicodeString(" Expected: ") + 689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru patternResults2[resultIndex] ); 690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru dataIndex++; 692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultIndex++; 693c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete patGen; 695c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete enZone; 696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete enFormat; 697c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test random skeleton 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *randDTGen= DateTimePatternGenerator::createInstance(status); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exitting"); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar newChar; 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<10; ++i) { 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString randomSkeleton; 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = rand() % 20; 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t j=0; j<len; ++j ) { 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((newChar = (UChar)(rand()%0x7f))>=(UChar)0x20) { 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru randomSkeleton += newChar; 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString bestPattern = randDTGen->getBestPattern(randomSkeleton, status); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete randDTGen; 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UnicodeString randomString=Unicode 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======= Test getStaticClassID() 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing getStaticClassID()"); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateTimePatternGenerator *test= DateTimePatternGenerator::createInstance(status); 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test->getDynamicClassID() != DateTimePatternGenerator::getStaticClassID()) { 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getDynamicClassID() didn't return the expected value"); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ====== Test createEmptyInstance() 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing createEmptyInstance()"); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = DateTimePatternGenerator::createEmptyInstance(status); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail to create an empty instance ! - exitting.\n"); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru conflictingStatus = test->addPattern(UnicodeString("MMMMd"), true, conflictingPattern, status); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testPattern=test->getBestPattern(UnicodeString("MMMMdd"), status); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru conflictingStatus = test->addPattern(UnicodeString("HH:mm"), true, conflictingPattern, status); 749103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius conflictingStatus = test->addPattern(UnicodeString("MMMMMdd"), true, conflictingPattern, status); //duplicate pattern 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration *output=NULL; 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru output = test->getRedundants(status); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedResult=UnicodeString("MMMMd"); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (output != NULL) { 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru output->reset(status); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString *dupPattern=output->snext(status); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (dupPattern==NULL) || (*dupPattern != expectedResult) ) { 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail in getRedundants !\n"); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ======== Test getSkeletons and getBaseSkeletons 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* ptrSkeletonEnum = test->getSkeletons(status); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail to get skeletons !\n"); 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString returnPattern, *ptrSkeleton; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptrSkeletonEnum->reset(status); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count=ptrSkeletonEnum->count(status); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) { 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptrSkeleton = (UnicodeString *)ptrSkeletonEnum->snext(status); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnPattern = test->getPatternForSkeleton(*ptrSkeleton); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( returnPattern != testSkeletonsResults[i] ) { 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: Unexpected result from getSkeletons and getPatternForSkeleton\nGot: ") + returnPattern 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("\nExpected: ") + testSkeletonsResults[i] 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("\n")); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* ptrBaseSkeletonEnum = test->getBaseSkeletons(status); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Fail to get base skeletons !\n"); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ptrBaseSkeletonEnum->count(status); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) { 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptrSkeleton = (UnicodeString *)ptrBaseSkeletonEnum->snext(status); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( *ptrSkeleton != testBaseSkeletonsResults[i] ) { 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Unexpected result from getBaseSkeletons() !\n"); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 790c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // ========= DateTimePatternGenerator sample code in Userguide 791c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // set up the generator 792c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Locale locale = Locale::getFrench(); 793c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 794c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DateTimePatternGenerator *generator = DateTimePatternGenerator::createInstance( locale, status); 795c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 796c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // get a pattern for an abbreviated month and day 797c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pattern = generator->getBestPattern(UnicodeString("MMMd"), status); 798c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru SimpleDateFormat formatter(pattern, locale, status); 799c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 800c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru zone = TimeZone::createTimeZone(UnicodeString("GMT")); 801c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatter.setTimeZone(*zone); 802c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // use it to format (or parse) 803c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString formatted; 804c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatted = formatter.format(Calendar::getNow(), formatted, status); 805c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // for French, the result is "13 sept." 806c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatted.remove(); 807c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // cannot use the result from getNow() because the value change evreyday. 808c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru testDate= LocaleTest::date(99, 0, 13, 23, 58, 59); 809c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru formatted = formatter.format(testDate, formatted, status); 810c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expectedResult=UnicodeString("14 janv."); 811c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if ( formatted != expectedResult ) { 812c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("ERROR: Userguide sample code result!"); 813c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln(UnicodeString(" Got: ")+ formatted + UnicodeString(" Expected: ") + expectedResult); 814c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 815c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 816c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete zone; 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete output; 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ptrSkeletonEnum; 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ptrBaseSkeletonEnum; 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 821c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete generator; 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 82550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Test handling of options 82650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 82750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For reference, as of ICU 4.3.3, 82850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * root/gregorian has 82950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hm{"H:mm"} 83050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hms{"H:mm:ss"} 83150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hm{"h:mm a"} 83250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hms{"h:mm:ss a"} 83350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * en/gregorian has 83450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hm{"H:mm"} 83550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hms{"H:mm:ss"} 83650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hm{"h:mm a"} 83750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * be/gregorian has 83850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * HHmmss{"HH.mm.ss"} 83950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Hm{"HH.mm"} 84050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hm{"h.mm a"} 84150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * hms{"h.mm.ss a"} 84250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 84350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct DTPtnGenOptionsData { 84450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *locale; 84550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *skel; 84650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *expectedPattern; 84750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDateTimePatternMatchOptions options; 84850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} DTPtnGenOptionsData; 84950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IntlTestDateTimePatternGeneratorAPI::testOptions(/*char *par*/) 85050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 85150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DTPtnGenOptionsData testData[] = { 85250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale skel expectedPattern options 85350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "Hmm", "HH:mm", UDATPG_MATCH_NO_OPTIONS }, 85450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "HHmm", "HH:mm", UDATPG_MATCH_NO_OPTIONS }, 85550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "hhmm", "h:mm a", UDATPG_MATCH_NO_OPTIONS }, 85650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "Hmm", "HH:mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 85750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "HHmm", "HH:mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 85850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en", "hhmm", "hh:mm a", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 85950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "be", "Hmm", "HH.mm", UDATPG_MATCH_NO_OPTIONS }, 86050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "be", "HHmm", "HH.mm", UDATPG_MATCH_NO_OPTIONS }, 86150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "be", "hhmm", "h.mm a", UDATPG_MATCH_NO_OPTIONS }, 86250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "be", "Hmm", "H.mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 86350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "be", "HHmm", "HH.mm", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 86450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "be", "hhmm", "hh.mm a", UDATPG_MATCH_HOUR_FIELD_LENGTH }, 86559d709d503bab6e2b61931737e662dd293b40578ccornelius // 866fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", "yyyy", "yyyy", UDATPG_MATCH_NO_OPTIONS }, 867fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", "YYYY", "YYYY", UDATPG_MATCH_NO_OPTIONS }, 868fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", "U", "y", UDATPG_MATCH_NO_OPTIONS }, 869fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=japanese", "yyyy", "y G", UDATPG_MATCH_NO_OPTIONS }, 870fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=japanese", "YYYY", "Y G", UDATPG_MATCH_NO_OPTIONS }, 871fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=japanese", "U", "y G", UDATPG_MATCH_NO_OPTIONS }, 872fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "yyyy", "U", UDATPG_MATCH_NO_OPTIONS }, 873fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "YYYY", "Y", UDATPG_MATCH_NO_OPTIONS }, 874fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "U", "U", UDATPG_MATCH_NO_OPTIONS }, 875fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "Gy", "U", UDATPG_MATCH_NO_OPTIONS }, 876fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "GU", "U", UDATPG_MATCH_NO_OPTIONS }, 877fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "ULLL", "MMM U", UDATPG_MATCH_NO_OPTIONS }, 878fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "yMMM", "MMM U", UDATPG_MATCH_NO_OPTIONS }, 879fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en@calendar=chinese", "GUMMM", "MMM U", UDATPG_MATCH_NO_OPTIONS }, 880fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "yyyy", "U\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 881fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "YYYY", "Y\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 882fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "U", "U\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 883fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "Gy", "U\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 884fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "GU", "U\\u5E74", UDATPG_MATCH_NO_OPTIONS }, 885fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "ULLL", "U\\u5E74MMM", UDATPG_MATCH_NO_OPTIONS }, 886fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "yMMM", "U\\u5E74MMM", UDATPG_MATCH_NO_OPTIONS }, 887fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "zh@calendar=chinese", "GUMMM", "U\\u5E74MMM", UDATPG_MATCH_NO_OPTIONS }, 88850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 88950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 89050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int count = sizeof(testData) / sizeof(testData[0]); 89150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const DTPtnGenOptionsData * testDataPtr = testData; 89250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 89350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (; count-- > 0; ++testDataPtr) { 89450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 89550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 89650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale locale(testDataPtr->locale); 89750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString skel(testDataPtr->skel); 898fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString expectedPattern(UnicodeString(testDataPtr->expectedPattern).unescape()); 89950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDateTimePatternMatchOptions options = testDataPtr->options; 90050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 90150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DateTimePatternGenerator * dtpgen = DateTimePatternGenerator::createInstance(locale, status); 90250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 90350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Unable to create DateTimePatternGenerator instance for locale(%s): %s", locale.getName(), u_errorName(status)); 90450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete dtpgen; 90550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 90650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 90750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString pattern = dtpgen->getBestPattern(skel, options, status); 90850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (pattern.compare(expectedPattern) != 0) { 90950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln( UnicodeString("ERROR in getBestPattern, locale ") + UnicodeString(testDataPtr->locale) + 91050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString(", skeleton ") + skel + 91150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((options)?UnicodeString(", options!=0"):UnicodeString(", options==0")) + 91250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString(", expected pattern ") + expectedPattern + 91350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString(", got ") + pattern ); 91450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 91550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete dtpgen; 91650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 91750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 91850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 91959d709d503bab6e2b61931737e662dd293b40578ccornelius/** 92059d709d503bab6e2b61931737e662dd293b40578ccornelius * Test that DTPG can handle all valid pattern character / length combinations 92159d709d503bab6e2b61931737e662dd293b40578ccornelius * 92259d709d503bab6e2b61931737e662dd293b40578ccornelius */ 92359d709d503bab6e2b61931737e662dd293b40578ccornelius#define FIELD_LENGTHS_COUNT 6 92459d709d503bab6e2b61931737e662dd293b40578ccornelius#define FIELD_LENGTH_MAX 8 92559d709d503bab6e2b61931737e662dd293b40578ccornelius#define MUST_INCLUDE_COUNT 5 92659d709d503bab6e2b61931737e662dd293b40578ccornelius 92759d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct AllFieldsTestItem { 92859d709d503bab6e2b61931737e662dd293b40578ccornelius char patternChar; 92959d709d503bab6e2b61931737e662dd293b40578ccornelius int8_t fieldLengths[FIELD_LENGTHS_COUNT+1]; // up to FIELD_LENGTHS_COUNT lengths to try 93059d709d503bab6e2b61931737e662dd293b40578ccornelius // (length <=FIELD_LENGTH_MAX) plus 0 terminator 93159d709d503bab6e2b61931737e662dd293b40578ccornelius char mustIncludeOneOf[MUST_INCLUDE_COUNT+1];// resulting pattern must include at least one of 93259d709d503bab6e2b61931737e662dd293b40578ccornelius // these as a pattern char (0-terminated list) 93359d709d503bab6e2b61931737e662dd293b40578ccornelius} AllFieldsTestItem; 93459d709d503bab6e2b61931737e662dd293b40578ccornelius 93559d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid IntlTestDateTimePatternGeneratorAPI::testAllFieldPatterns(/*char *par*/) 93659d709d503bab6e2b61931737e662dd293b40578ccornelius{ 93759d709d503bab6e2b61931737e662dd293b40578ccornelius const char * localeNames[] = { 93859d709d503bab6e2b61931737e662dd293b40578ccornelius "root", 93959d709d503bab6e2b61931737e662dd293b40578ccornelius "root@calendar=japanese", 94059d709d503bab6e2b61931737e662dd293b40578ccornelius "root@calendar=chinese", 94159d709d503bab6e2b61931737e662dd293b40578ccornelius "en", 94259d709d503bab6e2b61931737e662dd293b40578ccornelius "en@calendar=japanese", 94359d709d503bab6e2b61931737e662dd293b40578ccornelius "en@calendar=chinese", 94459d709d503bab6e2b61931737e662dd293b40578ccornelius NULL // terminator 94559d709d503bab6e2b61931737e662dd293b40578ccornelius }; 94659d709d503bab6e2b61931737e662dd293b40578ccornelius AllFieldsTestItem testData[] = { 94759d709d503bab6e2b61931737e662dd293b40578ccornelius //pat fieldLengths generated pattern must 94859d709d503bab6e2b61931737e662dd293b40578ccornelius //chr to test include one of these 94959d709d503bab6e2b61931737e662dd293b40578ccornelius { 'G', {1,2,3,4,5,0}, "G" }, // era 95059d709d503bab6e2b61931737e662dd293b40578ccornelius // year 95159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'y', {1,2,3,4,0}, "yU" }, // year 95259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'Y', {1,2,3,4,0}, "Y" }, // year for week of year 95359d709d503bab6e2b61931737e662dd293b40578ccornelius { 'u', {1,2,3,4,5,0}, "yuU" }, // extended year 95459d709d503bab6e2b61931737e662dd293b40578ccornelius { 'U', {1,2,3,4,5,0}, "yU" }, // cyclic year name 95559d709d503bab6e2b61931737e662dd293b40578ccornelius // quarter 95659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'Q', {1,2,3,4,0}, "Qq" }, // x 95759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'q', {1,2,3,4,0}, "Qq" }, // standalone 95859d709d503bab6e2b61931737e662dd293b40578ccornelius // month 95959d709d503bab6e2b61931737e662dd293b40578ccornelius { 'M', {1,2,3,4,5,0}, "ML" }, // x 96059d709d503bab6e2b61931737e662dd293b40578ccornelius { 'L', {1,2,3,4,5,0}, "ML" }, // standalone 96159d709d503bab6e2b61931737e662dd293b40578ccornelius // week 96259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'w', {1,2,0}, "w" }, // week of year 96359d709d503bab6e2b61931737e662dd293b40578ccornelius { 'W', {1,0}, "W" }, // week of month 96459d709d503bab6e2b61931737e662dd293b40578ccornelius // day 96559d709d503bab6e2b61931737e662dd293b40578ccornelius { 'd', {1,2,0}, "d" }, // day of month 96659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'D', {1,2,3,0}, "D" }, // day of year 96759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'F', {1,0}, "F" }, // day of week in month 96859d709d503bab6e2b61931737e662dd293b40578ccornelius { 'g', {7,0}, "g" }, // modified julian day 96959d709d503bab6e2b61931737e662dd293b40578ccornelius // weekday 97059d709d503bab6e2b61931737e662dd293b40578ccornelius { 'E', {1,2,3,4,5,6}, "Eec" }, // day of week 97159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'e', {1,2,3,4,5,6}, "Eec" }, // local day of week 97259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'c', {1,2,3,4,5,6}, "Eec" }, // standalone local day of week 97359d709d503bab6e2b61931737e662dd293b40578ccornelius // day period 97459d709d503bab6e2b61931737e662dd293b40578ccornelius // { 'a', {1,0}, "a" }, // am or pm // not clear this one is supposed to work (it doesn't) 97559d709d503bab6e2b61931737e662dd293b40578ccornelius // hour 97659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'h', {1,2,0}, "hK" }, // 12 (1-12) 97759d709d503bab6e2b61931737e662dd293b40578ccornelius { 'H', {1,2,0}, "Hk" }, // 24 (0-23) 97859d709d503bab6e2b61931737e662dd293b40578ccornelius { 'K', {1,2,0}, "hK" }, // 12 (0-11) 97959d709d503bab6e2b61931737e662dd293b40578ccornelius { 'k', {1,2,0}, "Hk" }, // 24 (1-24) 98059d709d503bab6e2b61931737e662dd293b40578ccornelius { 'j', {1,2,0}, "hHKk" }, // locale default 98159d709d503bab6e2b61931737e662dd293b40578ccornelius // minute 98259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'm', {1,2,0}, "m" }, // x 98359d709d503bab6e2b61931737e662dd293b40578ccornelius // second & fractions 98459d709d503bab6e2b61931737e662dd293b40578ccornelius { 's', {1,2,0}, "s" }, // x 98559d709d503bab6e2b61931737e662dd293b40578ccornelius { 'S', {1,2,3,4,0}, "S" }, // fractional second 98659d709d503bab6e2b61931737e662dd293b40578ccornelius { 'A', {8,0}, "A" }, // milliseconds in day 98759d709d503bab6e2b61931737e662dd293b40578ccornelius // zone 98859d709d503bab6e2b61931737e662dd293b40578ccornelius { 'z', {1,2,3,4,0}, "z" }, // x 98959d709d503bab6e2b61931737e662dd293b40578ccornelius { 'Z', {1,2,3,4,5,0}, "Z" }, // x 99059d709d503bab6e2b61931737e662dd293b40578ccornelius { 'O', {1,4,0}, "O" }, // x 99159d709d503bab6e2b61931737e662dd293b40578ccornelius { 'v', {1,4,0}, "v" }, // x 99259d709d503bab6e2b61931737e662dd293b40578ccornelius { 'V', {1,2,3,4,0}, "V" }, // x 99359d709d503bab6e2b61931737e662dd293b40578ccornelius { 'X', {1,2,3,4,5,0}, "X" }, // x 99459d709d503bab6e2b61931737e662dd293b40578ccornelius { 'x', {1,2,3,4,5,0}, "x" }, // x 99559d709d503bab6e2b61931737e662dd293b40578ccornelius }; 99659d709d503bab6e2b61931737e662dd293b40578ccornelius 99759d709d503bab6e2b61931737e662dd293b40578ccornelius const char ** localeNamesPtr = localeNames; 99859d709d503bab6e2b61931737e662dd293b40578ccornelius const char * localeName; 99959d709d503bab6e2b61931737e662dd293b40578ccornelius while ( (localeName = *localeNamesPtr++) != NULL) { 100059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 100159d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale = Locale::createFromName(localeName); 100259d709d503bab6e2b61931737e662dd293b40578ccornelius DateTimePatternGenerator * dtpg = DateTimePatternGenerator::createInstance(locale, status); 100359d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 100459d709d503bab6e2b61931737e662dd293b40578ccornelius const AllFieldsTestItem * testDataPtr = testData; 100559d709d503bab6e2b61931737e662dd293b40578ccornelius int itemCount = sizeof(testData) / sizeof(testData[0]); 100659d709d503bab6e2b61931737e662dd293b40578ccornelius for (; itemCount-- > 0; ++testDataPtr) { 100759d709d503bab6e2b61931737e662dd293b40578ccornelius char skelBuf[FIELD_LENGTH_MAX]; 100859d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t chrIndx, lenIndx; 100959d709d503bab6e2b61931737e662dd293b40578ccornelius for (chrIndx = 0; chrIndx < FIELD_LENGTH_MAX; chrIndx++) { 101059d709d503bab6e2b61931737e662dd293b40578ccornelius skelBuf[chrIndx] = testDataPtr->patternChar; 101159d709d503bab6e2b61931737e662dd293b40578ccornelius } 101259d709d503bab6e2b61931737e662dd293b40578ccornelius for (lenIndx = 0; lenIndx < FIELD_LENGTHS_COUNT; lenIndx++) { 101359d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t skelLen = testDataPtr->fieldLengths[lenIndx]; 101459d709d503bab6e2b61931737e662dd293b40578ccornelius if (skelLen <= 0) { 101559d709d503bab6e2b61931737e662dd293b40578ccornelius break; 101659d709d503bab6e2b61931737e662dd293b40578ccornelius } 101759d709d503bab6e2b61931737e662dd293b40578ccornelius if (skelLen > FIELD_LENGTH_MAX) { 101859d709d503bab6e2b61931737e662dd293b40578ccornelius continue; 101959d709d503bab6e2b61931737e662dd293b40578ccornelius } 102059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString skeleton(skelBuf, skelLen, US_INV); 102159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString pattern = dtpg->getBestPattern(skeleton, status); 102259d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 102359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("DateTimePatternGenerator getBestPattern for locale %s, skelChar %c skelLength %d fails: %s", 102459d709d503bab6e2b61931737e662dd293b40578ccornelius locale.getName(), testDataPtr->patternChar, skelLen, u_errorName(status)); 102559d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (pattern.length() <= 0) { 102659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("DateTimePatternGenerator getBestPattern for locale %s, skelChar %c skelLength %d produces 0-length pattern", 102759d709d503bab6e2b61931737e662dd293b40578ccornelius locale.getName(), testDataPtr->patternChar, skelLen); 102859d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 102959d709d503bab6e2b61931737e662dd293b40578ccornelius // test that resulting pattern has at least one char in mustIncludeOneOf 103059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString mustIncludeOneOf(testDataPtr->mustIncludeOneOf, -1, US_INV); 103159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t patIndx, patLen = pattern.length(); 103259d709d503bab6e2b61931737e662dd293b40578ccornelius UBool inQuoted = FALSE; 103359d709d503bab6e2b61931737e662dd293b40578ccornelius for (patIndx = 0; patIndx < patLen; patIndx++) { 103459d709d503bab6e2b61931737e662dd293b40578ccornelius UChar c = pattern.charAt(patIndx); 103559d709d503bab6e2b61931737e662dd293b40578ccornelius if (c == 0x27) { 103659d709d503bab6e2b61931737e662dd293b40578ccornelius inQuoted = !inQuoted; 103759d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (!inQuoted && c <= 0x007A && c >= 0x0041) { 103859d709d503bab6e2b61931737e662dd293b40578ccornelius if (mustIncludeOneOf.indexOf(c) >= 0) { 103959d709d503bab6e2b61931737e662dd293b40578ccornelius break; 104059d709d503bab6e2b61931737e662dd293b40578ccornelius } 104159d709d503bab6e2b61931737e662dd293b40578ccornelius } 104259d709d503bab6e2b61931737e662dd293b40578ccornelius } 104359d709d503bab6e2b61931737e662dd293b40578ccornelius if (patIndx >= patLen) { 104459d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("DateTimePatternGenerator getBestPattern for locale ") + 104559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString(locale.getName(),-1,US_INV) + 104659d709d503bab6e2b61931737e662dd293b40578ccornelius ", skeleton " + skeleton + 104759d709d503bab6e2b61931737e662dd293b40578ccornelius ", produces pattern without required chars: " + pattern); 104859d709d503bab6e2b61931737e662dd293b40578ccornelius } 104959d709d503bab6e2b61931737e662dd293b40578ccornelius 105059d709d503bab6e2b61931737e662dd293b40578ccornelius } 105159d709d503bab6e2b61931737e662dd293b40578ccornelius } 105259d709d503bab6e2b61931737e662dd293b40578ccornelius } 105359d709d503bab6e2b61931737e662dd293b40578ccornelius delete dtpg; 105459d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 105559d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("Create DateTimePatternGenerator instance for locale(%s) fails: %s", 105659d709d503bab6e2b61931737e662dd293b40578ccornelius locale.getName(), u_errorName(status)); 105759d709d503bab6e2b61931737e662dd293b40578ccornelius } 105859d709d503bab6e2b61931737e662dd293b40578ccornelius } 105959d709d503bab6e2b61931737e662dd293b40578ccornelius} 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1061