17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/********************************************************************
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * COPYRIGHT:
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Copyright (c) 1997-2010, International Business Machines Corporation and
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * others. All Rights Reserved.
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ********************************************************************/
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "intltest.h"
80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "unicode/locid.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Tests for the Locale class
12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch **/
136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class LocaleTest: public IntlTest {
146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)public:
156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    LocaleTest();
166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    virtual ~LocaleTest();
17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)     * Test methods to set and get data fields
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)     **/
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    void TestBasicGetters(void);
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Test methods to set and get data fields
266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestParallelAPIValues(void);
286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Use Locale to access Resource file data and compare against expected values
306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestSimpleResourceInfo(void);
326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Use Locale to access Resource file display names and compare against expected values
346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestDisplayNames(void);
366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Test methods for basic object behaviour
386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestSimpleObjectStuff(void);
406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Test methods for POSIX parsing behavior
426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestPOSIXParsing(void);
446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Test Locale::getAvailableLocales
466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestGetAvailableLocales(void);
486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    /**
496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * Test methods to set and access a custom data directory
506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestDataDirectory(void);
526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestISO3Fallback(void);
546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestGetLangsAndCountries(void);
556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestSimpleDisplayNames(void);
566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestUninstalledISO3Names(void);
576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestAtypicalLocales(void);
586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if !UCONFIG_NO_FORMATTING
596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestThaiCurrencyFormat(void);
606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestEuroSupport(void);
616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif
626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void TestToString(void);
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !UCONFIG_NO_FORMATTING
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void Test4139940(void);
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    void Test4143951(void);
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void Test4147315(void);
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void Test4147317(void);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void Test4147552(void);
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    void TestVariantParsing(void);
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   /* Test getting keyword enumeratin */
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   void TestKeywordVariants(void);
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   /* Test getting keyword values */
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   void TestKeywordVariantParsing(void);
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch   /* Test setting keyword values */
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   void TestSetKeywordValue(void);
81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch   /* Test getting the locale base name */
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   void TestGetBaseName(void);
847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !UCONFIG_NO_FORMATTING
867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void Test4105828(void) ;
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void TestSetIsBogus(void);
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void TestGetLocale(void);
927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    void TestVariantWithOutCountry(void);
947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    void TestCanonicalization(void);
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !UCONFIG_NO_FORMATTING
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    static UDate date(int32_t y, int32_t m, int32_t d, int32_t hr = 0, int32_t min = 0, int32_t sec = 0);
997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void TestCurrencyByDate(void);
102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    void TestGetVariantWithKeywords(void);
1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)private:
1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void _checklocs(const char* label,
1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    const char* req,
1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    const Locale& validLoc,
1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    const Locale& actualLoc,
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    const char* expReqValid="gt",
1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    const char* expValidActual="ge");
1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    /**
1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)     * routine to perform subtests, used by TestDisplayNames
1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)     **/
1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    void doTestDisplayNames(Locale& inLocale, int32_t compareIndex);
1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    /**
1186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     * additional intialization for datatables storing expected values
1196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)     **/
1206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    void setUpDataTable(void);
1216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    UnicodeString** dataTable;
1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
1246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    enum {
1256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        ENGLISH = 0,
1266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        FRENCH = 1,
1276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        CROATIAN = 2,
1286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        GREEK = 3,
1296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        NORWEGIAN = 4,
1306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        ITALIAN = 5,
1316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        XX = 6,
1326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        CHINESE = 7,
1336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        MAX_LOCALES = 7
1346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    };
1356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
1366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    enum {
1376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        LANG = 0,
1386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        SCRIPT,
1396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        CTRY,
1406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        VAR,
1416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        NAME,
1426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        LANG3,
1436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        CTRY3,
1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        LCID,
1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DLANG_EN,
1466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        DSCRIPT_EN,
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DCTRY_EN,
1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DVAR_EN,
1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DNAME_EN,
150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        DLANG_FR,
1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DSCRIPT_FR,
1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DCTRY_FR,
1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        DVAR_FR,
1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DNAME_FR,
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        DLANG_CA,
1568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        DSCRIPT_CA,
1578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        DCTRY_CA,
1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        DVAR_CA,
1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        DNAME_CA,
1608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        DLANG_EL,
1610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        DSCRIPT_EL,
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        DCTRY_EL,
163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        DVAR_EL,
164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        DNAME_EL,
165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        DLANG_NO,
1668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        DSCRIPT_NO,
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DCTRY_NO,
1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DVAR_NO,
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        DNAME_NO
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    };
1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
174ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
175ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch