summaryrefslogtreecommitdiff
path: root/t/load-tests.t
diff options
context:
space:
mode:
Diffstat (limited to 't/load-tests.t')
-rw-r--r--t/load-tests.t405
1 files changed, 405 insertions, 0 deletions
diff --git a/t/load-tests.t b/t/load-tests.t
new file mode 100644
index 0000000..74ca277
--- /dev/null
+++ b/t/load-tests.t
@@ -0,0 +1,405 @@
+use strict;
+use lib -e 't' ? 't' : 'test';
+use TestYAML tests => 29;
+
+run {
+ my $block = shift;
+ my @result = eval {
+ Load($block->yaml)
+ };
+ my $error1 = $@ || '';
+ if ( $error1 ) {
+ # $error1 =~ s{line: (\d+)}{"line: $1 ($0:".($1+$test->{lines}{yaml}-1).")"}e;
+ }
+ my @expect = eval $block->perl;
+ my $error2 = $@ || '';
+ if (my $errors = $error1 . $error2) {
+ fail($block->description
+ . $errors);
+ next;
+ }
+ is_deeply(
+ \@result,
+ \@expect,
+ $block->description,
+ ) or do {
+ require Data::Dumper;
+ diag("Wanted: ".Data::Dumper::Dumper(\@expect));
+ diag("Got: ".Data::Dumper::Dumper(\@result));
+ }
+};
+
+__DATA__
+=== a yaml error log
++++ yaml
+---
+date: Sun Oct 28 20:41:17 2001
+error msg: Premature end of script headers
+---
+date: Sun Oct 28 20:41:44 2001
+error msg: malformed header from script. Bad header=</UL>
+---
+date: Sun Oct 28 20:42:19 2001
+error msg: malformed header from script. Bad header=</UL>
++++ perl
+my $a = { map {split /:\s*/, $_, 2} split /\n/, <<END };
+date: Sun Oct 28 20:41:17 2001
+error msg: Premature end of script headers
+END
+my $b = { map {split /:\s*/, $_, 2} split /\n/, <<END };
+date: Sun Oct 28 20:41:44 2001
+error msg: malformed header from script. Bad header=</UL>
+END
+my $c = { map {split /:\s*/, $_, 2} split /\n/, <<END };
+date: Sun Oct 28 20:42:19 2001
+error msg: malformed header from script. Bad header=</UL>
+END
+($a, $b, $c)
+=== comments and some top level documents
++++ yaml
+# Top level documents
+#
+# Note that inline (single line) values
+# are not allowed at the top level. This
+# includes implicit values, quoted values
+# and inline collections.
+---
+a: map
+---
+- a
+- sequence
+--- >
+plain scalar
+--- |
+This
+ is
+ a
+ block.
+ It's
+ kinda
+ like
+ a
+ here
+document.
+--- |-
+A
+ chomped
+ block.
++++ perl
+my $a = {a => 'map'};
+my $b = ['a', 'sequence'];
+my $c = "plain scalar\n";
+my $d = <<END;
+This
+ is
+ a
+ block.
+ It's
+ kinda
+ like
+ a
+ here
+document.
+END
+my $e = <<END;
+A
+ chomped
+ block.
+END
+chomp($e);
+($a, $b, $c, $d, $e)
+=== an array of assorted junk
++++ yaml
+# Inline collections
+#
+# sequence
+---
+- [1,2,3]
+# trailing comma is ignored
+# still 3 elements
+- [1,2,3,]
+# four empty strings
+- [,,,,]
+# a pair of commas
+- [",",","]
+# a map
+- {foo: bar,baz: too}
+# empty sequence
+- []
+# empty map
+- {}
+# times for keys (key/value separator is ': ')
+- {09:00:00: Breakfast, 12:00:00: lunch time,}
+# a private Perl XYZ object
+- !perl/XYZ {small: object}
+# an object containing objects
+- !perl/ABC [!perl/@DEF [a,b,c],!perl/GHI {do: re, mi: fa, so: la,ti: do}]
+# sequences of self referential elements
+# (inline form not working yet) :(
+# - &FOO [*FOO,*FOO,*FOO]
+- &FOO
+ - *FOO
+ - *FOO
+ - *FOO
+#
+# sequence of maps
+- [{name: Ingy},{name: Clark},{name: Oren},]
++++ perl
+my $a = [1,2,3];
+my $b = [1,2,3,];
+my $c = ["","","","",];
+my $d = [",",","];
+my $e = {foo => 'bar', baz => 'too'};
+my $f = [];
+my $g = {};
+my $h = {'09:00:00' => 'Breakfast', '12:00:00' => 'lunch time'};
+my $i = bless {small => 'object'}, 'XYZ';
+my $j = bless [bless([qw(a b c)], 'DEF'),
+ bless({do => 're', mi => 'fa', so => 'la', ti => 'do'}, 'GHI'),
+ ], 'ABC';
+my $k = [];
+push @$k, $k, $k, $k;
+my $l = [{name => 'Ingy'}, {name => 'Clark'}, {name => 'Oren'}, ];
+[$a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l]
+=== a bunch of small top level thingies
++++ yaml
+--- 42
+--- foo
+--- " bar "
+--- []
+--- #YAML:1.0 {}
+--- '#YAML:9.9'
+--- {foo: [1, 2, 3], 12:34:56: bar}
++++ perl
+my $a = 42;
+my $b = "foo";
+my $c = " bar ";
+my $d = [];
+my $e = {};
+my $f = "#YAML:9.9";
+my $g = {foo => [1, 2, 3], '12:34:56' => 'bar'};
+($a, $b, $c, $d, $e, $f, $g)
+=== a headerless sequence and a map
++++ yaml
+- 2
+- 3
+- 4
+--- #YAML:1.0
+foo: bar
++++ perl
+([2,3,4], {foo => 'bar'})
+=== comments in various places
++++ yaml
+ # A pre header comment
+---
+# comment
+ # comment
+ #comment
+- 2
+# comment
+# comment
+- 3
+- 4
+ # comment
+- 5
+# last comment
+--- #YAML:1.0
+boo: far
+ # a comment
+foo : bar
+---
+- >
+ # Not a comment;
+# Is a comment
+ #Not a comment
+--- 42
+ #Final
+ #Comment
++++ perl
+([2,3,4,5],
+ {foo => 'bar', boo => 'far'},
+ ["# Not a comment; #Not a comment\n"],
+ 42)
+=== several docs, some empty
++++ yaml
+---
+- foo
+- bar
+---
+---
+- foo
+- foo
+---
+# comment
+
+---
+- bar
+- bar
++++ perl
+(['foo', 'bar'],undef,['foo', 'foo'],undef,['bar', 'bar'])
+=== a perl reference to a scalar
++++ yaml
+--- !perl/ref:
+ =: 42
++++ perl
+(\42);
+=== date loading
++++ yaml
+---
+- 1964-03-25
+- ! "1975-04-17"
+- !date '2001-09-11'
+- 12:34:00
+- ! "12:00:00"
+- !time '01:23:45'
++++ perl
+['1964-03-25',
+ '1975-04-17',
+ '2001-09-11',
+ '12:34:00',
+ '12:00:00',
+ '01:23:45',
+];
+=== sequence with trailing comment
++++ yaml
+---
+- fee
+- fie
+- foe
+# no num defined
++++ perl
+[qw(fee fie foe)]
+=== a simple literal block
++++ yaml
+---
+- |
+ foo
+ bar
+
++++ perl
+["foo\nbar\n"]
+=== an unchomped literal
++++ yaml -trim
+---
+- |+
+ foo
+ bar
+
++++ perl
+["foo\nbar\n\n"]
+=== a chomped literal
++++ yaml -trim
+---
+- |-
+ foo
+ bar
+
++++ perl
+["foo\nbar"]
+=== assorted numerics
++++ yaml
+---
+#- -
+#- +
+- 44
+- -45
+- 4.6
+- -4.7
+- 3e+2
+- [-4e+3, 5e-4]
+- -6e-10
+- 2001-12-15
+- 2001-12-15T02:59:43.1Z
+- 2001-12-14T21:59:43.25-05:00
++++ perl
+[44, -45, 4.6, -4.7, '3e+2', ['-4e+3', '5e-4'], '-6e-10',
+ '2001-12-15', '2001-12-15T02:59:43.1Z', '2001-12-14T21:59:43.25-05:00',
+]
+=== an empty string top level doc
++++ yaml
+---
++++ perl
+undef
+
+=== an array of various undef
++++ yaml
+---
+-
+-
+- ''
++++ perl
+[undef,undef,'']
+=== !!perl/array
++++ yaml
+--- !!perl/array
+- 1
++++ perl
+[ 1 ]
+=== !!perl/array:
++++ yaml
+--- !!perl/array:
+- 1
++++ perl
+[ 1 ]
+=== !!perl/array:moose
++++ yaml
+--- !!perl/array:moose
+- 1
++++ perl
+bless([ 1 ], "moose")
+=== foo
++++ yaml
+--- !!perl/hash
+foo: bar
++++ perl
+{ foo => "bar" }
+=== foo
++++ yaml
+--- !!perl/hash:
+foo: bar
++++ perl
+{ foo => "bar" }
+=== foo
++++ yaml
+--- !!perl/array:moose
+foo: bar
++++ perl
+bless({ foo => "bar" }, "moose")
+=== foo
++++ yaml
+--- !!perl/ref
+=: 1
++++ perl
+\1
+=== foo
++++ yaml
+--- !!perl/ref:
+=: 1
++++ perl
+\1
+=== foo
++++ yaml
+--- !!perl/ref:moose
+=: 1
++++ perl
+bless(do { my $x = 1; \$x}, "moose")
+=== foo
++++ yaml
+--- !!perl/scalar 1
++++ perl
+1
+=== foo
++++ yaml
+--- !!perl/scalar: 1
++++ perl
+1
+=== foo
++++ yaml
+--- !!perl/scalar:moose 1
++++ perl
+bless(do { my $x = 1; \$x}, "moose")
+=== ^ can start implicit
++++ yaml
+- ^foo
++++ perl
+['^foo']