10596faeddefbf198de137d5e893708495ab1584cFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 58de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * Copyright (c) 1997-2016, International Business Machines Corporation and 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "loctest.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucurr.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 13ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert#include "unicode/strenum.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/brkiter.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/coll.h" 17ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert#include "charstr.h" 188de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "cmemory.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 21b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include <string.h> 22c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "putilimp.h" 23c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "unicode/ustring.h" 241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#include "hash.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const rawData[33][8] = { 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // language code 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en", "fr", "ca", "el", "no", "it", "xx", "zh" }, 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // script code 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "", "", "", "Hans" }, 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // country code 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "US", "FR", "ES", "GR", "NO", "", "YY", "CN" }, 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // variant code 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "" }, 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // full name 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US", "fr_FR", "ca_ES", "el_GR", "no_NO_NY", "it", "xx_YY", "zh_Hans_CN" }, 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ISO-3 language 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eng", "fra", "cat", "ell", "nor", "ita", "", "zho" }, 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ISO-3 country 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "USA", "FRA", "ESP", "GRC", "NOR", "", "", "CHN" }, 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // LCID 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "409", "40c", "403", "408", "814", "10", "0", "804" }, 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (English) 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English", "French", "Catalan", "Greek", "Norwegian", "Italian", "xx", "Chinese" }, 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (English) 48103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "", "", "", "", "", "", "", "Simplified Han" }, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (English) 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "United States", "France", "Spain", "Greece", "Norway", "", "YY", "China" }, 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (English) 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", ""}, 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (English) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Updated no_NO_NY English display name for new pattern-based algorithm 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (part of Euro support). 56b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway, NY)", "Italian", "xx (YY)", "Chinese (Simplified, China)" }, 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (French) 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "anglais", "fran\\u00E7ais", "catalan", "grec", "norv\\u00E9gien", "italien", "xx", "chinois" }, 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (French) 6159d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "", "", "sinogrammes simplifi\\u00E9s" }, 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (French) 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "\\u00C9tats-Unis", "France", "Espagne", "Gr\\u00E8ce", "Norv\\u00E8ge", "", "YY", "Chine" }, 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (French) 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "" }, 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (French) 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //{ "anglais (Etats-Unis)", "francais (France)", "catalan (Espagne)", "grec (Grece)", "norvegien (Norvege,Nynorsk)", "italien", "xx (YY)" }, 6859d709d503bab6e2b61931737e662dd293b40578ccornelius { "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)", "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "italien", "xx (YY)", "chinois (simplifi\\u00E9, Chine)" }, 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display language (Catalan) */ 72c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "angl\\u00E8s", "franc\\u00E8s", "catal\\u00E0", "grec", "noruec", "itali\\u00E0", "", "xin\\u00E8s" }, 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display script (Catalan) */ 7459d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "", "", "han simplificat" }, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display country (Catalan) */ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "Estats Units", "Fran\\u00E7a", "Espanya", "Gr\\u00E8cia", "Noruega", "", "", "Xina" }, 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display variant (Catalan) */ 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "" }, 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display name (Catalan) */ 80b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "angl\\u00E8s (Estats Units)", "franc\\u00E8s (Fran\\u00E7a)", "catal\\u00E0 (Espanya)", "grec (Gr\\u00E8cia)", "noruec (Noruega, NY)", "itali\\u00E0", "", "xin\\u00E8s (simplificat, Xina)" }, 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (Greek)[actual values listed below] 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac", 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac", 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac", 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac", 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac", 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c4\\u03b1\\u03bb\\u03b9\\u03ba\\u03ac", 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC" 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (Greek) 9359d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "", "", "\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf \\u03a7\\u03b1\\u03bd" }, 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (Greek)[actual values listed below] 9559d709d503bab6e2b61931737e662dd293b40578ccornelius { "\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2", 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1", 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1", 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1", 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1", 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039A\\u03AF\\u03BD\\u03B1" 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (Greek) 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "" }, 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (Greek)[actual values listed below] 10759d709d503bab6e2b61931737e662dd293b40578ccornelius { "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac (\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2)", 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac (\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1)", 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1)", 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac (\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1)", 11159d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac (\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1, NY)", 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c4\\u03b1\\u03bb\\u03b9\\u03ba\\u03ac", 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 11459d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC (\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf, \\u039A\\u03AF\\u03BD\\u03B1)" 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (<root>) 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English", "French", "Catalan", "Greek", "Norwegian", "Italian", "xx", "" }, 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (<root>) 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "", "", "", ""}, 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (<root>) 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "United States", "France", "Spain", "Greece", "Norway", "", "YY", "" }, 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (<root>) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "Nynorsk", "", "", ""}, 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (<root>) 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //{ "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway,Nynorsk)", "Italian", "xx (YY)" }, 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway,NY)", "Italian", "xx (YY)", "" } 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Usage: 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert( Test (should be TRUE) ) 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Example: 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(i==3); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru the macro is ugly but makes the tests pretty. 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define test_assert(test) \ 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { \ 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(test)) \ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " #test " was not true. In " __FILE__ " on line %d", __LINE__ ); \ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else \ 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: asserted " #test); \ 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Usage: 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert_print( Test (should be TRUE), printable ) 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Example: 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(i==3, toString(i)); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru the macro is ugly but makes the tests pretty. 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define test_assert_print(test,print) \ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { \ 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(test)) \ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " #test " was not true. " + UnicodeString(print) ); \ 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else \ 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: asserted " #test "-> " + UnicodeString(print)); \ 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define test_dumpLocale(l) { logln(#l " = " + UnicodeString(l.getName(), "")); } 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::LocaleTest() 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru: dataTable(NULL) 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setUpDataTable(); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::~LocaleTest() 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dataTable != 0) { 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 33; i++) { 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete []dataTable[i]; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete []dataTable; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable = 0; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 189f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO_BEGIN; 1901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TESTCASE_AUTO(TestBug11421); // Must run early in list to trigger failure. 191f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestBasicGetters); 192f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSimpleResourceInfo); 193f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestDisplayNames); 194f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSimpleObjectStuff); 195f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestPOSIXParsing); 196f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetAvailableLocales); 197f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestDataDirectory); 198f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestISO3Fallback); 199f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetLangsAndCountries); 200f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSimpleDisplayNames); 201f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestUninstalledISO3Names); 202f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestAtypicalLocales); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 204f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestThaiCurrencyFormat); 205f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestEuroSupport); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 207f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestToString); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 209f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4139940); 210f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4143951); 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 212f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4147315); 213f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4147317); 214f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4147552); 215f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestVariantParsing); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 217f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4105828); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 219f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSetIsBogus); 220f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestParallelAPIValues); 221f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestKeywordVariants); 222f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestKeywordVariantParsing); 223f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSetKeywordValue); 224f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetBaseName); 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 226f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetLocale); 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 228f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestVariantWithOutCountry); 229f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCanonicalization); 230f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCurrencyByDate); 231f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetVariantWithKeywords); 232f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestIsRightToLeft); 233ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert TESTCASE_AUTO(TestBug13277); 234f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO_END; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestBasicGetters() { 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i <= MAX_LOCALES; i++) { 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(""); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rawData[SCRIPT][i] && rawData[SCRIPT][i][0] != 0) { 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[SCRIPT][i], rawData[CTRY][i], rawData[VAR][i]); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[CTRY][i], rawData[VAR][i]); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing " + (UnicodeString)testLocale.getName() + "..."); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getLanguage()) != (dataTable[LANG][i])) 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Language code mismatch: " + temp + " versus " 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[LANG][i]); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getScript()) != (dataTable[SCRIPT][i])) 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Script code mismatch: " + temp + " versus " 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[SCRIPT][i]); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getCountry()) != (dataTable[CTRY][i])) 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Country code mismatch: " + temp + " versus " 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[CTRY][i]); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getVariant()) != (dataTable[VAR][i])) 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Variant code mismatch: " + temp + " versus " 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[VAR][i]); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getName()) != (dataTable[NAME][i])) 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Locale name mismatch: " + temp + " versus " 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[NAME][i]); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Same thing without variant codes..."); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i <= MAX_LOCALES; i++) { 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(""); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rawData[SCRIPT][i] && rawData[SCRIPT][i][0] != 0) { 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[SCRIPT][i], rawData[CTRY][i]); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[CTRY][i]); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing " + (temp=testLocale.getName()) + "..."); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getLanguage()) != (dataTable[LANG][i])) 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Language code mismatch: " + temp + " versus " 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[LANG][i]); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getScript()) != (dataTable[SCRIPT][i])) 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Script code mismatch: " + temp + " versus " 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[SCRIPT][i]); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getCountry()) != (dataTable[CTRY][i])) 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Country code mismatch: " + temp + " versus " 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[CTRY][i]); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testLocale.getVariant()[0] != 0) 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Variant code mismatch: something versus \"\""); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing long language names and getters"); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test8 = Locale::createFromName("x-klingon-latn-zx.utf32be@special"); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getLanguage(); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("x-klingon") ) 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Language code mismatch: " + temp + " versus \"x-klingon\""); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getScript(); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("Latn") ) 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Script code mismatch: " + temp + " versus \"Latn\""); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getCountry(); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("ZX") ) 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Country code mismatch: " + temp + " versus \"ZX\""); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getVariant(); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if (temp != UnicodeString("SPECIAL") ) 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln("Variant code mismatch: " + temp + " versus \"SPECIAL\""); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // As of 3.0, the "@special" will *not* be parsed by uloc_getName() 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("") ) 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Variant code mismatch: " + temp + " versus \"\""); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (Locale::getDefault() != Locale::createFromName(NULL)) 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Locale::getDefault() == Locale::createFromName(NULL)"); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*----------*/ 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NOTE: There used to be a special test for locale names that had language or 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // country codes that were longer than two letters. The new version of Locale 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // doesn't support anything that isn't an officially recognized language or 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // country code, so we no longer support this feature. 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusLang("THISISABOGUSLANGUAGE"); // Jitterbug 2864: language code too long 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!bogusLang.isBogus()) { 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Locale(\"THISISABOGUSLANGUAGE\").isBogus()==FALSE"); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusLang=Locale("eo"); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( bogusLang.isBogus() || 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp(bogusLang.getLanguage(), "eo")!=0 || 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bogusLang.getCountry()!=0 || 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bogusLang.getVariant()!=0 || 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp(bogusLang.getName(), "eo")!=0 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("assignment to bogus Locale does not unbogus it or sets bad data"); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale a("eo_DE@currency=DEM"); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale *pb=a.clone(); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pb==&a || *pb!=a) { 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Locale.clone() failed"); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pb; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestParallelAPIValues() { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Test synchronization between C and C++ API"); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getChinese().getName(), ULOC_CHINESE) != 0) { 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CHINESE Locale"); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getEnglish().getName(), ULOC_ENGLISH) != 0) { 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_ENGLISH Locale"); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getFrench().getName(), ULOC_FRENCH) != 0) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_FRENCH Locale"); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getGerman().getName(), ULOC_GERMAN) != 0) { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_GERMAN Locale"); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getItalian().getName(), ULOC_ITALIAN) != 0) { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_ITALIAN Locale"); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getJapanese().getName(), ULOC_JAPANESE) != 0) { 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_JAPANESE Locale"); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getKorean().getName(), ULOC_KOREAN) != 0) { 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_KOREAN Locale"); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getSimplifiedChinese().getName(), ULOC_SIMPLIFIED_CHINESE) != 0) { 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_SIMPLIFIED_CHINESE Locale"); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getTraditionalChinese().getName(), ULOC_TRADITIONAL_CHINESE) != 0) { 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_TRADITIONAL_CHINESE Locale"); 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getCanada().getName(), ULOC_CANADA) != 0) { 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CANADA Locale"); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getCanadaFrench().getName(), ULOC_CANADA_FRENCH) != 0) { 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CANADA_FRENCH Locale"); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getChina().getName(), ULOC_CHINA) != 0) { 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CHINA Locale"); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getPRC().getName(), ULOC_PRC) != 0) { 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_PRC Locale"); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getFrance().getName(), ULOC_FRANCE) != 0) { 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_FRANCE Locale"); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getGermany().getName(), ULOC_GERMANY) != 0) { 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_GERMANY Locale"); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getItaly().getName(), ULOC_ITALY) != 0) { 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_ITALY Locale"); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getJapan().getName(), ULOC_JAPAN) != 0) { 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_JAPAN Locale"); 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getKorea().getName(), ULOC_KOREA) != 0) { 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_KOREA Locale"); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getTaiwan().getName(), ULOC_TAIWAN) != 0) { 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_TAIWAN Locale"); 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getUK().getName(), ULOC_UK) != 0) { 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_UK Locale"); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getUS().getName(), ULOC_US) != 0) { 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_US Locale"); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestSimpleResourceInfo() { 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char temp2[20]; 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i <= MAX_LOCALES; i++) { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(rawData[LANG][i], rawData[CTRY][i], rawData[VAR][i]); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing " + (temp=testLocale.getName()) + "..."); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getISO3Language()) != (dataTable[LANG3][i])) 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" ISO-3 language code mismatch: " + temp 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " versus " + dataTable[LANG3][i]); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getISO3Country()) != (dataTable[CTRY3][i])) 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" ISO-3 country code mismatch: " + temp 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " versus " + dataTable[CTRY3][i]); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(temp2, "%x", (int)testLocale.getLCID()); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (UnicodeString(temp2) != dataTable[LCID][i]) 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)" LCID mismatch: " + temp2 + " versus " 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[LCID][i]); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(err)) 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Some error on number " + i + u_errorName(err)); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err = U_ZERO_ERROR; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locale("en"); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(locale.getName(), "en") != 0|| 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp(locale.getLanguage(), "en") != 0) { 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("construction of Locale(en) failed\n"); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*-----*/ 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Jitterbug 2439 -- markus 20030425 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The lookup of display names must not fall back through the default 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * locale because that yields useless results. 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestDisplayNames() 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale english("en", "US"); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale french("fr", "FR"); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale croatian("ca", "ES"); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale greek("el", "GR"); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = en_US..."); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(english, DLANG_EN); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = fr_FR..."); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(french, DLANG_FR); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = ca_ES..."); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(croatian, DLANG_CA); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = el_GR..."); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(greek, DLANG_EL); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols symb(status); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Check to see if ICU supports this locale */ 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (symb.getLocale(ULOC_VALID_LOCALE, status) != Locale("root")) { 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test that the default locale has a display name for its own language */ 48527f654740f2a26ad62a5c155af9199af9e69b889claireho /* Currently, there is no language information in the "tl" data file so this test will fail if default locale is "tl" */ 48627f654740f2a26ad62a5c155af9199af9e69b889claireho if (uprv_strcmp(Locale().getLanguage(), "tl") != 0) { 48727f654740f2a26ad62a5c155af9199af9e69b889claireho Locale().getDisplayLanguage(Locale(), s); 48827f654740f2a26ad62a5c155af9199af9e69b889claireho if(s.length()<=3 && s.charAt(0)<=0x7f) { 48927f654740f2a26ad62a5c155af9199af9e69b889claireho /* check <=3 to reject getting the language code as a display name */ 49027f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("unable to get a display string for the language of the default locale: " + s); 49127f654740f2a26ad62a5c155af9199af9e69b889claireho } 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49327f654740f2a26ad62a5c155af9199af9e69b889claireho /* 49427f654740f2a26ad62a5c155af9199af9e69b889claireho * API coverage improvements: call 49527f654740f2a26ad62a5c155af9199af9e69b889claireho * Locale::getDisplayLanguage(UnicodeString &) and 49627f654740f2a26ad62a5c155af9199af9e69b889claireho * Locale::getDisplayCountry(UnicodeString &) 49727f654740f2a26ad62a5c155af9199af9e69b889claireho */ 49827f654740f2a26ad62a5c155af9199af9e69b889claireho s.remove(); 49927f654740f2a26ad62a5c155af9199af9e69b889claireho Locale().getDisplayLanguage(s); 50027f654740f2a26ad62a5c155af9199af9e69b889claireho if(s.length()<=3 && s.charAt(0)<=0x7f) { 50127f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("unable to get a display string for the language of the default locale [2]: " + s); 50227f654740f2a26ad62a5c155af9199af9e69b889claireho } 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Default locale %s is unsupported by ICU\n", Locale().getName()); 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.remove(); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru french.getDisplayCountry(s); 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s.isEmpty()) { 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unable to get any default-locale display string for the country of fr_FR\n"); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.remove(); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("zh", "Hant").getDisplayScript(s); 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s.isEmpty()) { 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unable to get any default-locale display string for the country of zh_Hant\n"); 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestSimpleObjectStuff() { 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test1("aa", "AA"); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test2("aa", "AA"); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test3(test1); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test4("zz", "ZZ"); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test5("aa", "AA", ""); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test6("aa", "AA", "ANTARES"); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test7("aa", "AA", "JUPITER"); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test8 = Locale::createFromName("aa-aa-jupiTER"); // was "aa-aa.utf8@jupiter" but in 3.0 getName won't normalize that 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // now list them all for debugging usage. 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test1); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test2); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test3); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test4); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test5); 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test6); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test7); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test8); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure things compare to themselves! 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test1); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test2 == test2); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test3 == test3); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test4); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 == test5); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test6); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test7); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test8 == test8); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // make sure things are not equal to themselves. 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test1)); 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test2)); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test3 != test3)); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test4 != test4)); 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test5 != test5)); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test6 != test6)); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test7 != test7)); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test8 != test8)); 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // make sure things that are equal to each other don't show up as unequal. 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test2)); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test1)); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test3)); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test3)); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 == test1); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test2); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test5); 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test7); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test for things that shouldn't compare equal. 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 == test4)); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 == test4)); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test3 == test4)); 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test8); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test for hash codes to be the same. 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash1 = test1.hashCode(); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash2 = test2.hashCode(); 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash3 = test3.hashCode(); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash1 == hash2); 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash1 == hash3); 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash2 == hash3); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test that the assignment operator works. 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4 = test1; 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("test4=test1;"); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test4); 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test4); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test4)); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test4)); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test3 != test4)); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test4); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test1); 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test assignments with a variant 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("test7 = test6"); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test7 = test6; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test7); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test7); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test6); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 != test5); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("test6 = test1"); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test6=test1; 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test6); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test7); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test1); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test6); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// A class which exposes constructors that are implemented in terms of the POSIX parsing code. 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass POSIXLocale : public Locale 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale(const UnicodeString& l) 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru :Locale() 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *ch; 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ch = new char[l.length() + 1]; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ch[l.extract(0, 0x7fffffff, ch, "")] = 0; 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromPOSIXID(ch); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete [] ch; 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale(const char *l) 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru :Locale() 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromPOSIXID(l); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestPOSIXParsing() 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test1("ab_AB"); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test2(UnicodeString("ab_AB")); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test3("ab","AB"); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test4("ab_AB_Antares"); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test5(UnicodeString("ab_AB_Antares")); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test6("ab", "AB", "Antares"); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test1); 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test2); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test3); 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test4); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test5); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test6); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test1); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test2); 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test2 == test3); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test3 == test1); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test5); 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 == test6); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test4); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 != test4); 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 != test3); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 != test2); 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash1 = test1.hashCode(); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash2 = test2.hashCode(); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash3 = test3.hashCode(); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash1 == hash2); 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash2 == hash3); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash3 == hash1); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestGetAvailableLocales() 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t locCount = 0; 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* locList = Locale::getAvailableLocales(locCount); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (locCount == 0) 6836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("getAvailableLocales() returned an empty list!"); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Number of locales returned = ") + locCount); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i = 0; i < locCount; ++i) 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(locList[i].getName()); 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // I have no idea how to test this function... 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This test isn't applicable anymore - getISO3Language is 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// independent of the data directory 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestDataDirectory() 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char oldDirectory[80]; 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* temp; 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testValue; 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = Locale::getDataDirectory(); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(oldDirectory, temp); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("oldDirectory = ") + oldDirectory); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test(Locale::US); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.getISO3Language(testValue); 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("first fetch of language retrieved " + testValue); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testValue != "eng") 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Initial check of ISO3 language failed: expected \"eng\", got \"" + testValue + "\""); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *path; 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru path=IntlTest::getTestDirectory(); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDataDirectory( path ); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.getISO3Language(testValue); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("second fetch of language retrieved " + testValue); 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testValue != "xxx") 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("setDataDirectory() failed: expected \"xxx\", got \"" + testValue + "\""); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDataDirectory(oldDirectory); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.getISO3Language(testValue); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("third fetch of language retrieved " + testValue); 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testValue != "eng") 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("get/setDataDirectory() failed: expected \"eng\", got \"" + testValue + "\""); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//=========================================================== 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::doTestDisplayNames(Locale& displayLocale, int32_t compareIndex) { 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i <= MAX_LOCALES; i++) { 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(""); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rawData[SCRIPT][i] && rawData[SCRIPT][i][0] != 0) { 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[SCRIPT][i], rawData[CTRY][i], rawData[VAR][i]); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[CTRY][i], rawData[VAR][i]); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" Testing " + (temp=testLocale.getName()) + "..."); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testLang; 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testScript; 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testCtry; 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testVar; 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testName; 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayLanguage(displayLocale, testLang); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayScript(displayLocale, testScript); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayCountry(displayLocale, testCtry); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayVariant(displayLocale, testVar); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayName(displayLocale, testName); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedLang; 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedScript; 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedCtry; 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedVar; 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedName; 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang = dataTable[compareIndex][i]; 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedLang.length() == 0) 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang = dataTable[DLANG_EN][i]; 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedScript = dataTable[compareIndex + 1][i]; 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedScript.length() == 0) 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedScript = dataTable[DSCRIPT_EN][i]; 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedCtry = dataTable[compareIndex + 2][i]; 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedCtry.length() == 0) 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedCtry = dataTable[DCTRY_EN][i]; 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedVar = dataTable[compareIndex + 3][i]; 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedVar.length() == 0) 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedVar = dataTable[DVAR_EN][i]; 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedName = dataTable[compareIndex + 4][i]; 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedName.length() == 0) 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedName = dataTable[DNAME_EN][i]; 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testLang != expectedLang) 7866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display language (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testLang + " expected " + expectedLang); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testScript != expectedScript) 7886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display script (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testScript + " expected " + expectedScript); 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testCtry != expectedCtry) 7906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display country (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testCtry + " expected " + expectedCtry); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testVar != expectedVar) 7926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display variant (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testVar + " expected " + expectedVar); 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testName != expectedName) 7946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display name (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testName + " expected " + expectedName); 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------- 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// table of valid data 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------- 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::setUpDataTable() 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dataTable == 0) { 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable = new UnicodeString*[33]; 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 33; i++) { 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable[i] = new UnicodeString[8]; 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t j = 0; j < 8; j++) { 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable[i][j] = CharsToUnicodeString(rawData[i][j]); 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ==================== 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4011756 4011380 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestISO3Fallback() 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test("xx", "YY"); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char * result; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = test.getISO3Language(); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Conform to C API usage 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!result || (result[0] != 0)) 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("getISO3Language() on xx_YY returned " + UnicodeString(result) + " instead of \"\""); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = test.getISO3Country(); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!result || (result[0] != 0)) 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("getISO3Country() on xx_YY returned " + UnicodeString(result) + " instead of \"\""); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4106155 4118587 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestGetLangsAndCountries() 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // It didn't seem right to just do an exhaustive test of everything here, so I check 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // for the following things: 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 1) Does each list have the right total number of entries? 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 2) Does each list contain certain language and country codes we think are important 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (the G7 countries, plus a couple others)? 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 3) Does each list have every entry formatted correctly? (i.e., two characters, 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // all lower case for the language codes, all upper case for the country codes) 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 4) Is each list in sorted order? 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t testCount = 0; 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char * const * test = Locale::getISOLanguages(); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char spotCheck1[ ][4] = { "en", "es", "fr", "de", "it", 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ja", "ko", "zh", "th", "he", 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "id", "iu", "ug", "yi", "za" }; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(testCount = 0;test[testCount];testCount++) 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: Change this test to be more like the cloctst version? */ 870ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert if (testCount != 595) 871ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert errln("Expected getISOLanguages() to return 595 languages; it returned %d", testCount); 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 15; i++) { 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t j; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j = 0; j < testCount; j++) 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(test[j],spotCheck1[i])== 0) 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (j == testCount || (uprv_strcmp(test[j],spotCheck1[i])!=0)) 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Couldn't find " + (UnicodeString)spotCheck1[i] + " in language list."); 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < testCount; i++) { 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testee(test[i],""); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString lc(test[i],""); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee != lc.toLower()) 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(lc + " is not all lower case."); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (testee.length() != 2) && (testee.length() != 3)) 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " is not two or three characters long."); 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i > 0 && testee.compare(test[i - 1]) <= 0) 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " appears in an out-of-order position in the list."); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = Locale::getISOCountries(); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString spotCheck2 [] = { "US", "CA", "GB", "FR", "DE", 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "IT", "JP", "KR", "CN", "TW", 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "TH" }; 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t spot2Len = 11; 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(testCount=0;test[testCount];testCount++) 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (testCount != 249){ 9028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln("Expected getISOCountries to return 249 countries; it returned %d", testCount); 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else { 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < spot2Len; i++) { 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t j; 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j = 0; j < testCount; j++) 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testee(test[j],""); 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee == spotCheck2[i]) 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testee(test[j],""); 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (j == testCount || testee != spotCheck2[i]) 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Couldn't find " + spotCheck2[i] + " in country list."); 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (i = 0; i < testCount; i++) { 919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testee(test[i],""); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString uc(test[i],""); 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee != uc.toUpper()) 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " is not all upper case."); 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee.length() != 2) 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " is not two characters long."); 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i > 0 && testee.compare(test[i - 1]) <= 0) 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " appears in an out-of-order position in the list."); 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // This getAvailableLocales and getISO3Language 930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t numOfLocales; 932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale enLoc ("en"); 933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const Locale *pLocales = Locale::getAvailableLocales(numOfLocales); 934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int i = 0; i < numOfLocales; i++) { 936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const Locale &loc(pLocales[i]); 937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString name; 938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char szName[200]; 939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho loc.getDisplayName (enLoc, name); 941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name.extract (0, 200, szName, sizeof(szName)); 942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (strlen(loc.getISO3Language()) == 0) { 944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("getISO3Language() returned an empty string for: " + name); 945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4118587 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestSimpleDisplayNames() 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test is different from TestDisplayNames because TestDisplayNames checks 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fallback behavior, combination of language and country names to form locale 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // names, and other stuff like that. This test just checks specific language 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // and country codes to make sure we have the correct names for them. 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char languageCodes[] [4] = { "he", "id", "iu", "ug", "yi", "za" }; 9618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString languageNames [] = { "Hebrew", "Indonesian", "Inuktitut", "Uyghur", "Yiddish", 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Zhuang" }; 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 6; i++) { 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test; 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(languageCodes[i], "", ""); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l.getDisplayLanguage(Locale::getUS(), test); 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test != languageNames[i]) 9696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Got wrong display name for " + UnicodeString(languageCodes[i]) + ": Expected \"" + 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru languageNames[i] + "\", got \"" + test + "\"."); 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4118595 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestUninstalledISO3Names() 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test checks to make sure getISO3Language and getISO3Country work right 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // even for locales that are not installed. 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char iso2Languages [][4] = { "am", "ba", "fy", "mr", "rn", 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ss", "tw", "zu" }; 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char iso3Languages [][5] = { "amh", "bak", "fry", "mar", "run", 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ssw", "twi", "zul" }; 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 8; i++) { 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test; 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(iso2Languages[i], "", ""); 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = l.getISO3Language(); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((test != iso3Languages[i]) || U_FAILURE(err)) 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got wrong ISO3 code for " + UnicodeString(iso2Languages[i]) + ": Expected \"" + 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iso3Languages[i] + "\", got \"" + test + "\"." + UnicodeString(u_errorName(err))); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char iso2Countries [][4] = { "AF", "BW", "KZ", "MO", "MN", 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SB", "TC", "ZW" }; 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char iso3Countries [][4] = { "AFG", "BWA", "KAZ", "MAC", "MNG", 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SLB", "TCA", "ZWE" }; 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 8; i++) { 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l("", iso2Countries[i], ""); 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test(l.getISO3Country(), ""); 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test != iso3Countries[i]) 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got wrong ISO3 code for " + UnicodeString(iso2Countries[i]) + ": Expected \"" + 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(iso3Countries[i]) + "\", got \"" + test + "\"." + u_errorName(err)); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4092475 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * I could not reproduce this bug. I'm pretty convinced it was fixed with the 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * big locale-data reorg of 10/28/97. The lookup logic for language and country 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * display names was also changed at that time in that check-in. --rtg 3/20/98 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestAtypicalLocales() 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale localesToTest [] = { Locale("de", "CA"), 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("ja", "ZA"), 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("ru", "MX"), 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("en", "FR"), 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("es", "DE"), 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "HR"), 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "SE"), 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "DO"), 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "BE") }; 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString englishDisplayNames [] = { "German (Canada)", 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Japanese (South Africa)", 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Russian (Mexico)", 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "English (France)", 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Spanish (Germany)", 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croatia", 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Sweden", 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Dominican Republic", 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Belgium" }; 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString frenchDisplayNames []= { "allemand (Canada)", 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "japonais (Afrique du Sud)", 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "russe (Mexique)", 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "anglais (France)", 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "espagnol (Allemagne)", 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croatie", 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("Su\\u00E8de"), 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("R\\u00E9publique dominicaine"), 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Belgique" }; 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString spanishDisplayNames [] = { 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("alem\\u00E1n (Canad\\u00E1)"), 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("japon\\u00E9s (Sud\\u00E1frica)"), 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("ruso (M\\u00E9xico)"), 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("ingl\\u00E9s (Francia)"), 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("espa\\u00F1ol (Alemania)"), 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croacia", 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Suecia", 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("Rep\\u00FAblica Dominicana"), 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("B\\u00E9lgica") }; 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // De-Anglicizing root required the change from 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // English display names to ISO Codes - ram 2003/09/26 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString invDisplayNames [] = { "German (Canada)", 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Japanese (South Africa)", 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Russian (Mexico)", 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "English (France)", 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Spanish (Germany)", 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croatia", 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Sweden", 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Dominican Republic", 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Belgium" }; 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getUS(), status); 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; ++i) { 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale::getUS(), name); 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != englishDisplayNames[i]) 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 10846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in English failed: expected \"" + englishDisplayNames[i] 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + name + "\""); 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Locale name was-> " + (name=localesToTest[i].getName())); 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; i++) { 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale("es", "ES"), name); 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != spanishDisplayNames[i]) 10956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in Spanish failed: expected \"" + spanishDisplayNames[i] 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + name + "\""); 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; i++) { 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale::getFrance(), name); 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != frenchDisplayNames[i]) 11046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in French failed: expected \"" + frenchDisplayNames[i] 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + name + "\""); 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; i++) { 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale("inv", "IN"), name); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name + " Locale fallback to be, and data fallback to root"); 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != invDisplayNames[i]) 11136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in INV failed: expected \"" + prettify(invDisplayNames[i]) 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + prettify(name) + "\""); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale("inv", "BD"), name); 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name + " Data fallback to root"); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != invDisplayNames[i]) 11186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in INV failed: expected \"" + prettify(invDisplayNames[i]) 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + prettify(name )+ "\""); 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4135752 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This would be better tested by the LocaleDataTest. Will move it when I 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * get the LocaleDataTest working again. 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestThaiCurrencyFormat() 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *thaiCurrency = (DecimalFormat*)NumberFormat::createCurrencyInstance( 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("th", "TH"), status); 1137f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString posPrefix("THB", 3, US_INV); // per cldrbug 7618 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || !thaiCurrency) 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 11426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't get th_TH currency -> " + UnicodeString(u_errorName(status))); 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1145f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (thaiCurrency->getPositivePrefix(temp) != posPrefix) 1146f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("Thai currency prefix wrong: expected THB, got \"" + 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru thaiCurrency->getPositivePrefix(temp) + "\""); 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (thaiCurrency->getPositiveSuffix(temp) != "") 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Thai currency suffix wrong: expected \"\", got \"" + 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru thaiCurrency->getPositiveSuffix(temp) + "\""); 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete thaiCurrency; 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4122371 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that Euro support works. This test is pretty rudimentary; all it does 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is check that any locales with the EURO variant format a number using the 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Euro currency symbol. 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ASSUME: All locales encode the Euro character "\u20AC". 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If this is changed to use the single-character Euro symbol, this 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test must be updated. 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestEuroSupport() 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar euro = 0x20ac; 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString EURO_CURRENCY(&euro, 1, 1); // Look for this UnicodeString in formatted Euro currency 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeArr[] = { 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES", 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_AT", 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_LU", 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "el_GR", 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_BE", 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_IE", 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_GB_EURO", 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_US_EURO", 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "es_ES", 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "eu_ES", 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fi_FI", 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_BE", 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_FR", 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_LU", 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ga_IE", 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "gl_ES", 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "it_IT", 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "nl_BE", 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "nl_NL", 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pt_PT", 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char** locales = localeArr; 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;*locales!=NULL;locales++) { 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc (*locales); 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *nf = NumberFormat::createCurrencyInstance(loc, status); 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pos; 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createCurrencyInstance(%s)", *locales); 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(271828.182845, pos); 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString neg; 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(-271828.182845, neg); 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.indexOf(EURO_CURRENCY) >= 0 && 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru neg.indexOf(EURO_CURRENCY) >= 0) { 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: " + (temp=loc.getName()) + 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ": " + pos + " / " + neg); 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + (temp=loc.getName()) + 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " formats without " + EURO_CURRENCY + 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ": " + pos + " / " + neg + 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n*** THIS FAILURE MAY ONLY MEAN THAT LOCALE DATA HAS CHANGED ***"); 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dollarStr("USD", ""), euroStr("EUR", ""), genericStr((UChar)0x00a4), resultStr; 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar tmp[4]; 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", tmp, 4, &status); 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dollarStr != resultStr) { 12376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US didn't return USD - %s", u_errorName(status)); 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", tmp, 4, &status); 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (euroStr != resultStr) { 12426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_EURO didn't return EUR - %s", u_errorName(status)); 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_GB_EURO", tmp, 4, &status); 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (euroStr != resultStr) { 12476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_GB_EURO didn't return EUR - %s", u_errorName(status)); 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_PREEURO", tmp, 4, &status); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dollarStr != resultStr) { 12526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_PREEURO didn't fallback to en_US - %s", u_errorName(status)); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_Q", tmp, 4, &status); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dollarStr != resultStr) { 12576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_Q didn't fallback to en_US - %s", u_errorName(status)); 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t invalidLen = ucurr_forLocale("en_QQ", tmp, 4, &status); 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (invalidLen || U_SUCCESS(status)) { 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: en_QQ didn't return NULL"); 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1263ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert 1264ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert // The currency keyword value is as long as the destination buffer. 1265ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert // It should detect the overflow internally, and default to the locale's currency. 1266ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert tmp[0] = u'¤'; 1267ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert status = U_ZERO_ERROR; 1268ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert int32_t length = ucurr_forLocale("en_US@currency=euro", tmp, 4, &status); 1269ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert if (U_FAILURE(status) || dollarStr != UnicodeString(tmp, length)) { 1270ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert if (U_SUCCESS(status) && tmp[0] == u'¤') { 1271ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert errln("Fail: ucurr_forLocale(en_US@currency=euro) succeeded without writing output"); 1272ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert } else { 1273ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert errln("Fail: ucurr_forLocale(en_US@currency=euro) != USD - %s", u_errorName(status)); 1274ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert } 1275ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert } 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4139504 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * toString() doesn't work with language_VARIANT. 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestToString() { 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale DATA [] = { 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "", ""), 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "YY", ""), 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "", "ZZ"), 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "YY", ""), 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "", "ZZ"), 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "YY", "ZZ"), 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "YY", "ZZ"), 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char DATA_S [][20] = { 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx", 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "_YY", 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "__ZZ", 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx_YY", 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx__ZZ", 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "_YY_ZZ", 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx_YY_ZZ", 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i < 7; ++i) { 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *name; 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = DATA[i].getName(); 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(name, DATA_S[i]) != 0) 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Locale.getName(), got:" + UnicodeString(name) + ", expected: " + DATA_S[i]); 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Pass: Locale.getName(), got:" + UnicodeString(name) ); 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4139940 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Couldn't reproduce this bug -- probably was fixed earlier. 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ORIGINAL BUG REPORT: 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -- basically, hungarian for monday shouldn't have an \u00f4 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (o circumflex)in it instead it should be an o with 2 inclined 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (right) lines over it.. 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You may wonder -- why do all this -- why not just add a line to 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * LocaleData? Well, I could see by inspection that the locale file had the 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * right character in it, so I wanted to check the rest of the pipeline -- a 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * very remote possibility, but I wanted to be sure. The other possibility 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is that something is wrong with the font mapping subsystem, but we can't 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test that here. 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4139940() 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale mylocale("hu", "", ""); 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate mydate = date(98,3,13); // A Monday 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat df_full("EEEE", mylocale, status); 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 134550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln(UnicodeString("Could not create SimpleDateFormat object for locale hu. Error: ") + UnicodeString(u_errorName(status))); 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df_full.format(mydate, str, pos); 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure that o circumflex (\u00F4) is NOT there, and 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // o double acute (\u0151) IS. 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ocf = 0x00f4; 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar oda = 0x0151; 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str.indexOf(oda) < 0 || str.indexOf(ocf) >= 0) { 135627f654740f2a26ad62a5c155af9199af9e69b889claireho /* If the default locale is "th" this test will fail because of the buddhist calendar. */ 135727f654740f2a26ad62a5c155af9199af9e69b889claireho if (strcmp(Locale::getDefault().getLanguage(), "th") != 0) { 135827f654740f2a26ad62a5c155af9199af9e69b889claireho errln("Fail: Monday in Hungarian is wrong - oda's index is %d and ocf's is %d", 135927f654740f2a26ad62a5c155af9199af9e69b889claireho str.indexOf(oda), str.indexOf(ocf)); 136027f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 136127f654740f2a26ad62a5c155af9199af9e69b889claireho logln(UnicodeString("An error is produce in buddhist calendar.")); 136227f654740f2a26ad62a5c155af9199af9e69b889claireho } 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("String is: ") + str ); 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::date(int32_t y, int32_t m, int32_t d, int32_t hr, int32_t min, int32_t sec) 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(status); 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal == 0) 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0.0; 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1900 + y, m, d, hr, min, sec); // Add 1900 to follow java.util.Date protocol 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dt = cal->getTime(status); 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0.0; 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return dt; 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4143951 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Russian first day of week should be Monday. Confirmed. 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4143951() 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(Locale("ru", "", ""), status); 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getFirstDayOfWeek(status) != UCAL_MONDAY) { 13956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail: First day of week in Russia should be Monday"); 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4147315 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * java.util.Locale.getISO3Country() works wrong for non ISO-3166 codes. 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Should throw an exception for unknown locales 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4147315() 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Try with codes that are the wrong length but happen to match text 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // at a valid offset in the mapping table 14148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius Locale locale("xxx", "CCC"); 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *result = locale.getISO3Country(); 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Change to conform to C api usage 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((result==NULL)||(result[0] != 0)) 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getISO3Country() returns: " + UnicodeString(result,"") + 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " for locale '" + (temp=locale.getName()) + "' rather than exception" ); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4147317 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * java.util.Locale.getISO3Language() works wrong for non ISO-3166 codes. 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Should throw an exception for unknown locales 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4147317() 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Try with codes that are the wrong length but happen to match text 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // at a valid offset in the mapping table 14358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius Locale locale("xxx", "CCC"); 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *result = locale.getISO3Language(); 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Change to conform to C api usage 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((result==NULL)||(result[0] != 0)) 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getISO3Language() returns: " + UnicodeString(result,"") + 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " for locale '" + (temp=locale.getName()) + "' rather than exception" ); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4147552 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4147552() 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locales [] = { Locale("no", "NO"), 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("no", "NO", "B"), 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("no", "NO", "NY") 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString edn("Norwegian (Norway, B)"); 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString englishDisplayNames [] = { 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Norwegian (Norway)", 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru edn, 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "Norwegian (Norway,B)", 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"Norwegian (Norway,NY)" 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Norwegian (Norway, NY)" 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString ndn("norsk (Norge, B"); 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString norwegianDisplayNames [] = { 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "norsk (Norge)", 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "norsk (Norge, B)", 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //ndn, 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "norsk (Noreg, NY)" 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"Norsk (Noreg, Nynorsk)" 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 3; ++i) { 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc = locales[i]; 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (loc.getDisplayName(temp) != englishDisplayNames[i]) 14806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("English display-name mismatch: expected " + 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru englishDisplayNames[i] + ", got " + loc.getDisplayName(temp)); 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (loc.getDisplayName(loc, temp) != norwegianDisplayNames[i]) 14836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Norwegian display-name mismatch: expected " + 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru norwegianDisplayNames[i] + ", got " + 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loc.getDisplayName(loc, temp)); 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestVariantParsing() 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale en_US_custom("en", "US", "De Anza_Cupertino_California_United States_Earth"); 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dispName("English (United States, DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH)"); 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dispVar("DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH"); 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString got; 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru en_US_custom.getDisplayVariant(Locale::getUS(), got); 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != dispVar) { 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: " + dispVar); 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru en_US_custom.getDisplayName(Locale::getUS(), got); 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != dispName) { 15096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getDisplayName()"); 15106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Wanted: " + dispName); 15116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Got : " + got); 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale shortVariant("fr", "FR", "foo"); 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru shortVariant.getDisplayVariant(got); 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusVariant("fr", "FR", "_foo"); 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusVariant.getDisplayVariant(got); 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusVariant2("fr", "FR", "foo_"); 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusVariant2.getDisplayVariant(got); 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusVariant3("fr", "FR", "_foo_"); 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusVariant3.getDisplayVariant(got); 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4105828 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Currency symbol in zh is wrong. We will test this at the NumberFormat 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * end to test the whole pipe. 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4105828() 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale LOC [] = { Locale::getChinese(), Locale("zh", "CN", ""), 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("zh", "TW", ""), Locale("zh", "HK", "") }; 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 4; ++i) { 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *fmt = NumberFormat::createPercentInstance(LOC[i], status); 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 15676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't create NumberFormat - %s", u_errorName(status)); 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 157164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert FieldPosition pos(FieldPosition::DONT_CARE); 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format((int32_t)1, result, pos); 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != "100%") { 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Percent for ") + LOC[i].getDisplayName(temp) + " should be 100%, got " + result); 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Tests setBogus and isBogus APIs for Locale 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Jitterbug 1735 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestSetIsBogus() { 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l("en_US"); 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l.setToBogus(); 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(l.isBogus() != TRUE) { 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("After setting bogus, didn't return TRUE"); 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l = "en_US"; // This should reset bogus 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(l.isBogus() != FALSE) { 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("After resetting bogus, didn't return FALSE"); 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestKeywordVariants(void) { 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedLocaleID; 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //const char *expectedLocaleIDNoKeywords; 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //const char *expectedCanonicalID; 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedKeywords[10]; 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numKeywords; 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode expectedStatus; 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@ currency = euro; C o ll A t i o n = Phonebook ; C alen dar = buddhist ", 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@calendar=buddhist;collation=Phonebook;currency=euro", 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE", 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE@calendar=buddhist;collation=Phonebook;currency=euro", 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"calendar", "collation", "currency"}, 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ZERO_ERROR 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro", 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro", 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE", 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE@currency=EUR", 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"","","","","","",""}, 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_INVALID_FORMAT_ERROR /* must have '=' after '@' */ 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0, j = 0; 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *result = NULL; 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration *keywords; 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keyCount = 0; 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *keyword = NULL; 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString *keywordString; 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordLen = 0; 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16398de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(testCases[i].localeID); 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords = l.createKeywords(status); 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != testCases[i].expectedStatus) { 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get status %s. Got %s instead\n", 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(testCases[i].expectedStatus), u_errorName(status)); 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keywords) { 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyCount = keywords->count(status)) != testCases[i].numKeywords) { 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get %i keywords, got %i\n", testCases[i].numKeywords, keyCount); 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keyCount) { 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j = 0;;) { 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((j&1)==0) { 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyword = keywords->next(&keywordLen, status)) == NULL) { 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keywordString = keywords->snext(status)) == NULL) { 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*keywordString != UnicodeString(testCases[i].expectedKeywords[j], "")) { 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get keyword UnicodeString %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j++; 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(j == keyCount / 2) { 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // replace keywords with a clone of itself 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration *k2 = keywords->clone(); 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(k2 == NULL || keyCount != k2->count(status)) { 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("KeywordEnumeration.clone() failed"); 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete keywords; 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords = k2; 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords->reset(status); // Make sure that reset works. 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j = 0;;) { 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyword = keywords->next(&keywordLen, status)) == NULL) { 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j++; 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete keywords; 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = l.getName(); 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(testCases[i].expectedLocaleID, result) != 0) { 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get \"%s\" from \"%s\". Got \"%s\" instead\n", 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].expectedLocaleID, testCases[i].localeID, result); 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestKeywordVariantParsing(void) { 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *keyword; 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedValue; 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ C o ll A t i o n = Phonebook ", "collation", "Phonebook" }, 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE", "collation", ""}, 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@collation= PHONEBOOK", "collation", "PHONEBOOK" }, 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ currency = euro ; CoLLaTion = PHONEBOOk ", "collation", "PHONEBOOk" }, 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLen = 0; 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17258de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *buffer = 0; 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(testCases[i].localeID); 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = l.getKeywordValue(testCases[i].keyword, buffer, 256, status); 172959d709d503bab6e2b61931737e662dd293b40578ccornelius (void)resultLen; // Suppress unused variable warning. 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(testCases[i].expectedValue, buffer) != 0) { 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to extract \"%s\" from \"%s\" for keyword \"%s\". Got \"%s\" instead\n", 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].expectedValue, testCases[i].localeID, testCases[i].keyword, buffer); 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 173850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleTest::TestSetKeywordValue(void) { 173950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho static const struct { 174050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *keyword; 174150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *value; 174250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } testCases[] = { 174350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "collation", "phonebook" }, 174450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "currency", "euro" }, 174550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "calendar", "buddhist" } 174650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 174750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 174850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 174950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 175050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t i = 0; 175150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t resultLen = 0; 175250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buffer[256]; 175350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 175450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale l(Locale::getGerman()); 175550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17568de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 175750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho l.setKeywordValue(testCases[i].keyword, testCases[i].value, status); 175850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 175950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho err("FAIL: Locale::setKeywordValue failed - %s\n", u_errorName(status)); 176050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 176150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 176250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *buffer = 0; 176350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultLen = l.getKeywordValue(testCases[i].keyword, buffer, 256, status); 176459d709d503bab6e2b61931737e662dd293b40578ccornelius (void)resultLen; // Suppress unused variable warning. 176550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(uprv_strcmp(testCases[i].value, buffer) != 0) { 176650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho err("Expected to extract \"%s\" for keyword \"%s\". Got \"%s\" instead\n", 176750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho testCases[i].value, testCases[i].keyword, buffer); 176850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 176950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 177050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 177150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 177250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestGetBaseName(void) { 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *baseName; 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ C o ll A t i o n = Phonebook ", "de_DE" }, 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@currency = euro; CoLLaTion = PHONEBOOk", "de" }, 17801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "ja@calendar = buddhist", "ja" }, 17811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "de-u-co-phonebk", "de"} 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc(testCases[i].localeID); 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(testCases[i].baseName, loc.getBaseName())) { 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("For locale \"%s\" expected baseName \"%s\", but got \"%s\"", 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].localeID, testCases[i].baseName, loc.getBaseName()); 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 17941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 17951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // Verify that adding a keyword to an existing Locale doesn't change the base name. 17961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 17971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale loc2("en-US"); 17981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strcmp("en_US", loc2.getBaseName())) { 17991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d Expected \"en_US\", got \"%s\"", __FILE__, __LINE__, loc2.getBaseName()); 18001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert loc2.setKeywordValue("key", "value", status); 18021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strcmp("en_US@key=value", loc2.getName())) { 18031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d Expected \"en_US@key=value\", got \"%s\"", __FILE__, __LINE__, loc2.getName()); 18041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strcmp("en_US", loc2.getBaseName())) { 18061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d Expected \"en_US\", got \"%s\"", __FILE__, __LINE__, loc2.getBaseName()); 18071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare two locale IDs. If they are equal, return 0. If `string' 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * starts with `prefix' plus an additional element, that is, string == 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * prefix + '_' + x, then return 1. Otherwise return a value < 0. 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _loccmp(const char* string, const char* prefix) { 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t slen = (int32_t)strlen(string), 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru plen = (int32_t)strlen(prefix); 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t c = uprv_strncmp(string, prefix, plen); 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 'root' is "less than" everything */ 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(prefix, "root") == 0) { 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (uprv_strcmp(string, "root") == 0) ? 0 : 1; 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c) return -1; /* mismatch */ 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (slen == plen) return 0; 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (string[plen] == '_') return 1; 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -2; /* false match, e.g. "en_USX" cmp "en_US" */ 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check the relationship between requested locales, and report problems. 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The caller specifies the expected relationships between requested 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and valid (expReqValid) and between valid and actual (expValidActual). 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Possible values are: 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "gt" strictly greater than, e.g., en_US > en 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "ge" greater or equal, e.g., en >= en 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "eq" equal, e.g., en == en 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::_checklocs(const char* label, 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* req, 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& validLoc, 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& actualLoc, 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expReqValid, 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expValidActual) { 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* valid = validLoc.getName(); 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* actual = actualLoc.getName(); 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t reqValid = _loccmp(req, valid); 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t validActual = _loccmp(valid, actual); 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (((0 == uprv_strcmp(expReqValid, "gt") && reqValid > 0) || 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expReqValid, "ge") && reqValid >= 0) || 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expReqValid, "eq") && reqValid == 0)) && 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((0 == uprv_strcmp(expValidActual, "gt") && validActual > 0) || 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expValidActual, "ge") && validActual >= 0) || 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expValidActual, "eq") && validActual == 0))) { 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("%s; req=%s, valid=%s, actual=%s", 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label, req, valid, actual); 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 18576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: %s; req=%s, valid=%s, actual=%s. Require (R %s V) and (V %s A)", 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label, req, valid, actual, 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expReqValid, expValidActual); 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestGetLocale(void) { 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req; 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale valid, actual, reqLoc; 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Calendar 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 18701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 18711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 18721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "en_US_BROOKLYN"; 18731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Calendar* cal = Calendar::createInstance(Locale::createFromName(req), ec); 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 18751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: Calendar::createInstance failed - %s", u_errorName(ec)); 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 18771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = cal->getLocale(ULOC_VALID_LOCALE, ec); 18781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = cal->getLocale(ULOC_ACTUAL_LOCALE, ec); 18791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 18801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Calendar::getLocale() failed"); 18811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 18821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Calendar", req, valid, actual); 18831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert /* Make sure that it fails correctly */ 18851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert ec = U_FILE_ACCESS_ERROR; 18861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (cal->getLocale(ULOC_VALID_LOCALE, ec).getName()[0] != 0) { 18871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Calendar::getLocale() failed to fail correctly. It should have returned \"\""); 18881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert ec = U_ZERO_ERROR; 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 18911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete cal; 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DecimalFormat, DecimalFormatSymbols 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 18971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 18981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 18991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "fr_FR_NICE"; 19001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert NumberFormat* nf = NumberFormat::createInstance(Locale::createFromName(req), ec); 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 19021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: NumberFormat::createInstance failed - %s", u_errorName(ec)); 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 19041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DecimalFormat* dec = dynamic_cast<DecimalFormat*>(nf); 19051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (dec == NULL) { 19061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: NumberFormat::createInstance does not return a DecimalFormat"); 19071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = dec->getLocale(ULOC_VALID_LOCALE, ec); 19101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = dec->getLocale(ULOC_ACTUAL_LOCALE, ec); 19111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DecimalFormat::getLocale() failed"); 19131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("DecimalFormat", req, valid, actual); 19151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const DecimalFormatSymbols* sym = dec->getDecimalFormatSymbols(); 19181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (sym == NULL) { 19191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: getDecimalFormatSymbols returned NULL"); 19201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = sym->getLocale(ULOC_VALID_LOCALE, ec); 19231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); 19241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DecimalFormatSymbols::getLocale() failed"); 19261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("DecimalFormatSymbols", req, valid, actual); 19281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 19301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete nf; 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DateFormat, DateFormatSymbols 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 19361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 19371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 19381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "de_CH_LUCERNE"; 19391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DateFormat* df = 19401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DateFormat::createDateInstance(DateFormat::kDefault, 19411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale::createFromName(req)); 19421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (df == 0){ 19431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("Error calling DateFormat::createDateInstance()"); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 19451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert SimpleDateFormat* dat = dynamic_cast<SimpleDateFormat*>(df); 19461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (dat == NULL) { 19471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DateFormat::createInstance does not return a SimpleDateFormat"); 19481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = dat->getLocale(ULOC_VALID_LOCALE, ec); 19511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = dat->getLocale(ULOC_ACTUAL_LOCALE, ec); 19521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: SimpleDateFormat::getLocale() failed"); 19541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("SimpleDateFormat", req, valid, actual); 19561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const DateFormatSymbols* sym = dat->getDateFormatSymbols(); 19591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (sym == NULL) { 19601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: getDateFormatSymbols returned NULL"); 19611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = sym->getLocale(ULOC_VALID_LOCALE, ec); 19641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); 19651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DateFormatSymbols::getLocale() failed"); 19671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("DateFormatSymbols", req, valid, actual); 19691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 19711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete df; 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // BreakIterator 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 19771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 19781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 19791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "es_ES_BARCELONA"; 19801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert reqLoc = Locale::createFromName(req); 19811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert BreakIterator* brk = BreakIterator::createWordInstance(reqLoc, ec); 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 19831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: BreakIterator::createWordInstance failed - %s", u_errorName(ec)); 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 19851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = brk->getLocale(ULOC_VALID_LOCALE, ec); 19861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = brk->getLocale(ULOC_ACTUAL_LOCALE, ec); 19871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::getLocale() failed"); 19891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("BreakIterator", req, valid, actual); 19911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After registering something, the behavior should be different 19941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert URegistryKey key = BreakIterator::registerInstance(brk, reqLoc, UBRK_WORD, ec); 19951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert brk = 0; // registerInstance adopts 19961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::registerInstance() failed"); 19981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert brk = BreakIterator::createWordInstance(reqLoc, ec); 20001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::createWordInstance failed"); 20021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = brk->getLocale(ULOC_VALID_LOCALE, ec); 20041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = brk->getLocale(ULOC_ACTUAL_LOCALE, ec); 20051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::getLocale() failed"); 20071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // N.B.: now expect valid==actual==req 20091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("BreakIterator(registered)", 20101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req, valid, actual, "eq", "eq"); 20111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // No matter what, unregister 20141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert BreakIterator::unregister(key, ec); 20151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::unregister() failed"); 20171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete brk; 20191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert brk = 0; 20201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After unregistering, should behave normally again 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru brk = BreakIterator::createWordInstance(reqLoc, ec); 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: BreakIterator::createWordInstance failed"); 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = brk->getLocale(ULOC_VALID_LOCALE, ec); 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = brk->getLocale(ULOC_ACTUAL_LOCALE, ec); 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: BreakIterator::getLocale() failed"); 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 20321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("BreakIterator(unregistered)", req, valid, actual); 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 20361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete brk; 2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Collator 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 20421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 20431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert checkRegisteredCollators(NULL); // Don't expect any extras 20461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "hi_IN_BHOPAL"; 20481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert reqLoc = Locale::createFromName(req); 20491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Collator* coll = Collator::createInstance(reqLoc, ec); 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 20511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: Collator::createInstance failed - %s", u_errorName(ec)); 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 20531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = coll->getLocale(ULOC_VALID_LOCALE, ec); 20541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = coll->getLocale(ULOC_ACTUAL_LOCALE, ec); 20551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::getLocale() failed"); 20571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Collator", req, valid, actual); 20591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After registering something, the behavior should be different 20621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert URegistryKey key = Collator::registerInstance(coll, reqLoc, ec); 20631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert coll = 0; // registerInstance adopts 20641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::registerInstance() failed"); 20661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert coll = Collator::createInstance(reqLoc, ec); 20681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::createWordInstance failed"); 20701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = coll->getLocale(ULOC_VALID_LOCALE, ec); 20721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = coll->getLocale(ULOC_ACTUAL_LOCALE, ec); 20731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::getLocale() failed"); 20751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // N.B.: now expect valid==actual==req 20771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Collator(registered)", 20781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req, valid, actual, "eq", "eq"); 20791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert checkRegisteredCollators(req); // include hi_IN_BHOPAL 20821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // No matter what, unregister 20841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Collator::unregister(key, ec); 20851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::unregister() failed"); 20871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete coll; 20891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert coll = 0; 20901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After unregistering, should behave normally again 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru coll = Collator::createInstance(reqLoc, ec); 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 20951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::createInstance failed"); 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = coll->getLocale(ULOC_VALID_LOCALE, ec); 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = coll->getLocale(ULOC_ACTUAL_LOCALE, ec); 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Collator::getLocale() failed"); 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 21021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Collator(unregistered)", req, valid, actual); 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 21061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete coll; 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert checkRegisteredCollators(NULL); // extra should be gone again 21091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#endif 21111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#endif 21121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 21131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#if !UCONFIG_NO_COLLATION 21151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert/** 21161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Compare Collator::getAvailableLocales(int) [ "old", returning an array ] 21171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * with Collator::getAvailableLocales() [ "new", returning a StringEnumeration ] 21181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * These should be identical (check their API docs) EXCEPT that 21191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * if expectExtra is non-NULL, it will be in the "new" array but not "old". 21201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Does not return any status but calls errln on error. 21211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * @param expectExtra an extra locale, will be in "new" but not "old". Or NULL. 21221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert */ 21231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid LocaleTest::checkRegisteredCollators(const char *expectExtra) { 21241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 21251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t count1=0,count2=0; 21261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Hashtable oldHash(status); 21271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Hashtable newHash(status); 21281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TEST_ASSERT_STATUS(status); 21291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString expectStr(expectExtra?expectExtra:"n/a", ""); 21311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // the 'old' list (non enumeration) 21331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale* oldList = Collator::getAvailableLocales(count1); 21341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(oldList == NULL) { 21351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("Error: Collator::getAvailableLocales(count) returned NULL"); 21361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 21371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // the 'new' list (enumeration) 21401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert LocalPointer<StringEnumeration> newEnum(Collator::getAvailableLocales()); 21411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(newEnum.isNull()) { 21421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("Error: collator::getAvailableLocales() returned NULL"); 21431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 21441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // OK. Let's add all of the OLD 21471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // then check for any in the NEW not in OLD 21481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // then check for any in OLD not in NEW. 21491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // 1. add all of OLD 21511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for(int32_t i=0;i<count1;i++) { 21521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString key(oldList[i].getName(), ""); 21531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t oldI = oldHash.puti(key, 1, status); 21541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if( oldI == 1 ){ 21551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("Error: duplicate key %s in Collator::getAvailableLocales(count) list.\n", 21561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert oldList[i].getName()); 21571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 21581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL && !strcmp(expectExtra, oldList[i].getName())) { 21601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("Inexplicably, Collator::getAvailableCollators(count) had registered collator %s. This shouldn't happen, so I am going to consider it an error.\n", expectExtra); 21611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // 2. add all of NEW 21651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString *locStr; 21661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UBool foundExpected = FALSE; 21671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert while((locStr = newEnum->snext(status)) && U_SUCCESS(status)) { 21681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert count2++; 21691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL && expectStr == *locStr) { 21711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert foundExpected = TRUE; 21721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert logln(UnicodeString("Found expected registered collator: ","") + expectStr); 21731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert (void)foundExpected; // Hush unused variable compiler warning. 21751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if( oldHash.geti(*locStr) == 0 ) { 21771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL && expectStr==*locStr) { 21781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert logln(UnicodeString("As expected, Collator::getAvailableLocales(count) is missing registered collator ") + expectStr); 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 21801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln(UnicodeString("Error: Collator::getAvailableLocales(count) is missing: ","") 21811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert + *locStr); 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 21841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert newHash.puti(*locStr, 1, status); 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 21861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // 3. check all of OLD again 21881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for(int32_t i=0;i<count1;i++) { 21891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString key(oldList[i].getName(), ""); 21901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t newI = newHash.geti(key); 21911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(newI == 0) { 21921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln(UnicodeString("Error: Collator::getAvailableLocales() is missing: ","") 21931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert + key); 21941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t expectCount2 = count1; 21981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL) { 21991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert expectCount2 ++; // if an extra item registered, bump the expect count 22001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 22011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 22021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert assertEquals("Collator::getAvail() count", expectCount2, count2); 2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 22041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#endif 22051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 22061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestVariantWithOutCountry(void) { 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en","","POSIX"); 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc.getVariant(), "POSIX")) { 2211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: en__POSIX didn't get parsed correctly - name is %s - expected %s got %s", loc.getName(), "POSIX", loc.getVariant()); 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc2("en","","FOUR"); 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc2.getVariant(), "FOUR")) { 2215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: en__FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc2.getName(), "FOUR", loc2.getVariant()); 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc3("en","Latn","","FOUR"); 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc3.getVariant(), "FOUR")) { 2219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: en_Latn__FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc3.getName(), "FOUR", loc3.getVariant()); 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc4("","Latn","","FOUR"); 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc4.getVariant(), "FOUR")) { 2223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: _Latn__FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc4.getName(), "FOUR", loc4.getVariant()); 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc5("","Latn","US","FOUR"); 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc5.getVariant(), "FOUR")) { 2227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: _Latn_US_FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc5.getName(), "FOUR", loc5.getVariant()); 2228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2229103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc6("de-1901"); 2230103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (0 != strcmp(loc6.getVariant(), "1901")) { 2231103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: de-1901 didn't get parsed correctly - name is %s - expected %s got %s", loc6.getName(), "1901", loc6.getVariant()); 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic Locale _canonicalize(int32_t selector, /* 0==createFromName, 1==createCanonical, 2==Locale ct */ 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID) { 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (selector) { 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale::createFromName(localeID); 2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale::createCanonical(localeID); 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale(localeID); 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale(""); 2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestCanonicalization(void) 2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; /* input */ 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *getNameID; /* expected getName() result */ 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *canonicalID; /* expected canonicalize() result */ 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 225627f654740f2a26ad62a5c155af9199af9e69b889claireho { "", "", "en_US_POSIX" }, 225727f654740f2a26ad62a5c155af9199af9e69b889claireho { "C", "c", "en_US_POSIX" }, 225827f654740f2a26ad62a5c155af9199af9e69b889claireho { "POSIX", "posix", "en_US_POSIX" }, 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES_PREEURO-with-extra-stuff-that really doesn't make any sense-unless-you're trying to increase code coverage", 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE", 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE"}, 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES_PREEURO", "ca_ES_PREEURO", "ca_ES@currency=ESP" }, 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_AT_PREEURO", "de_AT_PREEURO", "de_AT@currency=ATS" }, 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE_PREEURO", "de_DE_PREEURO", "de_DE@currency=DEM" }, 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_LU_PREEURO", "de_LU_PREEURO", "de_LU@currency=LUF" }, 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "el_GR_PREEURO", "el_GR_PREEURO", "el_GR@currency=GRD" }, 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_BE_PREEURO", "en_BE_PREEURO", "en_BE@currency=BEF" }, 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_IE_PREEURO", "en_IE_PREEURO", "en_IE@currency=IEP" }, 2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO", "es_ES_PREEURO", "es_ES@currency=ESP" }, 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eu_ES_PREEURO", "eu_ES_PREEURO", "eu_ES@currency=ESP" }, 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fi_FI_PREEURO", "fi_FI_PREEURO", "fi_FI@currency=FIM" }, 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_BE_PREEURO", "fr_BE_PREEURO", "fr_BE@currency=BEF" }, 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_FR_PREEURO", "fr_FR_PREEURO", "fr_FR@currency=FRF" }, 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_LU_PREEURO", "fr_LU_PREEURO", "fr_LU@currency=LUF" }, 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ga_IE_PREEURO", "ga_IE_PREEURO", "ga_IE@currency=IEP" }, 2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "gl_ES_PREEURO", "gl_ES_PREEURO", "gl_ES@currency=ESP" }, 2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "it_IT_PREEURO", "it_IT_PREEURO", "it_IT@currency=ITL" }, 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "nl_BE_PREEURO", "nl_BE_PREEURO", "nl_BE@currency=BEF" }, 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "nl_NL_PREEURO", "nl_NL_PREEURO", "nl_NL@currency=NLG" }, 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "pt_PT_PREEURO", "pt_PT_PREEURO", "pt_PT@currency=PTE" }, 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de__PHONEBOOK", "de__PHONEBOOK", "de@collation=phonebook" }, 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_GB_EURO", "en_GB_EURO", "en_GB@currency=EUR" }, 2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_GB@EURO", "en_GB@EURO", "en_GB@currency=EUR" }, /* POSIX ID */ 2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es__TRADITIONAL", "es__TRADITIONAL", "es@collation=traditional" }, 2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" }, 2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" }, 2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" }, 2288c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" }, 2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" }, 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" }, 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" }, 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" }, 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" }, 2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" }, 2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ }, 2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no@ny", "no@ny", "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */ 2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */ 2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "qz-qz@Euro", "qz_QZ@Euro", "qz_QZ@currency=EUR" }, /* qz-qz uses private use iso codes */ 2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NOTE: uloc_getName() works on en-BOONT, but Locale() parser considers it BOGUS 2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO: unify this behavior 230154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en-BOONT", "en__BOONT", "en__BOONT" }, /* registered name */ 230254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "de-1901", "de__1901", "de__1901" }, /* registered name */ 230354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "de-1906", "de__1906", "de__1906" }, /* registered name */ 2304c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_RS" }, /* .NET name */ 2305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_RS" }, /* .NET name */ 2306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_RS" }, /* Linux name */ 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */ 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */ 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */ 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */ 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* posix behavior that used to be performed by getName */ 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mr.utf8", "mr.utf8", "mr" }, 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de-tv.koi8r", "de_TV.koi8r", "de_TV" }, 2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML" }, 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "i-cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US" }, 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA" }, 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "no_NO_NY_B" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */ 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fleshing out canonicalization */ 2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* trim space and sort keywords, ';' is separator so not present at end in canonical form */ 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_Hant_IL_VALLEY_GIRL@ currency = EUR; calendar = Japanese ;", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" }, 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* already-canonical ids are not changed */ 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" }, 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* PRE_EURO and EURO conversions don't affect other keywords */ 2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO@CALendar=Japanese", "es_ES_PREEURO@calendar=Japanese", "es_ES@calendar=Japanese;currency=ESP" }, 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_EURO@SHOUT=zipeedeedoodah", "es_ES_EURO@shout=zipeedeedoodah", "es_ES@currency=EUR;shout=zipeedeedoodah" }, 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* currency keyword overrides PRE_EURO and EURO currency */ 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO@currency=EUR", "es_ES_PREEURO@currency=EUR", "es_ES@currency=EUR" }, 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_EURO@currency=ESP", "es_ES_EURO@currency=ESP", "es_ES@currency=ESP" }, 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* norwegian is just too weird, if we handle things in their full generality */ 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ }, 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test cases reflecting internal resource bundle usage */ 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "root@kw=foo", "root@kw=foo", "root@kw=foo" }, 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "@calendar=gregorian", "@calendar=gregorian", "@calendar=gregorian" }, 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese" } 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* label[] = { "createFromName", "createCanonical", "Locale" }; 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, j; 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (i=0; i < UPRV_LENGTHOF(testCases); i++) { 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j=0; j<3; ++j) { 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expected = (j==1) ? testCases[i].canonicalID : testCases[i].getNameID; 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc = _canonicalize(j, testCases[i].localeID); 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* getName = loc.isBogus() ? "BOGUS" : loc.getName(); 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(expected, getName) != 0) { 2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: %s(%s).getName() => \"%s\", expected \"%s\"", 2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, getName, expected); 2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: %s(%s) => \"%s\"", 2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, getName); 2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2359c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid LocaleTest::TestCurrencyByDate(void) 2361c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 2362c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2363c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UDate date = uprv_getUTCtime(); 2365c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar TMP[4]; 2366c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t index = 0; 2367c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t resLen = 0; 2368c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString tempStr, resultStr; 2369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2370c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Cycle through historical currencies 2371c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)-630720000000.0; // pre 1961 - no currency defined 23726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 23756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 0 for eo_AM - %s", u_errorName(status)); 2376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2377c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2378c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 23796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_AM didn't return NULL - %s", u_errorName(status)); 2380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2383c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)0.0; // 1970 - one currency defined 23846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2386c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 23876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AM - %s", u_errorName(status)); 2388c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2390c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2391c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("SUR"); 2392c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 23936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return SUR for eo_AM - %s", u_errorName(status)); 2394c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2395c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2396c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)693792000000.0; // 1992 - one currency defined 2397c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2398c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2399c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AM - %s", u_errorName(status)); 2401c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2402c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2403c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("RUR"); 2405c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return RUR for eo_AM - %s", u_errorName(status)); 2407c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2408c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2409c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // post 1993 - one currency defined 2410c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2411c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2412c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AM - %s", u_errorName(status)); 2414c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2415c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2416c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2417c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AMD"); 2418c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AMD for eo_AM - %s", u_errorName(status)); 2420c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2421c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2422c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Locale AD has multiple currencies at once 2423c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // year 2001 2424c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2425c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 4) 2426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 4 for eo_AD - %s", u_errorName(status)); 2428c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2429c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2430c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2431c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("EUR"); 2432c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return EUR for eo_AD - %s", u_errorName(status)); 2434c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2435c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 2, TMP, 4, &status); 2436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2437c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2438c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2441c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 3, TMP, 4, &status); 2442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("FRF"); 2444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return FRF for eo_AD - %s", u_errorName(status)); 2446c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2447c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 4, TMP, 4, &status); 2448c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2449c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ADP"); 2450c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ADP for eo_AD - %s", u_errorName(status)); 2452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2453c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2454c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)0.0; // year 1970 2455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 3) 2457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 3 for eo_AD - %s", u_errorName(status)); 2459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2466c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 2, TMP, 4, &status); 2467c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2468c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("FRF"); 2469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return FRF for eo_AD - %s", u_errorName(status)); 2471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 3, TMP, 4, &status); 2473c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2474c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ADP"); 2475c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ADP for eo_AD - %s", u_errorName(status)); 2477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2478c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2479c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)-630720000000.0; // year 1950 2480c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 2 for eo_AD - %s", u_errorName(status)); 2484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 2, TMP, 4, &status); 2492c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ADP"); 2494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ADP for eo_AD - %s", u_errorName(status)); 2496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2497c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)-2207520000000.0; // year 1900 2499c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2500c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2501c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AD - %s", u_errorName(status)); 2503c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2504c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2506c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2507c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2509c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2510c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2511c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Locale UA has gap between years 1994 - 1996 2512c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)788400000000.0; 2513c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_UA", date, &status); 2514c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2515c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 0 for eo_UA - %s", u_errorName(status)); 2517c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2518c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_UA", date, index, TMP, 4, &status); 2519c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_UA didn't return NULL - %s", u_errorName(status)); 2521c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2522c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2523c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2524c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test index bounds 2525c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_UA", date, 100, TMP, 4, &status); 2526c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_UA didn't return NULL - %s", u_errorName(status)); 2528c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2529c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2530c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2531c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_UA", date, 0, TMP, 4, &status); 2532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_UA didn't return NULL - %s", u_errorName(status)); 2534c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2535c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2536c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2537c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test for bogus locale 2538c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_QQ", date, &status); 2539c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 0 for eo_QQ - %s", u_errorName(status)); 2542c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2544c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_QQ", date, 1, TMP, 4, &status); 2545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_QQ didn't return NULL - %s", u_errorName(status)); 2547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2549c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_QQ", date, 0, TMP, 4, &status); 2550c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_QQ didn't return NULL - %s", u_errorName(status)); 2552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Cycle through histrocial currencies 2556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // 2001 - one currency 2557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOA"); 2565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOA for eo_AO - %s", u_errorName(status)); 2567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)819936000000.0; // 1996 - 2 currencies 2570c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2575c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2576c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOR"); 2578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOR for eo_AO - %s", u_errorName(status)); 2580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 2, TMP, 4, &status); 2582c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AON"); 2584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AON for eo_AO - %s", u_errorName(status)); 2586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2588c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)662256000000.0; // 1991 - 2 currencies 2589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AON"); 2597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AON for eo_AO - %s", u_errorName(status)); 2599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 2, TMP, 4, &status); 2601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOK"); 2603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOK for eo_AO - %s", u_errorName(status)); 2605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)315360000000.0; // 1980 - one currency 2608c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 26116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2615c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOK"); 2616c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOK for eo_AO - %s", u_errorName(status)); 2618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2619c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2620c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)0.0; // 1970 - no currencies 2621c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2622c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 26246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2625c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2626c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2627c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 26286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_AO didn't return NULL - %s", u_errorName(status)); 2629c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2631c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2632c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test with currency keyword override 2633c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // 2001 - two currencies 2634c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_DE@currency=DEM", date, &status); 2635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2636c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 26376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 2 for eo_DE@currency=DEM - %s", u_errorName(status)); 2638c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2639c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_DE@currency=DEM", date, 1, TMP, 4, &status); 2640c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2641c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("EUR"); 2642c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return EUR for eo_DE@currency=DEM - %s", u_errorName(status)); 2644c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2645c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_DE@currency=DEM", date, 2, TMP, 4, &status); 2646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2647c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("DEM"); 2648c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return DEM for eo_DE@currency=DEM - %s", u_errorName(status)); 2650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2651c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2652c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test Euro Support 2653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 2654c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = uprv_getUTCtime(); 2655c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2656c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar USD[4]; 2657c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US", date, 1, USD, 4, &status); 2658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar YEN[4]; 2660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("ja_JP", date, 1, YEN, 4, &status); 2661c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US", date, 1, TMP, 4, &status); 2663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 26646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US didn't return USD - %s", u_errorName(status)); 2665c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US_PREEURO", date, 1, TMP, 4, &status); 2667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 26686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_PREEURO didn't fallback to en_US - %s", u_errorName(status)); 2669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US_Q", date, 1, TMP, 4, &status); 2671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 26726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_Q didn't fallback to en_US - %s", u_errorName(status)); 2673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 2675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 2676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 267750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 267850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleTest::TestGetVariantWithKeywords(void) 267950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 268050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale l("en_US_VALLEY@foo=value"); 268150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *variant = l.getVariant(); 268250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(variant); 268350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho test_assert(strcmp("VALLEY", variant) == 0); 268450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 268550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 268650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buffer[50]; 268750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t len = l.getKeywordValue("foo", buffer, 50, status); 268850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho buffer[len] = '\0'; 268950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho test_assert(strcmp("value", buffer) == 0); 269050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 2691f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 2692f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid LocaleTest::TestIsRightToLeft() { 2693f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("root LTR", Locale::getRoot().isRightToLeft()); 2694f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("zh LTR", Locale::getChinese().isRightToLeft()); 2695f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("ar RTL", Locale("ar").isRightToLeft()); 2696f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("und-EG RTL", Locale("und-EG").isRightToLeft(), FALSE, TRUE); 2697f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("fa-Cyrl LTR", Locale("fa-Cyrl").isRightToLeft()); 2698f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("en-Hebr RTL", Locale("en-Hebr").isRightToLeft()); 2699f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("ckb RTL", Locale("ckb").isRightToLeft(), FALSE, TRUE); // Sorani Kurdish 2700f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("fil LTR", Locale("fil").isRightToLeft()); 2701f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("he-Zyxw LTR", Locale("he-Zyxw").isRightToLeft()); 2702f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 27031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 27041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid LocaleTest::TestBug11421() { 27051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale::getDefault().getBaseName(); 27061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t numLocales; 27071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale *localeList = Locale::getAvailableLocales(numLocales); 27081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (int localeIndex = 0; localeIndex < numLocales; localeIndex++) { 27091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale &loc = localeList[localeIndex]; 27101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strncmp(loc.getName(), loc.getBaseName(), strlen(loc.getBaseName()))) { 27111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d loc.getName=\"%s\"; loc.getBaseName=\"%s\"", 27121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert __FILE__, __LINE__, loc.getName(), loc.getBaseName()); 27131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert break; 27141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 27151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 27161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 2717ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert 2718ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert// TestBug13277. The failure manifests as valgrind errors. 2719ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert// See the trac ticket for details. 2720ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert// 2721ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert 2722ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubertvoid LocaleTest::TestBug13277() { 2723ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 2724ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert CharString name("en-us-x-foo", -1, status); 2725ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert while (name.length() < 152) { 2726ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert name.append("-x-foo", -1, status); 2727ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert } 2728ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert 2729ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert while (name.length() < 160) { 2730ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert name.append('z', status); 2731ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert Locale loc(name.data(), nullptr, nullptr, nullptr); 2732ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert } 2733ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert} 2734ffdc27edd5503111189fc11165c5a11289a71f79Fredrik Roubert 2735