DateTime-Format-Lite

 view release on metacpan or  search on metacpan

t/85.serialisation.t  view on Meta::CPAN


# NOTE: Storable::dclone (clone via freeze/thaw)
subtest 'Storable::dclone' => sub
{
    SKIP:
    {
        if( !eval{ require Storable; 1 } )
        {
            skip( 'Storable not available', 2 );
        }

        my $orig  = _make_fmt();
        my $clone = Storable::dclone( $orig );
        ok( defined( $clone ), 'dclone succeeded' );
        isnt( $clone, $orig,   'clone is a different reference' );
        _check_state( $orig, $clone, 'dclone' );
    };
};

# NOTE: Sereal round-trip (optional)
subtest 'Sereal round-trip' => sub
{
    SKIP:
    {
        if( !eval{ require Sereal::Encoder; require Sereal::Decoder; 1 } )
        {
            skip( 'Sereal not available', 3 );
        }

        my $orig    = _make_fmt();
        # freeze_callbacks => 1 tells Sereal to honour FREEZE/THAW hooks, which
        # avoids serialising internal objects (such as DBI handles buried inside
        # DateTime::Locale::FromCLDR) by introspection.
        my $encoder = Sereal::Encoder->new({ freeze_callbacks => 1 });
        my $decoder = Sereal::Decoder->new({ refuse_objects => 0 });
        my $frozen  = $encoder->encode( $orig );
        ok( defined( $frozen ), 'Sereal encode succeeded' );

        my $restored = $decoder->decode( $frozen );
        ok( defined( $restored ), 'Sereal decode returned object' );
        isa_ok( $restored, 'DateTime::Format::Lite' );
        _check_state( $orig, $restored, 'Sereal' );
    };
};

# NOTE: JSON serialisation round-trip via TO_JSON
subtest 'JSON round-trip via TO_JSON' => sub
{
    SKIP:
    {
        if( !eval{ require JSON; 1 } )
        {
            skip( 'JSON module not available', 3 );
        }

        my $orig    = _make_fmt();
        my $json_str = JSON::encode_json( $orig->TO_JSON );
        ok( defined( $json_str ), 'JSON encode succeeded' );

        my $state    = JSON::decode_json( $json_str );
        ok( ref( $state ) eq 'HASH', 'decoded JSON is a hashref' );

        # Reconstruct from the decoded state
        my $restored = DateTime::Format::Lite->new( %$state );
        ok( defined( $restored ), 'reconstruct from JSON state succeeded' );
        _check_state( $orig, $restored, 'JSON' );
    };
};

done_testing;

__END__



( run in 0.880 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )