2015-03-26 19:59:06 -05:00
/********************************************************************\
* test - gnc - datetime . cpp - - Unit tests for GncDate and GncDateTime *
* *
* Copyright 2015 John Ralls < jralls @ ceridwen . us > *
* *
* This program is free software ; you can redistribute it and / or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation ; either version 2 of *
* the License , or ( at your option ) any later version . *
* *
* This program is distributed in the hope that it will be useful , *
* but WITHOUT ANY WARRANTY ; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the *
* GNU General Public License for more details . *
* *
* You should have received a copy of the GNU General Public License *
* along with this program ; if not , contact : *
* *
* Free Software Foundation Voice : + 1 - 617 - 542 - 5942 *
* 51 Franklin Street , Fifth Floor Fax : + 1 - 617 - 542 - 2652 *
* Boston , MA 02110 - 1301 , USA gnu @ gnu . org *
* *
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "../gnc-datetime.hpp"
# include <gtest/gtest.h>
TEST ( gnc_date_constructors , test_default_constructor )
{
GncDate date ;
EXPECT_FALSE ( date . isnull ( ) ) ;
}
TEST ( gnc_date_constructors , test_ymd_constructor )
{
GncDate date ( 2045 , 11 , 13 ) ;
EXPECT_FALSE ( date . isnull ( ) ) ;
}
TEST ( gnc_datetime_constructors , test_default_constructor )
{
GncDateTime atime ;
2017-01-14 13:49:48 -06:00
long time_now = time ( nullptr ) ;
EXPECT_EQ ( static_cast < time64 > ( atime ) , static_cast < time64 > ( time_now ) ) ;
2015-03-26 19:59:06 -05:00
}
TEST ( gnc_datetime_constructors , test_time64_constructor )
{
const time64 time = 2394187200 ; //2045-11-13 12:00:00 Z
GncDateTime atime ( time ) ;
2015-04-10 11:33:51 -05:00
EXPECT_EQ ( static_cast < time64 > ( atime ) , time ) ;
2015-03-26 19:59:06 -05:00
}
2015-04-10 11:33:51 -05:00
2015-04-26 18:44:39 -05:00
TEST ( gnc_datetime_constructors , test_struct_tm_constructor )
{
# ifdef HAVE_STRUCT_TM_GMTOFF
const struct tm tm { 0 , 0 , 12 , 13 , 10 , 145 , 0 , 0 , 0 , NULL , 0 } ;
# else
const struct tm tm { 0 , 0 , 12 , 13 , 10 , 145 , 0 , 0 , 0 } ;
# endif
const time64 time = 2394187200 ; //2045-11-13 12:00:00 Z
GncDateTime atime ( tm ) ;
EXPECT_EQ ( static_cast < time64 > ( atime ) , time ) ;
const struct tm tm1 = static_cast < struct tm > ( atime ) ;
EXPECT_EQ ( tm1 . tm_year , tm . tm_year ) ;
EXPECT_EQ ( tm1 . tm_mon , tm . tm_mon ) ;
EXPECT_EQ ( tm1 . tm_mday , tm . tm_mday ) ;
// We have to contort this a bit to handle offsets > 12, e.g. New Zealand during DST.
EXPECT_EQ ( ( 24 + tm1 . tm_hour - atime . offset ( ) / 3600 ) % 24 , tm . tm_hour ) ;
EXPECT_EQ ( tm1 . tm_min , tm . tm_min ) ;
}
2015-04-26 20:01:23 -05:00
TEST ( gnc_datetime_functions , test_format )
{
GncDateTime atime ( 2394187200 ) ; //2045-11-13 12:00:00 Z
//Date only to finesse timezone issues. It will still fail in +12 DST.
EXPECT_EQ ( atime . format ( " %d-%m-%Y " ) , " 13-11-2045 " ) ;
}
2015-04-28 12:06:18 -05:00
2016-11-06 11:39:21 -06:00
TEST ( gnc_datetime_functions , test_format_zulu )
{
GncDateTime atime ( 2394187200 ) ; //2045-11-13 12:00:00 Z
//Date only to finesse timezone issues. It will still fail in +12 DST.
EXPECT_EQ ( atime . format_zulu ( " %d-%m-%Y %H:%M:%S " ) , " 13-11-2045 12:00:00 " ) ;
}
2015-04-30 14:23:25 -05:00
//This is a bit convoluted because it uses GncDate's GncDateImpl constructor and year_month_day() function. There's no good way to test the former without violating the privacy of the implementation.
2015-04-28 12:06:18 -05:00
TEST ( gnc_datetime_functions , test_date )
{
GncDateTime atime ( 2394187200 ) ; //2045-11-13 12:00:00 Z
2016-06-02 14:44:38 -05:00
GncDate gncd = atime . date ( ) ;
2015-04-30 14:23:25 -05:00
auto ymd = gncd . year_month_day ( ) ;
2015-04-28 12:06:18 -05:00
EXPECT_EQ ( ymd . year , 2045 ) ;
EXPECT_EQ ( ymd . month , 11 ) ;
EXPECT_EQ ( ymd . day , 13 ) ;
}
2017-03-17 17:18:00 -05:00
TEST ( gnc_datetime_functions , test_timezone_offset )
{
GncDateTime gncdt1 ( 1488797940 ) ; //6 Mar 2017
EXPECT_EQ ( - 28800 , gncdt1 . offset ( ) ) ;
GncDateTime gncdt2 ( 1489661940 ) ; //16 Mar 2017 10:59 Z
EXPECT_EQ ( - 25200 , gncdt2 . offset ( ) ) ;
GncDateTime gncdt3 ( 1490525940 ) ; //26 Mar 2017
EXPECT_EQ ( - 25200 , gncdt3 . offset ( ) ) ;
}