time_put_members_wchar_t.cc [plain text]
#include <locale>
#include <sstream>
#include <testsuite_hooks.h>
#ifdef _GLIBCPP_USE_WCHAR_T
void test01()
{
using namespace std;
typedef ostreambuf_iterator<wchar_t> iterator_type;
typedef char_traits<wchar_t> traits;
bool test = true;
locale loc_c = locale::classic();
locale loc_hk("en_HK");
locale loc_fr("fr_FR@euro");
locale loc_de("de_DE");
VERIFY( loc_hk != loc_c );
VERIFY( loc_hk != loc_fr );
VERIFY( loc_hk != loc_de );
VERIFY( loc_de != loc_fr );
const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
const wstring empty;
wostringstream oss;
const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
tm time1 = { 0, 0, 12, 4, 3, 71 };
const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
L"%w %W %x %X %y %Y %Z %%";
const wchar_t* date = L"%A, the second of %B";
const wchar_t* date_ex = L"%Ex";
oss.str(empty);
oss.imbue(loc_c);
iterator_type os_it01 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
wstring result1 = oss.str();
VERIFY( result1 == L"Sun" );
oss.str(empty);
iterator_type os_it21 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
wstring result21 = oss.str(); oss.str(empty);
iterator_type os_it22 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
wstring result22 = oss.str(); oss.str(empty);
iterator_type os_it31 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
wstring result31 = oss.str(); oss.str(empty);
iterator_type os_it32 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
wstring result32 = oss.str();
oss.str(empty);
oss.imbue(loc_de);
iterator_type os_it02 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
wstring result2 = oss.str();
VERIFY( result2 == L"Son" );
oss.str(empty); iterator_type os_it23 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
wstring result23 = oss.str(); oss.str(empty); iterator_type os_it24 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
wstring result24 = oss.str(); oss.str(empty);
iterator_type os_it33 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
wstring result33 = oss.str(); oss.str(empty);
iterator_type os_it34 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
wstring result34 = oss.str();
oss.str(empty);
oss.imbue(loc_hk);
iterator_type os_it03 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
wstring result3 = oss.str();
VERIFY( result3 == L"Sun" );
oss.str(empty); iterator_type os_it25 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
wstring result25 = oss.str(); oss.str(empty); iterator_type os_it26 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
wstring result26 = oss.str(); oss.str(empty);
iterator_type os_it35 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
wstring result35 = oss.str(); oss.str(empty);
iterator_type os_it36 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
wstring result36 = oss.str();
oss.str(empty);
oss.imbue(loc_fr);
iterator_type os_it04 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
wstring result4 = oss.str();
VERIFY( result4 == L"dim" );
oss.str(empty); iterator_type os_it27 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
wstring result27 = oss.str(); oss.str(empty); iterator_type os_it28 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
wstring result28 = oss.str(); oss.str(empty);
iterator_type os_it37 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
wstring result37 = oss.str(); oss.str(empty);
iterator_type os_it38 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
wstring result38 = oss.str();
oss.str(empty);
oss.imbue(loc_c);
iterator_type os_it05 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date, date + traits::length(date));
wstring result5 = oss.str();
VERIFY( result5 == L"Sunday, the second of April");
iterator_type os_it06 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date_ex, date_ex + traits::length(date));
wstring result6 = oss.str();
VERIFY( result6 != result5 );
oss.str(empty);
oss.imbue(loc_de);
iterator_type os_it07 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date, date + traits::length(date));
wstring result7 = oss.str();
VERIFY( result7 == L"Sonntag, the second of April");
iterator_type os_it08 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date_ex, date_ex + traits::length(date));
wstring result8 = oss.str();
VERIFY( result8 != result7 );
oss.str(empty);
oss.imbue(loc_hk);
iterator_type os_it09 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date, date + traits::length(date));
wstring result9 = oss.str();
VERIFY( result9 == L"Sunday, the second of April");
iterator_type os_it10 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date_ex, date_ex + traits::length(date));
wstring result10 = oss.str();
VERIFY( result10 != result9 );
oss.str(empty);
oss.imbue(loc_fr);
iterator_type os_it11 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date, date + traits::length(date));
wstring result11 = oss.str();
VERIFY( result11 == L"dimanche, the second of avril");
iterator_type os_it12 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
date_ex, date_ex + traits::length(date));
wstring result12 = oss.str();
VERIFY( result12 != result11 );
}
void test02()
{
using namespace std;
bool test = true;
typedef wstring::iterator iter_type;
typedef char_traits<wchar_t> traits;
typedef time_put<wchar_t, iter_type> time_put_type;
const ios_base::iostate goodbit = ios_base::goodbit;
const ios_base::iostate eofbit = ios_base::eofbit;
ios_base::iostate err = goodbit;
const locale loc_c = locale::classic();
const wstring x(50, L'x'); wstring res;
const tm time_sanity = { 0, 0, 12, 26, 5, 97, 2 };
const wchar_t* date = L"%X, %A, the second of %B, %Y";
ostringstream oss;
oss.imbue(locale(loc_c, new time_put_type));
const time_put_type& tp = use_facet<time_put_type>(oss.getloc());
res = x;
iter_type ret1 = tp.put(res.begin(), oss, L' ', &time_sanity,
date, date + traits::length(date));
wstring sanity1(res.begin(), ret1);
VERIFY( err == goodbit );
VERIFY( res == L"12:00:00, Tuesday, the second of June, 1997xxxxxxx" );
VERIFY( sanity1 == L"12:00:00, Tuesday, the second of June, 1997" );
res = x;
iter_type ret2 = tp.put(res.begin(), oss, L' ', &time_sanity, 'A');
wstring sanity2(res.begin(), ret2);
VERIFY( err == goodbit );
VERIFY( res == L"Tuesdayxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" );
VERIFY( sanity2 == L"Tuesday" );
}
void test03()
{
#ifdef _GLIBCPP_HAVE_SETENV
std::locale loc_de("de_DE");
std::locale::global(loc_de);
const char* oldLANG = getenv("LANG");
if (!setenv("LANG", "de_DE", 1))
{
test01();
test02();
setenv("LANG", oldLANG ? oldLANG : "", 1);
}
#endif
}
void test04()
{
bool test = true;
const char* tentLANG = std::setlocale(LC_ALL, "ja_JP.eucjp");
if (tentLANG != NULL)
{
std::string preLANG = tentLANG;
test01();
test02();
std::string postLANG = std::setlocale(LC_ALL, NULL);
VERIFY( preLANG == postLANG );
}
}
#endif
int main()
{
#ifdef _GLIBCPP_USE_WCHAR_T
test01();
test02();
test03();
test04();
#endif
return 0;
}