1: %%
    2: %% %CopyrightBegin%
    3: %% 
    4: %% Copyright Ericsson AB 1998-2011. All Rights Reserved.
    5: %% 
    6: %% The contents of this file are subject to the Erlang Public License,
    7: %% Version 1.1, (the "License"); you may not use this file except in
    8: %% compliance with the License. You should have received a copy of the
    9: %% Erlang Public License along with this software. If not, it can be
   10: %% retrieved online at http://www.erlang.org/.
   11: %% 
   12: %% Software distributed under the License is distributed on an "AS IS"
   13: %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
   14: %% the License for the specific language governing rights and limitations
   15: %% under the License.
   16: %% 
   17: %% %CopyrightEnd%
   18: %%
   19: %% File:     y2k_SUITE.erl
   20: %% Purpose:  Year 2000 tests.
   21: 
   22: -module(y2k_SUITE).
   23: 
   24: -include_lib("test_server/include/test_server.hrl").
   25: 
   26: -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
   27: 	 init_per_group/2,end_per_group/2,
   28: 	 date_1999_01_01/1, date_1999_02_28/1, 
   29: 	 date_1999_09_09/1, date_2000_01_01/1, 
   30: 	 date_2000_02_29/1, date_2001_01_01/1, 
   31: 	 date_2001_02_29/1, date_2004_02_29/1
   32: 	]).
   33: 
   34: suite() -> [{ct_hooks,[ts_install_cth]}].
   35: 
   36: all() -> 
   37:     [date_1999_01_01, date_1999_02_28, date_1999_09_09,
   38:      date_2000_01_01, date_2000_02_29, date_2001_01_01,
   39:      date_2001_02_29, date_2004_02_29].
   40: 
   41: groups() -> 
   42:     [].
   43: 
   44: init_per_suite(Config) ->
   45:     Config.
   46: 
   47: end_per_suite(_Config) ->
   48:     ok.
   49: 
   50: init_per_group(_GroupName, Config) ->
   51:     Config.
   52: 
   53: end_per_group(_GroupName, Config) ->
   54:     Config.
   55: 
   56: 
   57: date_1999_01_01(doc) ->
   58:     "#1 : 1999-01-01: test roll-over from 1998-12-31 to 1999-01-01.";
   59: date_1999_01_01(suite) ->
   60:     [];
   61: date_1999_01_01(Config) when is_list(Config) ->
   62:     ?line Date = {1998, 12, 31}, NextDate = {1999, 1, 1},
   63:     ?line match(next_date(Date), NextDate),
   64:     TZD = tzd(Date),
   65:     if 
   66: 	TZD > 0 ->
   67: 	    ?line Time = {24 - TZD, 0, 0},
   68: 	    ?line {NDate, _NTime} = 
   69: 		erlang:localtime_to_universaltime({Date, Time}),
   70: 	    ?line match(NDate, NextDate);
   71: 	TZD < 0  ->
   72: 	    ?line Time = {24 + TZD, 0, 0},
   73: 	    ?line {NDate, _NTime} = 
   74: 		erlang:universaltime_to_localtime({Date, Time}),
   75: 	    ?line match(NDate, NextDate);
   76: 	true  ->
   77: 	    ok
   78:     end.
   79:     
   80: date_1999_02_28(doc) ->
   81:     "#2 : 1999-02-28: test roll-over from 1999-02-28 to 1999-03-01.";
   82: date_1999_02_28(suite) ->
   83:     [];
   84: date_1999_02_28(Config) when is_list(Config) ->
   85:     ?line Date = {1999, 2, 28}, NextDate = {1999, 3, 1},
   86:     ?line match(next_date(Date), NextDate),
   87:     ?line match(tz_next_date(Date), NextDate).
   88: 
   89: date_1999_09_09(doc) ->
   90:     "#3 : 1999-09-09: test roll-over from 1999-09-08 to 1999-09-09.";
   91: date_1999_09_09(suite) ->
   92:     [];
   93: date_1999_09_09(Config) when is_list(Config) ->
   94:     ?line Date = {1999, 9, 8}, NextDate = {1999, 9, 9},
   95:     ?line match(next_date(Date), NextDate),
   96:     ?line match(tz_next_date(Date), NextDate).
   97: 
   98: date_2000_01_01(doc) ->
   99:     "#4 : 2000-01-01: test roll-over from 1999-12-31 to 2000-01-01 to "
  100:     "2000-01-02.";
  101: date_2000_01_01(suite) ->
  102:     [];
  103: date_2000_01_01(Config) when is_list(Config) ->
  104:     ?line Date = {1999, 12, 31}, NextDate = {2000, 1, 1},
  105:     ?line match(next_date(Date), NextDate),
  106:     ?line match(tz_next_date(Date), NextDate),
  107:     ?line NextDate1 = {2000, 1, 2},
  108:     ?line match(next_date(NextDate), NextDate1),
  109:     ?line match(tz_next_date(NextDate), NextDate1).
  110: 
  111: date_2000_02_29(doc) ->
  112:     "#5 : 2000-02-29: test roll-over from 2000-02-28 to 2000-02-29 to "
  113:     "2000-03-01.";
  114: date_2000_02_29(suite) ->
  115:     [];
  116: date_2000_02_29(Config) when is_list(Config) ->
  117:     ?line Date = {2000, 2, 28}, NextDate = {2000, 2, 29},
  118:     ?line match(next_date(Date), NextDate),
  119:     ?line match(tz_next_date(Date), NextDate),
  120:     ?line NextDate1 = {2000, 3, 1},
  121:     ?line match(next_date(NextDate), NextDate1),
  122:     ?line match(tz_next_date(NextDate), NextDate1).
  123: 
  124: date_2001_01_01(doc) ->
  125:     "#6 : 2001-01-01: test roll-over from 2000-12-31 to 2001-01-01.";
  126: date_2001_01_01(suite) ->
  127:     [];
  128: date_2001_01_01(Config) when is_list(Config) ->
  129:     ?line Date = {2000, 12, 31}, NextDate = {2001, 1, 1},
  130:     ?line match(next_date(Date), NextDate),
  131:     ?line match(tz_next_date(Date), NextDate).
  132: 
  133: date_2001_02_29(doc) ->
  134:     "#7 : 2001-02-29: test roll-over from 2001-02-28 to 2001-03-01.";
  135: date_2001_02_29(suite) ->
  136:     [];
  137: date_2001_02_29(Config) when is_list(Config) ->
  138:     ?line Date = {2001, 2, 28}, NextDate = {2001, 3, 1},
  139:     ?line match(next_date(Date), NextDate),
  140:     ?line match(tz_next_date(Date), NextDate).
  141: 
  142: date_2004_02_29(doc) ->
  143:     "#8 : 2004-02-29: test roll-over from 2004-02-28 to 2004-02-29 to "
  144:     "2004-03-01.";
  145: date_2004_02_29(suite) ->
  146:     [];
  147: date_2004_02_29(Config) when is_list(Config) ->
  148:     ?line Date = {2004, 2, 28}, NextDate = {2004, 2, 29},
  149:     ?line match(next_date(Date), NextDate),
  150:     ?line match(tz_next_date(Date), NextDate),
  151:     ?line NextDate1 = {2004, 3, 1},
  152:     ?line match(next_date(NextDate), NextDate1),
  153:     ?line match(tz_next_date(NextDate), NextDate1).
  154:    
  155: %%
  156: %% Local functions
  157: %%
  158: next_date(Date) ->
  159:     calendar:gregorian_days_to_date(calendar:date_to_gregorian_days(Date) + 1).
  160: %%
  161: %% timezonediff
  162: %%
  163: tzd(Date) ->
  164:     ?line {_LDate, {LH, _LM, _LS}} = 
  165: 	erlang:universaltime_to_localtime({Date, {12, 0, 0}}),
  166:     12 - LH.
  167: 
  168: tz_next_date(Date) ->
  169:     TZD = tzd(Date),
  170:     if 
  171: 	TZD > 0 ->
  172: 	    ?line Time = {24 - TZD, 0, 0},
  173: 	    ?line {NDate, _NTime} = 
  174: 		erlang:localtime_to_universaltime({Date, Time}),
  175: 	    ?line NDate;
  176: 	TZD < 0  ->
  177: 	    ?line Time = {24 + TZD, 0, 0},
  178: 	    ?line {NDate, _NTime} = 
  179: 		erlang:universaltime_to_localtime({Date, Time}),
  180: 	    ?line NDate;
  181: 	true  ->
  182: 	    Date
  183:     end.
  184: 
  185: %%
  186: %% match({X, X}) ->
  187: %%    ok.
  188: 
  189: match(X, X) ->
  190:     ok.
  191: 
  192: 
  193: