#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 12;
use IO::String;
use File::Dir::Dumper::Stream::JSON::Writer;
use File::Dir::Dumper::Stream::JSON::Reader;
{
my $buffer = <<"EOF";
# JSON Stream by Shlomif - Version 0.2.0
{"want":"me"}
--/f
{"want":"you"}
--/f
EOF
my $in = IO::String->new($buffer);
my $reader = File::Dir::Dumper::Stream::JSON::Reader->new(
{
input => $in,
}
);
# TEST
ok ($reader, "Reader was initialised");
# TEST
is_deeply($reader->fetch(),
{want => "me",},
"->fetch() works for first token",
);
# TEST
is_deeply($reader->fetch(),
{want => "you",},
"->fetch works for second token",
);
# TEST
ok(!defined($reader->fetch), "No more tokens");
}
{
my $buffer = <<"EOF";
# JSON Stream by Shlomif - Version 0.2.0
{"type":"wonder","param1":["one","two","three"],"param2":"Lo and behold"}
--/f
{"type":"global","byte":{"zero":"conf"}}
--/f
EOF
my $in = IO::String->new($buffer);
my $reader = File::Dir::Dumper::Stream::JSON::Reader->new(
{
input => $in,
}
);
# TEST
ok ($reader, "Reader was initialised");
# TEST
is_deeply($reader->fetch(),
{
type => "wonder",
"param1" => [qw(one two three)],
"param2" => "Lo and behold",
},
"->fetch() works for first token - containing an arrayref",
);
# TEST
is_deeply($reader->fetch(),
{
type => "global",
byte => { zero => "conf", },
},
"->fetch works for second token (containing a hashref)",
);
# TEST
ok(!defined($reader->fetch), "No more tokens");
}
{
my $buffer = "";
my $buf_out = IO::String->new($buffer);
my $writer = File::Dir::Dumper::Stream::JSON::Writer->new(
{
output => $buf_out,
}
);
$writer->put({type => "FooType", place => "home"});
$writer->put({type => "BarType", array => [qw(the perl gods help them that help themselves)],});
$writer->close();
my $in = IO::String->new($buffer);
my $reader = File::Dir::Dumper::Stream::JSON::Reader->new(
{
input => $in,
}
);
# TEST
ok ($reader, "Reader was initialised");
# TEST
is_deeply(scalar($reader->fetch()),
{type => "FooType", place => "home"},
"->fetch() reads what writer wrote",
);
# TEST
is_deeply(scalar($reader->fetch()),
{
type => "BarType",
array => [qw(the perl gods help them that help themselves)],
},
"->fetch works for second token (containing a hashref)",
);
# TEST
ok(!defined($reader->fetch), "No more tokens");
}