[libcatmandu-perl] 40/101: line delimited JSON no longer the default
Jonas Smedegaard
dr at jones.dk
Tue Feb 23 13:43:52 UTC 2016
This is an automated email from the git hooks/post-receive script.
js pushed a commit to branch master
in repository libcatmandu-perl.
commit fa8cbfc67eda0bbc47d97b02ed57c0c9c5193028
Author: Nicolas Steenlant <nicolas.steenlant at ugent.be>
Date: Tue Jan 5 13:44:45 2016 +0100
line delimited JSON no longer the default
---
lib/Catmandu/Cmd/config.pm | 2 +-
lib/Catmandu/Exporter/JSON.pm | 44 ++++++++------
lib/Catmandu/Fix/Bind/hashmap.pm | 12 ++--
lib/Catmandu/Importer/JSON.pm | 39 +++++++------
t/Catmandu-Cmd-config.t | 4 +-
t/Catmandu-Cmd-convert.t | 8 +--
t/Catmandu-Cmd-data.t | 69 ++++++++++++----------
t/Catmandu-Cmd-export.t | 10 ++--
t/Catmandu-Exporter-JSON.t | 6 +-
t/Catmandu-Exporter-Multi.t | 4 +-
t/Catmandu-Fix-Bind-hashmap.t | 12 ++--
t/Catmandu-Fix-Bind-importer.t | 8 +--
t/Catmandu-Importer-JSON.t | 22 ++++++-
t/Catmandu-Interactive.t | 122 +++++++++++++++++++++++----------------
t/run.fix | 4 +-
15 files changed, 213 insertions(+), 153 deletions(-)
diff --git a/lib/Catmandu/Cmd/config.pm b/lib/Catmandu/Cmd/config.pm
index 7017aea..00cbc38 100644
--- a/lib/Catmandu/Cmd/config.pm
+++ b/lib/Catmandu/Cmd/config.pm
@@ -39,7 +39,7 @@ sub command {
if (@$into_args || %$into_opts) {
$into = Catmandu->exporter($into_args->[0], $into_opts);
} else {
- $into = Catmandu->exporter('JSON', pretty => 1);
+ $into = Catmandu->exporter('JSON', pretty => 1, array => 0);
}
$into->add(defined $path ?
diff --git a/lib/Catmandu/Exporter/JSON.pm b/lib/Catmandu/Exporter/JSON.pm
index 8abb5e1..5929fcc 100644
--- a/lib/Catmandu/Exporter/JSON.pm
+++ b/lib/Catmandu/Exporter/JSON.pm
@@ -11,23 +11,24 @@ use namespace::clean;
with 'Catmandu::Exporter';
-has pretty => (is => 'ro', alias => 'multiline', default => sub { 0 });
-has indent => (is => 'ro', default => sub { 0 });
-has space_before => (is => 'ro', default => sub { 0 });
-has space_after => (is => 'ro', default => sub { 0 });
-has canonical => (is => 'ro', default => sub { 0 });
-has array => (is => 'ro', default => sub { 0 });
-has json => (is => 'ro', lazy => 1, builder => '_build_json');
+has line_delimited => (is => 'ro', default => sub { 0 });
+has array => (is => 'ro', default => sub { 1 });
+has pretty => (is => 'ro', default => sub { 0 });
+has indent => (is => 'ro', default => sub { 0 });
+has space_before => (is => 'ro', default => sub { 0 });
+has space_after => (is => 'ro', default => sub { 0 });
+has canonical => (is => 'ro', default => sub { 0 });
+has json => (is => 'lazy');
sub _build_json {
my ($self) = @_;
JSON::XS->new
->utf8(0)
->allow_nonref
- ->pretty($self->pretty)
- ->indent($self->pretty || $self->indent)
- ->space_before($self->pretty || $self->space_before)
- ->space_after($self->pretty || $self->space_after)
+ ->pretty($self->line_delimited ? 0 : $self->pretty)
+ ->indent($self->line_delimited ? 0 : $self->pretty || $self->indent)
+ ->space_before($self->line_delimited ? 0 : $self->pretty || $self->space_before)
+ ->space_after($self->line_delimited ? 0 : $self->pretty || $self->space_after)
->canonical($self->canonical);
}
@@ -35,6 +36,12 @@ sub add {
my ($self, $data) = @_;
my $fh = $self->fh;
my $json = $self->json->encode($data);
+ if ($self->line_delimited) {
+ print $fh $json;
+ print $fh "\n";
+ return;
+ }
+
if ($self->pretty) {
chomp $json;
}
@@ -45,16 +52,13 @@ sub add {
} else {
print $fh "[";
}
- print $fh $json;
- } else {
- print $fh $json;
- print $fh "\n";
}
+ print $fh $json;
}
sub commit {
my ($self, $data) = @_;
- if ($self->array) {
+ if (!$self->line_delimited && $self->array) {
my $fh = $self->fh;
unless ($self->count) {
print $fh "[";
@@ -124,8 +128,6 @@ Binmode of the output stream C<fh>. Set to "C<:utf8>" by default.
=item pretty
-=item multiline
-
Pretty-print JSON
=item indent
@@ -140,7 +142,11 @@ L<JSON> serialization options
=item array
-Seralize items as one JSON array instead of concatenated JSON objects
+Structure the data as a JSON array. Default is C<1>.
+
+=item line_delimited
+
+Export objects as newline delimited JSON. Default is C<0>. The C<array>, C<pretty>, C<indent>, C<space_before> and C<space_after> options will be ignored if C<line_delimited> is C<1>.
=back
diff --git a/lib/Catmandu/Fix/Bind/hashmap.pm b/lib/Catmandu/Fix/Bind/hashmap.pm
index 9667da9..a15e841 100644
--- a/lib/Catmandu/Fix/Bind/hashmap.pm
+++ b/lib/Catmandu/Fix/Bind/hashmap.pm
@@ -11,13 +11,13 @@ use Catmandu::Fix::Has;
with 'Catmandu::Fix::Bind';
-has exporter => (fix_opt => 1 , default => sub { 'JSON' });
+has exporter => (fix_opt => 1);
has store => (fix_opt => 1);
has uniq => (fix_opt => 1 , default => sub { 0 });
has count => (fix_opt => 1);
has join => (fix_opt => 1);
has extra_args => (fix_opt => 'collect');
-has flag => (is => 'rw' , default => sub { 0 });
+has flag => (is => 'rw', default => sub { 0 });
has hash => (is => 'lazy');
sub _build_hash {
@@ -33,7 +33,7 @@ sub add_to_hash {
$self->hash->{$key}->{$val} = 1;
}
else {
- push @{$self->hash->{$key}} , $val;
+ push @{$self->hash->{$key}}, $val;
}
}
@@ -83,11 +83,13 @@ sub DESTROY {
if ($self->store) {
$e = Catmandu->store($self->store, %$args);
}
- else {
+ elsif ($self->exporter) {
$e = Catmandu->exporter($self->exporter, %$args);
+ } else {
+ $e = Catmandu->exporter('JSON', line_delimited => 1);
}
- my $sorter = $self->count ?
+ my $sorter = $self->count ?
sub { $h->{$b} <=> $h->{$a} } :
sub { $a cmp $b };
diff --git a/lib/Catmandu/Importer/JSON.pm b/lib/Catmandu/Importer/JSON.pm
index ceaa045..e8623c9 100644
--- a/lib/Catmandu/Importer/JSON.pm
+++ b/lib/Catmandu/Importer/JSON.pm
@@ -10,21 +10,32 @@ use namespace::clean;
with 'Catmandu::Importer';
-has json => (is => 'ro', lazy => 1, builder => '_build_json');
-has multiline => (is => 'ro', default => sub { 0 });
-has array => (is => 'ro', default => sub { 0 });
+has line_delimited => (is => 'ro', default => sub { 0 });
+has json => (is => 'lazy');
sub _build_json {
my ($self) = @_;
JSON::XS->new->utf8($self->encoding eq ':raw');
}
-sub default_encoding { ':raw' }
+sub _build_encoding { ':raw' }
sub generator {
my ($self) = @_;
- $self->multiline || $self->array ? sub {
+ if ($self->line_delimited) {
+ return sub {
+ state $json = $self->json;
+ state $fh = $self->fh;
+ if (defined(my $line = <$fh>)) {
+ return $json->decode($line);
+ }
+ return;
+ };
+ }
+
+ # switch to slower incremental parser
+ sub {
state $json = $self->json;
state $fh = $self->fh;
@@ -51,13 +62,6 @@ sub generator {
return;
- } : sub {
- state $json = $self->json;
- state $fh = $self->fh;
- if (defined(my $line = <$fh>)) {
- return $json->decode($line);
- }
- return;
};
}
@@ -82,15 +86,14 @@ Catmandu::Importer::JSON - Package that imports JSON data
# ...
});
-The defaults assume a newline delimited JSON file:
+
+The parser is quite liberal in the input is accepts. You can use the
+C<line_delimited> option to parse newline delimited JSON faster:
{ "recordno": 1, "name": "Alpha" }
{ "recordno": 2, "name": "Beta" }
{ "recordno": 3, "name": "Gamma" }
-Use the C<multiline> or C<array> options to parse pretty-printed JSON or JSON
-arrays.
-
=head1 CONFIGURATION
=over
@@ -115,9 +118,9 @@ An ARRAY of one or more fixes or file scripts to be applied to imported items.
=item multiline
-=item array
+=item line_delimited
-Read JSON with line-breaks or a JSON array instead of line-delimited JSON
+Read line-delimited JSON with a faster, non-incremental parser.
=back
diff --git a/t/Catmandu-Cmd-config.t b/t/Catmandu-Cmd-config.t
index 7d21816..64cd1a4 100644
--- a/t/Catmandu-Cmd-config.t
+++ b/t/Catmandu-Cmd-config.t
@@ -20,7 +20,7 @@ my $result = test_app(qq|Catmandu::CLI| => [ qw(config to JSON) ]);
my $perl = decode_json($result->stdout);
ok $perl, 'got JSON';
-is $perl->{importer}->{default}->{package} , 'YAML' , 'got data';
+is $perl->[0]->{importer}{default}{package} , 'YAML' , 'got data';
is $result->error, undef, 'threw no exceptions' ;
is $result->stderr, '', 'nothing sent to sderr' ;
@@ -30,4 +30,4 @@ like $result->stdout , qr/"YAML"/ , 'got data';
is $result->error, undef, 'threw no exceptions' ;
is $result->stderr, '', 'nothing sent to sderr' ;
-done_testing 9;
+done_testing;
diff --git a/t/Catmandu-Cmd-convert.t b/t/Catmandu-Cmd-convert.t
index 08b082d..fc6dc05 100644
--- a/t/Catmandu-Cmd-convert.t
+++ b/t/Catmandu-Cmd-convert.t
@@ -21,10 +21,10 @@ my $result = test_app(qq|Catmandu::CLI| => [ qw(convert -v YAML --file t/catmand
my $perl = decode_json($result->stdout);
ok $perl, 'got JSON';
-is $perl->{importer}->{default}->{package} , 'YAML' , 'got data';
-is $result->error, undef, 'threw no exceptions' ;
-# Next test can fail on buggy Perl installations
-##is $result->stderr, '', 'nothing sent to sderr' ;
+is $perl->[0]->{importer}{default}{package}, 'YAML', 'got data';
+is $result->error, undef, 'threw no exceptions';
+# next test can fail on buggy Perl installations
+#is $result->stderr, '', 'nothing sent to sderr';
$result = test_app(qq|Catmandu::CLI| => ['convert', '-v', '--start=2' ,'--total=1', 'CSV', '--file', 't/planets.csv', 'to', 'CSV', '--header', '0', '--fields', 'english,latin']);
is $result->stdout, "Moon,Luna\n", 'start and limit' ;
diff --git a/t/Catmandu-Cmd-data.t b/t/Catmandu-Cmd-data.t
index 2d076e7..739eb9b 100644
--- a/t/Catmandu-Cmd-data.t
+++ b/t/Catmandu-Cmd-data.t
@@ -18,50 +18,57 @@ require_ok $pkg;
use Catmandu::CLI;
{
- my $result = test_app(qq|Catmandu::CLI| => [
- qw(data --from-importer YAML --from-file t/catmandu.yml --into-exporter JSON)
- ]);
+ my $result = test_app(qq|Catmandu::CLI| => [
+ qw(data --from-importer YAML --from-file t/catmandu.yml --into-exporter JSON)
+ ]);
- my $perl = decode_json($result->stdout);
+ my $perl = decode_json($result->stdout);
- ok $perl, 'got JSON';
- is $perl->{importer}->{default}->{package} , 'YAML' , 'got data';
- is $result->error, undef, 'threw no exceptions' ;
+ ok $perl, 'got JSON';
+ is $perl->[0]->{importer}{default}{package}, 'YAML', 'got data';
+ is $result->error, undef, 'threw no exceptions' ;
}
{
- my $result = test_app(qq|Catmandu::CLI| => [
- qw(data --from-store test --from-bag data --into-exporter JSON --limit 1 --fix t/myfixes.fix)
- ]);
-
- my @lines = split(/\n/,$result->stdout);
-
- ok @lines == 1 , 'test limit';
-
- my $perl = decode_json($lines[0]);
-
- ok $perl, 'got JSON';
- is $perl->{value} , 'Sol' , 'got data';
- is $perl->{utf8_name} , 'ვეპხის ტყაოსანი შოთა რუსთაველი' , 'got utf8 data';
- is $result->error, undef, 'threw no exceptions' ;
-
+ my $result = test_app(qq|Catmandu::CLI| => [
+ qw(
+ data
+ --from-store test
+ --from-bag data
+ --into-exporter JSON
+ --into-line-delimited 1
+ --limit 1
+ --fix t/myfixes.fix
+ )
+ ]);
+
+ my @lines = split(/\n/, $result->stdout);
+
+ ok @lines == 1, 'test limit';
+
+ my $perl = decode_json($lines[0]);
+
+ ok $perl, 'got JSON';
+ is $perl->{value}, 'Sol', 'got data';
+ is $perl->{utf8_name}, 'ვეპხის ტყაოსანი შოთა რუსთაველი', 'got utf8 data';
+ is $result->error, undef, 'threw no exceptions';
}
{
- my $result = test_app(qq|Catmandu::CLI| => [ qw(delete test) ]);
+ my $result = test_app(qq|Catmandu::CLI| => [ qw(delete test) ]);
- is $result->stdout, "" , 'got data';
- is $result->error, undef, 'threw no exceptions' ;
+ is $result->stdout, "" , 'got data';
+ is $result->error, undef, 'threw no exceptions';
}
{
- my $result = test_app(qq|Catmandu::CLI| => [
- qw(data -v --from-importer CSV --from-file t/planets.csv --into-store Hash --into-bag data)
- ]);
+ my $result = test_app(qq|Catmandu::CLI| => [
+ qw(data -v --from-importer CSV --from-file t/planets.csv --into-store Hash --into-bag data)
+ ]);
- like $result->stderr, qr/added 4 objects/, 'imported 4 objects' ;
- is $result->error, undef, 'threw no exceptions' ;
+ like $result->stderr, qr/added 4 objects/, 'imported 4 objects';
+ is $result->error, undef, 'threw no exceptions';
}
-done_testing 14;
+done_testing;
diff --git a/t/Catmandu-Cmd-export.t b/t/Catmandu-Cmd-export.t
index add6780..633ff80 100644
--- a/t/Catmandu-Cmd-export.t
+++ b/t/Catmandu-Cmd-export.t
@@ -17,9 +17,9 @@ require_ok $pkg;
use Catmandu::CLI;
-my $result = test_app(qq|Catmandu::CLI| => [ qw(export -v test to JSON --fix t/myfixes.fix --total 1) ]);
+my $result = test_app(qq|Catmandu::CLI| => [ qw(export -v test to JSON --line-delimited 1 --fix t/myfixes.fix --total 1) ]);
-my @lines = split(/\n/,$result->stdout);
+my @lines = split(/\n/, $result->stdout);
ok @lines == 1 , 'test total';
@@ -28,9 +28,9 @@ my $perl = decode_json($lines[0]);
ok $perl, 'got JSON';
is $perl->{value} , 'Sol' , 'got data';
is $perl->{utf8_name} , 'ვეპხის ტყაოსანი შოთა რუსთაველი' , 'got utf8 data';
-is $result->error, undef, 'threw no exceptions' ;
+is $result->error, undef, 'threw no exceptions';
-## Next test can fail on buggy Perl installations
-#is $result->stderr, '', 'nothing sent to sderr' ;
+# next test can fail on buggy Perl installations
+#is $result->stderr, '', 'nothing sent to sderr';
done_testing;
diff --git a/t/Catmandu-Exporter-JSON.t b/t/Catmandu-Exporter-JSON.t
index cdc5c52..5f0082f 100644
--- a/t/Catmandu-Exporter-JSON.t
+++ b/t/Catmandu-Exporter-JSON.t
@@ -16,7 +16,7 @@ require_ok $pkg;
my $data = [{'a' => 'moose'}, {'a' => 'pony'}, {'a' => 'shrimp'}];
my $file = "";
-my $exporter = $pkg->new(file => \$file);
+my $exporter = $pkg->new(file => \$file, line_delimited => 1);
isa_ok $exporter, $pkg;
@@ -27,8 +27,8 @@ is_deeply $data, [ map { JSON::XS::decode_json($_) } split /[\r\n]+/, $file ];
is($exporter->count, 3, "Count ok");
$file = "";
-Catmandu::Exporter::JSON->new( file => \$file, canonical => 1 )
+Catmandu::Exporter::JSON->new( file => \$file, line_delimited => 1, canonical => 1 )
->add( { map { chr(ord('z')-$_) => $_ } (0..25) } );
is_deeply [ $file =~ /(\d+)/g ], [ map { "".(25-$_) } (0..25) ], 'canonical';
-done_testing 6;
+done_testing;
diff --git a/t/Catmandu-Exporter-Multi.t b/t/Catmandu-Exporter-Multi.t
index 13047ad..a2a5854 100644
--- a/t/Catmandu-Exporter-Multi.t
+++ b/t/Catmandu-Exporter-Multi.t
@@ -17,8 +17,8 @@ require_ok $pkg;
my $data = [{'a' => 'moose'}, {'a' => 'pony'}, {'a' => 'shrimp'}];
my $file1 = "";
my $file2 = "";
-my $exporter1 = Catmandu::Exporter::JSON->new(file => \$file1);
-my $exporter2 = Catmandu::Exporter::JSON->new(file => \$file2);
+my $exporter1 = Catmandu::Exporter::JSON->new(file => \$file1, line_delimited => 1);
+my $exporter2 = Catmandu::Exporter::JSON->new(file => \$file2, line_delimited => 1);
my $exporter = $pkg->new(exporters => [
$exporter1,
diff --git a/t/Catmandu-Fix-Bind-hashmap.t b/t/Catmandu-Fix-Bind-hashmap.t
index d58d621..4625aa1 100644
--- a/t/Catmandu-Fix-Bind-hashmap.t
+++ b/t/Catmandu-Fix-Bind-hashmap.t
@@ -40,7 +40,7 @@ is_deeply $fixer->fix({foo => 'bar'}), {foo => 'bar'} , 'testing zero fix functi
$fixes =<<EOF;
do hashmap()
unless exists(foo)
- add_field(foo,bar)
+ add_field(foo,bar)
end
end
EOF
@@ -52,7 +52,7 @@ is_deeply $fixer->fix({}), {foo => 'bar'} , 'testing unless';
$fixes =<<EOF;
do hashmap()
if exists(foo)
- add_field(foo2,bar)
+ add_field(foo2,bar)
end
end
EOF
@@ -101,7 +101,7 @@ is_deeply $fixer->fix({foo => 'bar'}), {foo => 'bar', before => 'ok', inside =>
{
my ($stdout, $stderr, $exit) = capture {
$fixes =<<EOF;
- do hashmap(exporter => CSV, join => ',')
+ do hashmap(exporter: CSV, join: ',')
do identity()
copy_field(isbn,key)
copy_field(_id,value)
@@ -129,7 +129,7 @@ EOF
{
my ($stdout, $stderr, $exit) = capture {
$fixes =<<EOF;
- do hashmap(exporter => YAML, uniq:1)
+ do hashmap(exporter: YAML, uniq: 1)
do identity()
copy_field(isbn,key)
copy_field(_id,value)
@@ -165,7 +165,7 @@ EOF
{
my ($stdout, $stderr, $exit) = capture {
$fixes =<<EOF;
- do hashmap(exporter => CSV, count: 1)
+ do hashmap(exporter: CSV, count: 1)
do identity()
copy_field(isbn,key)
copy_field(_id,value)
@@ -190,4 +190,4 @@ EOF
is $stdout , $exp , 'grouping isbn count';
}
-done_testing 13;
\ No newline at end of file
+done_testing 13;
diff --git a/t/Catmandu-Fix-Bind-importer.t b/t/Catmandu-Fix-Bind-importer.t
index a3f65a6..a46cc56 100644
--- a/t/Catmandu-Fix-Bind-importer.t
+++ b/t/Catmandu-Fix-Bind-importer.t
@@ -20,7 +20,7 @@ require_ok $pkg;
$fixer->fix({});
};
- is $stdout, qq|{"n":0}\n| , 'fixed ok';
+ is $stdout, qq|[{"n":0}]\n| , 'fixed ok';
}
{
@@ -29,7 +29,7 @@ require_ok $pkg;
$fixer->fix({});
};
- is $stdout, qq|| , 'fixed ok';
+ is $stdout, qq||, 'fixed ok';
}
{
@@ -38,7 +38,7 @@ require_ok $pkg;
$fixer->fix({});
};
- is $stdout, qq|| , 'fixed ok';
+ is $stdout, qq||, 'fixed ok';
}
-done_testing 5;
\ No newline at end of file
+done_testing;
diff --git a/t/Catmandu-Importer-JSON.t b/t/Catmandu-Importer-JSON.t
index 3fd0bae..9ef84bc 100644
--- a/t/Catmandu-Importer-JSON.t
+++ b/t/Catmandu-Importer-JSON.t
@@ -28,4 +28,24 @@ isa_ok $importer, $pkg;
is_deeply $importer->to_array, $data;
-done_testing 4;
+$json = <<EOF;
+[
+ {"name":"Patrick","age":"39"},
+ {"name":"Nicolas","age":"34"}
+]
+EOF
+
+$importer = $pkg->new(file => \$json);
+
+is_deeply $importer->to_array, $data;
+
+$json = <<EOF;
+ {"name":"Patrick","age":"39"},
+ {"name":"Nicolas","age":"34"}
+EOF
+
+$importer = $pkg->new(file => \$json);
+
+is_deeply $importer->to_array, $data;
+
+done_testing;
diff --git a/t/Catmandu-Interactive.t b/t/Catmandu-Interactive.t
index 9da2691..ff67e64 100644
--- a/t/Catmandu-Interactive.t
+++ b/t/Catmandu-Interactive.t
@@ -14,85 +14,107 @@ BEGIN {
require_ok $pkg;
{
- my $cmd = "\\q\n";
- my $res = "";
- my $in = Catmandu::Util::io \$cmd, mode => 'r';
- my $out = Catmandu::Util::io \$res, mode => 'w';
+ my $cmd = "\\q\n";
+ my $res = "";
+ my $in = Catmandu::Util::io \$cmd, mode => 'r';
+ my $out = Catmandu::Util::io \$res, mode => 'w';
- my $app = Catmandu::Interactive->new(in => $in, out => $out, silent => 1);
+ my $app = Catmandu::Interactive->new(in => $in, out => $out, silent => 1);
- $app->run();
+ $app->run();
- is $res , "", 'can execute \q';
+ is $res , "", 'can execute \q';
- $in->close();
- $out->close();
+ $in->close();
+ $out->close();
}
{
- my $cmd = "add_field(hello,world)\n";
- my $res = "";
- my $in = Catmandu::Util::io \$cmd, mode => 'r';
- my $out = Catmandu::Util::io \$res, mode => 'w';
+ my $cmd = "add_field(hello,world)\n";
+ my $res = "";
+ my $in = Catmandu::Util::io \$cmd, mode => 'r';
+ my $out = Catmandu::Util::io \$res, mode => 'w';
- my $app = Catmandu::Interactive->new(in => $in, out => $out, silent => 1, exporter => 'JSON');
+ my $app = Catmandu::Interactive->new(
+ in => $in,
+ out => $out,
+ silent => 1,
+ exporter => 'JSON',
+ exporter_args => {line_delimited => 1},
+ );
- $app->run();
+ $app->run();
- is $res , "{\"hello\":\"world\"}\n", 'can execute hello world';
+ is $res , "{\"hello\":\"world\"}\n", 'can execute hello world';
- $in->close();
- $out->close();
+ $in->close();
+ $out->close();
}
-
{
- my $cmd = "add_field(hello,world)\nif exists(hello)\nupcase(hello)\nend\n";
- my $res = "";
- my $in = Catmandu::Util::io \$cmd, mode => 'r';
- my $out = Catmandu::Util::io \$res, mode => 'w';
+ my $cmd = "add_field(hello,world)\nif exists(hello)\nupcase(hello)\nend\n";
+ my $res = "";
+ my $in = Catmandu::Util::io \$cmd, mode => 'r';
+ my $out = Catmandu::Util::io \$res, mode => 'w';
-
- my $app = Catmandu::Interactive->new(in => $in, out => $out, silent => 1, exporter => 'JSON');
+ my $app = Catmandu::Interactive->new(
+ in => $in,
+ out => $out,
+ silent => 1,
+ exporter => 'JSON',
+ exporter_args => {line_delimited => 1},
+ );
- $app->run();
+ $app->run();
- is $res , "{\"hello\":\"world\"}\n{\"hello\":\"WORLD\"}\n", 'can execute hello world with continuation';
+ is $res , "{\"hello\":\"world\"}\n{\"hello\":\"WORLD\"}\n", 'can execute hello world with continuation';
- $in->close();
- $out->close();
+ $in->close();
+ $out->close();
}
{
- my $cmd = "add_field(hello,world)\n\\h\n";
- my $res = "";
- my $in = Catmandu::Util::io \$cmd, mode => 'r';
- my $out = Catmandu::Util::io \$res, mode => 'w';
+ my $cmd = "add_field(hello,world)\n\\h\n";
+ my $res = "";
+ my $in = Catmandu::Util::io \$cmd, mode => 'r';
+ my $out = Catmandu::Util::io \$res, mode => 'w';
+
+ my $app = Catmandu::Interactive->new(
+ in => $in,
+ out => $out,
+ silent => 1,
+ exporter => 'JSON',
+ exporter_args => {line_delimited => 1},
+ );
- my $app = Catmandu::Interactive->new(in => $in, out => $out, silent => 1, exporter => 'JSON');
+ $app->run();
- $app->run();
+ is $res , "{\"hello\":\"world\"}\nadd_field(hello,world)\n", 'can execute \h';
- is $res , "{\"hello\":\"world\"}\nadd_field(hello,world)\n", 'can execute \h';
-
- $in->close();
- $out->close();
+ $in->close();
+ $out->close();
}
{
- my $cmd = "add_field(hello.\$append,world)\n\\r\n";
- my $res = "";
- my $in = Catmandu::Util::io \$cmd, mode => 'r';
- my $out = Catmandu::Util::io \$res, mode => 'w';
+ my $cmd = "add_field(hello.\$append,world)\n\\r\n";
+ my $res = "";
+ my $in = Catmandu::Util::io \$cmd, mode => 'r';
+ my $out = Catmandu::Util::io \$res, mode => 'w';
+
+ my $app = Catmandu::Interactive->new(
+ in => $in,
+ out => $out,
+ silent => 1,
+ exporter => 'JSON',
+ exporter_args => {line_delimited => 1},
+ );
- my $app = Catmandu::Interactive->new(in => $in, out => $out, silent => 1, exporter => 'JSON');
+ $app->run();
- $app->run();
+ is $res , "{\"hello\":[\"world\"]}\n{\"hello\":[\"world\",\"world\"]}\n", 'can execute \r';
- is $res , "{\"hello\":[\"world\"]}\n{\"hello\":[\"world\",\"world\"]}\n", 'can execute \r';
-
- $in->close();
- $out->close();
+ $in->close();
+ $out->close();
}
-done_testing 7;
+done_testing;
diff --git a/t/run.fix b/t/run.fix
index 6ad72a4..518a15d 100644
--- a/t/run.fix
+++ b/t/run.fix
@@ -1,2 +1,2 @@
-add_field(hello,world)
-add_to_exporter(.,JSON)
\ No newline at end of file
+add_field(hello, world)
+add_to_exporter(., JSON, line_delimited: 1)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libcatmandu-perl.git
More information about the Pkg-perl-cvs-commits
mailing list