#!/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', );