summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/date_time/test/gregorian/testfacet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/date_time/test/gregorian/testfacet.cpp')
-rw-r--r--src/boost/libs/date_time/test/gregorian/testfacet.cpp342
1 files changed, 342 insertions, 0 deletions
diff --git a/src/boost/libs/date_time/test/gregorian/testfacet.cpp b/src/boost/libs/date_time/test/gregorian/testfacet.cpp
new file mode 100644
index 000000000..82a7253db
--- /dev/null
+++ b/src/boost/libs/date_time/test/gregorian/testfacet.cpp
@@ -0,0 +1,342 @@
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ */
+
+#include <sstream>
+#include <iostream>
+#include <fstream>
+
+#include "boost/date_time/gregorian/greg_month.hpp"
+#include "boost/date_time/gregorian/greg_facet.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+#include "boost/date_time/gregorian/gregorian.hpp"
+#include "../testfrmwk.hpp"
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+ const char* const de_short_month_names[]={"Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez", "NAM"};
+
+ const char* const de_long_month_names[]={"Januar","Februar","Marz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember","NichtDerMonat"};
+ const char* const de_special_value_names[]={"NichtDatumzeit","-unbegrenztheit", "+unbegrenztheit"};
+
+const char* const de_short_weekday_names[]={"Son", "Mon", "Die","Mit", "Don", "Fre", "Sam"};
+
+ const char* const de_long_weekday_names[]={"Sonntag", "Montag", "Dienstag","Mittwoch", "Donnerstag", "Freitag", "Samstag"};
+
+#endif
+
+/** Not used for now
+ const char* const es_short_month_names[]={"Ene","Feb","Mar","Abr","Pue","Jun","Jul","Ago","Sep","Oct","Nov","Dic", "NAM"};
+
+ const char* const es_long_month_names[]={"Enero","Febrero","Marcha","Abril","Pueda","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre","NoAMes"};
+ const char* const es_special_value_names[]={"NoUnRatoDeLaFacha","-infinito", "+infinito"};
+**/
+int
+main()
+{
+// std::locale native("");
+// std::cout << "native: " << native.name() << std::endl;
+//#ifndef BOOST_NO_STD_LOCALE
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+ using namespace boost::gregorian;
+
+ typedef greg_facet_config facet_config;
+ typedef boost::date_time::all_date_names_put<facet_config> date_facet;
+ typedef boost::date_time::date_names_put<facet_config> date_facet_base;
+ typedef boost::date_time::ostream_month_formatter<date_facet_base> month_formatter;
+
+ {
+ // special_values tests
+ std::stringstream ss;
+ date_facet_base* f = new date_facet_base();
+ std::locale loc(std::locale::classic(), f);
+ ss.imbue(loc);
+ date d(not_a_date_time);
+ ss << d;
+ check("Special value, stream out nadt" , ss.str() == std::string("not-a-date-time"));
+ ss.str("");
+ d = date(neg_infin);
+ ss << d;
+ check("Special value, stream out neg_infin" , ss.str() == std::string("-infinity"));
+ ss.str("");
+ d = date(pos_infin);
+ ss << d;
+ check("Special value, stream out pos_infin" , ss.str() == std::string("+infinity"));
+ }
+
+ date_facet gdnp(de_short_month_names, de_long_month_names,
+ de_special_value_names, de_long_weekday_names,
+ de_long_weekday_names,
+ '.',
+ boost::date_time::ymd_order_dmy);
+
+ std::stringstream ss;
+ std::ostreambuf_iterator<char> coi(ss);
+ gdnp.put_month_short(coi, Oct);
+ check("check german short month: " + ss.str(),
+ ss.str() == std::string("Okt"));
+
+ ss.str(""); //reset string stream
+ greg_month mo(Oct);
+ month_formatter::format_month(mo, ss, gdnp);
+ check("check german short month: " + ss.str(),
+ ss.str() == std::string("Okt"));
+ ss.str(""); //reset string stream
+// month_formatter::format_month(mo, ss, gdnp);
+// check("check german long month: " + ss.str(),
+// ss.str() == std::string("Oktober"));
+
+
+ greg_year_month_day ymd(2002,Oct,1);
+ typedef boost::date_time::ostream_ymd_formatter<greg_year_month_day, date_facet_base> ymd_formatter;
+ ss.str(""); //reset string stream
+ ymd_formatter::ymd_put(ymd, ss, gdnp);
+ check("check ymd: " + ss.str(),
+ ss.str() == std::string("01.Okt.2002"));
+
+
+ typedef boost::date_time::ostream_date_formatter<date, date_facet_base> datef;
+
+ std::stringstream os;
+ date d1(2002, Oct, 1);
+ datef::date_put(d1, os, gdnp);
+ check("ostream low level check string:"+os.str(),
+ os.str() == std::string("01.Okt.2002"));
+
+// //Locale tests
+ std::locale global;
+ std::cout << "global: " << global.name() << std::endl;
+
+ // put a facet into a locale
+ //check for a facet p319
+ check("no registered facet here",
+ !std::has_facet<date_facet>(global));
+
+ std::locale global2(global,
+ new date_facet(de_short_month_names,
+ de_long_month_names,
+ de_special_value_names,
+ de_long_weekday_names,
+ de_long_weekday_names));
+
+ check("facet registered here",
+ std::has_facet<boost::date_time::date_names_put<facet_config> >(global2));
+
+ std::stringstream os2;
+ os2.imbue(global2);
+ datef::date_put(d1, os2);
+ check("check string imbued ostream: "+os2.str(),
+ os2.str() == std::string("2002-Okt-01"));
+
+ date infin(pos_infin);
+ os2.str(""); //clear stream
+ datef::date_put(infin, os2);
+ check("check string imbued ostream: "+os2.str(),
+ os2.str() == std::string("+unbegrenztheit"));
+
+ os2.str(""); //clear stream
+ os2 << infin;
+ check("check string imbued ostream: "+os2.str(),
+ os2.str() == std::string("+unbegrenztheit"));
+
+
+ date nadt(not_a_date_time);
+ os2.str(""); //clear stream
+ datef::date_put(nadt, os2);
+ check("check string imbued ostream: "+os2.str(),
+ os2.str() == std::string("NichtDatumzeit"));
+
+
+ std::stringstream os3;
+ os3 << d1;
+ check("check any old ostream: "+os3.str(),
+ os3.str() == std::string("2002-Oct-01"));
+
+ std::ofstream f("test_facet_file.out");
+ f << d1 << std::endl;
+
+// // date formatter that takes locale and gets facet from locale
+ std::locale german_dates1(global,
+ new date_facet(de_short_month_names,
+ de_long_month_names,
+ de_special_value_names,
+ de_short_weekday_names,
+ de_long_weekday_names,
+ '.',
+ boost::date_time::ymd_order_dmy,
+ boost::date_time::month_as_integer));
+
+ os3.imbue(german_dates1);
+ os3.str("");
+ os3 << d1;
+ check("check date order: "+os3.str(),
+ os3.str() == std::string("01.10.2002"));
+
+ std::locale german_dates2(global,
+ new date_facet(de_short_month_names,
+ de_long_month_names,
+ de_special_value_names,
+ de_short_weekday_names,
+ de_long_weekday_names,
+ ' ',
+ boost::date_time::ymd_order_iso,
+ boost::date_time::month_as_short_string));
+
+ os3.imbue(german_dates2);
+ os3.str("");
+ os3 << d1;
+ check("check date order: "+os3.str(),
+ os3.str() == std::string("2002 Okt 01"));
+
+ std::locale german_dates3(global,
+ new date_facet(de_short_month_names,
+ de_long_month_names,
+ de_special_value_names,
+ de_short_weekday_names,
+ de_long_weekday_names,
+ ' ',
+ boost::date_time::ymd_order_us,
+ boost::date_time::month_as_long_string));
+
+ os3.imbue(german_dates3);
+ os3.str("");
+ os3 << d1;
+ check("check date order: "+os3.str(),
+ os3.str() == std::string("Oktober 01 2002"));
+
+ date_period dp(d1, date_duration(3));
+ os3.str("");
+ os3 << dp;
+ check("check date period: "+os3.str(),
+ os3.str() == std::string("[Oktober 01 2002/Oktober 03 2002]"));
+
+
+ /*******************************************************************/
+ /* Streaming operations for date durations */
+ /*******************************************************************/
+
+ date_duration dur(26);
+ std::stringstream ss2;
+ ss2 << dur;
+ check("date_duration stream out", ss2.str() == std::string("26"));
+
+ dur = date_duration(boost::date_time::pos_infin);
+ ss2.str("");
+ ss2 << dur;
+ check("date_duration stream out", ss2.str() == std::string("+infinity"));
+
+ /*******************************************************************/
+ /* Streaming operations for date generator functions */
+ /*******************************************************************/
+
+ partial_date pd(26, Jun);
+ //std::stringstream ss2;
+ ss2.str("");
+ ss2 << pd;
+ check("partial date stream out", ss2.str() == std::string("26 Jun"));
+
+ ss2.str("");
+ nth_kday_of_month nkm(nth_kday_of_month::second, Friday, Sep);
+ ss2 << nkm;
+ check("nth kday of month", ss2.str() == std::string("second Fri of Sep"));
+
+ ss2.str("");
+ first_kday_of_month fkm(Saturday, May);
+ ss2 << fkm;
+ check("first kday of month", ss2.str() == std::string("first Sat of May"));
+
+ ss2.str("");
+ last_kday_of_month lkm(Monday, Aug);
+ ss2 << lkm;
+ check("last kday of month", ss2.str() == std::string("last Mon of Aug"));
+
+ ss2.str("");
+ first_kday_after fka(Thursday);//fkb.get_date(d)
+ ss2 << fka;
+ check("first kday after", ss2.str() == std::string("Thu after"));
+
+ ss2.str("");
+ first_kday_before fkb(Tuesday); // same ^
+ ss2 << fkb;
+ check("first kday after", ss2.str() == std::string("Tue before"));
+
+ std::cout << pd << '\n'
+ << nkm << '\n'
+ << fkm << '\n'
+ << lkm << '\n'
+ << fka << '\n'
+ << fkb << '\n'
+ << std::endl;
+
+ /*******************************************************************/
+ /* Input Streaming for greg_month */
+ /*******************************************************************/
+ {
+ std::stringstream ss1("January");
+ std::stringstream ss2m("dec"); // misspelled
+ std::stringstream german("Okt");
+ german.imbue(global2);
+ greg_month m(3);
+ ss1 >> m;
+ check("Stream in month", m == greg_month(Jan));
+#ifndef BOOST_NO_STD_WSTRING
+ std::wstringstream ws1(L"Dec");
+ ws1 >> m;
+ check("Wide Stream in month", m == greg_month(Dec));
+#else
+ check("Wide Stream in not supported by this compiler", false);
+#endif // BOOST_NO_STD_WSTRING
+ german >> m;
+ check("Stream in German month", m == greg_month(Oct));
+ try{
+ ss2m >> m; // misspelled
+ check("Bad month exception NOT thrown (misspelled name)", false);
+ }catch(bad_month&){
+ check("Bad month exception caught (misspelled name)", true);
+ }catch(...){
+ check("Bad month exception NOT caught (misspelled name)", false);
+ }
+ }
+ /*******************************************************************/
+ /* Input Streaming for greg_weekday */
+ /*******************************************************************/
+ {
+ std::stringstream ss1("Sun");
+ std::stringstream ss2w("Wensday"); // misspelled
+ std::stringstream german("Mittwoch"); // Wednesday
+ german.imbue(global2);
+ greg_weekday wd(Friday); //something not Sunday...
+ ss1 >> wd;
+ check("Stream in weekday", wd == greg_weekday(Sunday));
+#ifndef BOOST_NO_STD_WSTRING
+ std::wstringstream ws1(L"Saturday");
+ ws1 >> wd;
+ check("Wide Stream in weekday", wd == greg_weekday(Saturday));
+#else
+ check("Wide Stream in not supported by this compiler", false);
+#endif // BOOST_NO_STD_WSTRING
+ german >> wd;
+ check("Stream in German weekday", wd == greg_weekday(Wednesday));
+ try{
+ ss2w >> wd;
+ check("Bad weekday exception NOT thrown (misspelled name)", false);
+ }catch(bad_weekday&){
+ check("Bad weekday exception caught (misspelled name)", true);
+ }catch(...){
+ check("Bad weekday exception NOT caught (misspelled name)", false);
+ }
+ }
+
+#else
+ check("No tests executed - Locales not supported by this compiler", false);
+
+#endif //BOOST_DATE_TIME_NO_LOCALE
+
+ return printTestStats();
+
+}
+