1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "locale_test.h" 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <locale> 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stdexcept> 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic const char* tested_locales[] = { 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//name, 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // We need exception support to check support of the following localizations. 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott "fr_FR", 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott "ru_RU.koi8r", 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott "en_GB", 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott "en_US", 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott "", 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott "C" 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::_ctype_facet( const locale& loc) 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) ); 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype<char> const& ct = use_facet<ctype<char> >(loc); 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //is 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::digit, '0') ); 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::upper, 'A') ); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::lower, 'a') ); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::alpha, 'A') ); 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::space, ' ') ); 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( !ct.is(ctype_base::space, '2') ); 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::punct, '.') ); 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::xdigit, 'a') ); 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //is range 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char values[] = "0Aa ."; 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::mask res[sizeof(values)]; 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ct.is(values, values + sizeof(values), res); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // '0' 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[0] & ctype_base::print) != 0 ); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[0] & ctype_base::digit) != 0 ); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[0] & ctype_base::xdigit) != 0 ); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 'A' 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[1] & ctype_base::print) != 0 ); 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[1] & ctype_base::alpha) != 0 ); 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[1] & ctype_base::xdigit) != 0 ); 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[1] & ctype_base::upper) != 0 ); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 'a' 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[2] & ctype_base::print) != 0 ); 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[2] & ctype_base::alpha) != 0 ); 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[2] & ctype_base::xdigit) != 0 ); 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[2] & ctype_base::lower) != 0 ); 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[2] & ctype_base::space) == 0 ); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // ' ' 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[3] & ctype_base::print) != 0 ); 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[3] & ctype_base::space) != 0 ); 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[3] & ctype_base::digit) == 0 ); 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // '.' 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[4] & ctype_base::print) != 0 ); 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[4] & ctype_base::punct) != 0 ); 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( (res[4] & ctype_base::digit) == 0 ); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //scan_is 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "abAc123 ."; 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *rbeg = range; 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *rend = range + sizeof(range); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *res; 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = ct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res != rend ); 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *res == 'a' ); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = ct.scan_is(ctype_base::upper, rbeg, rend); 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res != rend ); 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *res == 'A' ); 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = ct.scan_is(ctype_base::punct, rbeg, rend); 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res != rend ); 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *res == '.' ); 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //scan_not 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "abAc123 ."; 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *rbeg = range; 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *rend = range + sizeof(range); 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *res; 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = ct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res != rend ); 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *res == '1' ); 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = ct.scan_not(ctype_base::alpha, rbeg, rend); 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res != rend ); 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *res == '1' ); 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = ct.scan_not(ctype_base::punct, rbeg, rend); 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( res != rend ); 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *res == 'a' ); 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //toupper 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.toupper('a') == 'A' ); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.toupper('A') == 'A' ); 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.toupper('1') == '1' ); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //toupper range 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "abAc1"; 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char expected_range[] = "ABAC1"; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ct.toupper(range, range + sizeof(range)); 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) ); 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //tolower 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.tolower('A') == 'a' ); 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.tolower('a') == 'a' ); 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.tolower('1') == '1' ); 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //tolower range 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "ABaC1"; 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char expected_range[] = "abac1"; 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ct.tolower(range, range + sizeof(range)); 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) ); 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //widen 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.widen('a') == 'a' ); 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //widen range 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "ABaC1"; 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char res[sizeof(range)]; 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ct.widen(range, range + sizeof(range), res); 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) ); 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //narrow 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.narrow('a', 'b') == 'a' ); 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //narrow range 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "ABaC1"; 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char res[sizeof(range)]; 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ct.narrow(range, range + sizeof(range), 'b', res); 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) ); 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::_ctype_facet_w( const locale& loc ) 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_NO_WCHAR_T 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( has_facet<ctype<wchar_t> >(loc) ); 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype<wchar_t> const& wct = use_facet<ctype<wchar_t> >(loc); 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //is 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::digit, L'0') ); 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::upper, L'A') ); 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::lower, L'a') ); 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::alpha, L'A') ); 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::space, L' ') ); 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( !wct.is(ctype_base::space, L'2') ); 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::punct, L'.') ); 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.is(ctype_base::xdigit, L'a') ); 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //is range 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t values[] = L"0Aa ."; 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype_base::mask res[sizeof(values) / sizeof(wchar_t)]; 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wct.is(values, values + (sizeof(values) / sizeof(wchar_t)), res); 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // '0' 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[0] & ctype_base::print) != 0 ); 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[0] & ctype_base::digit) != 0 ); 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[0] & ctype_base::xdigit) != 0 ); 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 'A' 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[1] & ctype_base::print) != 0 ); 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[1] & ctype_base::alpha) != 0 ); 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[1] & ctype_base::xdigit) != 0 ); 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[1] & ctype_base::upper) != 0 ); 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // 'a' 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[2] & ctype_base::print) != 0 ); 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[2] & ctype_base::alpha) != 0 ); 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[2] & ctype_base::xdigit) != 0 ); 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[2] & ctype_base::lower) != 0 ); 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[2] & ctype_base::space) == 0 ); 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // ' ' 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[3] & ctype_base::print) != 0 ); 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[3] & ctype_base::space) != 0 ); 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[3] & ctype_base::digit) == 0 ); 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // '.' 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[4] & ctype_base::print) != 0 ); 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[4] & ctype_base::punct) != 0 ); 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (res[4] & ctype_base::digit) == 0 ); 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //scan_is 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t range[] = L"abAc123 ."; 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *rbeg = range; 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t)); 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *res; 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = wct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( res != rend ); 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( *res == L'a' ); 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = wct.scan_is(ctype_base::upper, rbeg, rend); 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( res != rend ); 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( *res == L'A' ); 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = wct.scan_is(ctype_base::punct, rbeg, rend); 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( res != rend ); 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( *res == L'.' ); 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //scan_not 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t range[] = L"abAc123 ."; 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *rbeg = range; 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t)); 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *res; 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = wct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( res != rend ); 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( *res == L'1' ); 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = wct.scan_not(ctype_base::alpha, rbeg, rend); 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( res != rend ); 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( *res == L'1' ); 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott res = wct.scan_not(ctype_base::punct, rbeg, rend); 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( res != rend ); 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( *res == L'a' ); 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //toupper 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.toupper(L'a') == L'A' ); 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.toupper(L'A') == L'A' ); 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.toupper(L'1') == L'1' ); 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //toupper range 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t range[] = L"abAc1"; 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t expected_range[] = L"ABAC1"; 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wct.toupper(range, range + sizeof(range) / sizeof(wchar_t)); 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) ); 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //tolower 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.tolower(L'A') == L'a' ); 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.tolower(L'a') == L'a' ); 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.tolower(L'1') == L'1' ); 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //tolower range 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t range[] = L"ABaC1"; 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t expected_range[] = L"abac1"; 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wct.tolower(range, range + sizeof(range) / sizeof(wchar_t)); 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) ); 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //widen 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.widen('a') == L'a' ); 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //widen range 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char range[] = "ABaC1"; 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t res[sizeof(range)]; 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t expected_res[] = L"ABaC1"; 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wct.widen(range, range + sizeof(range), res); 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range), res) ); 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //narrow 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( wct.narrow(L'a', 'b') == L'a' ); 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //narrow range 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t range[] = L"ABaC1"; 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char res[sizeof(range) / sizeof(wchar_t)]; 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char expected_res[] = "ABaC1"; 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wct.narrow(range, range + sizeof(range) / sizeof(wchar_t), 'b', res); 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range) / sizeof(wchar_t), res) ); 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef void (LocaleTest::*_Test) (const locale&); 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void test_supported_locale(LocaleTest& inst, _Test __test) { 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]); 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (size_t i = 0; i < n; ++i) { 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc; 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale tmp(tested_locales[i]); 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott loc = tmp; 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const&) { 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //This locale is not supported. 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott continue; 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_MESSAGE( loc.name().c_str() ); 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (inst.*__test)(loc); 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale tmp(locale::classic(), tested_locales[i], locale::ctype); 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott loc = tmp; 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (inst.*__test)(loc); 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale tmp(locale::classic(), new ctype_byname<char>(tested_locales[i])); 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale tmp0(tmp, new ctype_byname<wchar_t>(tested_locales[i])); 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott tmp = tmp0; 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott loc = tmp; 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (inst.*__test)(loc); 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::ctype_facet() 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_supported_locale(*this, &LocaleTest::_ctype_facet); 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_supported_locale(*this, &LocaleTest::_ctype_facet_w); 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::ctype_by_name() 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Check of the 22.1.1.2.7 standard point. Construction of a locale 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * instance from a null pointer or an unknown name should result in 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * a runtime_error exception. 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (STLPORT) || (!defined(__GNUC__) && (!defined (_MSC_VER) || (_MSC_VER > 1400))) 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // libstdc++ call freelocate on bad locale 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new ctype_byname<char>(static_cast<char const*>(0))); 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( false ); 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( false ); 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new ctype_byname<char>("yasli_language")); 390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined(STLPORT) || !defined(__GNUC__) 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>(static_cast<char const*>(0))); 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>("yasli_language")); 414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //STLport implementation do not care about name pass to this facet. 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new ctype_byname<char>("fr_FR")); 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) ); 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype<char> const& ct = use_facet<ctype<char> >(loc); 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '�') ); 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new ctype_byname<char>("C")); 441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype<char> const& cfacet_byname = use_facet<ctype<char> >(loc); 442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ctype<char> const& cfacet = use_facet<ctype<char> >(locale::classic()); 443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (char c = 0;; ++c) { 445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::space, c) == cfacet.is(ctype_base::space, c)); 446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (cfacet_byname.is(ctype_base::print, c) != cfacet.is(ctype_base::print, c)) 447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::print, c) == cfacet.is(ctype_base::print, c)); 449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::cntrl, c) == cfacet.is(ctype_base::cntrl, c)); 451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::upper, c) == cfacet.is(ctype_base::upper, c)); 452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::lower, c) == cfacet.is(ctype_base::lower, c)); 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alpha, c) == cfacet.is(ctype_base::alpha, c)); 454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::digit, c) == cfacet.is(ctype_base::digit, c)); 455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::punct, c) == cfacet.is(ctype_base::punct, c)); 456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::xdigit, c) == cfacet.is(ctype_base::xdigit, c)); 457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alnum, c) == cfacet.is(ctype_base::alnum, c)); 458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK(cfacet_byname.is(ctype_base::graph, c) == cfacet.is(ctype_base::graph, c)); 459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (c == 127) break; 460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* CPPUNIT_MESSAGE( e.what() ); */ 464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) 471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined(STLPORT) || !defined(__GNUC__) 472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new ctype_byname<wchar_t>(static_cast<char const*>(0))); 474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const&) { 477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new ctype_byname<wchar_t>("yasli_language")); 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const&) { 488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined(STLPORT) || !defined(__GNUC__) 494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(static_cast<char const*>(0))); 496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try { 507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>("yasli_language")); 508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (runtime_error const& /* e */) { 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //CPPUNIT_MESSAGE( e.what() ); 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catch (...) { 514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_FAIL; 515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 521