177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "locale_test.h" 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <locale> 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stdexcept> 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std; 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstatic const char* tested_locales[] = { 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//name, 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // We need exception support to check support of the following localizations. 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "fr_FR", 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "ru_RU.koi8r", 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "en_GB", 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "en_US", 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "", 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "C" 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// tests implementation 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::_ctype_facet( const locale& loc) 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) ); 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype<char> const& ct = use_facet<ctype<char> >(loc); 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //is 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::digit, '0') ); 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::upper, 'A') ); 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::lower, 'a') ); 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::alpha, 'A') ); 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::space, ' ') ); 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( !ct.is(ctype_base::space, '2') ); 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::punct, '.') ); 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::xdigit, 'a') ); 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //is range 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char values[] = "0Aa ."; 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::mask res[sizeof(values)]; 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ct.is(values, values + sizeof(values), res); 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // '0' 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[0] & ctype_base::print) != 0 ); 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[0] & ctype_base::digit) != 0 ); 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[0] & ctype_base::xdigit) != 0 ); 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 'A' 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[1] & ctype_base::print) != 0 ); 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[1] & ctype_base::alpha) != 0 ); 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[1] & ctype_base::xdigit) != 0 ); 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[1] & ctype_base::upper) != 0 ); 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 'a' 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[2] & ctype_base::print) != 0 ); 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[2] & ctype_base::alpha) != 0 ); 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[2] & ctype_base::xdigit) != 0 ); 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[2] & ctype_base::lower) != 0 ); 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[2] & ctype_base::space) == 0 ); 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // ' ' 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[3] & ctype_base::print) != 0 ); 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[3] & ctype_base::space) != 0 ); 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[3] & ctype_base::digit) == 0 ); 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // '.' 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[4] & ctype_base::print) != 0 ); 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[4] & ctype_base::punct) != 0 ); 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( (res[4] & ctype_base::digit) == 0 ); 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //scan_is 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "abAc123 ."; 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char *rbeg = range; 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char *rend = range + sizeof(range); 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char *res; 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = ct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( res != rend ); 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *res == 'a' ); 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = ct.scan_is(ctype_base::upper, rbeg, rend); 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( res != rend ); 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *res == 'A' ); 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = ct.scan_is(ctype_base::punct, rbeg, rend); 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( res != rend ); 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *res == '.' ); 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //scan_not 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "abAc123 ."; 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char *rbeg = range; 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char *rend = range + sizeof(range); 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char *res; 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = ct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( res != rend ); 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *res == '1' ); 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = ct.scan_not(ctype_base::alpha, rbeg, rend); 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( res != rend ); 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *res == '1' ); 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = ct.scan_not(ctype_base::punct, rbeg, rend); 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( res != rend ); 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *res == 'a' ); 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //toupper 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.toupper('a') == 'A' ); 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.toupper('A') == 'A' ); 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.toupper('1') == '1' ); 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //toupper range 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "abAc1"; 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char expected_range[] = "ABAC1"; 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ct.toupper(range, range + sizeof(range)); 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) ); 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //tolower 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.tolower('A') == 'a' ); 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.tolower('a') == 'a' ); 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.tolower('1') == '1' ); 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //tolower range 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "ABaC1"; 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char expected_range[] = "abac1"; 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ct.tolower(range, range + sizeof(range)); 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) ); 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //widen 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.widen('a') == 'a' ); 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //widen range 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "ABaC1"; 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char res[sizeof(range)]; 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ct.widen(range, range + sizeof(range), res); 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) ); 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //narrow 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.narrow('a', 'b') == 'a' ); 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //narrow range 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "ABaC1"; 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char res[sizeof(range)]; 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ct.narrow(range, range + sizeof(range), 'b', res); 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) ); 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::_ctype_facet_w( const locale& loc ) 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_NO_WCHAR_T 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( has_facet<ctype<wchar_t> >(loc) ); 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype<wchar_t> const& wct = use_facet<ctype<wchar_t> >(loc); 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //is 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::digit, L'0') ); 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::upper, L'A') ); 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::lower, L'a') ); 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::alpha, L'A') ); 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::space, L' ') ); 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( !wct.is(ctype_base::space, L'2') ); 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::punct, L'.') ); 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.is(ctype_base::xdigit, L'a') ); 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //is range 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t values[] = L"0Aa ."; 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype_base::mask res[sizeof(values) / sizeof(wchar_t)]; 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wct.is(values, values + (sizeof(values) / sizeof(wchar_t)), res); 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // '0' 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[0] & ctype_base::print) != 0 ); 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[0] & ctype_base::digit) != 0 ); 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[0] & ctype_base::xdigit) != 0 ); 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 'A' 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[1] & ctype_base::print) != 0 ); 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[1] & ctype_base::alpha) != 0 ); 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[1] & ctype_base::xdigit) != 0 ); 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[1] & ctype_base::upper) != 0 ); 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 'a' 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[2] & ctype_base::print) != 0 ); 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[2] & ctype_base::alpha) != 0 ); 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[2] & ctype_base::xdigit) != 0 ); 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[2] & ctype_base::lower) != 0 ); 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[2] & ctype_base::space) == 0 ); 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // ' ' 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[3] & ctype_base::print) != 0 ); 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[3] & ctype_base::space) != 0 ); 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[3] & ctype_base::digit) == 0 ); 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // '.' 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[4] & ctype_base::print) != 0 ); 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[4] & ctype_base::punct) != 0 ); 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (res[4] & ctype_base::digit) == 0 ); 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //scan_is 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t range[] = L"abAc123 ."; 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t *rbeg = range; 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t)); 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t *res; 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = wct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( res != rend ); 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( *res == L'a' ); 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = wct.scan_is(ctype_base::upper, rbeg, rend); 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( res != rend ); 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( *res == L'A' ); 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = wct.scan_is(ctype_base::punct, rbeg, rend); 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( res != rend ); 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( *res == L'.' ); 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //scan_not 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t range[] = L"abAc123 ."; 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t *rbeg = range; 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t)); 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const wchar_t *res; 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = wct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend); 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( res != rend ); 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( *res == L'1' ); 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = wct.scan_not(ctype_base::alpha, rbeg, rend); 24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( res != rend ); 25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( *res == L'1' ); 25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner res = wct.scan_not(ctype_base::punct, rbeg, rend); 25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( res != rend ); 25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( *res == L'a' ); 25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //toupper 25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.toupper(L'a') == L'A' ); 26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.toupper(L'A') == L'A' ); 26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.toupper(L'1') == L'1' ); 26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //toupper range 26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t range[] = L"abAc1"; 26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t expected_range[] = L"ABAC1"; 26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wct.toupper(range, range + sizeof(range) / sizeof(wchar_t)); 26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) ); 27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //tolower 27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.tolower(L'A') == L'a' ); 27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.tolower(L'a') == L'a' ); 27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.tolower(L'1') == L'1' ); 27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //tolower range 28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t range[] = L"ABaC1"; 28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t expected_range[] = L"abac1"; 28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wct.tolower(range, range + sizeof(range) / sizeof(wchar_t)); 28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) ); 28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //widen 28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.widen('a') == L'a' ); 29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //widen range 29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char range[] = "ABaC1"; 29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t res[sizeof(range)]; 29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t expected_res[] = L"ABaC1"; 29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wct.widen(range, range + sizeof(range), res); 29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range), res) ); 29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //narrow 30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( wct.narrow(L'a', 'b') == L'a' ); 30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //narrow range 30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t range[] = L"ABaC1"; 30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char res[sizeof(range) / sizeof(wchar_t)]; 31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char expected_res[] = "ABaC1"; 31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wct.narrow(range, range + sizeof(range) / sizeof(wchar_t), 'b', res); 31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range) / sizeof(wchar_t), res) ); 31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertypedef void (LocaleTest::*_Test) (const locale&); 31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstatic void test_supported_locale(LocaleTest& inst, _Test __test) { 32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]); 32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; i < n; ++i) { 32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc; 32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try 32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale tmp(tested_locales[i]); 32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner loc = tmp; 32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const&) { 33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //This locale is not supported. 33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner continue; 33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_MESSAGE( loc.name().c_str() ); 33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (inst.*__test)(loc); 33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale tmp(locale::classic(), tested_locales[i], locale::ctype); 34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner loc = tmp; 34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (inst.*__test)(loc); 34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale tmp(locale::classic(), new ctype_byname<char>(tested_locales[i])); 34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_WCHAR_T 34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale tmp0(tmp, new ctype_byname<wchar_t>(tested_locales[i])); 35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner tmp = tmp0; 35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner loc = tmp; 35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (inst.*__test)(loc); 35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::ctype_facet() 35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner test_supported_locale(*this, &LocaleTest::_ctype_facet); 36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_WCHAR_T 36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner test_supported_locale(*this, &LocaleTest::_ctype_facet_w); 36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::ctype_by_name() 36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Check of the 22.1.1.2.7 standard point. Construction of a locale 37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * instance from a null pointer or an unknown name should result in 37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * a runtime_error exception. 37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (STLPORT) || (!defined(__GNUC__) && (!defined (_MSC_VER) || (_MSC_VER > 1400))) 37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // libstdc++ call freelocate on bad locale 37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new ctype_byname<char>(static_cast<char const*>(0))); 37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( false ); 37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( false ); 38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new ctype_byname<char>("yasli_language")); 39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined(STLPORT) || !defined(__GNUC__) 40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>(static_cast<char const*>(0))); 40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>("yasli_language")); 41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //STLport implementation do not care about name pass to this facet. 41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) 41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new ctype_byname<char>("fr_FR")); 42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) ); 42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype<char> const& ct = use_facet<ctype<char> >(loc); 43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '�') ); 43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new ctype_byname<char>("C")); 44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype<char> const& cfacet_byname = use_facet<ctype<char> >(loc); 44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ctype<char> const& cfacet = use_facet<ctype<char> >(locale::classic()); 44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (char c = 0;; ++c) { 44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::space, c) == cfacet.is(ctype_base::space, c)); 44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (cfacet_byname.is(ctype_base::print, c) != cfacet.is(ctype_base::print, c)) 44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::print, c) == cfacet.is(ctype_base::print, c)); 44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::cntrl, c) == cfacet.is(ctype_base::cntrl, c)); 45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::upper, c) == cfacet.is(ctype_base::upper, c)); 45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::lower, c) == cfacet.is(ctype_base::lower, c)); 45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alpha, c) == cfacet.is(ctype_base::alpha, c)); 45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::digit, c) == cfacet.is(ctype_base::digit, c)); 45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::punct, c) == cfacet.is(ctype_base::punct, c)); 45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::xdigit, c) == cfacet.is(ctype_base::xdigit, c)); 45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alnum, c) == cfacet.is(ctype_base::alnum, c)); 45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK(cfacet_byname.is(ctype_base::graph, c) == cfacet.is(ctype_base::graph, c)); 45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (c == 127) break; 46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* CPPUNIT_MESSAGE( e.what() ); */ 46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) 47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined(STLPORT) || !defined(__GNUC__) 47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new ctype_byname<wchar_t>(static_cast<char const*>(0))); 47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const&) { 47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new ctype_byname<wchar_t>("yasli_language")); 48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const&) { 48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined(STLPORT) || !defined(__GNUC__) 49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(static_cast<char const*>(0))); 49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>("yasli_language")); 50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (runtime_error const& /* e */) { 51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //CPPUNIT_MESSAGE( e.what() ); 51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 521