testtz_database.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 139 行

CPP
139
字号
/* Copyright (c) 2003-2005 CrystalClear Software, Inc. * 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 * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ */#include "boost/date_time/testfrmwk.hpp"#include "boost/date_time/gregorian/gregorian.hpp"#include "boost/date_time/posix_time/posix_time.hpp"#include "boost/date_time/local_time/custom_time_zone.hpp"#include "boost/date_time/local_time/local_time_types.hpp"#include "boost/date_time/local_time/tz_database.hpp"#include "boost/date_time/local_time/posix_time_zone.hpp"#include <iostream>bool run_bad_field_count_test();int main(){  using namespace boost::gregorian;  using namespace boost::posix_time;  using namespace boost::local_time;    /* NOTE: The testlocal_time_facet tests required full names    * be added to some of the date_time_zonespec.csv entries. The    * tests here also use those full names. Those entries are:   * Chicago, Denver, Los_Angeles, New_York, and Phoenix   * have all had full names added */   // run the exception tests first  try{    tz_database tz_db;    tz_db.load_from_file("missing_file.csv"); // file does not exist  }catch(data_not_accessible e){    check("Caught Missing data file exception", true);  }catch(...){    check("Caught first unexpected exception", false);  }  check("Caught Bad field count exception", run_bad_field_count_test());  /* This test-file is usually run from either $BOOST_ROOT/status, or    * $BOOST_ROOT/libs/date_time/test. Therefore, the relative path    * to the data file this test depends on will be one of two    * possible paths.   *   * If the first attempt at opening the data file fails, an exception    * will be thrown. The handling of that exception consists of    * attempting to open it again but from a different location. If that    * also fails, we abort the test. */  tz_database tz_db;  try {    // first try to find the data file from the test dir    tz_db.load_from_file("../data/date_time_zonespec.csv");  }catch(data_not_accessible e) {    // couldn't find the data file so assume we are being run from     // boost_root/status and try again    tz_db.load_from_file("../libs/date_time/data/date_time_zonespec.csv");  }catch(...) {    check("Cannot locate data file - aborting.", false);    return printTestStats();  }      time_zone_ptr bad_tz = tz_db.time_zone_from_region("Invalid/name");  check("Expected null pointer return", bad_tz == time_zone_ptr());   time_zone_ptr nyc_test = tz_db.time_zone_from_region("America/New_York");  check("nyc Valid pointer", nyc_test != time_zone_ptr() );   check("nyc Abbreviations",nyc_test->std_zone_abbrev() == std::string("EST"));   check("nyc Full Name", nyc_test->std_zone_name() == std::string("Eastern Standard Time"));   check("nyc Abbreviations",nyc_test->dst_zone_abbrev() == std::string("EDT"));   //std::cout << nyc_test->std_zone_name() << std::endl;  check("nyc Full Name", nyc_test->dst_zone_name() == std::string("Eastern Daylight Time"));   check("nyc GMT Offset", nyc_test->base_utc_offset() == hours(-5));  check("nyc DST Offset", nyc_test->dst_offset() == hours(1));  //std::cout << nyc_test->dst_local_start_time(2004) << std::endl;  check("nyc dst start",  nyc_test->dst_local_start_time(2007) == ptime(date(2007, Mar, 11), hours(2)));  check("nyc dst end", nyc_test->dst_local_end_time(2007) == ptime(date(2007, Nov, 4), hours(2)));  check("nyc has dst", nyc_test->has_dst());    time_zone_ptr phx_test = tz_db.time_zone_from_region("America/Phoenix");  check("az Valid pointer", phx_test != time_zone_ptr() );   check("az Abbreviations",phx_test->std_zone_abbrev() == std::string("MST"));    check("az Full Name", phx_test->std_zone_name() == std::string("Mountain Standard Time"));    check("az Abbreviations", phx_test->dst_zone_abbrev() == std::string(""));    check("az Full Name", phx_test->dst_zone_name() == std::string(""));    check("az GMT Offset", phx_test->base_utc_offset() == hours(-7));  check("az DST Offset", phx_test->dst_offset() == hours(0));  //std::cout << phx_test->dst_local_start_time(2004) << std::endl;  check("az has dst", phx_test->has_dst() == false);  //Now add and retrieve a Posix tz spec from the database  time_zone_ptr eastern(new posix_time_zone("EST-05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00"));  tz_db.add_record("United States/Eastern", eastern);  time_zone_ptr eastern_test = tz_db.time_zone_from_region("United States/Eastern");  check("eastern Valid pointer", eastern_test != time_zone_ptr() );  check("eastern Abbreviations",       eastern_test->std_zone_abbrev() == std::string("EST"));    check("eastern Abbreviations",       eastern_test->std_zone_name() == std::string("EST"));    check("eastern Abbreviations",       eastern_test->dst_zone_abbrev() == std::string("EDT"));    check("eastern Abbreviations",       eastern_test->dst_zone_name() == std::string("EDT"));    check("eastern GMT Offset", eastern_test->base_utc_offset() == hours(-5));  check("eastern dst start",  eastern_test->dst_local_start_time(2004) == ptime(date(2004, Apr, 4), hours(2)));  check("eastern dst end", eastern_test->dst_local_end_time(2004) == ptime(date(2004, Oct, 31), hours(2)));  check("eastern  has dst", eastern_test->has_dst() == true);  return printTestStats();}/* This test only checks to make sure the bad_field_count exception * is properly thrown. It does not pay any attention to any other  * exception, those are tested elsewhere. */bool run_bad_field_count_test(){  using namespace boost::local_time;  bool caught_bfc = false;  tz_database other_db;  try{    other_db.load_from_file("local_time/poorly_formed_zonespec.csv");  }catch(bad_field_count be){    caught_bfc = true;  }catch(...) {    // do nothing (file not found)  }  try{    other_db.load_from_file("../libs/date_time/test/local_time/poorly_formed_zonespec.csv");  }catch(bad_field_count be){    caught_bfc = true;  }catch(...) {    // do nothing (file not found)  }  return caught_bfc;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?