1b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/******************************************************************** 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 2011, International Business Machines Corporation 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * and others. All Rights Reserved. 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ********************************************************************/ 5b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* C API TEST FOR PLURAL RULES */ 6b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 7b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/utypes.h" 8b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 9b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if !UCONFIG_NO_FORMATTING 10b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 11b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/upluralrules.h" 12b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/ustring.h" 13b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "cintltst.h" 14b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "cmemory.h" 15b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 16b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestPluralRules(void); 17b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid addPluralRulesTest(TestNode** root); 19b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define TESTCASE(x) addTest(root, &x, "tsformat/cpluralrulestest/" #x) 21b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 22b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid addPluralRulesTest(TestNode** root) 23b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 24b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TESTCASE(TestPluralRules); 25b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 26b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 27b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 28b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * locale; 29b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho double number; 30b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * keywordExpected; 31b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} PluralRulesTestItem; 32b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 33b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* Just a small set of tests for now, other functionality is tested in the C++ tests */ 34b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const PluralRulesTestItem testItems[] = { 35b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "en", 0, "other" }, 36b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "en", 0.5, "other" }, 37b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "en", 1, "one" }, 38b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "en", 1.5, "other" }, 39b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "en", 2, "other" }, 40b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "fr", 0, "one" }, 41b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "fr", 0.5, "one" }, 42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "fr", 1, "one" }, 43b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "fr", 1.5, "one" }, 44b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "fr", 2, "other" }, 45b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 0, "many" }, 46b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 0.5, "other" }, 47b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 1, "one" }, 48b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 1.5, "other" }, 49b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 2, "few" }, 50b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 5, "many" }, 51b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 10, "many" }, 52b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ru", 11, "many" }, 53b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { NULL, 0, NULL } 54b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 55b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 56b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoenum { 57b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho kKeywordBufLen = 32 58b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 59b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 60b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestPluralRules() 61b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 62b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const PluralRulesTestItem * testItemPtr; 63b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("\nTesting uplrules_open() and uplrules_select() with various parameters\n"); 64b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for ( testItemPtr = testItems; testItemPtr->locale != NULL; ++testItemPtr ) { 65b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 66b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UPluralRules* uplrules = uplrules_open(testItemPtr->locale, &status); 67b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_SUCCESS(status) ) { 68b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar keyword[kKeywordBufLen]; 69b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar keywordExpected[kKeywordBufLen]; 70b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t keywdLen = uplrules_select(uplrules, testItemPtr->number, keyword, kKeywordBufLen, &status); 71b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (keywdLen >= kKeywordBufLen) { 72b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho keyword[kKeywordBufLen-1] = 0; 73b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 74b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_SUCCESS(status) ) { 75b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho u_unescape(testItemPtr->keywordExpected, keywordExpected, kKeywordBufLen); 76b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( u_strcmp(keyword, keywordExpected) != 0 ) { 77b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char bcharBuf[kKeywordBufLen]; 78b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("ERROR: uplrules_select for locale %s, number %.1f: expect %s, get %s\n", 79b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho testItemPtr->locale, testItemPtr->number, testItemPtr->keywordExpected, u_austrcpy(bcharBuf,keyword) ); 80b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 81b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 82b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("FAIL: uplrules_select for locale %s, number %.1f: %s\n", 83b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho testItemPtr->locale, testItemPtr->number, myErrorName(status) ); 84b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 85b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uplrules_close(uplrules); 86b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("FAIL: uplrules_open for locale %s: %s\n", testItemPtr->locale, myErrorName(status) ); 88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 90b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 91b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 92b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif /* #if !UCONFIG_NO_FORMATTING */ 93