The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
#===============================================================================
#
#         FILE:  61-amf0-date.t
#
#  DESCRIPTION:  
#
#        FILES:  ---
#         BUGS:  ---
#        NOTES:  ---
#       AUTHOR:  YOUR NAME (), 
#      COMPANY:  
#      VERSION:  1.0
#      CREATED:  10/21/2010 03:15:55 PM
#     REVISION:  ---
#===============================================================================

use strict;
use warnings;
use Test::More qw(no_plan);                      # last test to print
use ExtUtils::testlib;
use Scalar::Util qw(blessed);
use Storable::AMF0 qw(new_amfdate perl_date parse_option);
use Storable::AMF3 ();
use constant OLD_DATE_OPT => parse_option( 'millisecond_date' );

ok( new_amfdate(0), "new_amfdate defined");
ok( blessed new_amfdate(0), "new_amfdate blessed");
is( length Storable::AMF0::freeze( new_amfdate(0) ), 11, "length AMF0 date is 11");
is( length Storable::AMF3::freeze( new_amfdate(0) ), 10, "length AMF0 date is 10");
is( unpack( "H*", Storable::AMF0::freeze(new_amfdate(0))), '0b00000000000000000000', 'freeze AMF0 date(0)',);
is( unpack( "H*", Storable::AMF3::freeze(new_amfdate(0))), '08010000000000000000', 'freeze AMF3 date(0)',);

is( Storable::AMF0::thaw( Storable::AMF0::freeze( new_amfdate(1)), OLD_DATE_OPT), 1000, "Date parse with option AMF0");
is( Storable::AMF3::thaw( Storable::AMF3::freeze( new_amfdate(1)), OLD_DATE_OPT), 1000, "Date parse with option AMF3");

is( Storable::AMF0::thaw( Storable::AMF0::freeze( new_amfdate(1))), 1, "Date parse perlish AMF0");
is( Storable::AMF3::thaw( Storable::AMF3::freeze( new_amfdate(1))), 1, "Date parse perlish AMF3");

my $timestamp = time();
for (0, 1, 100, 100, $timestamp) {
	my $time = gmtime( $_ ) . " GMT";
	is( perl_date( new_amfdate($_)), $_, "perl_date(new_amfdate(.)) for $time");
}


# AMF0
for (0, 1, 100, 100, $timestamp) {
	my $time = gmtime( $_ ) . " GMT";
	my $s = Storable::AMF0::thaw( Storable::AMF0::freeze( new_amfdate( $_ )));
	is( perl_date( $s ), $_, "AMF0 date invariant  for $time");
}

# AMF3
for (0, 1, 100, 100, $timestamp) {
	my $time = gmtime( $_ ) . " GMT";
	my $s = Storable::AMF3::thaw( Storable::AMF3::freeze( new_amfdate( $_ )));
	is( perl_date( $s ), $_, "AMF3 date invariant  for $time");
}