use strict;
use warnings;
package Test::Deep::YAML; # git description: v0.003-2-g42e13ef
# ABSTRACT: A Test::Deep plugin for comparing YAML-encoded data
# KEYWORDS: testing tests plugin YAML data
# vim: set ts=8 sts=4 sw=4 tw=78 et :
our $VERSION = '0.004';
use Exporter 'import';
our @EXPORT = qw(yaml);
sub yaml
{
my ($expected) = @_;
return Test::Deep::YAML::Object->new($expected);
}
package # hide from PAUSE
Test::Deep::YAML::Object;
our $VERSION = '0.004';
use parent 'Test::Deep::Cmp';
use Try::Tiny ();
use YAML ();
sub init
{
my ($self, $expected) = @_;
$self->{val} = $expected;
}
sub descend
{
my ($self, $got) = @_;
my $data = Try::Tiny::try
{
YAML::Load($got);
}
Try::Tiny::catch
{
chomp($self->{error_message} = $_);
undef;
};
return 0 if not $data or $self->{error_message};
return Test::Deep::wrap($self->{val})->descend($data);
}
sub diagnostics
{
my ($self, $where, $last) = @_;
return $self->{error_message}
|| $self->{val}->diagnostics($where, $last);
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Test::Deep::YAML - A Test::Deep plugin for comparing YAML-encoded data
=head1 VERSION
version 0.004
=head1 SYNOPSIS
use Test::More;
use Test::Deep;
use Test::Deep::YAML;
cmp_deeply(
"---\nfoo: bar\n",
yaml({ foo => 'bar' }),
'YAML-encoded data is correct',
);
=head1 DESCRIPTION
=for stopwords yaml
This module provides the C<yaml> function to indicate that the target can be
parsed as a YAML string, and should be decoded before being compared to the
indicated expected data.
=head1 FUNCTIONS
=for Pod::Coverage descend diagnostics init
=head2 yaml
Contains the data which should match corresponding data in the "got" structure
after it has been YAML-decoded.
=head1 SUPPORT
=for stopwords irc
Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=Test-Deep-YAML>
(or L<bug-Test-Deep-YAML@rt.cpan.org|mailto:bug-Test-Deep-YAML@rt.cpan.org>).
I am also usually active on irc, as 'ether' at C<irc.perl.org>.
=head1 SEE ALSO
=over 4
=item *
L<Test::Deep>
=item *
L<Test::Deep::JSON>
=back
=head1 AUTHOR
Karen Etheridge <ether@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Karen Etheridge.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut