OLD | NEW |
(Empty) | |
| 1 /******************************************************************** |
| 2 * Copyright (c) 2015, International Business Machines Corporation |
| 3 * and others. All Rights Reserved. |
| 4 ********************************************************************/ |
| 5 /* C API TEST for UListFormatter */ |
| 6 |
| 7 #include "unicode/utypes.h" |
| 8 |
| 9 #if !UCONFIG_NO_FORMATTING |
| 10 |
| 11 #include "unicode/ustring.h" |
| 12 #include "unicode/ulistformatter.h" |
| 13 #include "cintltst.h" |
| 14 #include "cmemory.h" |
| 15 #include "cstring.h" |
| 16 |
| 17 static void TestUListFmt(void); |
| 18 |
| 19 void addUListFmtTest(TestNode** root); |
| 20 |
| 21 #define TESTCASE(x) addTest(root, &x, "tsformat/ulistfmttest/" #x) |
| 22 |
| 23 void addUListFmtTest(TestNode** root) |
| 24 { |
| 25 TESTCASE(TestUListFmt); |
| 26 } |
| 27 |
| 28 static const UChar str0[] = { 0x41,0 }; /* "A" */ |
| 29 static const UChar str1[] = { 0x42,0x62,0 }; /* "Bb" */ |
| 30 static const UChar str2[] = { 0x43,0x63,0x63,0 }; /* "Ccc" */ |
| 31 static const UChar str3[] = { 0x44,0x64,0x64,0x64,0 }; /* "Dddd" */ |
| 32 static const UChar str4[] = { 0x45,0x65,0x65,0x65,0x65,0 }; /* "Eeeee" */ |
| 33 static const UChar* strings[] = { str0, str1, str2, str3, str4 }; |
| 34 static const int32_t stringLengths[] = { 1, 2, 3, 4, 5 }; |
| 35 static const int32_t stringLengthsNeg[] = { -1, -1, -1, -1, -1 }; |
| 36 |
| 37 typedef struct { |
| 38 const char * locale; |
| 39 int32_t stringCount; |
| 40 const char *expectedResult; /* invariant chars + escaped Unicode */ |
| 41 } ListFmtTestEntry; |
| 42 |
| 43 static ListFmtTestEntry listFmtTestEntries[] = { |
| 44 /* locale stringCount expectedResult */ |
| 45 { "en" , 5, "A, Bb, Ccc, Dddd, and Eeeee" }, |
| 46 { "en" , 2, "A and Bb" }, |
| 47 { "de" , 5, "A, Bb, Ccc, Dddd und Eeeee" }, |
| 48 { "de" , 2, "A und Bb" }, |
| 49 { "ja" , 5, "A\\u3001Bb\\u3001Ccc\\u3001Dddd\\u3001Eeeee" }, |
| 50 { "ja" , 2, "A\\u3001Bb" }, |
| 51 { "zh" , 5, "A\\u3001Bb\\u3001Ccc\\u3001Dddd\\u548CEeeee" }, |
| 52 { "zh" , 2, "A\\u548CBb" }, |
| 53 { NULL , 0, NULL } /* terminator */ |
| 54 }; |
| 55 |
| 56 enum { |
| 57 kUBufMax = 128, |
| 58 kBBufMax = 256 |
| 59 }; |
| 60 |
| 61 static void TestUListFmt() { |
| 62 const ListFmtTestEntry * lftep; |
| 63 for (lftep = listFmtTestEntries; lftep->locale != NULL ; lftep++ ) { |
| 64 UErrorCode status = U_ZERO_ERROR; |
| 65 UListFormatter *listfmt = ulistfmt_open(lftep->locale, &status); |
| 66 if ( U_FAILURE(status) ) { |
| 67 log_data_err("ERROR: ulistfmt_open fails for locale %s, status %s\n"
, lftep->locale, u_errorName(status)); |
| 68 } else { |
| 69 UChar ubufActual[kUBufMax]; |
| 70 int32_t ulenActual = ulistfmt_format(listfmt, strings, stringLengths
, lftep->stringCount, ubufActual, kUBufMax, &status); |
| 71 if ( U_FAILURE(status) ) { |
| 72 log_err("ERROR: ulistfmt_format fails for locale %s count %d (re
al lengths), status %s\n", lftep->locale, lftep->stringCount, u_errorName(status
)); |
| 73 } else { |
| 74 UChar ubufExpected[kUBufMax]; |
| 75 int32_t ulenExpected = u_unescape(lftep->expectedResult, ubufExp
ected, kUBufMax); |
| 76 if (ulenActual != ulenExpected || u_strncmp(ubufActual, ubufExpe
cted, ulenExpected) != 0) { |
| 77 log_err("ERROR: ulistfmt_format for locale %s count %d (real
lengths), actual \"%s\" != expected \"%s\"\n", lftep->locale, |
| 78 lftep->stringCount, aescstrdup(ubufActual, ulenActua
l), aescstrdup(ubufExpected, ulenExpected)); |
| 79 } |
| 80 } |
| 81 /* try again with all lengths -1 */ |
| 82 status = U_ZERO_ERROR; |
| 83 ulenActual = ulistfmt_format(listfmt, strings, stringLengthsNeg, lft
ep->stringCount, ubufActual, kUBufMax, &status); |
| 84 if ( U_FAILURE(status) ) { |
| 85 log_err("ERROR: ulistfmt_format fails for locale %s count %d (-1
lengths), status %s\n", lftep->locale, lftep->stringCount, u_errorName(status))
; |
| 86 } else { |
| 87 UChar ubufExpected[kUBufMax]; |
| 88 int32_t ulenExpected = u_unescape(lftep->expectedResult, ubufExp
ected, kUBufMax); |
| 89 if (ulenActual != ulenExpected || u_strncmp(ubufActual, ubufExpe
cted, ulenExpected) != 0) { |
| 90 log_err("ERROR: ulistfmt_format for locale %s count %d (-1
lengths), actual \"%s\" != expected \"%s\"\n", lftep->locale, |
| 91 lftep->stringCount, aescstrdup(ubufActual, ulenActua
l), aescstrdup(ubufExpected, ulenExpected)); |
| 92 } |
| 93 } |
| 94 /* try again with NULL lengths */ |
| 95 status = U_ZERO_ERROR; |
| 96 ulenActual = ulistfmt_format(listfmt, strings, NULL, lftep->stringCo
unt, ubufActual, kUBufMax, &status); |
| 97 if ( U_FAILURE(status) ) { |
| 98 log_err("ERROR: ulistfmt_format fails for locale %s count %d (NU
LL lengths), status %s\n", lftep->locale, lftep->stringCount, u_errorName(status
)); |
| 99 } else { |
| 100 UChar ubufExpected[kUBufMax]; |
| 101 int32_t ulenExpected = u_unescape(lftep->expectedResult, ubufExp
ected, kUBufMax); |
| 102 if (ulenActual != ulenExpected || u_strncmp(ubufActual, ubufExpe
cted, ulenExpected) != 0) { |
| 103 log_err("ERROR: ulistfmt_format for locale %s count %d (NULL
lengths), actual \"%s\" != expected \"%s\"\n", lftep->locale, |
| 104 lftep->stringCount, aescstrdup(ubufActual, ulenActua
l), aescstrdup(ubufExpected, ulenExpected)); |
| 105 } |
| 106 } |
| 107 |
| 108 /* try calls that should return error */ |
| 109 status = U_ZERO_ERROR; |
| 110 ulenActual = ulistfmt_format(listfmt, NULL, NULL, lftep->stringCount
, ubufActual, kUBufMax, &status); |
| 111 if (status != U_ILLEGAL_ARGUMENT_ERROR || ulenActual > 0) { |
| 112 log_err("ERROR: ulistfmt_format for locale %s count %d with NULL
strings, expected U_ILLEGAL_ARGUMENT_ERROR, got %s, result %d\n", lftep->locale
, |
| 113 lftep->stringCount, u_errorName(status), ulenActual); |
| 114 } |
| 115 status = U_ZERO_ERROR; |
| 116 ulenActual = ulistfmt_format(listfmt, strings, NULL, lftep->stringCo
unt, NULL, kUBufMax, &status); |
| 117 if (status != U_ILLEGAL_ARGUMENT_ERROR || ulenActual > 0) { |
| 118 log_err("ERROR: ulistfmt_format for locale %s count %d with NULL
result, expected U_ILLEGAL_ARGUMENT_ERROR, got %s, result %d\n", lftep->locale, |
| 119 lftep->stringCount, u_errorName(status), ulenActual); |
| 120 } |
| 121 |
| 122 ulistfmt_close(listfmt); |
| 123 } |
| 124 } |
| 125 } |
| 126 |
| 127 |
| 128 #endif /* #if !UCONFIG_NO_FORMATTING */ |
OLD | NEW |