164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// Copyright (C) 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 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" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/brkiter.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/coll.h" 168de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "cmemory.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 19b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include <string.h> 20c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "putilimp.h" 21c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "unicode/ustring.h" 221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#include "hash.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const rawData[33][8] = { 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // language code 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en", "fr", "ca", "el", "no", "it", "xx", "zh" }, 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // script code 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "", "", "", "Hans" }, 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // country code 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "US", "FR", "ES", "GR", "NO", "", "YY", "CN" }, 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // variant code 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "" }, 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // full name 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US", "fr_FR", "ca_ES", "el_GR", "no_NO_NY", "it", "xx_YY", "zh_Hans_CN" }, 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ISO-3 language 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eng", "fra", "cat", "ell", "nor", "ita", "", "zho" }, 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ISO-3 country 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "USA", "FRA", "ESP", "GRC", "NOR", "", "", "CHN" }, 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // LCID 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "409", "40c", "403", "408", "814", "10", "0", "804" }, 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (English) 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English", "French", "Catalan", "Greek", "Norwegian", "Italian", "xx", "Chinese" }, 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (English) 46103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "", "", "", "", "", "", "", "Simplified Han" }, 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (English) 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "United States", "France", "Spain", "Greece", "Norway", "", "YY", "China" }, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (English) 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", ""}, 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (English) 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Updated no_NO_NY English display name for new pattern-based algorithm 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (part of Euro support). 54b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway, NY)", "Italian", "xx (YY)", "Chinese (Simplified, China)" }, 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (French) 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "anglais", "fran\\u00E7ais", "catalan", "grec", "norv\\u00E9gien", "italien", "xx", "chinois" }, 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (French) 5959d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "", "", "sinogrammes simplifi\\u00E9s" }, 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (French) 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "\\u00C9tats-Unis", "France", "Espagne", "Gr\\u00E8ce", "Norv\\u00E8ge", "", "YY", "Chine" }, 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (French) 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "" }, 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (French) 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //{ "anglais (Etats-Unis)", "francais (France)", "catalan (Espagne)", "grec (Grece)", "norvegien (Norvege,Nynorsk)", "italien", "xx (YY)" }, 6659d709d503bab6e2b61931737e662dd293b40578ccornelius { "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)", "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "italien", "xx (YY)", "chinois (simplifi\\u00E9, Chine)" }, 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display language (Catalan) */ 70c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "angl\\u00E8s", "franc\\u00E8s", "catal\\u00E0", "grec", "noruec", "itali\\u00E0", "", "xin\\u00E8s" }, 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display script (Catalan) */ 7259d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "", "", "han simplificat" }, 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display country (Catalan) */ 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "Estats Units", "Fran\\u00E7a", "Espanya", "Gr\\u00E8cia", "Noruega", "", "", "Xina" }, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display variant (Catalan) */ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "" }, 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display name (Catalan) */ 78b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "angl\\u00E8s (Estats Units)", "franc\\u00E8s (Fran\\u00E7a)", "catal\\u00E0 (Espanya)", "grec (Gr\\u00E8cia)", "noruec (Noruega, NY)", "itali\\u00E0", "", "xin\\u00E8s (simplificat, Xina)" }, 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (Greek)[actual values listed below] 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac", 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac", 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac", 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac", 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac", 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c4\\u03b1\\u03bb\\u03b9\\u03ba\\u03ac", 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC" 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (Greek) 9159d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "", "", "\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf \\u03a7\\u03b1\\u03bd" }, 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (Greek)[actual values listed below] 9359d709d503bab6e2b61931737e662dd293b40578ccornelius { "\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2", 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1", 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1", 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1", 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1", 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039A\\u03AF\\u03BD\\u03B1" 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (Greek) 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "" }, 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (Greek)[actual values listed below] 10559d709d503bab6e2b61931737e662dd293b40578ccornelius { "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac (\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2)", 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac (\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1)", 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1)", 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac (\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1)", 10959d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac (\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1, NY)", 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c4\\u03b1\\u03bb\\u03b9\\u03ba\\u03ac", 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 11259d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC (\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf, \\u039A\\u03AF\\u03BD\\u03B1)" 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display langage (<root>) 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English", "French", "Catalan", "Greek", "Norwegian", "Italian", "xx", "" }, 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display script (<root>) 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "", "", "", ""}, 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display country (<root>) 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "United States", "France", "Spain", "Greece", "Norway", "", "YY", "" }, 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display variant (<root>) 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "Nynorsk", "", "", ""}, 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // display name (<root>) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //{ "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway,Nynorsk)", "Italian", "xx (YY)" }, 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway,NY)", "Italian", "xx (YY)", "" } 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Usage: 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert( Test (should be TRUE) ) 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Example: 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(i==3); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru the macro is ugly but makes the tests pretty. 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define test_assert(test) \ 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { \ 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(test)) \ 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " #test " was not true. In " __FILE__ " on line %d", __LINE__ ); \ 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else \ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: asserted " #test); \ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Usage: 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert_print( Test (should be TRUE), printable ) 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Example: 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(i==3, toString(i)); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru the macro is ugly but makes the tests pretty. 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define test_assert_print(test,print) \ 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { \ 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(test)) \ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " #test " was not true. " + UnicodeString(print) ); \ 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else \ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: asserted " #test "-> " + UnicodeString(print)); \ 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define test_dumpLocale(l) { logln(#l " = " + UnicodeString(l.getName(), "")); } 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::LocaleTest() 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru: dataTable(NULL) 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setUpDataTable(); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::~LocaleTest() 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dataTable != 0) { 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 33; i++) { 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete []dataTable[i]; 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete []dataTable; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable = 0; 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 187f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO_BEGIN; 1881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TESTCASE_AUTO(TestBug11421); // Must run early in list to trigger failure. 189f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestBasicGetters); 190f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSimpleResourceInfo); 191f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestDisplayNames); 192f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSimpleObjectStuff); 193f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestPOSIXParsing); 194f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetAvailableLocales); 195f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestDataDirectory); 196f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestISO3Fallback); 197f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetLangsAndCountries); 198f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSimpleDisplayNames); 199f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestUninstalledISO3Names); 200f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestAtypicalLocales); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 202f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestThaiCurrencyFormat); 203f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestEuroSupport); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 205f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestToString); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 207f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4139940); 208f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4143951); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 210f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4147315); 211f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4147317); 212f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4147552); 213f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestVariantParsing); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 215f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(Test4105828); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 217f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSetIsBogus); 218f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestParallelAPIValues); 219f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestKeywordVariants); 220f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestKeywordVariantParsing); 221f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestSetKeywordValue); 222f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetBaseName); 22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 224f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetLocale); 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 226f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestVariantWithOutCountry); 227f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCanonicalization); 228f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCurrencyByDate); 229f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestGetVariantWithKeywords); 230f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestIsRightToLeft); 231f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO_END; 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestBasicGetters() { 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i <= MAX_LOCALES; i++) { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(""); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rawData[SCRIPT][i] && rawData[SCRIPT][i][0] != 0) { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[SCRIPT][i], rawData[CTRY][i], rawData[VAR][i]); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[CTRY][i], rawData[VAR][i]); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing " + (UnicodeString)testLocale.getName() + "..."); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getLanguage()) != (dataTable[LANG][i])) 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Language code mismatch: " + temp + " versus " 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[LANG][i]); 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getScript()) != (dataTable[SCRIPT][i])) 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Script code mismatch: " + temp + " versus " 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[SCRIPT][i]); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getCountry()) != (dataTable[CTRY][i])) 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Country code mismatch: " + temp + " versus " 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[CTRY][i]); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getVariant()) != (dataTable[VAR][i])) 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Variant code mismatch: " + temp + " versus " 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[VAR][i]); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getName()) != (dataTable[NAME][i])) 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" Locale name mismatch: " + temp + " versus " 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[NAME][i]); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Same thing without variant codes..."); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i <= MAX_LOCALES; i++) { 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(""); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rawData[SCRIPT][i] && rawData[SCRIPT][i][0] != 0) { 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[SCRIPT][i], rawData[CTRY][i]); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[CTRY][i]); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing " + (temp=testLocale.getName()) + "..."); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getLanguage()) != (dataTable[LANG][i])) 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Language code mismatch: " + temp + " versus " 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[LANG][i]); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getScript()) != (dataTable[SCRIPT][i])) 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Script code mismatch: " + temp + " versus " 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[SCRIPT][i]); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getCountry()) != (dataTable[CTRY][i])) 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Country code mismatch: " + temp + " versus " 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[CTRY][i]); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testLocale.getVariant()[0] != 0) 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Variant code mismatch: something versus \"\""); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing long language names and getters"); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test8 = Locale::createFromName("x-klingon-latn-zx.utf32be@special"); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getLanguage(); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("x-klingon") ) 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Language code mismatch: " + temp + " versus \"x-klingon\""); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getScript(); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("Latn") ) 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Script code mismatch: " + temp + " versus \"Latn\""); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getCountry(); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("ZX") ) 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Country code mismatch: " + temp + " versus \"ZX\""); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = test8.getVariant(); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if (temp != UnicodeString("SPECIAL") ) 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln("Variant code mismatch: " + temp + " versus \"SPECIAL\""); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // As of 3.0, the "@special" will *not* be parsed by uloc_getName() 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (temp != UnicodeString("") ) 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Variant code mismatch: " + temp + " versus \"\""); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (Locale::getDefault() != Locale::createFromName(NULL)) 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Locale::getDefault() == Locale::createFromName(NULL)"); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*----------*/ 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NOTE: There used to be a special test for locale names that had language or 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // country codes that were longer than two letters. The new version of Locale 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // doesn't support anything that isn't an officially recognized language or 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // country code, so we no longer support this feature. 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusLang("THISISABOGUSLANGUAGE"); // Jitterbug 2864: language code too long 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!bogusLang.isBogus()) { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Locale(\"THISISABOGUSLANGUAGE\").isBogus()==FALSE"); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusLang=Locale("eo"); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( bogusLang.isBogus() || 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp(bogusLang.getLanguage(), "eo")!=0 || 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bogusLang.getCountry()!=0 || 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bogusLang.getVariant()!=0 || 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp(bogusLang.getName(), "eo")!=0 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("assignment to bogus Locale does not unbogus it or sets bad data"); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale a("eo_DE@currency=DEM"); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale *pb=a.clone(); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pb==&a || *pb!=a) { 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Locale.clone() failed"); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pb; 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestParallelAPIValues() { 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Test synchronization between C and C++ API"); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getChinese().getName(), ULOC_CHINESE) != 0) { 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CHINESE Locale"); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getEnglish().getName(), ULOC_ENGLISH) != 0) { 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_ENGLISH Locale"); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getFrench().getName(), ULOC_FRENCH) != 0) { 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_FRENCH Locale"); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getGerman().getName(), ULOC_GERMAN) != 0) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_GERMAN Locale"); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getItalian().getName(), ULOC_ITALIAN) != 0) { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_ITALIAN Locale"); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getJapanese().getName(), ULOC_JAPANESE) != 0) { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_JAPANESE Locale"); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getKorean().getName(), ULOC_KOREAN) != 0) { 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_KOREAN Locale"); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getSimplifiedChinese().getName(), ULOC_SIMPLIFIED_CHINESE) != 0) { 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_SIMPLIFIED_CHINESE Locale"); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getTraditionalChinese().getName(), ULOC_TRADITIONAL_CHINESE) != 0) { 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_TRADITIONAL_CHINESE Locale"); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getCanada().getName(), ULOC_CANADA) != 0) { 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CANADA Locale"); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getCanadaFrench().getName(), ULOC_CANADA_FRENCH) != 0) { 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CANADA_FRENCH Locale"); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getChina().getName(), ULOC_CHINA) != 0) { 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_CHINA Locale"); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getPRC().getName(), ULOC_PRC) != 0) { 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_PRC Locale"); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getFrance().getName(), ULOC_FRANCE) != 0) { 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_FRANCE Locale"); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getGermany().getName(), ULOC_GERMANY) != 0) { 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_GERMANY Locale"); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getItaly().getName(), ULOC_ITALY) != 0) { 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_ITALY Locale"); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getJapan().getName(), ULOC_JAPAN) != 0) { 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_JAPAN Locale"); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getKorea().getName(), ULOC_KOREA) != 0) { 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_KOREA Locale"); 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getTaiwan().getName(), ULOC_TAIWAN) != 0) { 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_TAIWAN Locale"); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getUK().getName(), ULOC_UK) != 0) { 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_UK Locale"); 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(Locale::getUS().getName(), ULOC_US) != 0) { 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Differences for ULOC_US Locale"); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestSimpleResourceInfo() { 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char temp2[20]; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i <= MAX_LOCALES; i++) { 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(rawData[LANG][i], rawData[CTRY][i], rawData[VAR][i]); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing " + (temp=testLocale.getName()) + "..."); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getISO3Language()) != (dataTable[LANG3][i])) 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" ISO-3 language code mismatch: " + temp 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " versus " + dataTable[LANG3][i]); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (temp=testLocale.getISO3Country()) != (dataTable[CTRY3][i])) 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(" ISO-3 country code mismatch: " + temp 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " versus " + dataTable[CTRY3][i]); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(temp2, "%x", (int)testLocale.getLCID()); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (UnicodeString(temp2) != dataTable[LCID][i]) 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)" LCID mismatch: " + temp2 + " versus " 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + dataTable[LCID][i]); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(err)) 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Some error on number " + i + u_errorName(err)); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err = U_ZERO_ERROR; 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locale("en"); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(locale.getName(), "en") != 0|| 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcmp(locale.getLanguage(), "en") != 0) { 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("construction of Locale(en) failed\n"); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*-----*/ 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Jitterbug 2439 -- markus 20030425 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The lookup of display names must not fall back through the default 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * locale because that yields useless results. 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestDisplayNames() 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale english("en", "US"); 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale french("fr", "FR"); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale croatian("ca", "ES"); 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale greek("el", "GR"); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = en_US..."); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(english, DLANG_EN); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = fr_FR..."); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(french, DLANG_FR); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = ca_ES..."); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(croatian, DLANG_CA); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" In locale = el_GR..."); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames(greek, DLANG_EL); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols symb(status); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Check to see if ICU supports this locale */ 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (symb.getLocale(ULOC_VALID_LOCALE, status) != Locale("root")) { 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test that the default locale has a display name for its own language */ 48227f654740f2a26ad62a5c155af9199af9e69b889claireho /* Currently, there is no language information in the "tl" data file so this test will fail if default locale is "tl" */ 48327f654740f2a26ad62a5c155af9199af9e69b889claireho if (uprv_strcmp(Locale().getLanguage(), "tl") != 0) { 48427f654740f2a26ad62a5c155af9199af9e69b889claireho Locale().getDisplayLanguage(Locale(), s); 48527f654740f2a26ad62a5c155af9199af9e69b889claireho if(s.length()<=3 && s.charAt(0)<=0x7f) { 48627f654740f2a26ad62a5c155af9199af9e69b889claireho /* check <=3 to reject getting the language code as a display name */ 48727f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("unable to get a display string for the language of the default locale: " + s); 48827f654740f2a26ad62a5c155af9199af9e69b889claireho } 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49027f654740f2a26ad62a5c155af9199af9e69b889claireho /* 49127f654740f2a26ad62a5c155af9199af9e69b889claireho * API coverage improvements: call 49227f654740f2a26ad62a5c155af9199af9e69b889claireho * Locale::getDisplayLanguage(UnicodeString &) and 49327f654740f2a26ad62a5c155af9199af9e69b889claireho * Locale::getDisplayCountry(UnicodeString &) 49427f654740f2a26ad62a5c155af9199af9e69b889claireho */ 49527f654740f2a26ad62a5c155af9199af9e69b889claireho s.remove(); 49627f654740f2a26ad62a5c155af9199af9e69b889claireho Locale().getDisplayLanguage(s); 49727f654740f2a26ad62a5c155af9199af9e69b889claireho if(s.length()<=3 && s.charAt(0)<=0x7f) { 49827f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("unable to get a display string for the language of the default locale [2]: " + s); 49927f654740f2a26ad62a5c155af9199af9e69b889claireho } 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Default locale %s is unsupported by ICU\n", Locale().getName()); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.remove(); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru french.getDisplayCountry(s); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s.isEmpty()) { 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unable to get any default-locale display string for the country of fr_FR\n"); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.remove(); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("zh", "Hant").getDisplayScript(s); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s.isEmpty()) { 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unable to get any default-locale display string for the country of zh_Hant\n"); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestSimpleObjectStuff() { 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test1("aa", "AA"); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test2("aa", "AA"); 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test3(test1); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test4("zz", "ZZ"); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test5("aa", "AA", ""); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test6("aa", "AA", "ANTARES"); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test7("aa", "AA", "JUPITER"); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test8 = Locale::createFromName("aa-aa-jupiTER"); // was "aa-aa.utf8@jupiter" but in 3.0 getName won't normalize that 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // now list them all for debugging usage. 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test1); 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test2); 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test3); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test4); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test5); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test6); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test7); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test8); 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure things compare to themselves! 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test1); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test2 == test2); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test3 == test3); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test4); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 == test5); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test6); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test7); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test8 == test8); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // make sure things are not equal to themselves. 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test1)); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test2)); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test3 != test3)); 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test4 != test4)); 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test5 != test5)); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test6 != test6)); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test7 != test7)); 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test8 != test8)); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // make sure things that are equal to each other don't show up as unequal. 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test2)); 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test1)); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test3)); 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test3)); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 == test1); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test2); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test5); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test7); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test for things that shouldn't compare equal. 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 == test4)); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 == test4)); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test3 == test4)); 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test8); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test for hash codes to be the same. 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash1 = test1.hashCode(); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash2 = test2.hashCode(); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash3 = test3.hashCode(); 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash1 == hash2); 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash1 == hash3); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash2 == hash3); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test that the assignment operator works. 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4 = test1; 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("test4=test1;"); 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test4); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test4); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test1 != test4)); 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test2 != test4)); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(!(test3 != test4)); 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test4); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test1); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test assignments with a variant 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("test7 = test6"); 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test7 = test6; 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test7); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test7); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 == test6); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test7 != test5); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("test6 = test1"); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test6=test1; 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test6); 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 != test7); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test1); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test6); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// A class which exposes constructors that are implemented in terms of the POSIX parsing code. 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass POSIXLocale : public Locale 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale(const UnicodeString& l) 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru :Locale() 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *ch; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ch = new char[l.length() + 1]; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ch[l.extract(0, 0x7fffffff, ch, "")] = 0; 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromPOSIXID(ch); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete [] ch; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale(const char *l) 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru :Locale() 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromPOSIXID(l); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestPOSIXParsing() 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test1("ab_AB"); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test2(UnicodeString("ab_AB")); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test3("ab","AB"); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test4("ab_AB_Antares"); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru POSIXLocale test5(UnicodeString("ab_AB_Antares")); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test6("ab", "AB", "Antares"); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test1); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test2); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test3); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test4); 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test5); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_dumpLocale(test6); 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test1); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 == test2); 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test2 == test3); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test3 == test1); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test4 == test5); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 == test6); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test6 == test4); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test1 != test4); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 != test3); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(test5 != test2); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash1 = test1.hashCode(); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash2 = test2.hashCode(); 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hash3 = test3.hashCode(); 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash1 == hash2); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash2 == hash3); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test_assert(hash3 == hash1); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestGetAvailableLocales() 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t locCount = 0; 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* locList = Locale::getAvailableLocales(locCount); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (locCount == 0) 6806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("getAvailableLocales() returned an empty list!"); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Number of locales returned = ") + locCount); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i = 0; i < locCount; ++i) 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(locList[i].getName()); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // I have no idea how to test this function... 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This test isn't applicable anymore - getISO3Language is 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// independent of the data directory 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestDataDirectory() 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char oldDirectory[80]; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* temp; 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testValue; 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = Locale::getDataDirectory(); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(oldDirectory, temp); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("oldDirectory = ") + oldDirectory); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test(Locale::US); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.getISO3Language(testValue); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("first fetch of language retrieved " + testValue); 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testValue != "eng") 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Initial check of ISO3 language failed: expected \"eng\", got \"" + testValue + "\""); 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *path; 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru path=IntlTest::getTestDirectory(); 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDataDirectory( path ); 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.getISO3Language(testValue); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("second fetch of language retrieved " + testValue); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testValue != "xxx") 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("setDataDirectory() failed: expected \"xxx\", got \"" + testValue + "\""); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDataDirectory(oldDirectory); 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.getISO3Language(testValue); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("third fetch of language retrieved " + testValue); 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testValue != "eng") 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("get/setDataDirectory() failed: expected \"eng\", got \"" + testValue + "\""); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//=========================================================== 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::doTestDisplayNames(Locale& displayLocale, int32_t compareIndex) { 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i <= MAX_LOCALES; i++) { 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale testLocale(""); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rawData[SCRIPT][i] && rawData[SCRIPT][i][0] != 0) { 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[SCRIPT][i], rawData[CTRY][i], rawData[VAR][i]); 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale = Locale(rawData[LANG][i], rawData[CTRY][i], rawData[VAR][i]); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" Testing " + (temp=testLocale.getName()) + "..."); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testLang; 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testScript; 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testCtry; 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testVar; 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testName; 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayLanguage(displayLocale, testLang); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayScript(displayLocale, testScript); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayCountry(displayLocale, testCtry); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayVariant(displayLocale, testVar); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale.getDisplayName(displayLocale, testName); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedLang; 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedScript; 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedCtry; 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedVar; 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedName; 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang = dataTable[compareIndex][i]; 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedLang.length() == 0) 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang = dataTable[DLANG_EN][i]; 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedScript = dataTable[compareIndex + 1][i]; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedScript.length() == 0) 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedScript = dataTable[DSCRIPT_EN][i]; 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedCtry = dataTable[compareIndex + 2][i]; 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedCtry.length() == 0) 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedCtry = dataTable[DCTRY_EN][i]; 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedVar = dataTable[compareIndex + 3][i]; 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedVar.length() == 0) 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedVar = dataTable[DVAR_EN][i]; 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedName = dataTable[compareIndex + 4][i]; 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedName.length() == 0) 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedName = dataTable[DNAME_EN][i]; 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testLang != expectedLang) 7836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display language (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testLang + " expected " + expectedLang); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testScript != expectedScript) 7856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display script (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testScript + " expected " + expectedScript); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testCtry != expectedCtry) 7876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display country (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testCtry + " expected " + expectedCtry); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testVar != expectedVar) 7896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display variant (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testVar + " expected " + expectedVar); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testName != expectedName) 7916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Display name (" + UnicodeString(displayLocale.getName()) + ") of (" + UnicodeString(testLocale.getName()) + ") got " + testName + " expected " + expectedName); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------- 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// table of valid data 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------- 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::setUpDataTable() 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dataTable == 0) { 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable = new UnicodeString*[33]; 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 33; i++) { 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable[i] = new UnicodeString[8]; 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t j = 0; j < 8; j++) { 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable[i][j] = CharsToUnicodeString(rawData[i][j]); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ==================== 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4011756 4011380 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestISO3Fallback() 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale test("xx", "YY"); 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char * result; 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = test.getISO3Language(); 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Conform to C API usage 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!result || (result[0] != 0)) 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("getISO3Language() on xx_YY returned " + UnicodeString(result) + " instead of \"\""); 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = test.getISO3Country(); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!result || (result[0] != 0)) 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("getISO3Country() on xx_YY returned " + UnicodeString(result) + " instead of \"\""); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4106155 4118587 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestGetLangsAndCountries() 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // It didn't seem right to just do an exhaustive test of everything here, so I check 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // for the following things: 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 1) Does each list have the right total number of entries? 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 2) Does each list contain certain language and country codes we think are important 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (the G7 countries, plus a couple others)? 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 3) Does each list have every entry formatted correctly? (i.e., two characters, 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // all lower case for the language codes, all upper case for the country codes) 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 4) Is each list in sorted order? 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t testCount = 0; 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char * const * test = Locale::getISOLanguages(); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char spotCheck1[ ][4] = { "en", "es", "fr", "de", "it", 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ja", "ko", "zh", "th", "he", 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "id", "iu", "ug", "yi", "za" }; 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(testCount = 0;test[testCount];testCount++) 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: Change this test to be more like the cloctst version? */ 867c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (testCount != 593) 868c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Expected getISOLanguages() to return 593 languages; it returned %d", testCount); 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 15; i++) { 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t j; 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j = 0; j < testCount; j++) 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(test[j],spotCheck1[i])== 0) 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (j == testCount || (uprv_strcmp(test[j],spotCheck1[i])!=0)) 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Couldn't find " + (UnicodeString)spotCheck1[i] + " in language list."); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < testCount; i++) { 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testee(test[i],""); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString lc(test[i],""); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee != lc.toLower()) 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(lc + " is not all lower case."); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (testee.length() != 2) && (testee.length() != 3)) 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " is not two or three characters long."); 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i > 0 && testee.compare(test[i - 1]) <= 0) 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " appears in an out-of-order position in the list."); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = Locale::getISOCountries(); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString spotCheck2 [] = { "US", "CA", "GB", "FR", "DE", 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "IT", "JP", "KR", "CN", "TW", 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "TH" }; 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t spot2Len = 11; 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(testCount=0;test[testCount];testCount++) 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (testCount != 249){ 8998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln("Expected getISOCountries to return 249 countries; it returned %d", testCount); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else { 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < spot2Len; i++) { 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t j; 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j = 0; j < testCount; j++) 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testee(test[j],""); 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee == spotCheck2[i]) 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testee(test[j],""); 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (j == testCount || testee != spotCheck2[i]) 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Couldn't find " + spotCheck2[i] + " in country list."); 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 915b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (i = 0; i < testCount; i++) { 916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testee(test[i],""); 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString uc(test[i],""); 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee != uc.toUpper()) 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " is not all upper case."); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testee.length() != 2) 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " is not two characters long."); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i > 0 && testee.compare(test[i - 1]) <= 0) 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(testee + " appears in an out-of-order position in the list."); 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // This getAvailableLocales and getISO3Language 927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t numOfLocales; 929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale enLoc ("en"); 930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const Locale *pLocales = Locale::getAvailableLocales(numOfLocales); 931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int i = 0; i < numOfLocales; i++) { 933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const Locale &loc(pLocales[i]); 934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString name; 935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char szName[200]; 936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho loc.getDisplayName (enLoc, name); 938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name.extract (0, 200, szName, sizeof(szName)); 939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (strlen(loc.getISO3Language()) == 0) { 941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("getISO3Language() returned an empty string for: " + name); 942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4118587 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestSimpleDisplayNames() 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test is different from TestDisplayNames because TestDisplayNames checks 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fallback behavior, combination of language and country names to form locale 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // names, and other stuff like that. This test just checks specific language 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // and country codes to make sure we have the correct names for them. 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char languageCodes[] [4] = { "he", "id", "iu", "ug", "yi", "za" }; 9588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString languageNames [] = { "Hebrew", "Indonesian", "Inuktitut", "Uyghur", "Yiddish", 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Zhuang" }; 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 6; i++) { 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test; 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(languageCodes[i], "", ""); 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l.getDisplayLanguage(Locale::getUS(), test); 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test != languageNames[i]) 9666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Got wrong display name for " + UnicodeString(languageCodes[i]) + ": Expected \"" + 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru languageNames[i] + "\", got \"" + test + "\"."); 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4118595 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestUninstalledISO3Names() 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test checks to make sure getISO3Language and getISO3Country work right 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // even for locales that are not installed. 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char iso2Languages [][4] = { "am", "ba", "fy", "mr", "rn", 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ss", "tw", "zu" }; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char iso3Languages [][5] = { "amh", "bak", "fry", "mar", "run", 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ssw", "twi", "zul" }; 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 8; i++) { 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test; 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(iso2Languages[i], "", ""); 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = l.getISO3Language(); 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((test != iso3Languages[i]) || U_FAILURE(err)) 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got wrong ISO3 code for " + UnicodeString(iso2Languages[i]) + ": Expected \"" + 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iso3Languages[i] + "\", got \"" + test + "\"." + UnicodeString(u_errorName(err))); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char iso2Countries [][4] = { "AF", "BW", "KZ", "MO", "MN", 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SB", "TC", "ZW" }; 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char iso3Countries [][4] = { "AFG", "BWA", "KAZ", "MAC", "MNG", 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SLB", "TCA", "ZWE" }; 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 8; i++) { 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l("", iso2Countries[i], ""); 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString test(l.getISO3Country(), ""); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test != iso3Countries[i]) 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got wrong ISO3 code for " + UnicodeString(iso2Countries[i]) + ": Expected \"" + 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(iso3Countries[i]) + "\", got \"" + test + "\"." + u_errorName(err)); 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4092475 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * I could not reproduce this bug. I'm pretty convinced it was fixed with the 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * big locale-data reorg of 10/28/97. The lookup logic for language and country 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * display names was also changed at that time in that check-in. --rtg 3/20/98 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestAtypicalLocales() 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale localesToTest [] = { Locale("de", "CA"), 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("ja", "ZA"), 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("ru", "MX"), 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("en", "FR"), 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("es", "DE"), 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "HR"), 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "SE"), 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "DO"), 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "BE") }; 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString englishDisplayNames [] = { "German (Canada)", 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Japanese (South Africa)", 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Russian (Mexico)", 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "English (France)", 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Spanish (Germany)", 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croatia", 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Sweden", 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Dominican Republic", 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Belgium" }; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString frenchDisplayNames []= { "allemand (Canada)", 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "japonais (Afrique du Sud)", 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "russe (Mexique)", 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "anglais (France)", 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "espagnol (Allemagne)", 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croatie", 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("Su\\u00E8de"), 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("R\\u00E9publique dominicaine"), 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Belgique" }; 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString spanishDisplayNames [] = { 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("alem\\u00E1n (Canad\\u00E1)"), 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("japon\\u00E9s (Sud\\u00E1frica)"), 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("ruso (M\\u00E9xico)"), 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("ingl\\u00E9s (Francia)"), 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("espa\\u00F1ol (Alemania)"), 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croacia", 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Suecia", 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("Rep\\u00FAblica Dominicana"), 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharsToUnicodeString("B\\u00E9lgica") }; 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // De-Anglicizing root required the change from 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // English display names to ISO Codes - ram 2003/09/26 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString invDisplayNames [] = { "German (Canada)", 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Japanese (South Africa)", 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Russian (Mexico)", 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "English (France)", 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Spanish (Germany)", 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Croatia", 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Sweden", 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Dominican Republic", 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Belgium" }; 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getUS(), status); 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; ++i) { 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale::getUS(), name); 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != englishDisplayNames[i]) 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 10816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in English failed: expected \"" + englishDisplayNames[i] 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + name + "\""); 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Locale name was-> " + (name=localesToTest[i].getName())); 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; i++) { 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale("es", "ES"), name); 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != spanishDisplayNames[i]) 10926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in Spanish failed: expected \"" + spanishDisplayNames[i] 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + name + "\""); 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; i++) { 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale::getFrance(), name); 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != frenchDisplayNames[i]) 11016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in French failed: expected \"" + frenchDisplayNames[i] 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + name + "\""); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 9; i++) { 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale("inv", "IN"), name); 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name + " Locale fallback to be, and data fallback to root"); 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != invDisplayNames[i]) 11106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in INV failed: expected \"" + prettify(invDisplayNames[i]) 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + prettify(name) + "\""); 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localesToTest[i].getDisplayName(Locale("inv", "BD"), name); 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name + " Data fallback to root"); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (name != invDisplayNames[i]) 11156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Lookup in INV failed: expected \"" + prettify(invDisplayNames[i]) 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + "\", got \"" + prettify(name )+ "\""); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4135752 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This would be better tested by the LocaleDataTest. Will move it when I 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * get the LocaleDataTest working again. 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestThaiCurrencyFormat() 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *thaiCurrency = (DecimalFormat*)NumberFormat::createCurrencyInstance( 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("th", "TH"), status); 1134f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString posPrefix("THB", 3, US_INV); // per cldrbug 7618 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || !thaiCurrency) 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 11396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't get th_TH currency -> " + UnicodeString(u_errorName(status))); 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1142f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (thaiCurrency->getPositivePrefix(temp) != posPrefix) 1143f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("Thai currency prefix wrong: expected THB, got \"" + 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru thaiCurrency->getPositivePrefix(temp) + "\""); 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (thaiCurrency->getPositiveSuffix(temp) != "") 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Thai currency suffix wrong: expected \"\", got \"" + 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru thaiCurrency->getPositiveSuffix(temp) + "\""); 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete thaiCurrency; 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4122371 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that Euro support works. This test is pretty rudimentary; all it does 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is check that any locales with the EURO variant format a number using the 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Euro currency symbol. 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ASSUME: All locales encode the Euro character "\u20AC". 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If this is changed to use the single-character Euro symbol, this 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test must be updated. 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestEuroSupport() 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar euro = 0x20ac; 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString EURO_CURRENCY(&euro, 1, 1); // Look for this UnicodeString in formatted Euro currency 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeArr[] = { 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES", 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_AT", 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_LU", 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "el_GR", 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_BE", 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_IE", 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_GB_EURO", 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_US_EURO", 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "es_ES", 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "eu_ES", 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fi_FI", 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_BE", 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_FR", 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_LU", 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ga_IE", 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "gl_ES", 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "it_IT", 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "nl_BE", 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "nl_NL", 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pt_PT", 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char** locales = localeArr; 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;*locales!=NULL;locales++) { 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc (*locales); 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *nf = NumberFormat::createCurrencyInstance(loc, status); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pos; 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createCurrencyInstance(%s)", *locales); 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(271828.182845, pos); 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString neg; 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(-271828.182845, neg); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.indexOf(EURO_CURRENCY) >= 0 && 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru neg.indexOf(EURO_CURRENCY) >= 0) { 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: " + (temp=loc.getName()) + 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ": " + pos + " / " + neg); 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + (temp=loc.getName()) + 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " formats without " + EURO_CURRENCY + 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ": " + pos + " / " + neg + 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n*** THIS FAILURE MAY ONLY MEAN THAT LOCALE DATA HAS CHANGED ***"); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dollarStr("USD", ""), euroStr("EUR", ""), genericStr((UChar)0x00a4), resultStr; 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar tmp[4]; 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", tmp, 4, &status); 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dollarStr != resultStr) { 12346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US didn't return USD - %s", u_errorName(status)); 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", tmp, 4, &status); 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (euroStr != resultStr) { 12396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_EURO didn't return EUR - %s", u_errorName(status)); 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_GB_EURO", tmp, 4, &status); 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (euroStr != resultStr) { 12446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_GB_EURO didn't return EUR - %s", u_errorName(status)); 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_PREEURO", tmp, 4, &status); 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dollarStr != resultStr) { 12496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_PREEURO didn't fallback to en_US - %s", u_errorName(status)); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_Q", tmp, 4, &status); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.setTo(tmp); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dollarStr != resultStr) { 12546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_Q didn't fallback to en_US - %s", u_errorName(status)); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t invalidLen = ucurr_forLocale("en_QQ", tmp, 4, &status); 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (invalidLen || U_SUCCESS(status)) { 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: en_QQ didn't return NULL"); 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4139504 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * toString() doesn't work with language_VARIANT. 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestToString() { 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale DATA [] = { 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "", ""), 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "YY", ""), 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "", "ZZ"), 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "YY", ""), 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "", "ZZ"), 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("", "YY", "ZZ"), 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("xx", "YY", "ZZ"), 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char DATA_S [][20] = { 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx", 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "_YY", 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "__ZZ", 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx_YY", 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx__ZZ", 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "_YY_ZZ", 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xx_YY_ZZ", 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i < 7; ++i) { 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *name; 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = DATA[i].getName(); 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(name, DATA_S[i]) != 0) 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Locale.getName(), got:" + UnicodeString(name) + ", expected: " + DATA_S[i]); 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Pass: Locale.getName(), got:" + UnicodeString(name) ); 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4139940 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Couldn't reproduce this bug -- probably was fixed earlier. 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ORIGINAL BUG REPORT: 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -- basically, hungarian for monday shouldn't have an \u00f4 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (o circumflex)in it instead it should be an o with 2 inclined 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (right) lines over it.. 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You may wonder -- why do all this -- why not just add a line to 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * LocaleData? Well, I could see by inspection that the locale file had the 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * right character in it, so I wanted to check the rest of the pipeline -- a 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * very remote possibility, but I wanted to be sure. The other possibility 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is that something is wrong with the font mapping subsystem, but we can't 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test that here. 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4139940() 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale mylocale("hu", "", ""); 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate mydate = date(98,3,13); // A Monday 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat df_full("EEEE", mylocale, status); 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 132950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln(UnicodeString("Could not create SimpleDateFormat object for locale hu. Error: ") + UnicodeString(u_errorName(status))); 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df_full.format(mydate, str, pos); 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure that o circumflex (\u00F4) is NOT there, and 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // o double acute (\u0151) IS. 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ocf = 0x00f4; 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar oda = 0x0151; 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str.indexOf(oda) < 0 || str.indexOf(ocf) >= 0) { 134027f654740f2a26ad62a5c155af9199af9e69b889claireho /* If the default locale is "th" this test will fail because of the buddhist calendar. */ 134127f654740f2a26ad62a5c155af9199af9e69b889claireho if (strcmp(Locale::getDefault().getLanguage(), "th") != 0) { 134227f654740f2a26ad62a5c155af9199af9e69b889claireho errln("Fail: Monday in Hungarian is wrong - oda's index is %d and ocf's is %d", 134327f654740f2a26ad62a5c155af9199af9e69b889claireho str.indexOf(oda), str.indexOf(ocf)); 134427f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 134527f654740f2a26ad62a5c155af9199af9e69b889claireho logln(UnicodeString("An error is produce in buddhist calendar.")); 134627f654740f2a26ad62a5c155af9199af9e69b889claireho } 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("String is: ") + str ); 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::date(int32_t y, int32_t m, int32_t d, int32_t hr, int32_t min, int32_t sec) 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(status); 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal == 0) 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0.0; 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1900 + y, m, d, hr, min, sec); // Add 1900 to follow java.util.Date protocol 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dt = cal->getTime(status); 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0.0; 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return dt; 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4143951 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Russian first day of week should be Monday. Confirmed. 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4143951() 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(Locale("ru", "", ""), status); 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getFirstDayOfWeek(status) != UCAL_MONDAY) { 13796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail: First day of week in Russia should be Monday"); 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4147315 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * java.util.Locale.getISO3Country() works wrong for non ISO-3166 codes. 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Should throw an exception for unknown locales 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4147315() 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Try with codes that are the wrong length but happen to match text 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // at a valid offset in the mapping table 13988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius Locale locale("xxx", "CCC"); 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *result = locale.getISO3Country(); 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Change to conform to C api usage 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((result==NULL)||(result[0] != 0)) 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getISO3Country() returns: " + UnicodeString(result,"") + 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " for locale '" + (temp=locale.getName()) + "' rather than exception" ); 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4147317 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * java.util.Locale.getISO3Language() works wrong for non ISO-3166 codes. 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Should throw an exception for unknown locales 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4147317() 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Try with codes that are the wrong length but happen to match text 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // at a valid offset in the mapping table 14198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius Locale locale("xxx", "CCC"); 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *result = locale.getISO3Language(); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Change to conform to C api usage 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((result==NULL)||(result[0] != 0)) 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getISO3Language() returns: " + UnicodeString(result,"") + 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " for locale '" + (temp=locale.getName()) + "' rather than exception" ); 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4147552 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4147552() 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locales [] = { Locale("no", "NO"), 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("no", "NO", "B"), 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("no", "NO", "NY") 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString edn("Norwegian (Norway, B)"); 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString englishDisplayNames [] = { 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Norwegian (Norway)", 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru edn, 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "Norwegian (Norway,B)", 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"Norwegian (Norway,NY)" 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Norwegian (Norway, NY)" 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString ndn("norsk (Norge, B"); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString norwegianDisplayNames [] = { 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "norsk (Norge)", 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "norsk (Norge, B)", 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //ndn, 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "norsk (Noreg, NY)" 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"Norsk (Noreg, Nynorsk)" 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 3; ++i) { 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc = locales[i]; 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (loc.getDisplayName(temp) != englishDisplayNames[i]) 14646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("English display-name mismatch: expected " + 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru englishDisplayNames[i] + ", got " + loc.getDisplayName(temp)); 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (loc.getDisplayName(loc, temp) != norwegianDisplayNames[i]) 14676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Norwegian display-name mismatch: expected " + 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru norwegianDisplayNames[i] + ", got " + 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loc.getDisplayName(loc, temp)); 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestVariantParsing() 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale en_US_custom("en", "US", "De Anza_Cupertino_California_United States_Earth"); 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dispName("English (United States, DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH)"); 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dispVar("DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH"); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString got; 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru en_US_custom.getDisplayVariant(Locale::getUS(), got); 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != dispVar) { 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: " + dispVar); 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru en_US_custom.getDisplayName(Locale::getUS(), got); 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != dispName) { 14936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getDisplayName()"); 14946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Wanted: " + dispName); 14956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Got : " + got); 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale shortVariant("fr", "FR", "foo"); 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru shortVariant.getDisplayVariant(got); 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusVariant("fr", "FR", "_foo"); 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusVariant.getDisplayVariant(got); 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusVariant2("fr", "FR", "foo_"); 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusVariant2.getDisplayVariant(got); 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale bogusVariant3("fr", "FR", "_foo_"); 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bogusVariant3.getDisplayVariant(got); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != "FOO") { 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getDisplayVariant()"); 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted: foo"); 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Got : " + got); 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4105828 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Currency symbol in zh is wrong. We will test this at the NumberFormat 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * end to test the whole pipe. 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::Test4105828() 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale LOC [] = { Locale::getChinese(), Locale("zh", "CN", ""), 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale("zh", "TW", ""), Locale("zh", "HK", "") }; 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 4; ++i) { 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *fmt = NumberFormat::createPercentInstance(LOC[i], status); 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 15516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't create NumberFormat - %s", u_errorName(status)); 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 155564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert FieldPosition pos(FieldPosition::DONT_CARE); 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format((int32_t)1, result, pos); 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != "100%") { 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Percent for ") + LOC[i].getDisplayName(temp) + " should be 100%, got " + result); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Tests setBogus and isBogus APIs for Locale 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Jitterbug 1735 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestSetIsBogus() { 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l("en_US"); 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l.setToBogus(); 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(l.isBogus() != TRUE) { 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("After setting bogus, didn't return TRUE"); 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l = "en_US"; // This should reset bogus 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(l.isBogus() != FALSE) { 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("After resetting bogus, didn't return FALSE"); 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestKeywordVariants(void) { 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedLocaleID; 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //const char *expectedLocaleIDNoKeywords; 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //const char *expectedCanonicalID; 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedKeywords[10]; 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numKeywords; 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode expectedStatus; 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@ currency = euro; C o ll A t i o n = Phonebook ; C alen dar = buddhist ", 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@calendar=buddhist;collation=Phonebook;currency=euro", 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE", 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE@calendar=buddhist;collation=Phonebook;currency=euro", 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"calendar", "collation", "currency"}, 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ZERO_ERROR 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro", 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro", 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE", 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //"de_DE@currency=EUR", 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"","","","","","",""}, 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_INVALID_FORMAT_ERROR /* must have '=' after '@' */ 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0, j = 0; 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *result = NULL; 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration *keywords; 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keyCount = 0; 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *keyword = NULL; 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString *keywordString; 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordLen = 0; 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16238de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(testCases[i].localeID); 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords = l.createKeywords(status); 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != testCases[i].expectedStatus) { 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get status %s. Got %s instead\n", 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(testCases[i].expectedStatus), u_errorName(status)); 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keywords) { 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyCount = keywords->count(status)) != testCases[i].numKeywords) { 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get %i keywords, got %i\n", testCases[i].numKeywords, keyCount); 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keyCount) { 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j = 0;;) { 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((j&1)==0) { 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyword = keywords->next(&keywordLen, status)) == NULL) { 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keywordString = keywords->snext(status)) == NULL) { 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*keywordString != UnicodeString(testCases[i].expectedKeywords[j], "")) { 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get keyword UnicodeString %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j++; 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(j == keyCount / 2) { 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // replace keywords with a clone of itself 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration *k2 = keywords->clone(); 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(k2 == NULL || keyCount != k2->count(status)) { 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("KeywordEnumeration.clone() failed"); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete keywords; 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords = k2; 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords->reset(status); // Make sure that reset works. 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j = 0;;) { 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyword = keywords->next(&keywordLen, status)) == NULL) { 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j++; 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete keywords; 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = l.getName(); 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(testCases[i].expectedLocaleID, result) != 0) { 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to get \"%s\" from \"%s\". Got \"%s\" instead\n", 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].expectedLocaleID, testCases[i].localeID, result); 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestKeywordVariantParsing(void) { 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *keyword; 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedValue; 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ C o ll A t i o n = Phonebook ", "collation", "Phonebook" }, 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE", "collation", ""}, 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@collation= PHONEBOOK", "collation", "PHONEBOOK" }, 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ currency = euro ; CoLLaTion = PHONEBOOk ", "collation", "PHONEBOOk" }, 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLen = 0; 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17098de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *buffer = 0; 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale l(testCases[i].localeID); 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = l.getKeywordValue(testCases[i].keyword, buffer, 256, status); 171359d709d503bab6e2b61931737e662dd293b40578ccornelius (void)resultLen; // Suppress unused variable warning. 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(testCases[i].expectedValue, buffer) != 0) { 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err("Expected to extract \"%s\" from \"%s\" for keyword \"%s\". Got \"%s\" instead\n", 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].expectedValue, testCases[i].localeID, testCases[i].keyword, buffer); 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 172250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleTest::TestSetKeywordValue(void) { 172350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho static const struct { 172450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *keyword; 172550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *value; 172650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } testCases[] = { 172750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "collation", "phonebook" }, 172850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "currency", "euro" }, 172950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "calendar", "buddhist" } 173050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 173150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 173250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 173350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 173450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t i = 0; 173550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t resultLen = 0; 173650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buffer[256]; 173750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 173850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale l(Locale::getGerman()); 173950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17408de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 174150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho l.setKeywordValue(testCases[i].keyword, testCases[i].value, status); 174250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 174350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho err("FAIL: Locale::setKeywordValue failed - %s\n", u_errorName(status)); 174450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 174550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 174650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *buffer = 0; 174750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultLen = l.getKeywordValue(testCases[i].keyword, buffer, 256, status); 174859d709d503bab6e2b61931737e662dd293b40578ccornelius (void)resultLen; // Suppress unused variable warning. 174950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(uprv_strcmp(testCases[i].value, buffer) != 0) { 175050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho err("Expected to extract \"%s\" for keyword \"%s\". Got \"%s\" instead\n", 175150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho testCases[i].value, testCases[i].keyword, buffer); 175250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 175350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 175450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 175550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 175650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocaleTest::TestGetBaseName(void) { 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *baseName; 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ C o ll A t i o n = Phonebook ", "de_DE" }, 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@currency = euro; CoLLaTion = PHONEBOOk", "de" }, 17641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "ja@calendar = buddhist", "ja" }, 17651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "de-u-co-phonebk", "de"} 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for(i = 0; i < UPRV_LENGTHOF(testCases); i++) { 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc(testCases[i].localeID); 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(testCases[i].baseName, loc.getBaseName())) { 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("For locale \"%s\" expected baseName \"%s\", but got \"%s\"", 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].localeID, testCases[i].baseName, loc.getBaseName()); 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 17781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 17791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // Verify that adding a keyword to an existing Locale doesn't change the base name. 17801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 17811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale loc2("en-US"); 17821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strcmp("en_US", loc2.getBaseName())) { 17831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d Expected \"en_US\", got \"%s\"", __FILE__, __LINE__, loc2.getBaseName()); 17841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 17851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert loc2.setKeywordValue("key", "value", status); 17861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strcmp("en_US@key=value", loc2.getName())) { 17871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d Expected \"en_US@key=value\", got \"%s\"", __FILE__, __LINE__, loc2.getName()); 17881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 17891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strcmp("en_US", loc2.getBaseName())) { 17901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d Expected \"en_US\", got \"%s\"", __FILE__, __LINE__, loc2.getBaseName()); 17911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare two locale IDs. If they are equal, return 0. If `string' 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * starts with `prefix' plus an additional element, that is, string == 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * prefix + '_' + x, then return 1. Otherwise return a value < 0. 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _loccmp(const char* string, const char* prefix) { 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t slen = (int32_t)strlen(string), 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru plen = (int32_t)strlen(prefix); 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t c = uprv_strncmp(string, prefix, plen); 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 'root' is "less than" everything */ 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(prefix, "root") == 0) { 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (uprv_strcmp(string, "root") == 0) ? 0 : 1; 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c) return -1; /* mismatch */ 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (slen == plen) return 0; 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (string[plen] == '_') return 1; 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -2; /* false match, e.g. "en_USX" cmp "en_US" */ 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check the relationship between requested locales, and report problems. 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The caller specifies the expected relationships between requested 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and valid (expReqValid) and between valid and actual (expValidActual). 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Possible values are: 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "gt" strictly greater than, e.g., en_US > en 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "ge" greater or equal, e.g., en >= en 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "eq" equal, e.g., en == en 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::_checklocs(const char* label, 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* req, 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& validLoc, 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& actualLoc, 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expReqValid, 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expValidActual) { 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* valid = validLoc.getName(); 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* actual = actualLoc.getName(); 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t reqValid = _loccmp(req, valid); 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t validActual = _loccmp(valid, actual); 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (((0 == uprv_strcmp(expReqValid, "gt") && reqValid > 0) || 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expReqValid, "ge") && reqValid >= 0) || 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expReqValid, "eq") && reqValid == 0)) && 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((0 == uprv_strcmp(expValidActual, "gt") && validActual > 0) || 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expValidActual, "ge") && validActual >= 0) || 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (0 == uprv_strcmp(expValidActual, "eq") && validActual == 0))) { 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("%s; req=%s, valid=%s, actual=%s", 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label, req, valid, actual); 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 18416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: %s; req=%s, valid=%s, actual=%s. Require (R %s V) and (V %s A)", 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label, req, valid, actual, 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expReqValid, expValidActual); 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestGetLocale(void) { 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req; 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale valid, actual, reqLoc; 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Calendar 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 18541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 18551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 18561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "en_US_BROOKLYN"; 18571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Calendar* cal = Calendar::createInstance(Locale::createFromName(req), ec); 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 18591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: Calendar::createInstance failed - %s", u_errorName(ec)); 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 18611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = cal->getLocale(ULOC_VALID_LOCALE, ec); 18621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = cal->getLocale(ULOC_ACTUAL_LOCALE, ec); 18631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 18641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Calendar::getLocale() failed"); 18651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 18661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Calendar", req, valid, actual); 18671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert /* Make sure that it fails correctly */ 18691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert ec = U_FILE_ACCESS_ERROR; 18701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (cal->getLocale(ULOC_VALID_LOCALE, ec).getName()[0] != 0) { 18711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Calendar::getLocale() failed to fail correctly. It should have returned \"\""); 18721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert ec = U_ZERO_ERROR; 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 18751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete cal; 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DecimalFormat, DecimalFormatSymbols 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 18811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 18821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 18831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "fr_FR_NICE"; 18841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert NumberFormat* nf = NumberFormat::createInstance(Locale::createFromName(req), ec); 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 18861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: NumberFormat::createInstance failed - %s", u_errorName(ec)); 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 18881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DecimalFormat* dec = dynamic_cast<DecimalFormat*>(nf); 18891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (dec == NULL) { 18901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: NumberFormat::createInstance does not return a DecimalFormat"); 18911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 18921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 18931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = dec->getLocale(ULOC_VALID_LOCALE, ec); 18941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = dec->getLocale(ULOC_ACTUAL_LOCALE, ec); 18951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 18961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DecimalFormat::getLocale() failed"); 18971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 18981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("DecimalFormat", req, valid, actual); 18991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const DecimalFormatSymbols* sym = dec->getDecimalFormatSymbols(); 19021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (sym == NULL) { 19031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: getDecimalFormatSymbols returned NULL"); 19041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = sym->getLocale(ULOC_VALID_LOCALE, ec); 19071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); 19081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DecimalFormatSymbols::getLocale() failed"); 19101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("DecimalFormatSymbols", req, valid, actual); 19121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 19141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete nf; 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DateFormat, DateFormatSymbols 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 19201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 19211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 19221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "de_CH_LUCERNE"; 19231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DateFormat* df = 19241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert DateFormat::createDateInstance(DateFormat::kDefault, 19251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale::createFromName(req)); 19261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (df == 0){ 19271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("Error calling DateFormat::createDateInstance()"); 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 19291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert SimpleDateFormat* dat = dynamic_cast<SimpleDateFormat*>(df); 19301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (dat == NULL) { 19311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DateFormat::createInstance does not return a SimpleDateFormat"); 19321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = dat->getLocale(ULOC_VALID_LOCALE, ec); 19351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = dat->getLocale(ULOC_ACTUAL_LOCALE, ec); 19361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: SimpleDateFormat::getLocale() failed"); 19381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("SimpleDateFormat", req, valid, actual); 19401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const DateFormatSymbols* sym = dat->getDateFormatSymbols(); 19431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (sym == NULL) { 19441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: getDateFormatSymbols returned NULL"); 19451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 19461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = sym->getLocale(ULOC_VALID_LOCALE, ec); 19481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); 19491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: DateFormatSymbols::getLocale() failed"); 19511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("DateFormatSymbols", req, valid, actual); 19531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 19551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete df; 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // BreakIterator 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 19611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 19621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 19631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "es_ES_BARCELONA"; 19641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert reqLoc = Locale::createFromName(req); 19651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert BreakIterator* brk = BreakIterator::createWordInstance(reqLoc, ec); 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 19671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: BreakIterator::createWordInstance failed - %s", u_errorName(ec)); 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 19691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = brk->getLocale(ULOC_VALID_LOCALE, ec); 19701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = brk->getLocale(ULOC_ACTUAL_LOCALE, ec); 19711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::getLocale() failed"); 19731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("BreakIterator", req, valid, actual); 19751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After registering something, the behavior should be different 19781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert URegistryKey key = BreakIterator::registerInstance(brk, reqLoc, UBRK_WORD, ec); 19791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert brk = 0; // registerInstance adopts 19801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::registerInstance() failed"); 19821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert brk = BreakIterator::createWordInstance(reqLoc, ec); 19841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::createWordInstance failed"); 19861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = brk->getLocale(ULOC_VALID_LOCALE, ec); 19881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = brk->getLocale(ULOC_ACTUAL_LOCALE, ec); 19891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 19901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::getLocale() failed"); 19911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 19921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // N.B.: now expect valid==actual==req 19931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("BreakIterator(registered)", 19941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req, valid, actual, "eq", "eq"); 19951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 19971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // No matter what, unregister 19981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert BreakIterator::unregister(key, ec); 19991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: BreakIterator::unregister() failed"); 20011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete brk; 20031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert brk = 0; 20041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After unregistering, should behave normally again 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru brk = BreakIterator::createWordInstance(reqLoc, ec); 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: BreakIterator::createWordInstance failed"); 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = brk->getLocale(ULOC_VALID_LOCALE, ec); 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = brk->getLocale(ULOC_ACTUAL_LOCALE, ec); 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: BreakIterator::getLocale() failed"); 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 20161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("BreakIterator(unregistered)", req, valid, actual); 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 20201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete brk; 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Collator 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 20261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 20271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode ec = U_ZERO_ERROR; // give each resource type its own error code 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert checkRegisteredCollators(NULL); // Don't expect any extras 20301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req = "hi_IN_BHOPAL"; 20321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert reqLoc = Locale::createFromName(req); 20331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Collator* coll = Collator::createInstance(reqLoc, ec); 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 20351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("FAIL: Collator::createInstance failed - %s", u_errorName(ec)); 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 20371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = coll->getLocale(ULOC_VALID_LOCALE, ec); 20381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = coll->getLocale(ULOC_ACTUAL_LOCALE, ec); 20391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::getLocale() failed"); 20411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Collator", req, valid, actual); 20431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After registering something, the behavior should be different 20461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert URegistryKey key = Collator::registerInstance(coll, reqLoc, ec); 20471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert coll = 0; // registerInstance adopts 20481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::registerInstance() failed"); 20501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert coll = Collator::createInstance(reqLoc, ec); 20521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::createWordInstance failed"); 20541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert valid = coll->getLocale(ULOC_VALID_LOCALE, ec); 20561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert actual = coll->getLocale(ULOC_ACTUAL_LOCALE, ec); 20571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::getLocale() failed"); 20591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else { 20601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // N.B.: now expect valid==actual==req 20611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Collator(registered)", 20621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert req, valid, actual, "eq", "eq"); 20631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert checkRegisteredCollators(req); // include hi_IN_BHOPAL 20661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // No matter what, unregister 20681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Collator::unregister(key, ec); 20691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(ec)) { 20701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::unregister() failed"); 20711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete coll; 20731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert coll = 0; 20741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // After unregistering, should behave normally again 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru coll = Collator::createInstance(reqLoc, ec); 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 20791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("FAIL: Collator::createInstance failed"); 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = coll->getLocale(ULOC_VALID_LOCALE, ec); 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = coll->getLocale(ULOC_ACTUAL_LOCALE, ec); 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Collator::getLocale() failed"); 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 20861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert _checklocs("Collator(unregistered)", req, valid, actual); 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 20901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete coll; 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert checkRegisteredCollators(NULL); // extra should be gone again 20931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 20941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#endif 20951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#endif 20961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 20971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 20981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#if !UCONFIG_NO_COLLATION 20991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert/** 21001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Compare Collator::getAvailableLocales(int) [ "old", returning an array ] 21011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * with Collator::getAvailableLocales() [ "new", returning a StringEnumeration ] 21021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * These should be identical (check their API docs) EXCEPT that 21031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * if expectExtra is non-NULL, it will be in the "new" array but not "old". 21041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Does not return any status but calls errln on error. 21051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * @param expectExtra an extra locale, will be in "new" but not "old". Or NULL. 21061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert */ 21071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid LocaleTest::checkRegisteredCollators(const char *expectExtra) { 21081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 21091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t count1=0,count2=0; 21101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Hashtable oldHash(status); 21111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Hashtable newHash(status); 21121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TEST_ASSERT_STATUS(status); 21131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString expectStr(expectExtra?expectExtra:"n/a", ""); 21151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // the 'old' list (non enumeration) 21171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale* oldList = Collator::getAvailableLocales(count1); 21181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(oldList == NULL) { 21191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("Error: Collator::getAvailableLocales(count) returned NULL"); 21201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 21211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // the 'new' list (enumeration) 21241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert LocalPointer<StringEnumeration> newEnum(Collator::getAvailableLocales()); 21251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(newEnum.isNull()) { 21261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("Error: collator::getAvailableLocales() returned NULL"); 21271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 21281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // OK. Let's add all of the OLD 21311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // then check for any in the NEW not in OLD 21321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // then check for any in OLD not in NEW. 21331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // 1. add all of OLD 21351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for(int32_t i=0;i<count1;i++) { 21361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString key(oldList[i].getName(), ""); 21371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t oldI = oldHash.puti(key, 1, status); 21381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if( oldI == 1 ){ 21391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("Error: duplicate key %s in Collator::getAvailableLocales(count) list.\n", 21401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert oldList[i].getName()); 21411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 21421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL && !strcmp(expectExtra, oldList[i].getName())) { 21441b7d32f919554dda9c193b32188251337bc756f1Fredrik 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); 21451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // 2. add all of NEW 21491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString *locStr; 21501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UBool foundExpected = FALSE; 21511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert while((locStr = newEnum->snext(status)) && U_SUCCESS(status)) { 21521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert count2++; 21531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL && expectStr == *locStr) { 21551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert foundExpected = TRUE; 21561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert logln(UnicodeString("Found expected registered collator: ","") + expectStr); 21571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert (void)foundExpected; // Hush unused variable compiler warning. 21591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if( oldHash.geti(*locStr) == 0 ) { 21611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL && expectStr==*locStr) { 21621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert logln(UnicodeString("As expected, Collator::getAvailableLocales(count) is missing registered collator ") + expectStr); 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 21641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln(UnicodeString("Error: Collator::getAvailableLocales(count) is missing: ","") 21651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert + *locStr); 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 21681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert newHash.puti(*locStr, 1, status); 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 21701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // 3. check all of OLD again 21721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for(int32_t i=0;i<count1;i++) { 21731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const UnicodeString key(oldList[i].getName(), ""); 21741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t newI = newHash.geti(key); 21751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(newI == 0) { 21761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln(UnicodeString("Error: Collator::getAvailableLocales() is missing: ","") 21771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert + key); 21781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t expectCount2 = count1; 21821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(expectExtra != NULL) { 21831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert expectCount2 ++; // if an extra item registered, bump the expect count 21841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 21851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert assertEquals("Collator::getAvail() count", expectCount2, count2); 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 21881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#endif 21891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 21901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestVariantWithOutCountry(void) { 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en","","POSIX"); 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc.getVariant(), "POSIX")) { 2195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: en__POSIX didn't get parsed correctly - name is %s - expected %s got %s", loc.getName(), "POSIX", loc.getVariant()); 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc2("en","","FOUR"); 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc2.getVariant(), "FOUR")) { 2199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: en__FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc2.getName(), "FOUR", loc2.getVariant()); 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc3("en","Latn","","FOUR"); 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc3.getVariant(), "FOUR")) { 2203103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: en_Latn__FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc3.getName(), "FOUR", loc3.getVariant()); 2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc4("","Latn","","FOUR"); 2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc4.getVariant(), "FOUR")) { 2207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: _Latn__FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc4.getName(), "FOUR", loc4.getVariant()); 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc5("","Latn","US","FOUR"); 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(loc5.getVariant(), "FOUR")) { 2211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: _Latn_US_FOUR didn't get parsed correctly - name is %s - expected %s got %s", loc5.getName(), "FOUR", loc5.getVariant()); 2212103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2213103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc6("de-1901"); 2214103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (0 != strcmp(loc6.getVariant(), "1901")) { 2215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: de-1901 didn't get parsed correctly - name is %s - expected %s got %s", loc6.getName(), "1901", loc6.getVariant()); 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic Locale _canonicalize(int32_t selector, /* 0==createFromName, 1==createCanonical, 2==Locale ct */ 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID) { 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (selector) { 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale::createFromName(localeID); 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale::createCanonical(localeID); 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale(localeID); 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale(""); 2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid LocaleTest::TestCanonicalization(void) 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; /* input */ 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *getNameID; /* expected getName() result */ 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *canonicalID; /* expected canonicalize() result */ 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 224027f654740f2a26ad62a5c155af9199af9e69b889claireho { "", "", "en_US_POSIX" }, 224127f654740f2a26ad62a5c155af9199af9e69b889claireho { "C", "c", "en_US_POSIX" }, 224227f654740f2a26ad62a5c155af9199af9e69b889claireho { "POSIX", "posix", "en_US_POSIX" }, 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES_PREEURO-with-extra-stuff-that really doesn't make any sense-unless-you're trying to increase code coverage", 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE", 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE"}, 2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES_PREEURO", "ca_ES_PREEURO", "ca_ES@currency=ESP" }, 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_AT_PREEURO", "de_AT_PREEURO", "de_AT@currency=ATS" }, 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE_PREEURO", "de_DE_PREEURO", "de_DE@currency=DEM" }, 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_LU_PREEURO", "de_LU_PREEURO", "de_LU@currency=LUF" }, 2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "el_GR_PREEURO", "el_GR_PREEURO", "el_GR@currency=GRD" }, 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_BE_PREEURO", "en_BE_PREEURO", "en_BE@currency=BEF" }, 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_IE_PREEURO", "en_IE_PREEURO", "en_IE@currency=IEP" }, 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO", "es_ES_PREEURO", "es_ES@currency=ESP" }, 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eu_ES_PREEURO", "eu_ES_PREEURO", "eu_ES@currency=ESP" }, 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fi_FI_PREEURO", "fi_FI_PREEURO", "fi_FI@currency=FIM" }, 2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_BE_PREEURO", "fr_BE_PREEURO", "fr_BE@currency=BEF" }, 2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_FR_PREEURO", "fr_FR_PREEURO", "fr_FR@currency=FRF" }, 2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_LU_PREEURO", "fr_LU_PREEURO", "fr_LU@currency=LUF" }, 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ga_IE_PREEURO", "ga_IE_PREEURO", "ga_IE@currency=IEP" }, 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "gl_ES_PREEURO", "gl_ES_PREEURO", "gl_ES@currency=ESP" }, 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "it_IT_PREEURO", "it_IT_PREEURO", "it_IT@currency=ITL" }, 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "nl_BE_PREEURO", "nl_BE_PREEURO", "nl_BE@currency=BEF" }, 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "nl_NL_PREEURO", "nl_NL_PREEURO", "nl_NL@currency=NLG" }, 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "pt_PT_PREEURO", "pt_PT_PREEURO", "pt_PT@currency=PTE" }, 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de__PHONEBOOK", "de__PHONEBOOK", "de@collation=phonebook" }, 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_GB_EURO", "en_GB_EURO", "en_GB@currency=EUR" }, 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_GB@EURO", "en_GB@EURO", "en_GB@currency=EUR" }, /* POSIX ID */ 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es__TRADITIONAL", "es__TRADITIONAL", "es@collation=traditional" }, 2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" }, 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" }, 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" }, 2272c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" }, 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" }, 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" }, 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" }, 2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" }, 2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" }, 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" }, 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ }, 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no@ny", "no@ny", "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */ 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */ 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "qz-qz@Euro", "qz_QZ@Euro", "qz_QZ@currency=EUR" }, /* qz-qz uses private use iso codes */ 2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NOTE: uloc_getName() works on en-BOONT, but Locale() parser considers it BOGUS 2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO: unify this behavior 228554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en-BOONT", "en__BOONT", "en__BOONT" }, /* registered name */ 228654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "de-1901", "de__1901", "de__1901" }, /* registered name */ 228754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "de-1906", "de__1906", "de__1906" }, /* registered name */ 2288c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_RS" }, /* .NET name */ 2289c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_RS" }, /* .NET name */ 2290c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_RS" }, /* Linux name */ 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */ 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */ 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */ 2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */ 2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* posix behavior that used to be performed by getName */ 2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mr.utf8", "mr.utf8", "mr" }, 2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de-tv.koi8r", "de_TV.koi8r", "de_TV" }, 2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML" }, 2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "i-cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US" }, 2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA" }, 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-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 */ 2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fleshing out canonicalization */ 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* trim space and sort keywords, ';' is separator so not present at end in canonical form */ 2306b13da9df870a61b11249bf741347908dbea0edd8Jean-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" }, 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* already-canonical ids are not changed */ 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-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" }, 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* PRE_EURO and EURO conversions don't affect other keywords */ 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO@CALendar=Japanese", "es_ES_PREEURO@calendar=Japanese", "es_ES@calendar=Japanese;currency=ESP" }, 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_EURO@SHOUT=zipeedeedoodah", "es_ES_EURO@shout=zipeedeedoodah", "es_ES@currency=EUR;shout=zipeedeedoodah" }, 2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* currency keyword overrides PRE_EURO and EURO currency */ 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO@currency=EUR", "es_ES_PREEURO@currency=EUR", "es_ES@currency=EUR" }, 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_EURO@currency=ESP", "es_ES_EURO@currency=ESP", "es_ES@currency=ESP" }, 2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* norwegian is just too weird, if we handle things in their full generality */ 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-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] */ }, 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test cases reflecting internal resource bundle usage */ 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "root@kw=foo", "root@kw=foo", "root@kw=foo" }, 2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "@calendar=gregorian", "@calendar=gregorian", "@calendar=gregorian" }, 2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese" } 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* label[] = { "createFromName", "createCanonical", "Locale" }; 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, j; 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23288de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (i=0; i < UPRV_LENGTHOF(testCases); i++) { 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j=0; j<3; ++j) { 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expected = (j==1) ? testCases[i].canonicalID : testCases[i].getNameID; 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc = _canonicalize(j, testCases[i].localeID); 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* getName = loc.isBogus() ? "BOGUS" : loc.getName(); 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(expected, getName) != 0) { 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: %s(%s).getName() => \"%s\", expected \"%s\"", 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, getName, expected); 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: %s(%s) => \"%s\"", 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, getName); 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2343c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2344c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid LocaleTest::TestCurrencyByDate(void) 2345c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 2346c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UDate date = uprv_getUTCtime(); 2349c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar TMP[4]; 2350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t index = 0; 2351c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t resLen = 0; 2352c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString tempStr, resultStr; 2353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2354c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Cycle through historical currencies 2355c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)-630720000000.0; // pre 1961 - no currency defined 23566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2357c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2358c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 23596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 0 for eo_AM - %s", u_errorName(status)); 2360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2361c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2362c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 23636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_AM didn't return NULL - %s", u_errorName(status)); 2364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2365c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2366c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2367c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)0.0; // 1970 - one currency defined 23686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2370c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 23716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AM - %s", u_errorName(status)); 2372c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2375c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("SUR"); 2376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 23776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return SUR for eo_AM - %s", u_errorName(status)); 2378c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2379c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)693792000000.0; // 1992 - one currency defined 2381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2383c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 23846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AM - %s", u_errorName(status)); 2385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2386c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2387c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2388c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("RUR"); 2389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 23906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return RUR for eo_AM - %s", u_errorName(status)); 2391c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2392c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2393c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // post 1993 - one currency defined 2394c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AM", date, &status); 2395c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2396c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 23976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AM - %s", u_errorName(status)); 2398c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2399c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AM", date, index, TMP, 4, &status); 2400c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2401c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AMD"); 2402c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AMD for eo_AM - %s", u_errorName(status)); 2404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2405c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2406c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Locale AD has multiple currencies at once 2407c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // year 2001 2408c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2409c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 4) 2410c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 4 for eo_AD - %s", u_errorName(status)); 2412c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2413c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2414c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2415c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("EUR"); 2416c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return EUR for eo_AD - %s", u_errorName(status)); 2418c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2419c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 2, TMP, 4, &status); 2420c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2421c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2422c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2424c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2425c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 3, TMP, 4, &status); 2426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2427c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("FRF"); 2428c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return FRF for eo_AD - %s", u_errorName(status)); 2430c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2431c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 4, TMP, 4, &status); 2432c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2433c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ADP"); 2434c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ADP for eo_AD - %s", u_errorName(status)); 2436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2437c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2438c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)0.0; // year 1970 2439c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 3) 2441c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 3 for eo_AD - %s", u_errorName(status)); 2443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2445c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2446c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2447c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2449c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2450c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 2, TMP, 4, &status); 2451c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("FRF"); 2453c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return FRF for eo_AD - %s", u_errorName(status)); 2455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 3, TMP, 4, &status); 2457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ADP"); 2459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ADP for eo_AD - %s", u_errorName(status)); 2461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)-630720000000.0; // year 1950 2464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2466c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 2 for eo_AD - %s", u_errorName(status)); 2468c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2470c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2474c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2475c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 2, TMP, 4, &status); 2476c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ADP"); 2478c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ADP for eo_AD - %s", u_errorName(status)); 2480c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)-2207520000000.0; // year 1900 2483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AD", date, &status); 2484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 24866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AD - %s", u_errorName(status)); 2487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AD", date, 1, TMP, 4, &status); 2489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("ESP"); 2491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 24926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return ESP for eo_AD - %s", u_errorName(status)); 2493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2495c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Locale UA has gap between years 1994 - 1996 2496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)788400000000.0; 2497c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_UA", date, &status); 2498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2499c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 0 for eo_UA - %s", u_errorName(status)); 2501c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2502c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_UA", date, index, TMP, 4, &status); 2503c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_UA didn't return NULL - %s", u_errorName(status)); 2505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2506c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2507c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2508c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test index bounds 2509c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_UA", date, 100, TMP, 4, &status); 2510c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_UA didn't return NULL - %s", u_errorName(status)); 2512c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2513c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2514c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2515c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_UA", date, 0, TMP, 4, &status); 2516c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_UA didn't return NULL - %s", u_errorName(status)); 2518c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2519c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2520c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2521c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test for bogus locale 2522c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_QQ", date, &status); 2523c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2524c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 0 for eo_QQ - %s", u_errorName(status)); 2526c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2527c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2528c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_QQ", date, 1, TMP, 4, &status); 2529c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_QQ didn't return NULL - %s", u_errorName(status)); 2531c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2533c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_QQ", date, 0, TMP, 4, &status); 2534c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 25356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_QQ didn't return NULL - %s", u_errorName(status)); 2536c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2537c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2538c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2539c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Cycle through histrocial currencies 2540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // 2001 - one currency 2541c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2542c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOA"); 2549c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOA for eo_AO - %s", u_errorName(status)); 2551c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)819936000000.0; // 1996 - 2 currencies 2554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOR"); 2562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOR for eo_AO - %s", u_errorName(status)); 2564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 2, TMP, 4, &status); 2566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AON"); 2568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AON for eo_AO - %s", u_errorName(status)); 2570c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)662256000000.0; // 1991 - 2 currencies 2573c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2575c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2579c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AON"); 2581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AON for eo_AO - %s", u_errorName(status)); 2583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 2, TMP, 4, &status); 2585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOK"); 2587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 25886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOK for eo_AO - %s", u_errorName(status)); 2589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)315360000000.0; // 1980 - one currency 2592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 1) 2594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 25956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("AOK"); 2600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return AOK for eo_AO - %s", u_errorName(status)); 2602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)0.0; // 1970 - no currencies 2605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_AO", date, &status); 2606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 0) 2607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 26086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 1 for eo_AO - %s", u_errorName(status)); 2609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_AO", date, 1, TMP, 4, &status); 2611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resLen != 0) { 26126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: eo_AO didn't return NULL - %s", u_errorName(status)); 2613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 2615c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2616c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test with currency keyword override 2617c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = (UDate)977616000000.0; // 2001 - two currencies 2618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru index = ucurr_countCurrencies("eo_DE@currency=DEM", date, &status); 2619c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (index != 2) 2620c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 26216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return 2 for eo_DE@currency=DEM - %s", u_errorName(status)); 2622c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_DE@currency=DEM", date, 1, TMP, 4, &status); 2624c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2625c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("EUR"); 2626c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return EUR for eo_DE@currency=DEM - %s", u_errorName(status)); 2628c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2629c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resLen = ucurr_forLocaleAndDate("eo_DE@currency=DEM", date, 2, TMP, 4, &status); 2630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru tempStr.setTo(TMP); 2631c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultStr.setTo("DEM"); 2632c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (resultStr != tempStr) { 26336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: didn't return DEM for eo_DE@currency=DEM - %s", u_errorName(status)); 2634c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2636c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Test Euro Support 2637c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 2638c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru date = uprv_getUTCtime(); 2639c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2640c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar USD[4]; 2641c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US", date, 1, USD, 4, &status); 2642c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2643c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar YEN[4]; 2644c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("ja_JP", date, 1, YEN, 4, &status); 2645c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US", date, 1, TMP, 4, &status); 2647c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 26486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US didn't return USD - %s", u_errorName(status)); 2649c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US_PREEURO", date, 1, TMP, 4, &status); 2651c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 26526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_PREEURO didn't fallback to en_US - %s", u_errorName(status)); 2653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2654c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucurr_forLocaleAndDate("en_US_Q", date, 1, TMP, 4, &status); 2655c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 26566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail: en_US_Q didn't fallback to en_US - %s", u_errorName(status)); 2657c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 2659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 2660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 266150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 266250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleTest::TestGetVariantWithKeywords(void) 266350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 266450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale l("en_US_VALLEY@foo=value"); 266550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *variant = l.getVariant(); 266650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(variant); 266750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho test_assert(strcmp("VALLEY", variant) == 0); 266850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 266950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 267050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buffer[50]; 267150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t len = l.getKeywordValue("foo", buffer, 50, status); 267250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho buffer[len] = '\0'; 267350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho test_assert(strcmp("value", buffer) == 0); 267450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 2675f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 2676f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid LocaleTest::TestIsRightToLeft() { 2677f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("root LTR", Locale::getRoot().isRightToLeft()); 2678f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("zh LTR", Locale::getChinese().isRightToLeft()); 2679f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("ar RTL", Locale("ar").isRightToLeft()); 2680f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("und-EG RTL", Locale("und-EG").isRightToLeft(), FALSE, TRUE); 2681f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("fa-Cyrl LTR", Locale("fa-Cyrl").isRightToLeft()); 2682f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("en-Hebr RTL", Locale("en-Hebr").isRightToLeft()); 2683f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertTrue("ckb RTL", Locale("ckb").isRightToLeft(), FALSE, TRUE); // Sorani Kurdish 2684f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("fil LTR", Locale("fil").isRightToLeft()); 2685f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertFalse("he-Zyxw LTR", Locale("he-Zyxw").isRightToLeft()); 2686f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 26871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 26881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid LocaleTest::TestBug11421() { 26891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale::getDefault().getBaseName(); 26901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t numLocales; 26911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale *localeList = Locale::getAvailableLocales(numLocales); 26921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (int localeIndex = 0; localeIndex < numLocales; localeIndex++) { 26931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const Locale &loc = localeList[localeIndex]; 26941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (strncmp(loc.getName(), loc.getBaseName(), strlen(loc.getBaseName()))) { 26951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d loc.getName=\"%s\"; loc.getBaseName=\"%s\"", 26961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert __FILE__, __LINE__, loc.getName(), loc.getBaseName()); 26971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert break; 26981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 26991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 27001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 2701