#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 5;

BEGIN {
    use_ok('MooseX::Storage');
    use_ok('MooseX::Storage::Util');    
}

my $packed = {
    __CLASS__ => 'Foo',
    number    => 10,
    string    => 'foo',
    float     => 10.5,
    array     => [ 1 .. 10 ],
    hash      => { map { $_ => undef } ( 1 .. 10 ) },
    object    => { 
       __CLASS__ => 'Foo',                
       number    => 2 
    },            
};

my $json = '{"array":[1,2,3,4,5,6,7,8,9,10],"hash":{"6":null,"3":null,"7":null,"9":null,"2":null,"8":null,"1":null,"4":null,"10":null,"5":null},"float":10.5,"object":{"number":2,"__CLASS__":"Foo"},"number":10,"__CLASS__":"Foo","string":"foo"}';
my $yaml = q{--- 
__CLASS__: Foo
array: 
  - 1
  - 2
  - 3
  - 4
  - 5
  - 6
  - 7
  - 8
  - 9
  - 10
float: 10.5
hash: 
  1: ~
  10: ~
  2: ~
  3: ~
  4: ~
  5: ~
  6: ~
  7: ~
  8: ~
  9: ~
number: 10
object: 
  __CLASS__: Foo
  number: 2
string: foo
};

is('Foo', MooseX::Storage::Util->peek($packed), 
   '... got the right class name from the packed item');

SKIP: {
    my $classname = eval { 
        MooseX::Storage::Util->peek($json => ('format' => 'JSON')) 
    };
    if ($@ =~ /^Could not load JSON module because/) {
        skip "No JSON module found", 1;
    }

    is('Foo', $classname, 
       '... got the right class name from the json item');
}

SKIP: {
    my $classname = eval { 
        MooseX::Storage::Util->peek($yaml => ('format' => 'YAML'))
    };
    if ($@ =~ /^Could not load YAML module because/) {
        skip "No YAML module found", 1;
    }    
    
    is('Foo', $classname, 
       '... got the right class name from the yaml item');
}


