use t::TestYAML tests => 16;

filters { perl => ['eval', 'yaml_dump'] };

no_diff;
run_is perl => 'yaml';

__DATA__

=== Scalar
+++ perl: 'Hello'
+++ yaml
--- Hello

=== Hash
+++ perl: +{bar => 'foo', foo => 'bar'}
+++ yaml
---
bar: foo
foo: bar

=== Array
+++ perl: [qw(W O W)]
+++ yaml
---
- W
- O
- W

=== Code
+++ perl
$YAML::DumpCode = 1;
package main;
sub { print "Hello, world\n"; }
+++ yaml
--- !!perl/code |
{
    use warnings;
    use strict 'refs';
    print "Hello, world\n";
}

=== Scalar Reference
+++ perl: \ 'Goodbye'
+++ yaml
--- !!perl/ref
=: Goodbye

=== Regular Expression
+++ perl: qr{perfect match};
+++ yaml
--- !!perl/regexp (?-xism:perfect match)

=== Regular Expression with newline
+++ perl
qr{perfect
match}x;
+++ yaml
--- !!perl/regexp "(?x-ism:perfect\nmatch)"

=== Scalar Glob
+++ perl
$::var = 'Hola';
*::var;
+++ yaml
--- !!perl/glob:
PACKAGE: main
NAME: var
SCALAR: Hola

=== Array Glob
+++ perl
@::var2 = (qw(xxx yyy zzz));
*::var2;
+++ yaml
--- !!perl/glob:
PACKAGE: main
NAME: var2
ARRAY:
  - xxx
  - yyy
  - zzz

=== Code Glob
+++ perl
$YAML::DumpCode = 1;
package main;
sub main::var3 { print "Hello, world\n"; }
*var3;
+++ yaml
--- !!perl/glob:
PACKAGE: main
NAME: var3
CODE: !!perl/code |
  {
      use warnings;
      use strict 'refs';
      print "Hello, world\n";
  }

=== Blessed Empty Hash
+++ perl: bless {}, 'A::B::C';
+++ yaml
--- !!perl/hash:A::B::C {}

=== Blessed Populated Hash
+++ perl: bless {qw(foo bar bar foo)}, 'A::B::C';
+++ yaml
--- !!perl/hash:A::B::C
bar: foo
foo: bar

=== Blessed Empty Array
+++ perl: bless [], 'A::B::C';
+++ yaml
--- !!perl/array:A::B::C []

=== Blessed Populated Array
+++ perl: bless [qw(foo bar bar foo)], 'A::B::C';
+++ yaml
--- !!perl/array:A::B::C
- foo
- bar
- bar
- foo

=== Blessed Empty String
+++ perl: my $e = ''; bless \ $e, 'A::B::C';
+++ yaml
--- !!perl/scalar:A::B::C ''

=== Blessed Populated String
+++ perl: my $fbbf = 'foo bar bar foo'; bless \ $fbbf, 'A::B::C';
+++ yaml
--- !!perl/scalar:A::B::C foo bar bar foo

=== Blessed Regular Expression
+++ SKIP
+++ perl: bless qr{perfect match}, 'A::B::C';
+++ yaml
--- !!perl/regexp:A::B::C perfect match

=== Blessed Glob
+++ SKIP
+++ perl: $::x = 42; bless \ *::x, 'A::B::C';
+++ yaml
--- !!perl/glob:A::B::C
PACKAGE: main
NAME: x
SCALAR: 42

