diff --git a/perl/.gitignore b/perl/.gitignore index b64dcdfe..3e0e73e5 100644 --- a/perl/.gitignore +++ b/perl/.gitignore @@ -6,6 +6,7 @@ MessagePack.o blib/ inc/ msgpack/ +t/std/ pack.o pm_to_blib unpack.o diff --git a/perl/Makefile.PL b/perl/Makefile.PL index e7b8c474..fafc3876 100644 --- a/perl/Makefile.PL +++ b/perl/Makefile.PL @@ -54,6 +54,11 @@ if ($Module::Install::AUTHOR && -d File::Spec->catfile('..', 'msgpack')) { for my $src (<../msgpack/*.h>) { File::Copy::copy($src, 'msgpack/') or die "copy failed: $!"; } + + mkdir 't/std'; + for my $data(<../test/*.{json,mpac}>) { + File::Copy::copy($data, 't/std') or die "copy failed: $!"; + } } requires 'Test::More' => 0.94; # done_testing diff --git a/perl/lib/Data/MessagePack.pm b/perl/lib/Data/MessagePack.pm index 3511628c..ece00505 100644 --- a/perl/lib/Data/MessagePack.pm +++ b/perl/lib/Data/MessagePack.pm @@ -6,6 +6,18 @@ use 5.008001; our $VERSION = '0.23'; our $PreferInteger = 0; +{ + package + Data::MessagePack::Boolean; + use overload + 'bool' => sub { ${ $_[0] } }, + '0+' => sub { ${ $_[0] } }, + '""' => sub { ${ $_[0] } ? 'true' : 'false' }, + + fallback => 1, + ; +} + our $true = do { bless \(my $dummy = 1), "Data::MessagePack::Boolean" }; our $false = do { bless \(my $dummy = 0), "Data::MessagePack::Boolean" }; sub true () { $true } diff --git a/perl/t/06_stream_unpack2.t b/perl/t/06_stream_unpack2.t index 25af21d4..78ca8f7c 100644 --- a/perl/t/06_stream_unpack2.t +++ b/perl/t/06_stream_unpack2.t @@ -35,7 +35,7 @@ is_deeply(Data::MessagePack->unpack($packed), $input); while( read($stream, $buff, $size) ) { note "buff: ", join " ", map { unpack 'H2', $_ } split //, $buff; - $up->execute($buff, 0); + $up->execute($buff); } ok $up->is_finished, 'is_finished'; my $data = $up->data; diff --git a/perl/t/09_stddata.t b/perl/t/09_stddata.t new file mode 100644 index 00000000..d035b4be --- /dev/null +++ b/perl/t/09_stddata.t @@ -0,0 +1,35 @@ +use strict; +use Test::More; +use Test::Requires qw(JSON); +use t::Util; + +use Data::MessagePack; + +sub slurp { + open my $fh, '<:raw', $_[0] or die "failed to open '$_[0]': $!"; + local $/; + return scalar <$fh>; +} + +my @data = @{ JSON::decode_json(slurp("t/std/cases.json")) }; + +my $mpac1 = slurp("t/std/cases.mpac"); +my $mpac2 = slurp("t/std/cases_compact.mpac"); + +my $mps = Data::MessagePack::Unpacker->new(); + +my $t = 1; +for my $mpac($mpac1, $mpac2) { + note "mpac", $t++; + + my $offset = 0; + my $i = 0; + while($offset < length($mpac)) { + $offset += $mps->execute($mpac, $offset); + is_deeply $mps->data, $data[$i], "data[$i]"; + $mps->reset; + $i++; + } +} + +done_testing; diff --git a/ruby/test/test_pack_unpack.rb b/ruby/test/test_pack_unpack.rb index 545e5939..f378c3c7 100644 --- a/ruby/test/test_pack_unpack.rb +++ b/ruby/test/test_pack_unpack.rb @@ -239,7 +239,7 @@ class MessagePackTestPackUnpack < Test::Unit::TestCase end it "gc mark" do - obj = [{["a","b"]=>["c","d"]}, ["e","f"], "d"] + obj = [1024, {["a","b"]=>["c","d"]}, ["e","f"], "d", 70000, 4.12, 1.5, 1.5, 1.5] num = 4 raw = obj.to_msgpack * num pac = MessagePack::Unpacker.new @@ -257,7 +257,7 @@ class MessagePackTestPackUnpack < Test::Unit::TestCase end it "streaming backward compatibility" do - obj = [{["a","b"]=>["c","d"]}, ["e","f"], "d"] + obj = [1024, {["a","b"]=>["c","d"]}, ["e","f"], "d", 70000, 4.12, 1.5, 1.5, 1.5] num = 4 raw = obj.to_msgpack * num pac = MessagePack::Unpacker.new