1 #include "locale_test.h"
2
3 #if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
4 # include <locale>
5 # include <sstream>
6 # include <stdexcept>
7
8 # if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
9 using namespace std;
10 # endif
11
12 struct ref_monetary {
13 const char *name;
14 const char *money_int_prefix;
15 const char *money_int_prefix_old;
16 const char *money_prefix;
17 const char *money_suffix;
18 const char *money_decimal_point;
19 const char *money_thousands_sep;
20 };
21
22 static const ref_monetary tested_locales[] = {
23 //{ name, money_int_prefix, money_int_prefix_old, money_prefix, money_suffix, money_decimal_point, money_thousands_sep},
24 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
25 { "fr_FR", "EUR ", "FRF ", "", "", ",",
26 # if defined (WIN32) || defined (_WIN32)
27 "\xa0" },
28 # else
29 " " },
30 # endif
31 { "ru_RU.koi8r", "RUB ", "RUR ", "", "\xd2\xd5\xc2", ".", " " },
32 { "en_GB", "GBP ", "", "\xa3", "", ".", "," },
33 { "en_US", "USD ", "", "$", "", ".", "," },
34 # endif
35 { "C", "", "", "", "", " ", " " },
36 };
37
38
_get_ref_monetary(size_t i)39 const ref_monetary* LocaleTest::_get_ref_monetary(size_t i)
40 {
41 if (i < sizeof(tested_locales) / sizeof(tested_locales[0])) {
42 return tested_locales + i;
43 }
44 return 0;
45 }
46
_get_ref_monetary_name(const ref_monetary * _ref)47 const char* LocaleTest::_get_ref_monetary_name(const ref_monetary* _ref)
48 {
49 return _ref->name;
50 }
51
_money_put_get(const locale & loc,const ref_monetary * rl)52 void LocaleTest::_money_put_get( const locale& loc, const ref_monetary* rl )
53 {
54 _money_put_get2(loc, loc, rl);
55 }
56
_money_put_get2(const locale & loc,const locale & streamLoc,const ref_monetary * prl)57 void LocaleTest::_money_put_get2( const locale& loc, const locale& streamLoc, const ref_monetary* prl )
58 {
59 const ref_monetary &rl = *prl;
60 CPPUNIT_ASSERT( has_facet<money_put<char> >(loc) );
61 money_put<char> const& fmp = use_facet<money_put<char> >(loc);
62 CPPUNIT_ASSERT( has_facet<money_get<char> >(loc) );
63 money_get<char> const& fmg = use_facet<money_get<char> >(loc);
64
65 ostringstream ostr;
66 ostr.imbue(streamLoc);
67 ostr << showbase;
68
69 //Check a positive value (international format)
70 {
71 string str_res;
72 //money_put
73 {
74 CPPUNIT_ASSERT( (has_facet<moneypunct<char, true> >(loc)) );
75 moneypunct<char, true> const& intl_fmp = use_facet<moneypunct<char, true> >(loc);
76
77 ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, true, ostr, ' ', 123456);
78
79 CPPUNIT_ASSERT( !res.failed() );
80 str_res = ostr.str();
81 //CPPUNIT_MESSAGE(str_res.c_str());
82
83 size_t fieldIndex = 0;
84 size_t index = 0;
85
86 //On a positive value we skip the sign field if exists:
87 if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
88 ++fieldIndex;
89 }
90 // international currency abbreviation, if it is before value
91
92 /*
93 * int_curr_symbol
94 *
95 * The international currency symbol. The operand is a four-character
96 * string, with the first three characters containing the alphabetic
97 * international currency symbol in accordance with those specified
98 * in the ISO 4217 specification. The fourth character is the character used
99 * to separate the international currency symbol from the monetary quantity.
100 *
101 * (http://www.opengroup.org/onlinepubs/7990989775/xbd/locale.html)
102 */
103 string::size_type p = strlen( rl.money_int_prefix );
104 if (p != 0) {
105 CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::symbol );
106 string::size_type p_old = strlen( rl.money_int_prefix_old );
107 CPPUNIT_ASSERT( (str_res.substr(index, p) == rl.money_int_prefix) ||
108 ((p_old != 0) &&
109 (str_res.substr(index, p_old) == rl.money_int_prefix_old)) );
110 if ( str_res.substr(index, p) == rl.money_int_prefix ) {
111 index += p;
112 } else {
113 index += p_old;
114 }
115 ++fieldIndex;
116 }
117
118 // space after currency
119 if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ||
120 intl_fmp.pos_format().field[fieldIndex] == money_base::none) {
121 // iternational currency symobol has four chars, one of these chars
122 // is separator, so if format has space on this place, it should
123 // be skipped.
124 ++fieldIndex;
125 }
126
127 // sign
128 if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
129 ++fieldIndex;
130 }
131
132 // value
133 CPPUNIT_ASSERT( str_res[index++] == '1' );
134 if (!intl_fmp.grouping().empty()) {
135 CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.thousands_sep() */ *rl.money_thousands_sep );
136 }
137 CPPUNIT_ASSERT( str_res[index++] == '2' );
138 CPPUNIT_ASSERT( str_res[index++] == '3' );
139 CPPUNIT_ASSERT( str_res[index++] == '4' );
140 if (intl_fmp.frac_digits() != 0) {
141 CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.decimal_point() */ *rl.money_decimal_point );
142 }
143 CPPUNIT_ASSERT( str_res[index++] == '5' );
144 CPPUNIT_ASSERT( str_res[index++] == '6' );
145 ++fieldIndex;
146
147 // sign
148 if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
149 ++fieldIndex;
150 }
151
152 // space
153 if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ) {
154 CPPUNIT_ASSERT( str_res[index++] == ' ' );
155 ++fieldIndex;
156 }
157
158 // sign
159 if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
160 ++fieldIndex;
161 }
162
163 //as space cannot be last the only left format can be none:
164 while ( fieldIndex < 3 ) {
165 CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::none );
166 ++fieldIndex;
167 }
168 }
169
170 //money_get
171 {
172 ios_base::iostate err = ios_base::goodbit;
173 string digits;
174
175 istringstream istr(str_res);
176 ostr.str( "" );
177 ostr.clear();
178 fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), true, ostr, err, digits);
179 CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );
180 CPPUNIT_ASSERT( digits == "123456" );
181 }
182 }
183
184 ostr.str("");
185 //Check a negative value (national format)
186 {
187 CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );
188 moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
189 string str_res;
190 //Check money_put
191 {
192 ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', -123456);
193
194 CPPUNIT_ASSERT( !res.failed() );
195 str_res = ostr.str();
196 //CPPUNIT_MESSAGE(str_res.c_str());
197
198 size_t fieldIndex = 0;
199 size_t index = 0;
200
201 if (dom_fmp.neg_format().field[fieldIndex] == money_base::sign) {
202 CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.negative_sign().size()) == dom_fmp.negative_sign() );
203 index += dom_fmp.negative_sign().size();
204 ++fieldIndex;
205 }
206
207 string::size_type p = strlen( rl.money_prefix );
208 if (p != 0) {
209 CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
210 index += p;
211 ++fieldIndex;
212 }
213 if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
214 dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
215 CPPUNIT_ASSERT( str_res[index++] == ' ' );
216 ++fieldIndex;
217 }
218
219 CPPUNIT_ASSERT( str_res[index++] == '1' );
220 if (!dom_fmp.grouping().empty()) {
221 CPPUNIT_ASSERT( str_res[index++] == dom_fmp.thousands_sep() );
222 }
223 CPPUNIT_ASSERT( str_res[index++] == '2' );
224 CPPUNIT_ASSERT( str_res[index++] == '3' );
225 CPPUNIT_ASSERT( str_res[index++] == '4' );
226 if (dom_fmp.frac_digits() != 0) {
227 CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
228 }
229 CPPUNIT_ASSERT( str_res[index++] == '5' );
230 CPPUNIT_ASSERT( str_res[index++] == '6' );
231 ++fieldIndex;
232
233 //space cannot be last:
234 if ((fieldIndex < 3) &&
235 dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
236 CPPUNIT_ASSERT( str_res[index++] == ' ' );
237 ++fieldIndex;
238 }
239
240 if (fieldIndex == 3) {
241 //If none is last we should not add anything to the resulting string:
242 if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
243 CPPUNIT_ASSERT( index == str_res.size() );
244 } else {
245 CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
246 CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
247 }
248 }
249 }
250
251 //money_get
252 {
253 ios_base::iostate err = ios_base::goodbit;
254 # if defined (STLPORT)
255 _STLP_LONGEST_FLOAT_TYPE val;
256 # else
257 long double val;
258 # endif
259
260 istringstream istr(str_res);
261 fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), false, ostr, err, val);
262 CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );
263 if (dom_fmp.negative_sign().empty()) {
264 //Without negative sign there is no way to guess the resulting amount sign ("C" locale):
265 CPPUNIT_ASSERT( val == 123456 );
266 }
267 else {
268 CPPUNIT_ASSERT( val == -123456 );
269 }
270 }
271 }
272 }
273
274
275 // Test for bug in case when number of digits in value less then number
276 // of digits in fraction. I.e. '9' should be printed as '0.09',
277 // if x.frac_digits() == 2.
278
_money_put_X_bug(const locale & loc,const ref_monetary * prl)279 void LocaleTest::_money_put_X_bug( const locale& loc, const ref_monetary* prl )
280 {
281 const ref_monetary &rl = *prl;
282 CPPUNIT_ASSERT( has_facet<money_put<char> >(loc) );
283 money_put<char> const& fmp = use_facet<money_put<char> >(loc);
284
285 ostringstream ostr;
286 ostr.imbue(loc);
287 ostr << showbase;
288
289 // ostr.str("");
290 // Check value with one decimal digit:
291 {
292 CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );
293 moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
294 string str_res;
295 // Check money_put
296 {
297 ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 9);
298
299 CPPUNIT_ASSERT( !res.failed() );
300 str_res = ostr.str();
301
302 size_t fieldIndex = 0;
303 size_t index = 0;
304
305 if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {
306 CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );
307 index += dom_fmp.positive_sign().size();
308 ++fieldIndex;
309 }
310
311 string::size_type p = strlen( rl.money_prefix );
312 if (p != 0) {
313 CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
314 index += p;
315 ++fieldIndex;
316 }
317 if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
318 dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
319 CPPUNIT_ASSERT( str_res[index++] == ' ' );
320 ++fieldIndex;
321 }
322 if (dom_fmp.frac_digits() != 0) {
323 CPPUNIT_ASSERT( str_res[index++] == '0' );
324 CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
325 for ( int fd = 1; fd < dom_fmp.frac_digits(); ++fd ) {
326 CPPUNIT_ASSERT( str_res[index++] == '0' );
327 }
328 }
329 CPPUNIT_ASSERT( str_res[index++] == '9' );
330 ++fieldIndex;
331
332 //space cannot be last:
333 if ((fieldIndex < 3) &&
334 dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
335 CPPUNIT_ASSERT( str_res[index++] == ' ' );
336 ++fieldIndex;
337 }
338
339 if (fieldIndex == 3) {
340 //If none is last we should not add anything to the resulting string:
341 if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
342 CPPUNIT_ASSERT( index == str_res.size() );
343 } else {
344 CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
345 CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
346 }
347 }
348 }
349 }
350
351 ostr.str("");
352 // Check value with two decimal digit:
353 {
354 CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );
355 moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
356 string str_res;
357 // Check money_put
358 {
359 ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 90);
360
361 CPPUNIT_ASSERT( !res.failed() );
362 str_res = ostr.str();
363
364 size_t fieldIndex = 0;
365 size_t index = 0;
366
367 if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {
368 CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );
369 index += dom_fmp.positive_sign().size();
370 ++fieldIndex;
371 }
372
373 string::size_type p = strlen( rl.money_prefix );
374 if (p != 0) {
375 CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
376 index += p;
377 ++fieldIndex;
378 }
379 if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
380 dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
381 CPPUNIT_ASSERT( str_res[index++] == ' ' );
382 ++fieldIndex;
383 }
384 if (dom_fmp.frac_digits() != 0) {
385 CPPUNIT_ASSERT( str_res[index++] == '0' );
386 CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
387 for ( int fd = 1; fd < dom_fmp.frac_digits() - 1; ++fd ) {
388 CPPUNIT_ASSERT( str_res[index++] == '0' );
389 }
390 }
391 CPPUNIT_ASSERT( str_res[index++] == '9' );
392 if (dom_fmp.frac_digits() != 0) {
393 CPPUNIT_ASSERT( str_res[index++] == '0' );
394 }
395 ++fieldIndex;
396
397 //space cannot be last:
398 if ((fieldIndex < 3) &&
399 dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
400 CPPUNIT_ASSERT( str_res[index++] == ' ' );
401 ++fieldIndex;
402 }
403
404 if (fieldIndex == 3) {
405 //If none is last we should not add anything to the resulting string:
406 if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
407 CPPUNIT_ASSERT( index == str_res.size() );
408 } else {
409 CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
410 CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
411 }
412 }
413 }
414 }
415 }
416
417 typedef void (LocaleTest::*_Test) (const locale&, const ref_monetary*);
test_supported_locale(LocaleTest & inst,_Test __test)418 static void test_supported_locale(LocaleTest& inst, _Test __test) {
419 size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
420 for (size_t i = 0; i < n; ++i) {
421 locale loc;
422 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
423 try
424 # endif
425 {
426 locale tmp(tested_locales[i].name);
427 loc = tmp;
428 }
429 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
430 catch (runtime_error const&) {
431 //This locale is not supported.
432 continue;
433 }
434 # endif
435 CPPUNIT_MESSAGE( loc.name().c_str() );
436 (inst.*__test)(loc, tested_locales + i);
437
438 {
439 locale tmp(locale::classic(), tested_locales[i].name, locale::monetary);
440 loc = tmp;
441 }
442 (inst.*__test)(loc, tested_locales + i);
443
444 {
445 locale tmp0(locale::classic(), new moneypunct_byname<char, true>(tested_locales[i].name));
446 locale tmp1(tmp0, new moneypunct_byname<char, false>(tested_locales[i].name));
447 loc = tmp1;
448 }
449 (inst.*__test)(loc, tested_locales + i);
450 }
451 }
452
money_put_get()453 void LocaleTest::money_put_get()
454 { test_supported_locale(*this, &LocaleTest::_money_put_get); }
455
money_put_X_bug()456 void LocaleTest::money_put_X_bug()
457 { test_supported_locale(*this, &LocaleTest::_money_put_X_bug); }
458
moneypunct_by_name()459 void LocaleTest::moneypunct_by_name()
460 {
461 /*
462 * Check of the 22.1.1.2.7 standard point. Construction of a locale
463 * instance from a null pointer or an unknown name should result in
464 * a runtime_error exception.
465 */
466 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
467 # if defined (STLPORT) || !defined (__GNUC__)
468 try {
469 locale loc(locale::classic(), new moneypunct_byname<char, true>(static_cast<char const*>(0)));
470 CPPUNIT_FAIL;
471 }
472 catch (runtime_error const&) {
473 }
474 catch (...) {
475 CPPUNIT_FAIL;
476 }
477 # endif
478
479 try {
480 locale loc(locale::classic(), new moneypunct_byname<char, true>("yasli_language"));
481 CPPUNIT_FAIL;
482 }
483 catch (runtime_error const&) {
484 }
485 catch (...) {
486 CPPUNIT_FAIL;
487 }
488
489 try {
490 string veryLongFacetName("LC_MONETARY=");
491 veryLongFacetName.append(512, '?');
492 locale loc(locale::classic(), new moneypunct_byname<char, true>(veryLongFacetName.c_str()));
493 CPPUNIT_FAIL;
494 }
495 catch (runtime_error const& /* e */) {
496 //CPPUNIT_MESSAGE( e.what() );
497 }
498 catch (...) {
499 CPPUNIT_FAIL;
500 }
501
502 # if defined (STLPORT) || !defined (__GNUC__)
503 try {
504 locale loc(locale::classic(), new moneypunct_byname<char, false>(static_cast<char const*>(0)));
505 CPPUNIT_FAIL;
506 }
507 catch (runtime_error const&) {
508 }
509 catch (...) {
510 CPPUNIT_FAIL;
511 }
512 # endif
513
514 try {
515 locale loc(locale::classic(), new moneypunct_byname<char, false>("yasli_language"));
516 CPPUNIT_FAIL;
517 }
518 catch (runtime_error const&) {
519 }
520 catch (...) {
521 CPPUNIT_FAIL;
522 }
523
524 try {
525 string veryLongFacetName("LC_MONETARY=");
526 veryLongFacetName.append(512, '?');
527 locale loc(locale::classic(), new moneypunct_byname<char, false>(veryLongFacetName.c_str()));
528 CPPUNIT_FAIL;
529 }
530 catch (runtime_error const& /* e */) {
531 //CPPUNIT_MESSAGE( e.what() );
532 }
533 catch (...) {
534 CPPUNIT_FAIL;
535 }
536
537 try {
538 locale loc(locale::classic(), new moneypunct_byname<char, false>("C"));
539 moneypunct<char, false> const& cfacet_byname = use_facet<moneypunct<char, false> >(loc);
540 moneypunct<char, false> const& cfacet = use_facet<moneypunct<char, false> >(locale::classic());
541
542 money_base::pattern cp = cfacet.pos_format();
543 money_base::pattern cp_bn = cfacet_byname.pos_format();
544 CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );
545 CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );
546 CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );
547 CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );
548
549 CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );
550 if (cfacet_byname.frac_digits() != 0)
551 CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
552 CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
553 if (!cfacet_byname.grouping().empty())
554 CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
555 CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );
556 CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );
557 }
558 catch (runtime_error const& /* e */) {
559 /* CPPUNIT_MESSAGE( e.what() ); */
560 CPPUNIT_FAIL;
561 }
562 catch (...) {
563 CPPUNIT_FAIL;
564 }
565
566 try {
567 locale loc(locale::classic(), new moneypunct_byname<char, true>("C"));
568 moneypunct<char, true> const& cfacet_byname = use_facet<moneypunct<char, true> >(loc);
569 moneypunct<char, true> const& cfacet = use_facet<moneypunct<char, true> >(locale::classic());
570
571 money_base::pattern cp = cfacet.pos_format();
572 money_base::pattern cp_bn = cfacet_byname.pos_format();
573 CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );
574 CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );
575 CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );
576 CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );
577
578 CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );
579 if (cfacet_byname.frac_digits() != 0)
580 CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
581 CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
582 if (!cfacet_byname.grouping().empty())
583 CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
584 CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );
585 CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );
586 }
587 catch (runtime_error const& /* e */) {
588 /* CPPUNIT_MESSAGE( e.what() ); */
589 CPPUNIT_FAIL;
590 }
591 catch (...) {
592 CPPUNIT_FAIL;
593 }
594
595 try {
596 // On platform without real localization support we should rely on the "C" locale facet.
597 locale loc(locale::classic(), new moneypunct_byname<char, false>(""));
598 }
599 catch (runtime_error const& /* e */) {
600 /* CPPUNIT_MESSAGE( e.what() ); */
601 CPPUNIT_FAIL;
602 }
603 catch (...) {
604 CPPUNIT_FAIL;
605 }
606
607 # if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
608 # if defined (STLPORT) || !defined (__GNUC__)
609 try {
610 locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>(static_cast<char const*>(0)));
611 CPPUNIT_FAIL;
612 }
613 catch (runtime_error const&) {
614 }
615 catch (...) {
616 CPPUNIT_FAIL;
617 }
618 # endif
619
620 try {
621 locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>("yasli_language"));
622 CPPUNIT_FAIL;
623 }
624 catch (runtime_error const&) {
625 }
626 catch (...) {
627 CPPUNIT_FAIL;
628 }
629
630 # if defined (STLPORT) || !defined (__GNUC__)
631 try {
632 locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>(static_cast<char const*>(0)));
633 CPPUNIT_FAIL;
634 }
635 catch (runtime_error const&) {
636 }
637 catch (...) {
638 CPPUNIT_FAIL;
639 }
640 # endif
641
642 try {
643 locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>("yasli_language"));
644 CPPUNIT_FAIL;
645 }
646 catch (runtime_error const&) {
647 }
648 catch (...) {
649 CPPUNIT_FAIL;
650 }
651 # endif
652 # endif
653 }
654
655 #endif
656