blob: 14d1132d2884b4a1143052d18651f4ba49c1a446 [file] [log] [blame]
#!/usr/bin/perl
# Testing of basic document structures
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use File::Spec::Functions ':ALL';
use t::lib::Test;
use Test::More tests(30);
use CPAN::Meta::YAML;
#####################################################################
# Sample Testing
# Test a completely empty document
yaml_ok(
'',
[ ],
'empty',
);
# Just a newline
### YAML.pm has a bug where it dies on a single newline
yaml_ok(
"\n\n",
[ ],
'only_newlines',
);
# Just a comment
yaml_ok(
"# comment\n",
[ ],
'only_comment',
);
# Empty documents
yaml_ok(
"---\n",
[ undef ],
'only_header',
noyamlperl => 1,
);
yaml_ok(
"---\n---\n",
[ undef, undef ],
'two_header',
noyamlperl => 1,
);
yaml_ok(
"--- ~\n",
[ undef ],
'one_undef',
noyamlperl => 1,
);
yaml_ok(
"--- ~\n",
[ undef ],
'one_undef2',
noyamlperl => 1,
);
yaml_ok(
"--- ~\n---\n",
[ undef, undef ],
'two_undef',
noyamlperl => 1,
);
# Just a scalar
yaml_ok(
"--- foo\n",
[ 'foo' ],
'one_scalar',
);
yaml_ok(
"--- foo\n",
[ 'foo' ],
'one_scalar2',
);
yaml_ok(
"--- foo\n--- bar\n",
[ 'foo', 'bar' ],
'two_scalar',
noyamlperl => 1,
);
# Simple lists
yaml_ok(
"---\n- foo\n",
[ [ 'foo' ] ],
'one_list1',
);
yaml_ok(
"---\n- foo\n- bar\n",
[ [ 'foo', 'bar' ] ],
'one_list2',
);
yaml_ok(
"---\n- ~\n- bar\n",
[ [ undef, 'bar' ] ],
'one_listundef',
noyamlperl => 1,
);
# Simple hashs
yaml_ok(
"---\nfoo: bar\n",
[ { foo => 'bar' } ],
'one_hash1',
);
yaml_ok(
"---\nfoo: bar\nthis: ~\n",
[ { this => undef, foo => 'bar' } ],
'one_hash2',
noyamlperl => 1,
);
# Simple array inside a hash with an undef
yaml_ok(
<<'END_YAML',
---
foo:
- bar
- ~
- baz
END_YAML
[ { foo => [ 'bar', undef, 'baz' ] } ],
'array_in_hash',
noyamlperl => 1,
);
# Simple hash inside a hash with an undef
yaml_ok(
<<'END_YAML',
---
foo: ~
bar:
foo: bar
END_YAML
[ { foo => undef, bar => { foo => 'bar' } } ],
'hash_in_hash',
noyamlperl => 1,
);
# Mixed hash and scalars inside an array
yaml_ok(
<<'END_YAML',
---
-
foo: ~
this: that
- foo
- ~
-
foo: bar
this: that
END_YAML
[ [
{ foo => undef, this => 'that' },
'foo',
undef,
{ foo => 'bar', this => 'that' },
] ],
'hash_in_array',
noyamlperl => 1,
);
# Simple single quote
yaml_ok(
"---\n- 'foo'\n",
[ [ 'foo' ] ],
'single_quote1',
);
yaml_ok(
"---\n- ' '\n",
[ [ ' ' ] ],
'single_spaces',
);
yaml_ok(
"---\n- ''\n",
[ [ '' ] ],
'single_null',
);
# Double quotes
yaml_ok(
"--- \" \"\n",
[ ' ' ],
"only_spaces",
noyamlpm => 1,
noyamlperl => 1,
);
yaml_ok(
"--- \" foo\"\n--- \"bar \"\n",
[ " foo", "bar " ],
"leading_trailing_spaces",
noyamlpm => 1,
noyamlperl => 1,
);
# Implicit document start
yaml_ok(
"foo: bar\n",
[ { foo => 'bar' } ],
'implicit_hash',
);
yaml_ok(
"- foo\n",
[ [ 'foo' ] ],
'implicit_array',
);
# Inline nested hash
yaml_ok(
<<'END_YAML',
---
- ~
- foo: bar
this: that
- baz
END_YAML
[ [ undef, { foo => 'bar', this => 'that' }, 'baz' ] ],
'inline_nested_hash',
noyamlperl => 1,
);
# Empty comments
yaml_ok(
"---\n- foo\n#\n- bar\n",
[ [ 'foo', 'bar' ] ],
'empty_comment_in_list',
);
yaml_ok(
"---\nfoo: bar\n# foo\none: two\n",
[ { foo => 'bar', one => 'two' } ],
'empty_comment_in_hash',
);
# Complex keys
yaml_ok(
"---\na b: c d\n",
[ { 'a b' => 'c d' } ],
'key_with_whitespace',
);