time_facets_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#include "locale_test.h"
258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  include <locale>
558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  include <sstream>
658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  include <memory>
758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  include <stdexcept>
858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
10b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.comusing namespace std;
1167d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com#  endif
1258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
1358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.comstatic const char* tested_locales[] = {
1458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com// name,
1558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
1658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com   "fr_FR",
1758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com   "ru_RU.koi8r",
1858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com   "en_GB",
1958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com   "en_US",
2058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com#  endif
2158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com   "",
2258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com   "C"
2358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com};
2458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
2558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.comvoid LocaleTest::_time_put_get( const locale& loc )
2658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com{
27a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org  {
28a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    typedef time_put<char, ostreambuf_iterator<char, char_traits<char> > > time_put_facet;
29a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    CPPUNIT_ASSERT( has_facet<time_put_facet>(loc) );
30a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    const time_put_facet& tmp = use_facet<time_put_facet>(loc);
3158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
3258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    struct tm xmas = { 0, 0, 12, 25, 11, 93 };
3358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ostringstream ostr;
3458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ostr.imbue(loc);
35f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina    string format = "%B %d %Y";
3658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
3758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    time_put_facet::iter_type ret = tmp.put(ostr, ostr, ' ', &xmas, format.data(), format.data() + format.size());
3858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( !ret.failed() );
3958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
4058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    /*
4158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * In other words, user conformation is required for reliable parsing
4258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * of user-entered dates and times, but machine-generated formats can be
4358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * parsed reliably. This allows parsers to be aggressive about interpreting
4458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * user variations on standard format.
4558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     *
4658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     *                                             ISO/IEC 14882, 22.2.5.1
4758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     */
4858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    typedef time_get<char, istreambuf_iterator<char, char_traits<char> > > time_get_facet;
4958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( has_facet<time_get_facet>(loc) );
5058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    const time_get_facet& tmg = use_facet<time_get_facet>(loc);
5158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    basic_ios<char> io(0);
5258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    io.imbue(loc);
5358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
5458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    istringstream istr( ostr.str() );
5558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    istreambuf_iterator<char, char_traits<char> > i( istr );
5658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    istreambuf_iterator<char, char_traits<char> > e;
5758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ios_base::iostate err = ios_base::goodbit;
5858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    struct tm other = { 15, 20, 9, 14, 7, 105 };
5958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
6058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    i = tmg.get_monthname( i, e, io, err, &other );
6158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( err == ios_base::goodbit );
6258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( other.tm_mon == xmas.tm_mon );
6358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
6458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ++i; ++i; ++i; ++i; // skip day of month and spaces around it
6558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    i = tmg.get_year( i, e, io, err, &other );
6658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
6758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( err == ios_base::eofbit );
6858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( other.tm_year == xmas.tm_year );
6958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
7058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ostringstream ostrX;
7158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ostrX.imbue(loc);
7258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    format = "%x %X";
7358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
7458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ret = tmp.put(ostrX, ostrX, ' ', &xmas, format.data(), format.data() + format.size());
7558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( !ret.failed() );
7658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
7758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    istringstream istrX( ostrX.str() );
7858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    istreambuf_iterator<char, char_traits<char> > j( istrX );
7958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
8058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    err = ios_base::goodbit;
8158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
8267d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    struct tm yet_more = { 15, 20, 9, 14, 7, 105 };
8367d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
8467d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    j = tmg.get_date( j, e, io, err, &yet_more );
8567d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
8667d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( err == ios_base::goodbit );
8767d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
884469938e92d779dff05e745559e67907bbf21e78reed@google.com    CPPUNIT_ASSERT( yet_more.tm_sec != xmas.tm_sec );
8967d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_min != xmas.tm_min );
9067d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_hour != xmas.tm_hour );
91e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );
92b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );
9367d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );
9467d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
9567d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    ++j; // skip space
9667d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
9767d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    j = tmg.get_time( j, e, io, err, &yet_more );
9867d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
9967d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( err == ios_base::eofbit || err == ios_base::goodbit );
10067d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com
10167d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_sec == xmas.tm_sec );
10267d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_min == xmas.tm_min );
10367d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_hour == xmas.tm_hour );
10467d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );
10567d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );
10667d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );
10767d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com  }
10867d91be9bb64c532452f9d9d67b20f492ea0ad57robertphillips@google.com#  if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
10958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com  {
11058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    typedef time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > > time_put_facet;
11158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( has_facet<time_put_facet>(loc) );
11258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    const time_put_facet& tmp = use_facet<time_put_facet>(loc);
11358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
114eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com    struct tm xmas = { 0, 0, 12, 25, 11, 93 };
11558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    wostringstream ostr;
11658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    ostr.imbue(loc);
11758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    wstring format = L"%B %d %Y";
11858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
11958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    time_put_facet::iter_type ret = tmp.put(ostr, ostr, ' ', &xmas, format.data(), format.data() + format.size());
12058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( !ret.failed() );
12158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com
12258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    /*
12358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * In other words, user conformation is required for reliable parsing
12458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * of user-entered dates and times, but machine-generated formats can be
12558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * parsed reliably. This allows parsers to be aggressive about interpreting
12658be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     * user variations on standard format.
12758be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     *
12858be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     *                                             ISO/IEC 14882, 22.2.5.1
12958be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com     */
13058be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    typedef time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > > time_get_facet;
13158be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    CPPUNIT_ASSERT( has_facet<time_get_facet>(loc) );
13258be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    const time_get_facet& tmg = use_facet<time_get_facet>(loc);
13358be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    // Intentional instantiation with char to show a bug in a previous STLport version.
13458be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    basic_ios<char> io(0);
13558be682c77c76d9a0caf23337f9b357798179b6cscroggo@google.com    io.imbue(loc);
136
137    wistringstream istr( ostr.str() );
138    istreambuf_iterator<wchar_t, char_traits<wchar_t> > i( istr );
139    istreambuf_iterator<wchar_t, char_traits<wchar_t> > e;
140    ios_base::iostate err = ios_base::goodbit;
141    struct tm other = { 15, 20, 9, 14, 7, 105 };
142
143    i = tmg.get_monthname( i, e, io, err, &other );
144    CPPUNIT_ASSERT( err == ios_base::goodbit );
145    CPPUNIT_ASSERT( other.tm_mon == xmas.tm_mon );
146
147    ++i; ++i; ++i; ++i; // skip day of month and spaces around it
148    i = tmg.get_year( i, e, io, err, &other );
149
150    CPPUNIT_ASSERT( err == ios_base::eofbit );
151    CPPUNIT_ASSERT( other.tm_year == xmas.tm_year );
152
153    wostringstream ostrX;
154    ostrX.imbue(loc);
155    format = L"%x %X";
156
157    ret = tmp.put(ostrX, ostrX, ' ', &xmas, format.data(), format.data() + format.size());
158    CPPUNIT_ASSERT( !ret.failed() );
159
160    wistringstream istrX( ostrX.str() );
161    istreambuf_iterator<wchar_t, char_traits<wchar_t> > j( istrX );
162
163    err = ios_base::goodbit;
164
165    struct tm yet_more = { 15, 20, 9, 14, 7, 105 };
166
167    j = tmg.get_date( j, e, io, err, &yet_more );
168
169    CPPUNIT_ASSERT( err == ios_base::goodbit );
170
171    CPPUNIT_ASSERT( yet_more.tm_sec != xmas.tm_sec );
172    CPPUNIT_ASSERT( yet_more.tm_min != xmas.tm_min );
173    CPPUNIT_ASSERT( yet_more.tm_hour != xmas.tm_hour );
174    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );
175    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );
176    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );
177
178    ++j; // skip space
179
180    j = tmg.get_time( j, e, io, err, &yet_more );
181
182    CPPUNIT_ASSERT( err == ios_base::eofbit || err == ios_base::goodbit );
183
184    CPPUNIT_ASSERT( yet_more.tm_sec == xmas.tm_sec );
185    CPPUNIT_ASSERT( yet_more.tm_min == xmas.tm_min );
186    CPPUNIT_ASSERT( yet_more.tm_hour == xmas.tm_hour );
187    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );
188    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );
189    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );
190  }
191#  endif
192}
193
194typedef void (LocaleTest::*_Test) (const locale&);
195static void test_supported_locale(LocaleTest& inst, _Test __test) {
196  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
197  for (size_t i = 0; i < n; ++i) {
198    locale loc;
199#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
200    try
201#  endif
202    {
203      locale tmp(tested_locales[i]);
204      loc = tmp;
205    }
206#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
207    catch (runtime_error const&) {
208      //This locale is not supported.
209      continue;
210    }
211#  endif
212    CPPUNIT_MESSAGE( loc.name().c_str() );
213    (inst.*__test)(loc);
214
215    {
216      locale tmp(locale::classic(), tested_locales[i], locale::time);
217      loc = tmp;
218    }
219    (inst.*__test)(loc);
220
221    {
222      typedef time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > > time_put_facet;
223      locale tmp0(locale::classic(), new time_put_facet(tested_locales[i]));
224      typedef time_get_byname<char, istreambuf_iterator<char, char_traits<char> > > time_get_facet;
225      locale tmp1(tmp0, new time_get_facet(tested_locales[i]));
226      loc = tmp1;
227    }
228    (inst.*__test)(loc);
229  }
230}
231
232void LocaleTest::time_put_get()
233{ test_supported_locale(*this, &LocaleTest::_time_put_get); }
234
235void LocaleTest::time_by_name()
236{
237#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
238  /*
239   * Check of the 22.1.1.2.7 standard point. Construction of a locale
240   * instance from a null pointer or an unknown name should result in
241   * a runtime_error exception.
242   */
243#    if defined (STLPORT) || !defined (_MSC_VER) || (_MSC_VER > 1400)
244  try {
245    locale loc(locale::classic(), new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >(static_cast<char const*>(0)));
246    CPPUNIT_FAIL;
247  }
248  catch (runtime_error const&) {
249  }
250  catch (...) {
251    CPPUNIT_FAIL;
252  }
253#    endif
254
255  try {
256    locale loc(locale::classic(), new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >("yasli_language"));
257    CPPUNIT_FAIL;
258  }
259  catch (runtime_error const&) {
260  }
261  catch (...) {
262    CPPUNIT_FAIL;
263  }
264
265  try {
266    string veryLongFacetName("LC_TIME=");
267    veryLongFacetName.append(512, '?');
268    locale loc(locale::classic(), new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >(veryLongFacetName.c_str()));
269    CPPUNIT_FAIL;
270  }
271  catch (runtime_error const& /* e */) {
272    //CPPUNIT_MESSAGE( e.what() );
273  }
274  catch (...) {
275    CPPUNIT_FAIL;
276  }
277
278  try {
279    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(static_cast<char const*>(0)));
280    CPPUNIT_FAIL;
281  }
282  catch (runtime_error const&) {
283  }
284  catch (...) {
285    CPPUNIT_FAIL;
286  }
287
288  try {
289    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >("yasli_language"));
290    CPPUNIT_FAIL;
291  }
292  catch (runtime_error const&) {
293  }
294  catch (...) {
295    CPPUNIT_FAIL;
296  }
297
298  try {
299    string veryLongFacetName("LC_TIME=");
300    veryLongFacetName.append(512, '?');
301    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(veryLongFacetName.c_str()));
302    CPPUNIT_FAIL;
303  }
304  catch (runtime_error const& /* e */) {
305    //CPPUNIT_MESSAGE( e.what() );
306  }
307  catch (...) {
308    CPPUNIT_FAIL;
309  }
310
311  try {
312    locale loc(locale::classic(), "C", locale::time);
313  }
314  catch (runtime_error const& /* e */) {
315    /* CPPUNIT_MESSAGE( e.what() ); */
316    CPPUNIT_FAIL;
317  }
318  catch (...) {
319    CPPUNIT_FAIL;
320  }
321
322  try {
323    // On platform without real localization support we should rely on the "C" facet.
324    locale loc(locale::classic(), "", locale::time);
325  }
326  catch (runtime_error const& /* e */) {
327    /* CPPUNIT_MESSAGE( e.what() ); */
328    CPPUNIT_FAIL;
329  }
330  catch (...) {
331    CPPUNIT_FAIL;
332  }
333
334  try {
335    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >("C"));
336  }
337  catch (runtime_error const& /* e */) {
338    /* CPPUNIT_MESSAGE( e.what() ); */
339    CPPUNIT_FAIL;
340  }
341  catch (...) {
342    CPPUNIT_FAIL;
343  }
344
345  try {
346    // On platform without real localization support we should rely on the "C" locale facet.
347    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(""));
348  }
349  catch (runtime_error const& /* e */) {
350    /* CPPUNIT_MESSAGE( e.what() ); */
351    CPPUNIT_FAIL;
352  }
353  catch (...) {
354    CPPUNIT_FAIL;
355  }
356
357#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
358  try {
359    locale loc(locale::classic(), new time_put_byname<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(static_cast<char const*>(0)));
360    CPPUNIT_FAIL;
361  }
362  catch (runtime_error const&) {
363  }
364  catch (...) {
365    CPPUNIT_FAIL;
366    }
367
368  try {
369    locale loc(locale::classic(), new time_put_byname<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >("yasli_language"));
370    CPPUNIT_FAIL;
371  }
372  catch (runtime_error const&) {
373  }
374  catch (...) {
375    CPPUNIT_FAIL;
376  }
377
378  try {
379    locale loc(locale::classic(), new time_get_byname<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(static_cast<char const*>(0)));
380    CPPUNIT_FAIL;
381  }
382  catch (runtime_error const&) {
383  }
384  catch (...) {
385    CPPUNIT_FAIL;
386  }
387
388  try {
389    locale loc(locale::classic(), new time_get_byname<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >("yasli_language"));
390    CPPUNIT_FAIL;
391  }
392  catch (runtime_error const&) {
393  }
394  catch (...) {
395    CPPUNIT_FAIL;
396  }
397
398#    endif
399#  endif
400}
401
402#endif
403