1// { dg-require-namedlocale "" } 2 3// 2001-09-21 Benjamin Kosnik <bkoz@redhat.com> 4 5// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation 6// 7// This file is part of the GNU ISO C++ Library. This library is free 8// software; you can redistribute it and/or modify it under the 9// terms of the GNU General Public License as published by the 10// Free Software Foundation; either version 2, or (at your option) 11// any later version. 12 13// This library is distributed in the hope that it will be useful, 14// but WITHOUT ANY WARRANTY; without even the implied warranty of 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16// GNU General Public License for more details. 17 18// You should have received a copy of the GNU General Public License along 19// with this library; see the file COPYING. If not, write to the Free 20// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 21// USA. 22 23// 22.2.5.1.1 time_get members 24 25#include <locale> 26#include <sstream> 27#include <testsuite_hooks.h> 28 29void test01() 30{ 31 using namespace std; 32 bool test __attribute__((unused)) = true; 33 34 typedef istreambuf_iterator<wchar_t> iterator_type; 35 36 // basic construction and sanity checks. 37 locale loc_c = locale::classic(); 38 locale loc_de = locale("de_DE"); 39 VERIFY( loc_de != loc_c ); 40 41 const wstring empty; 42 43 // create an ostream-derived object, cache the time_get facet 44 iterator_type end; 45 wistringstream iss; 46 iss.imbue(loc_c); 47 const time_get<wchar_t>& tim_get = use_facet<time_get<wchar_t> >(iss.getloc()); 48 49 const ios_base::iostate good = ios_base::goodbit; 50 ios_base::iostate errorstate = good; 51 52 // create "C" time objects 53 const tm time_bday = __gnu_test::test_tm(0, 0, 12, 4, 3, 71, 0, 93, 0); 54 55 // 2 56 // iter_type 57 // get_time(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const 58 59 // sanity checks for "C" locale 60 iss.str(L"12:00:00"); 61 iterator_type is_it01(iss); 62 tm time01; 63 errorstate = good; 64 tim_get.get_time(is_it01, end, iss, errorstate, &time01); 65 VERIFY( time01.tm_sec == time_bday.tm_sec ); 66 VERIFY( time01.tm_min == time_bday.tm_min ); 67 VERIFY( time01.tm_hour == time_bday.tm_hour ); 68 VERIFY( errorstate == ios_base::eofbit ); 69 70 iss.str(L"12:00:00 "); 71 iterator_type is_it02(iss); 72 tm time02; 73 errorstate = good; 74 tim_get.get_time(is_it02, end, iss, errorstate, &time02); 75 VERIFY( time01.tm_sec == time_bday.tm_sec ); 76 VERIFY( time01.tm_min == time_bday.tm_min ); 77 VERIFY( time01.tm_hour == time_bday.tm_hour ); 78 VERIFY( errorstate == good ); 79 80 iss.str(L"12:61:00 "); 81 iterator_type is_it03(iss); 82 tm time03; 83 errorstate = good; 84 tim_get.get_time(is_it03, end, iss, errorstate, &time03); 85 VERIFY( time01.tm_hour == time_bday.tm_hour ); 86 VERIFY( errorstate == ios_base::failbit ); 87 88 iss.str(L"12:a:00 "); 89 iterator_type is_it04(iss); 90 tm time04; 91 errorstate = good; 92 iterator_type ret04 = tim_get.get_time(is_it04, end, iss, errorstate, 93 &time04); 94 VERIFY( time01.tm_hour == time_bday.tm_hour ); 95 VERIFY( *ret04 == L'a' ); 96 VERIFY( errorstate == ios_base::failbit ); 97 98 // inspection of named locales, de_DE 99 iss.imbue(loc_de); 100 iss.str(L"12:00:00"); 101 iterator_type is_it10(iss); 102 tm time10; 103 errorstate = good; 104 tim_get.get_time(is_it10, end, iss, errorstate, &time10); 105 VERIFY( time10.tm_sec == time_bday.tm_sec ); 106 VERIFY( time10.tm_min == time_bday.tm_min ); 107 VERIFY( time10.tm_hour == time_bday.tm_hour ); 108 VERIFY( errorstate == ios_base::eofbit ); 109} 110 111int main() 112{ 113 test01(); 114 return 0; 115} 116