From: Jonathan Yu Date: Sun, 10 Jan 2010 04:54:25 +0000 (-0500) Subject: Add YAML implementation tests X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2f15bcae86cfeaaa9cfbef77669daa4e659f8c7f;p=gitmo%2FMooseX-Storage.git Add YAML implementation tests Instead of using Test::YAML::Valid, we test round trip using each available implementation of YAML. Using Test::Without::Module, we hide every other implementation except the one for testing. 060_basic_deferred.t just uses whichever YAML implementation is considered 'best' by YAML::Any --- diff --git a/Makefile.PL b/Makefile.PL index bfb5f1c..79e867c 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -20,8 +20,7 @@ feature 'JSON', feature 'YAML', -default => 1, - 'YAML' => '0', - 'Test::YAML::Valid' => '0'; + 'YAML::Any' => '0'; feature 'Storable', -default => 1, diff --git a/t/020_basic_yaml.t b/t/020_basic_yaml.t index a6554d6..a3c0e03 100644 --- a/t/020_basic_yaml.t +++ b/t/020_basic_yaml.t @@ -6,11 +6,15 @@ use warnings; use Test::More; BEGIN { + eval "use YAML::Any"; + plan skip_all => "YAML::Any is required for this test" if $@; eval "use YAML"; plan skip_all => "YAML is required for this test" if $@; - eval "use Test::YAML::Valid"; - plan skip_all => "Test::YAML::Valid is required for this test" if $@; - plan tests => 11; + eval "require Test::Without::Module"; + plan skip_all => "Test::Without::Module is required for this test" if $@; + Test::Without::Module->import(YAML::Any->order); + Test::Without::Module->unimport('YAML'); + plan tests => 10; use_ok('MooseX::Storage'); } @@ -43,58 +47,21 @@ BEGIN { my $yaml = $foo->freeze; - yaml_string_ok( $yaml, '... we got valid YAML out of it' ); + my $bar = Foo->thaw( $yaml ); + isa_ok( $bar, 'Foo' ); -} - -{ - my $foo = Foo->thaw( - 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 -} - ); - isa_ok( $foo, 'Foo' ); - - is( $foo->number, 10, '... got the right number' ); - is( $foo->string, 'foo', '... got the right string' ); - is( $foo->float, 10.5, '... got the right float' ); - is_deeply( $foo->array, [ 1 .. 10 ], '... got the right array' ); + is( $bar->number, 10, '... got the right number' ); + is( $bar->string, 'foo', '... got the right string' ); + is( $bar->float, 10.5, '... got the right float' ); + is_deeply( $bar->array, [ 1 .. 10 ], '... got the right array' ); is_deeply( - $foo->hash, + $bar->hash, { map { $_ => undef } ( 1 .. 10 ) }, '... got the right hash' ); - isa_ok( $foo->object, 'Foo' ); - is( $foo->object->number, 2, + isa_ok( $bar->object, 'Foo' ); + is( $bar->object->number, 2, '... got the right number (in the embedded object)' ); } diff --git a/t/020_basic_yaml_syck.t b/t/020_basic_yaml_syck.t new file mode 100644 index 0000000..8def928 --- /dev/null +++ b/t/020_basic_yaml_syck.t @@ -0,0 +1,67 @@ +#!/usr/bin/perl +$|++; +use strict; +use warnings; + +use Test::More; + +BEGIN { + eval "use YAML::Any"; + plan skip_all => "YAML::Any is required for this test" if $@; + eval "use YAML::Syck"; + plan skip_all => "YAML::Syck is required for this test" if $@; + eval "require Test::Without::Module"; + plan skip_all => "Test::Without::Module is required for this test" if $@; + Test::Without::Module->import(YAML::Any->order); + Test::Without::Module->unimport('YAML::Syck'); + plan tests => 10; + use_ok('MooseX::Storage'); +} + +{ + + package Foo; + use Moose; + use MooseX::Storage; + + with Storage( 'format' => 'YAML' ); + + has 'number' => ( is => 'ro', isa => 'Int' ); + has 'string' => ( is => 'ro', isa => 'Str' ); + has 'float' => ( is => 'ro', isa => 'Num' ); + has 'array' => ( is => 'ro', isa => 'ArrayRef' ); + has 'hash' => ( is => 'ro', isa => 'HashRef' ); + has 'object' => ( is => 'ro', isa => 'Object' ); +} + +{ + my $foo = Foo->new( + number => 10, + string => 'foo', + float => 10.5, + array => [ 1 .. 10 ], + hash => { map { $_ => undef } ( 1 .. 10 ) }, + object => Foo->new( number => 2 ), + ); + isa_ok( $foo, 'Foo' ); + + my $yaml = $foo->freeze; + + my $bar = Foo->thaw( $yaml ); + isa_ok( $bar, 'Foo' ); + + is( $bar->number, 10, '... got the right number' ); + is( $bar->string, 'foo', '... got the right string' ); + is( $bar->float, 10.5, '... got the right float' ); + is_deeply( $bar->array, [ 1 .. 10 ], '... got the right array' ); + is_deeply( + $bar->hash, + { map { $_ => undef } ( 1 .. 10 ) }, + '... got the right hash' + ); + + isa_ok( $bar->object, 'Foo' ); + is( $bar->object->number, 2, + '... got the right number (in the embedded object)' ); +} + diff --git a/t/020_basic_yaml_xs.t b/t/020_basic_yaml_xs.t new file mode 100644 index 0000000..8650a0e --- /dev/null +++ b/t/020_basic_yaml_xs.t @@ -0,0 +1,67 @@ +#!/usr/bin/perl +$|++; +use strict; +use warnings; + +use Test::More; + +BEGIN { + eval "use YAML::Any"; + plan skip_all => "YAML::Any is required for this test" if $@; + eval "use YAML::XS"; + plan skip_all => "YAML::XS is required for this test" if $@; + eval "require Test::Without::Module"; + plan skip_all => "Test::Without::Module is required for this test" if $@; + Test::Without::Module->import(YAML::Any->order); + Test::Without::Module->unimport('YAML::XS'); + plan tests => 10; + use_ok('MooseX::Storage'); +} + +{ + + package Foo; + use Moose; + use MooseX::Storage; + + with Storage( 'format' => 'YAML' ); + + has 'number' => ( is => 'ro', isa => 'Int' ); + has 'string' => ( is => 'ro', isa => 'Str' ); + has 'float' => ( is => 'ro', isa => 'Num' ); + has 'array' => ( is => 'ro', isa => 'ArrayRef' ); + has 'hash' => ( is => 'ro', isa => 'HashRef' ); + has 'object' => ( is => 'ro', isa => 'Object' ); +} + +{ + my $foo = Foo->new( + number => 10, + string => 'foo', + float => 10.5, + array => [ 1 .. 10 ], + hash => { map { $_ => undef } ( 1 .. 10 ) }, + object => Foo->new( number => 2 ), + ); + isa_ok( $foo, 'Foo' ); + + my $yaml = $foo->freeze; + + my $bar = Foo->thaw( $yaml ); + isa_ok( $bar, 'Foo' ); + + is( $bar->number, 10, '... got the right number' ); + is( $bar->string, 'foo', '... got the right string' ); + is( $bar->float, 10.5, '... got the right float' ); + is_deeply( $bar->array, [ 1 .. 10 ], '... got the right array' ); + is_deeply( + $bar->hash, + { map { $_ => undef } ( 1 .. 10 ) }, + '... got the right hash' + ); + + isa_ok( $bar->object, 'Foo' ); + is( $bar->object->number, 2, + '... got the right number (in the embedded object)' ); +} + diff --git a/t/060_basic_deferred.t b/t/060_basic_deferred.t index 451bfd9..a93c890 100644 --- a/t/060_basic_deferred.t +++ b/t/060_basic_deferred.t @@ -8,11 +8,13 @@ use Test::More; use Storable; BEGIN { - eval "use Test::JSON; use Test::YAML::Valid;"; - plan skip_all => "Test::JSON and Test::YAML::Valid are required for this test" if $@; + eval "use Test::JSON"; + plan skip_all => "Test::JSON is required for this test" if $@; eval "use JSON::Any"; - plan skip_all => "JSON::Any is required for this test" if $@; - plan tests => 32; + plan skip_all => "JSON::Any is required for this test" if $@; + eval "use YAML::Any"; + plan skip_all => "YAML::Any is required for this test" if $@; + plan tests => 31; use_ok('MooseX::Storage'); } @@ -153,58 +155,21 @@ BEGIN { my $yaml = $foo->freeze({ 'format' => 'YAML' }); - yaml_string_ok( $yaml, '... we got valid YAML out of it' ); + my $bar = Foo->thaw( $yaml, { 'format' => 'YAML' } ); + isa_ok( $bar, 'Foo' ); -} - -{ - my $foo = Foo->thaw( - 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 -}, { 'format' => 'YAML' } - ); - isa_ok( $foo, 'Foo' ); - - is( $foo->number, 10, '... got the right number' ); - is( $foo->string, 'foo', '... got the right string' ); - is( $foo->float, 10.5, '... got the right float' ); - is_deeply( $foo->array, [ 1 .. 10 ], '... got the right array' ); + is( $bar->number, 10, '... got the right number' ); + is( $bar->string, 'foo', '... got the right string' ); + is( $bar->float, 10.5, '... got the right float' ); + is_deeply( $bar->array, [ 1 .. 10 ], '... got the right array' ); is_deeply( - $foo->hash, + $bar->hash, { map { $_ => undef } ( 1 .. 10 ) }, '... got the right hash' ); - isa_ok( $foo->object, 'Foo' ); - is( $foo->object->number, 2, + isa_ok( $bar->object, 'Foo' ); + is( $bar->object->number, 2, '... got the right number (in the embedded object)' ); }