first commit
This commit is contained in:
655
extern/STLport/5.2.1/test/unit/money_facets_test.cpp
vendored
Normal file
655
extern/STLport/5.2.1/test/unit/money_facets_test.cpp
vendored
Normal file
@@ -0,0 +1,655 @@
|
||||
#include "locale_test.h"
|
||||
|
||||
#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
|
||||
# include <locale>
|
||||
# include <sstream>
|
||||
# include <stdexcept>
|
||||
|
||||
# if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
|
||||
using namespace std;
|
||||
# endif
|
||||
|
||||
struct ref_monetary {
|
||||
const char *name;
|
||||
const char *money_int_prefix;
|
||||
const char *money_int_prefix_old;
|
||||
const char *money_prefix;
|
||||
const char *money_suffix;
|
||||
const char *money_decimal_point;
|
||||
const char *money_thousands_sep;
|
||||
};
|
||||
|
||||
static const ref_monetary tested_locales[] = {
|
||||
//{ name, money_int_prefix, money_int_prefix_old, money_prefix, money_suffix, money_decimal_point, money_thousands_sep},
|
||||
# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
|
||||
{ "fr_FR", "EUR ", "FRF ", "", "", ",",
|
||||
# if defined (WIN32) || defined (_WIN32)
|
||||
"\xa0" },
|
||||
# else
|
||||
" " },
|
||||
# endif
|
||||
{ "ru_RU.koi8r", "RUB ", "RUR ", "", "\xd2\xd5\xc2", ".", " " },
|
||||
{ "en_GB", "GBP ", "", "\xa3", "", ".", "," },
|
||||
{ "en_US", "USD ", "", "$", "", ".", "," },
|
||||
# endif
|
||||
{ "C", "", "", "", "", " ", " " },
|
||||
};
|
||||
|
||||
|
||||
const ref_monetary* LocaleTest::_get_ref_monetary(size_t i)
|
||||
{
|
||||
if (i < sizeof(tested_locales) / sizeof(tested_locales[0])) {
|
||||
return tested_locales + i;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char* LocaleTest::_get_ref_monetary_name(const ref_monetary* _ref)
|
||||
{
|
||||
return _ref->name;
|
||||
}
|
||||
|
||||
void LocaleTest::_money_put_get( const locale& loc, const ref_monetary* rl )
|
||||
{
|
||||
_money_put_get2(loc, loc, rl);
|
||||
}
|
||||
|
||||
void LocaleTest::_money_put_get2( const locale& loc, const locale& streamLoc, const ref_monetary* prl )
|
||||
{
|
||||
const ref_monetary &rl = *prl;
|
||||
CPPUNIT_ASSERT( has_facet<money_put<char> >(loc) );
|
||||
money_put<char> const& fmp = use_facet<money_put<char> >(loc);
|
||||
CPPUNIT_ASSERT( has_facet<money_get<char> >(loc) );
|
||||
money_get<char> const& fmg = use_facet<money_get<char> >(loc);
|
||||
|
||||
ostringstream ostr;
|
||||
ostr.imbue(streamLoc);
|
||||
ostr << showbase;
|
||||
|
||||
//Check a positive value (international format)
|
||||
{
|
||||
string str_res;
|
||||
//money_put
|
||||
{
|
||||
CPPUNIT_ASSERT( (has_facet<moneypunct<char, true> >(loc)) );
|
||||
moneypunct<char, true> const& intl_fmp = use_facet<moneypunct<char, true> >(loc);
|
||||
|
||||
ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, true, ostr, ' ', 123456);
|
||||
|
||||
CPPUNIT_ASSERT( !res.failed() );
|
||||
str_res = ostr.str();
|
||||
//CPPUNIT_MESSAGE(str_res.c_str());
|
||||
|
||||
size_t fieldIndex = 0;
|
||||
size_t index = 0;
|
||||
|
||||
//On a positive value we skip the sign field if exists:
|
||||
if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
|
||||
++fieldIndex;
|
||||
}
|
||||
// international currency abbreviation, if it is before value
|
||||
|
||||
/*
|
||||
* int_curr_symbol
|
||||
*
|
||||
* The international currency symbol. The operand is a four-character
|
||||
* string, with the first three characters containing the alphabetic
|
||||
* international currency symbol in accordance with those specified
|
||||
* in the ISO 4217 specification. The fourth character is the character used
|
||||
* to separate the international currency symbol from the monetary quantity.
|
||||
*
|
||||
* (http://www.opengroup.org/onlinepubs/7990989775/xbd/locale.html)
|
||||
*/
|
||||
string::size_type p = strlen( rl.money_int_prefix );
|
||||
if (p != 0) {
|
||||
CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::symbol );
|
||||
string::size_type p_old = strlen( rl.money_int_prefix_old );
|
||||
CPPUNIT_ASSERT( (str_res.substr(index, p) == rl.money_int_prefix) ||
|
||||
((p_old != 0) &&
|
||||
(str_res.substr(index, p_old) == rl.money_int_prefix_old)) );
|
||||
if ( str_res.substr(index, p) == rl.money_int_prefix ) {
|
||||
index += p;
|
||||
} else {
|
||||
index += p_old;
|
||||
}
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
// space after currency
|
||||
if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ||
|
||||
intl_fmp.pos_format().field[fieldIndex] == money_base::none) {
|
||||
// iternational currency symobol has four chars, one of these chars
|
||||
// is separator, so if format has space on this place, it should
|
||||
// be skipped.
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
// sign
|
||||
if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
// value
|
||||
CPPUNIT_ASSERT( str_res[index++] == '1' );
|
||||
if (!intl_fmp.grouping().empty()) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.thousands_sep() */ *rl.money_thousands_sep );
|
||||
}
|
||||
CPPUNIT_ASSERT( str_res[index++] == '2' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == '3' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == '4' );
|
||||
if (intl_fmp.frac_digits() != 0) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.decimal_point() */ *rl.money_decimal_point );
|
||||
}
|
||||
CPPUNIT_ASSERT( str_res[index++] == '5' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == '6' );
|
||||
++fieldIndex;
|
||||
|
||||
// sign
|
||||
if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
// space
|
||||
if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
// sign
|
||||
if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
//as space cannot be last the only left format can be none:
|
||||
while ( fieldIndex < 3 ) {
|
||||
CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::none );
|
||||
++fieldIndex;
|
||||
}
|
||||
}
|
||||
|
||||
//money_get
|
||||
{
|
||||
ios_base::iostate err = ios_base::goodbit;
|
||||
string digits;
|
||||
|
||||
istringstream istr(str_res);
|
||||
ostr.str( "" );
|
||||
ostr.clear();
|
||||
fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), true, ostr, err, digits);
|
||||
CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );
|
||||
CPPUNIT_ASSERT( digits == "123456" );
|
||||
}
|
||||
}
|
||||
|
||||
ostr.str("");
|
||||
//Check a negative value (national format)
|
||||
{
|
||||
CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );
|
||||
moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
|
||||
string str_res;
|
||||
//Check money_put
|
||||
{
|
||||
ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', -123456);
|
||||
|
||||
CPPUNIT_ASSERT( !res.failed() );
|
||||
str_res = ostr.str();
|
||||
//CPPUNIT_MESSAGE(str_res.c_str());
|
||||
|
||||
size_t fieldIndex = 0;
|
||||
size_t index = 0;
|
||||
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::sign) {
|
||||
CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.negative_sign().size()) == dom_fmp.negative_sign() );
|
||||
index += dom_fmp.negative_sign().size();
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
string::size_type p = strlen( rl.money_prefix );
|
||||
if (p != 0) {
|
||||
CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
|
||||
index += p;
|
||||
++fieldIndex;
|
||||
}
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
|
||||
dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
CPPUNIT_ASSERT( str_res[index++] == '1' );
|
||||
if (!dom_fmp.grouping().empty()) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == dom_fmp.thousands_sep() );
|
||||
}
|
||||
CPPUNIT_ASSERT( str_res[index++] == '2' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == '3' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == '4' );
|
||||
if (dom_fmp.frac_digits() != 0) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
|
||||
}
|
||||
CPPUNIT_ASSERT( str_res[index++] == '5' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == '6' );
|
||||
++fieldIndex;
|
||||
|
||||
//space cannot be last:
|
||||
if ((fieldIndex < 3) &&
|
||||
dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
if (fieldIndex == 3) {
|
||||
//If none is last we should not add anything to the resulting string:
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
|
||||
CPPUNIT_ASSERT( index == str_res.size() );
|
||||
} else {
|
||||
CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
|
||||
CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//money_get
|
||||
{
|
||||
ios_base::iostate err = ios_base::goodbit;
|
||||
# if defined (STLPORT)
|
||||
_STLP_LONGEST_FLOAT_TYPE val;
|
||||
# else
|
||||
long double val;
|
||||
# endif
|
||||
|
||||
istringstream istr(str_res);
|
||||
fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), false, ostr, err, val);
|
||||
CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );
|
||||
if (dom_fmp.negative_sign().empty()) {
|
||||
//Without negative sign there is no way to guess the resulting amount sign ("C" locale):
|
||||
CPPUNIT_ASSERT( val == 123456 );
|
||||
}
|
||||
else {
|
||||
CPPUNIT_ASSERT( val == -123456 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Test for bug in case when number of digits in value less then number
|
||||
// of digits in fraction. I.e. '9' should be printed as '0.09',
|
||||
// if x.frac_digits() == 2.
|
||||
|
||||
void LocaleTest::_money_put_X_bug( const locale& loc, const ref_monetary* prl )
|
||||
{
|
||||
const ref_monetary &rl = *prl;
|
||||
CPPUNIT_ASSERT( has_facet<money_put<char> >(loc) );
|
||||
money_put<char> const& fmp = use_facet<money_put<char> >(loc);
|
||||
|
||||
ostringstream ostr;
|
||||
ostr.imbue(loc);
|
||||
ostr << showbase;
|
||||
|
||||
// ostr.str("");
|
||||
// Check value with one decimal digit:
|
||||
{
|
||||
CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );
|
||||
moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
|
||||
string str_res;
|
||||
// Check money_put
|
||||
{
|
||||
ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 9);
|
||||
|
||||
CPPUNIT_ASSERT( !res.failed() );
|
||||
str_res = ostr.str();
|
||||
|
||||
size_t fieldIndex = 0;
|
||||
size_t index = 0;
|
||||
|
||||
if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {
|
||||
CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );
|
||||
index += dom_fmp.positive_sign().size();
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
string::size_type p = strlen( rl.money_prefix );
|
||||
if (p != 0) {
|
||||
CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
|
||||
index += p;
|
||||
++fieldIndex;
|
||||
}
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
|
||||
dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
if (dom_fmp.frac_digits() != 0) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == '0' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
|
||||
for ( int fd = 1; fd < dom_fmp.frac_digits(); ++fd ) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == '0' );
|
||||
}
|
||||
}
|
||||
CPPUNIT_ASSERT( str_res[index++] == '9' );
|
||||
++fieldIndex;
|
||||
|
||||
//space cannot be last:
|
||||
if ((fieldIndex < 3) &&
|
||||
dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
if (fieldIndex == 3) {
|
||||
//If none is last we should not add anything to the resulting string:
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
|
||||
CPPUNIT_ASSERT( index == str_res.size() );
|
||||
} else {
|
||||
CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
|
||||
CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ostr.str("");
|
||||
// Check value with two decimal digit:
|
||||
{
|
||||
CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );
|
||||
moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
|
||||
string str_res;
|
||||
// Check money_put
|
||||
{
|
||||
ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 90);
|
||||
|
||||
CPPUNIT_ASSERT( !res.failed() );
|
||||
str_res = ostr.str();
|
||||
|
||||
size_t fieldIndex = 0;
|
||||
size_t index = 0;
|
||||
|
||||
if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {
|
||||
CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );
|
||||
index += dom_fmp.positive_sign().size();
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
string::size_type p = strlen( rl.money_prefix );
|
||||
if (p != 0) {
|
||||
CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
|
||||
index += p;
|
||||
++fieldIndex;
|
||||
}
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
|
||||
dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
if (dom_fmp.frac_digits() != 0) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == '0' );
|
||||
CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
|
||||
for ( int fd = 1; fd < dom_fmp.frac_digits() - 1; ++fd ) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == '0' );
|
||||
}
|
||||
}
|
||||
CPPUNIT_ASSERT( str_res[index++] == '9' );
|
||||
if (dom_fmp.frac_digits() != 0) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == '0' );
|
||||
}
|
||||
++fieldIndex;
|
||||
|
||||
//space cannot be last:
|
||||
if ((fieldIndex < 3) &&
|
||||
dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
|
||||
CPPUNIT_ASSERT( str_res[index++] == ' ' );
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
if (fieldIndex == 3) {
|
||||
//If none is last we should not add anything to the resulting string:
|
||||
if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
|
||||
CPPUNIT_ASSERT( index == str_res.size() );
|
||||
} else {
|
||||
CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
|
||||
CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef void (LocaleTest::*_Test) (const locale&, const ref_monetary*);
|
||||
static void test_supported_locale(LocaleTest& inst, _Test __test) {
|
||||
size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
locale loc;
|
||||
# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
|
||||
try
|
||||
# endif
|
||||
{
|
||||
locale tmp(tested_locales[i].name);
|
||||
loc = tmp;
|
||||
}
|
||||
# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
|
||||
catch (runtime_error const&) {
|
||||
//This locale is not supported.
|
||||
continue;
|
||||
}
|
||||
# endif
|
||||
CPPUNIT_MESSAGE( loc.name().c_str() );
|
||||
(inst.*__test)(loc, tested_locales + i);
|
||||
|
||||
{
|
||||
locale tmp(locale::classic(), tested_locales[i].name, locale::monetary);
|
||||
loc = tmp;
|
||||
}
|
||||
(inst.*__test)(loc, tested_locales + i);
|
||||
|
||||
{
|
||||
locale tmp0(locale::classic(), new moneypunct_byname<char, true>(tested_locales[i].name));
|
||||
locale tmp1(tmp0, new moneypunct_byname<char, false>(tested_locales[i].name));
|
||||
loc = tmp1;
|
||||
}
|
||||
(inst.*__test)(loc, tested_locales + i);
|
||||
}
|
||||
}
|
||||
|
||||
void LocaleTest::money_put_get()
|
||||
{ test_supported_locale(*this, &LocaleTest::_money_put_get); }
|
||||
|
||||
void LocaleTest::money_put_X_bug()
|
||||
{ test_supported_locale(*this, &LocaleTest::_money_put_X_bug); }
|
||||
|
||||
void LocaleTest::moneypunct_by_name()
|
||||
{
|
||||
/*
|
||||
* Check of the 22.1.1.2.7 standard point. Construction of a locale
|
||||
* instance from a null pointer or an unknown name should result in
|
||||
* a runtime_error exception.
|
||||
*/
|
||||
# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
|
||||
# if defined (STLPORT) || !defined (__GNUC__)
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, true>(static_cast<char const*>(0)));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
# endif
|
||||
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, true>("yasli_language"));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
try {
|
||||
string veryLongFacetName("LC_MONETARY=");
|
||||
veryLongFacetName.append(512, '?');
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, true>(veryLongFacetName.c_str()));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const& /* e */) {
|
||||
//CPPUNIT_MESSAGE( e.what() );
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
# if defined (STLPORT) || !defined (__GNUC__)
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, false>(static_cast<char const*>(0)));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
# endif
|
||||
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, false>("yasli_language"));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
try {
|
||||
string veryLongFacetName("LC_MONETARY=");
|
||||
veryLongFacetName.append(512, '?');
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, false>(veryLongFacetName.c_str()));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const& /* e */) {
|
||||
//CPPUNIT_MESSAGE( e.what() );
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, false>("C"));
|
||||
moneypunct<char, false> const& cfacet_byname = use_facet<moneypunct<char, false> >(loc);
|
||||
moneypunct<char, false> const& cfacet = use_facet<moneypunct<char, false> >(locale::classic());
|
||||
|
||||
money_base::pattern cp = cfacet.pos_format();
|
||||
money_base::pattern cp_bn = cfacet_byname.pos_format();
|
||||
CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );
|
||||
CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );
|
||||
CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );
|
||||
CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );
|
||||
|
||||
CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );
|
||||
if (cfacet_byname.frac_digits() != 0)
|
||||
CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
|
||||
CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
|
||||
if (!cfacet_byname.grouping().empty())
|
||||
CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
|
||||
CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );
|
||||
CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );
|
||||
}
|
||||
catch (runtime_error const& /* e */) {
|
||||
/* CPPUNIT_MESSAGE( e.what() ); */
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, true>("C"));
|
||||
moneypunct<char, true> const& cfacet_byname = use_facet<moneypunct<char, true> >(loc);
|
||||
moneypunct<char, true> const& cfacet = use_facet<moneypunct<char, true> >(locale::classic());
|
||||
|
||||
money_base::pattern cp = cfacet.pos_format();
|
||||
money_base::pattern cp_bn = cfacet_byname.pos_format();
|
||||
CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );
|
||||
CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );
|
||||
CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );
|
||||
CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );
|
||||
|
||||
CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );
|
||||
if (cfacet_byname.frac_digits() != 0)
|
||||
CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
|
||||
CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
|
||||
if (!cfacet_byname.grouping().empty())
|
||||
CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
|
||||
CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );
|
||||
CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );
|
||||
}
|
||||
catch (runtime_error const& /* e */) {
|
||||
/* CPPUNIT_MESSAGE( e.what() ); */
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
try {
|
||||
// On platform without real localization support we should rely on the "C" locale facet.
|
||||
locale loc(locale::classic(), new moneypunct_byname<char, false>(""));
|
||||
}
|
||||
catch (runtime_error const& /* e */) {
|
||||
/* CPPUNIT_MESSAGE( e.what() ); */
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
# if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
|
||||
# if defined (STLPORT) || !defined (__GNUC__)
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>(static_cast<char const*>(0)));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
# endif
|
||||
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>("yasli_language"));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
|
||||
# if defined (STLPORT) || !defined (__GNUC__)
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>(static_cast<char const*>(0)));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
# endif
|
||||
|
||||
try {
|
||||
locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>("yasli_language"));
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
catch (runtime_error const&) {
|
||||
}
|
||||
catch (...) {
|
||||
CPPUNIT_FAIL;
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user