From e0a08a43c1256399dbe56d87d5b6291ea8f1ad16 Mon Sep 17 00:00:00 2001 From: George Rhoten Date: Thu, 16 Jun 2005 21:31:47 +0000 Subject: [PATCH] ICU-3615 Add API to list ISO 4217 currencies. X-SVN-Rev: 17916 --- icu4c/source/test/cintltst/currtest.c | 163 ++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 icu4c/source/test/cintltst/currtest.c diff --git a/icu4c/source/test/cintltst/currtest.c b/icu4c/source/test/cintltst/currtest.c new file mode 100644 index 00000000000..4bd1023a980 --- /dev/null +++ b/icu4c/source/test/cintltst/currtest.c @@ -0,0 +1,163 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2005, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING +#include "unicode/ucurr.h" +#include "cintltst.h" +#include "cstring.h" + +static void expectInList(const char *isoCurrency, uint32_t currencyType, UBool isExpected) { + UErrorCode status = U_ZERO_ERROR; + const char *foundCurrency = NULL; + const char *currentCurrency; + UEnumeration *en = ucurr_openISOCurrencies(currencyType, &status); + if (U_FAILURE(status)) { + log_err("Error: ucurr_openISOCurrencies returned %s\n", myErrorName(status)); + return; + } + + while ((currentCurrency = uenum_next(en, NULL, &status)) != NULL) { + if (strcmp(isoCurrency, currentCurrency) == 0) { + foundCurrency = currentCurrency; + break; + } + } + + if ((foundCurrency != NULL) != isExpected) { + log_err("Error: could not find %s as expected. isExpected = %s type=0x%X\n", + isoCurrency, isExpected ? "TRUE" : "FALSE", currencyType); + } + uenum_close(en); +} + +static void TestEnumList(void) { + expectInList("ADP", UCURR_ALL, TRUE); /* First in list */ + expectInList("ZWD", UCURR_ALL, TRUE); /* Last in list */ + + expectInList("USD", UCURR_ALL, TRUE); + expectInList("USD", UCURR_COMMON, TRUE); + expectInList("USD", UCURR_UNCOMMON, FALSE); + expectInList("USD", UCURR_DEPRECATED, FALSE); + expectInList("USD", UCURR_NON_DEPRECATED, TRUE); + expectInList("USD", UCURR_COMMON|UCURR_DEPRECATED, FALSE); + expectInList("USD", UCURR_COMMON|UCURR_NON_DEPRECATED, TRUE); + expectInList("USD", UCURR_UNCOMMON|UCURR_DEPRECATED, FALSE); + expectInList("USD", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE); + + expectInList("USN", UCURR_ALL, TRUE); + expectInList("USN", UCURR_COMMON, FALSE); + expectInList("USN", UCURR_UNCOMMON, TRUE); + expectInList("USN", UCURR_DEPRECATED, FALSE); + expectInList("USN", UCURR_NON_DEPRECATED, TRUE); + expectInList("USN", UCURR_COMMON|UCURR_DEPRECATED, FALSE); + expectInList("USN", UCURR_COMMON|UCURR_NON_DEPRECATED, FALSE); + expectInList("USN", UCURR_UNCOMMON|UCURR_DEPRECATED, FALSE); + expectInList("USN", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, TRUE); + + expectInList("DEM", UCURR_ALL, TRUE); + expectInList("DEM", UCURR_COMMON, TRUE); + expectInList("DEM", UCURR_UNCOMMON, FALSE); + expectInList("DEM", UCURR_DEPRECATED, TRUE); + expectInList("DEM", UCURR_NON_DEPRECATED, FALSE); + expectInList("DEM", UCURR_COMMON|UCURR_DEPRECATED, TRUE); + expectInList("DEM", UCURR_COMMON|UCURR_NON_DEPRECATED, FALSE); + expectInList("DEM", UCURR_UNCOMMON|UCURR_DEPRECATED, FALSE); + expectInList("DEM", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE); + + expectInList("XEU", UCURR_ALL, TRUE); + expectInList("XEU", UCURR_COMMON, FALSE); + expectInList("XEU", UCURR_UNCOMMON, TRUE); + expectInList("XEU", UCURR_DEPRECATED, TRUE); + expectInList("XEU", UCURR_NON_DEPRECATED, FALSE); + expectInList("XEU", UCURR_COMMON|UCURR_DEPRECATED, FALSE); + expectInList("XEU", UCURR_COMMON|UCURR_NON_DEPRECATED, FALSE); + expectInList("XEU", UCURR_UNCOMMON|UCURR_DEPRECATED, TRUE); + expectInList("XEU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE); + +} + +static void TestEnumListReset(void) { + UErrorCode status = U_ZERO_ERROR; + const char *currency1; + const char *currency2; + UEnumeration *en = ucurr_openISOCurrencies(UCURR_ALL, &status); + if (U_FAILURE(status)) { + log_err("Error: ucurr_openISOCurrencies returned %s\n", myErrorName(status)); + return; + } + + currency1 = uenum_next(en, NULL, &status); + uenum_reset(en, &status); + currency2 = uenum_next(en, NULL, &status); + if (U_FAILURE(status)) { + log_err("Error: uenum_next or uenum_reset returned %s\n", myErrorName(status)); + return; + } + /* The first item's pointer in the list should be the same between resets. */ + if (currency1 != currency2) { + log_err("Error: reset doesn't work %s != %s\n", currency1, currency2); + } + uenum_close(en); +} + +static int32_t checkItemCount(uint32_t currencyType) { + UErrorCode status = U_ZERO_ERROR; + int32_t originalCount, count; + UEnumeration *en = ucurr_openISOCurrencies(currencyType, &status); + int32_t expectedLen = 3, len; + if (U_FAILURE(status)) { + log_err("Error: ucurr_openISOCurrencies returned %s\n", myErrorName(status)); + return; + } + + originalCount = uenum_count(en, &status); + for (count=0;;count++) { + const char *str = uenum_next(en, &len, &status); + if (U_FAILURE(status) || len != expectedLen || strlen(str) != expectedLen) { + break; + } + } + + if (originalCount != count) { + log_err("Error: uenum_count returned the wrong value (type = 0x%X). Got: %d Expected %d\n", + currencyType, count, originalCount); + } + uenum_close(en); + return count; +} + +static void TestEnumListCount(void) { + checkItemCount(UCURR_ALL); + checkItemCount(UCURR_COMMON); + checkItemCount(UCURR_UNCOMMON); + checkItemCount(UCURR_DEPRECATED); + checkItemCount(UCURR_NON_DEPRECATED); + checkItemCount(UCURR_COMMON|UCURR_DEPRECATED); + checkItemCount(UCURR_COMMON|UCURR_NON_DEPRECATED); + checkItemCount(UCURR_UNCOMMON|UCURR_DEPRECATED); + checkItemCount(UCURR_UNCOMMON|UCURR_NON_DEPRECATED); + + if (checkItemCount(UCURR_DEPRECATED|UCURR_NON_DEPRECATED) != 0) { + log_err("Error: UCURR_DEPRECATED|UCURR_NON_DEPRECATED should return 0 items\n"); + } + if (checkItemCount(UCURR_COMMON|UCURR_UNCOMMON) != 0) { + log_err("Error: UCURR_DEPRECATED|UCURR_NON_DEPRECATED should return 0 items\n"); + } +} + +void addCurrencyTest(TestNode** root); + +#define TESTCASE(x) addTest(root, &x, "tsformat/currtest/" #x) + +void addCurrencyTest(TestNode** root) +{ + TESTCASE(TestEnumList); + TESTCASE(TestEnumListReset); + TESTCASE(TestEnumListCount); +} + +#endif /* #if !UCONFIG_NO_FORMATTING */