From 9c5cc6d5f2f3230ec5491e7c32b781210129c3cd Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Tue, 1 Oct 2013 13:08:33 +0100 Subject: [PATCH] Update CPAN-Meta-YAML to CPAN version 0.010 [DELTA] 0.010 2013-09-23 13:11:20 America/New_York - Generated from ETHER/YAML-Tiny-1.55.tar.gz - Fix broken test when copying from YAML-Tiny - updated Makefile.PL logic to support PERL_NO_HIGHLANDER 0.009 2013-09-23 10:16:19 America/New_York - Generated from ETHER/YAML-Tiny-1.55.tar.gz - Makefile.PL will use UNINST=1 on old perls that might have an old version incorrectly installed into the core library path --- Porting/Maintainers.pl | 2 +- cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm | 1056 +++++++++++++++-------------- cpan/CPAN-Meta-YAML/t/01_compile.t | 8 +- cpan/CPAN-Meta-YAML/t/02_basic.t | 230 +++---- cpan/CPAN-Meta-YAML/t/03_regression.t | 426 ++++++------ cpan/CPAN-Meta-YAML/t/05_export.t | 8 +- cpan/CPAN-Meta-YAML/t/11_meta_yml.t | 498 +++++++------- cpan/CPAN-Meta-YAML/t/12_plagger.t | 114 ++-- cpan/CPAN-Meta-YAML/t/13_perl_smith.t | 252 +++---- cpan/CPAN-Meta-YAML/t/14_yaml_org.t | 76 +-- cpan/CPAN-Meta-YAML/t/15_multibyte.t | 40 +- cpan/CPAN-Meta-YAML/t/16_nullrefs.t | 14 +- cpan/CPAN-Meta-YAML/t/17_toolbar.t | 52 +- cpan/CPAN-Meta-YAML/t/18_tap.t | 86 +-- cpan/CPAN-Meta-YAML/t/19_errors.t | 12 +- cpan/CPAN-Meta-YAML/t/20_subclass.t | 52 +- cpan/CPAN-Meta-YAML/t/21_bom.t | 14 +- cpan/CPAN-Meta-YAML/t/22_comments.t | 100 +-- cpan/CPAN-Meta-YAML/t/lib/Test.pm | 490 ++++++------- 19 files changed, 1770 insertions(+), 1760 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index f9c5d81..d9e4294 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -481,7 +481,7 @@ use File::Glob qw(:case); 'CPAN::Meta::YAML' => { 'MAINTAINER' => 'dagolden', - 'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.008.tar.gz', + 'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.010.tar.gz', 'FILES' => q[cpan/CPAN-Meta-YAML], 'EXCLUDED' => [ 't/00-compile.t', diff --git a/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm b/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm index a9f4d6d..260f806 100644 --- a/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm +++ b/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm @@ -1,29 +1,38 @@ package CPAN::Meta::YAML; { - $CPAN::Meta::YAML::VERSION = '0.008'; + $CPAN::Meta::YAML::VERSION = '0.010'; } +BEGIN { + $CPAN::Meta::YAML::AUTHORITY = 'cpan:ADAMK'; +} +{ +; # original $VERSION removed by Doppelgaenger +} +# git description: v1.54-8-g4c3002d + use strict; +use warnings; # UTF Support? sub HAVE_UTF8 () { $] >= 5.007003 } BEGIN { - if ( HAVE_UTF8 ) { - # The string eval helps hide this from Test::MinimumVersion - eval "require utf8;"; - die "Failed to load UTF-8 support" if $@; - } - - # Class structure - require 5.004; - require Exporter; - require Carp; - @CPAN::Meta::YAML::ISA = qw{ Exporter }; - @CPAN::Meta::YAML::EXPORT = qw{ Load Dump }; - @CPAN::Meta::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw }; - - # Error storage - $CPAN::Meta::YAML::errstr = ''; + if ( HAVE_UTF8 ) { + # The string eval helps hide this from Test::MinimumVersion + eval "require utf8;"; + die "Failed to load UTF-8 support" if $@; + } + + # Class structure + require 5.004; + require Exporter; + require Carp; + @CPAN::Meta::YAML::ISA = qw{ Exporter }; + @CPAN::Meta::YAML::EXPORT = qw{ Load Dump }; + @CPAN::Meta::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw }; + + # Error storage + $CPAN::Meta::YAML::errstr = ''; } # The character class of all characters we need to escape @@ -33,25 +42,25 @@ BEGIN { # Printed form of the unprintable characters in the lowest range # of ASCII characters, listed by ASCII ordinal position. my @UNPRINTABLE = qw( - z x01 x02 x03 x04 x05 x06 a - x08 t n v f r x0e x0f - x10 x11 x12 x13 x14 x15 x16 x17 - x18 x19 x1a e x1c x1d x1e x1f + z x01 x02 x03 x04 x05 x06 a + x08 t n v f r x0e x0f + x10 x11 x12 x13 x14 x15 x16 x17 + x18 x19 x1a e x1c x1d x1e x1f ); # Printable characters for escapes my %UNESCAPES = ( - z => "\x00", a => "\x07", t => "\x09", - n => "\x0a", v => "\x0b", f => "\x0c", - r => "\x0d", e => "\x1b", '\\' => '\\', + z => "\x00", a => "\x07", t => "\x09", + n => "\x0a", v => "\x0b", f => "\x0c", + r => "\x0d", e => "\x1b", '\\' => '\\', ); # Special magic boolean words my %QUOTE = map { $_ => 1 } qw{ - null Null NULL - y Y yes Yes YES n N no No NO - true True TRUE false False FALSE - on On ON off Off OFF + null Null NULL + y Y yes Yes YES n N no No NO + true True TRUE false False FALSE + on On ON off Off OFF }; @@ -63,496 +72,496 @@ my %QUOTE = map { $_ => 1 } qw{ # Create an empty CPAN::Meta::YAML object sub new { - my $class = shift; - bless [ @_ ], $class; + my $class = shift; + bless [ @_ ], $class; } # Create an object from a file sub read { - my $class = ref $_[0] ? ref shift : shift; - - # Check the file - my $file = shift or return $class->_error( 'You did not specify a file name' ); - return $class->_error( "File '$file' does not exist" ) unless -e $file; - return $class->_error( "'$file' is a directory, not a file" ) unless -f _; - return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _; - - # Slurp in the file - local $/ = undef; - local *CFG; - unless ( open(CFG, $file) ) { - return $class->_error("Failed to open file '$file': $!"); - } - my $contents = ; - unless ( close(CFG) ) { - return $class->_error("Failed to close file '$file': $!"); - } - - $class->read_string( $contents ); + my $class = ref $_[0] ? ref shift : shift; + + # Check the file + my $file = shift or return $class->_error( 'You did not specify a file name' ); + return $class->_error( "File '$file' does not exist" ) unless -e $file; + return $class->_error( "'$file' is a directory, not a file" ) unless -f _; + return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _; + + # Slurp in the file + local $/ = undef; + local *CFG; + unless ( open(CFG, $file) ) { + return $class->_error("Failed to open file '$file': $!"); + } + my $contents = ; + unless ( close(CFG) ) { + return $class->_error("Failed to close file '$file': $!"); + } + + $class->read_string( $contents ); } # Create an object from a string sub read_string { - my $class = ref $_[0] ? ref shift : shift; - my $self = bless [], $class; - my $string = $_[0]; - eval { - unless ( defined $string ) { - die \"Did not provide a string to load"; - } - - # Byte order marks - # NOTE: Keeping this here to educate maintainers - # my %BOM = ( - # "\357\273\277" => 'UTF-8', - # "\376\377" => 'UTF-16BE', - # "\377\376" => 'UTF-16LE', - # "\377\376\0\0" => 'UTF-32LE' - # "\0\0\376\377" => 'UTF-32BE', - # ); - if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) { - die \"Stream has a non UTF-8 BOM"; - } else { - # Strip UTF-8 bom if found, we'll just ignore it - $string =~ s/^\357\273\277//; - } - - # Try to decode as utf8 - utf8::decode($string) if HAVE_UTF8; - - # Check for some special cases - return $self unless length $string; - unless ( $string =~ /[\012\015]+\z/ ) { - die \"Stream does not end with newline character"; - } - - # Split the file into lines - my @lines = grep { ! /^\s*(?:\#.*)?\z/ } - split /(?:\015{1,2}\012|\015|\012)/, $string; - - # Strip the initial YAML header - @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines; - - # A nibbling parser - while ( @lines ) { - # Do we have a document header? - if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) { - # Handle scalar documents - shift @lines; - if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) { - push @$self, $self->_read_scalar( "$1", [ undef ], \@lines ); - next; - } - } - - if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) { - # A naked document - push @$self, undef; - while ( @lines and $lines[0] !~ /^---/ ) { - shift @lines; - } - - } elsif ( $lines[0] =~ /^\s*\-/ ) { - # An array at the root - my $document = [ ]; - push @$self, $document; - $self->_read_array( $document, [ 0 ], \@lines ); - - } elsif ( $lines[0] =~ /^(\s*)\S/ ) { - # A hash at the root - my $document = { }; - push @$self, $document; - $self->_read_hash( $document, [ length($1) ], \@lines ); - - } else { - die \"CPAN::Meta::YAML failed to classify the line '$lines[0]'"; - } - } - }; - if ( ref $@ eq 'SCALAR' ) { - return $self->_error(${$@}); - } elsif ( $@ ) { - require Carp; - Carp::croak($@); - } - - return $self; + my $class = ref $_[0] ? ref shift : shift; + my $self = bless [], $class; + my $string = $_[0]; + eval { + unless ( defined $string ) { + die \"Did not provide a string to load"; + } + + # Byte order marks + # NOTE: Keeping this here to educate maintainers + # my %BOM = ( + # "\357\273\277" => 'UTF-8', + # "\376\377" => 'UTF-16BE', + # "\377\376" => 'UTF-16LE', + # "\377\376\0\0" => 'UTF-32LE' + # "\0\0\376\377" => 'UTF-32BE', + # ); + if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) { + die \"Stream has a non UTF-8 BOM"; + } else { + # Strip UTF-8 bom if found, we'll just ignore it + $string =~ s/^\357\273\277//; + } + + # Try to decode as utf8 + utf8::decode($string) if HAVE_UTF8; + + # Check for some special cases + return $self unless length $string; + unless ( $string =~ /[\012\015]+\z/ ) { + die \"Stream does not end with newline character"; + } + + # Split the file into lines + my @lines = grep { ! /^\s*(?:\#.*)?\z/ } + split /(?:\015{1,2}\012|\015|\012)/, $string; + + # Strip the initial YAML header + @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines; + + # A nibbling parser + while ( @lines ) { + # Do we have a document header? + if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) { + # Handle scalar documents + shift @lines; + if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) { + push @$self, $self->_read_scalar( "$1", [ undef ], \@lines ); + next; + } + } + + if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) { + # A naked document + push @$self, undef; + while ( @lines and $lines[0] !~ /^---/ ) { + shift @lines; + } + + } elsif ( $lines[0] =~ /^\s*\-/ ) { + # An array at the root + my $document = [ ]; + push @$self, $document; + $self->_read_array( $document, [ 0 ], \@lines ); + + } elsif ( $lines[0] =~ /^(\s*)\S/ ) { + # A hash at the root + my $document = { }; + push @$self, $document; + $self->_read_hash( $document, [ length($1) ], \@lines ); + + } else { + die \"CPAN::Meta::YAML failed to classify the line '$lines[0]'"; + } + } + }; + if ( ref $@ eq 'SCALAR' ) { + return $self->_error(${$@}); + } elsif ( $@ ) { + require Carp; + Carp::croak($@); + } + + return $self; } # Deparse a scalar string to the actual scalar sub _read_scalar { - my ($self, $string, $indent, $lines) = @_; - - # Trim trailing whitespace - $string =~ s/\s*\z//; - - # Explitic null/undef - return undef if $string eq '~'; - - # Single quote - if ( $string =~ /^\'(.*?)\'(?:\s+\#.*)?\z/ ) { - return '' unless defined $1; - $string = $1; - $string =~ s/\'\'/\'/g; - return $string; - } - - # Double quote. - # The commented out form is simpler, but overloaded the Perl regex - # engine due to recursion and backtracking problems on strings - # larger than 32,000ish characters. Keep it for reference purposes. - # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) { - if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"(?:\s+\#.*)?\z/ ) { - # Reusing the variable is a little ugly, - # but avoids a new variable and a string copy. - $string = $1; - $string =~ s/\\"/"/g; - $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex; - return $string; - } - - # Special cases - if ( $string =~ /^[\'\"!&]/ ) { - die \"CPAN::Meta::YAML does not support a feature in line '$string'"; - } - return {} if $string =~ /^{}(?:\s+\#.*)?\z/; - return [] if $string =~ /^\[\](?:\s+\#.*)?\z/; - - # Regular unquoted string - if ( $string !~ /^[>|]/ ) { - if ( - $string =~ /^(?:-(?:\s|$)|[\@\%\`])/ - or - $string =~ /:(?:\s|$)/ - ) { - die \"CPAN::Meta::YAML found illegal characters in plain scalar: '$string'"; - } - $string =~ s/\s+#.*\z//; - return $string; - } - - # Error - die \"CPAN::Meta::YAML failed to find multi-line scalar content" unless @$lines; - - # Check the indent depth - $lines->[0] =~ /^(\s*)/; - $indent->[-1] = length("$1"); - if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) { - die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; - } - - # Pull the lines - my @multiline = (); - while ( @$lines ) { - $lines->[0] =~ /^(\s*)/; - last unless length($1) >= $indent->[-1]; - push @multiline, substr(shift(@$lines), length($1)); - } - - my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n"; - my $t = (substr($string, 1, 1) eq '-') ? '' : "\n"; - return join( $j, @multiline ) . $t; + my ($self, $string, $indent, $lines) = @_; + + # Trim trailing whitespace + $string =~ s/\s*\z//; + + # Explitic null/undef + return undef if $string eq '~'; + + # Single quote + if ( $string =~ /^\'(.*?)\'(?:\s+\#.*)?\z/ ) { + return '' unless defined $1; + $string = $1; + $string =~ s/\'\'/\'/g; + return $string; + } + + # Double quote. + # The commented out form is simpler, but overloaded the Perl regex + # engine due to recursion and backtracking problems on strings + # larger than 32,000ish characters. Keep it for reference purposes. + # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) { + if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"(?:\s+\#.*)?\z/ ) { + # Reusing the variable is a little ugly, + # but avoids a new variable and a string copy. + $string = $1; + $string =~ s/\\"/"/g; + $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex; + return $string; + } + + # Special cases + if ( $string =~ /^[\'\"!&]/ ) { + die \"CPAN::Meta::YAML does not support a feature in line '$string'"; + } + return {} if $string =~ /^{}(?:\s+\#.*)?\z/; + return [] if $string =~ /^\[\](?:\s+\#.*)?\z/; + + # Regular unquoted string + if ( $string !~ /^[>|]/ ) { + if ( + $string =~ /^(?:-(?:\s|$)|[\@\%\`])/ + or + $string =~ /:(?:\s|$)/ + ) { + die \"CPAN::Meta::YAML found illegal characters in plain scalar: '$string'"; + } + $string =~ s/\s+#.*\z//; + return $string; + } + + # Error + die \"CPAN::Meta::YAML failed to find multi-line scalar content" unless @$lines; + + # Check the indent depth + $lines->[0] =~ /^(\s*)/; + $indent->[-1] = length("$1"); + if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) { + die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; + } + + # Pull the lines + my @multiline = (); + while ( @$lines ) { + $lines->[0] =~ /^(\s*)/; + last unless length($1) >= $indent->[-1]; + push @multiline, substr(shift(@$lines), length($1)); + } + + my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n"; + my $t = (substr($string, 1, 1) eq '-') ? '' : "\n"; + return join( $j, @multiline ) . $t; } # Parse an array sub _read_array { - my ($self, $array, $indent, $lines) = @_; - - while ( @$lines ) { - # Check for a new document - if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { - while ( @$lines and $lines->[0] !~ /^---/ ) { - shift @$lines; - } - return 1; - } - - # Check the indent level - $lines->[0] =~ /^(\s*)/; - if ( length($1) < $indent->[-1] ) { - return 1; - } elsif ( length($1) > $indent->[-1] ) { - die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; - } - - if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) { - # Inline nested hash - my $indent2 = length("$1"); - $lines->[0] =~ s/-/ /; - push @$array, { }; - $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines ); - - } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) { - # Array entry with a value - shift @$lines; - push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines ); - - } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) { - shift @$lines; - unless ( @$lines ) { - push @$array, undef; - return 1; - } - if ( $lines->[0] =~ /^(\s*)\-/ ) { - my $indent2 = length("$1"); - if ( $indent->[-1] == $indent2 ) { - # Null array entry - push @$array, undef; - } else { - # Naked indenter - push @$array, [ ]; - $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines ); - } - - } elsif ( $lines->[0] =~ /^(\s*)\S/ ) { - push @$array, { }; - $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines ); - - } else { - die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; - } - - } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) { - # This is probably a structure like the following... - # --- - # foo: - # - list - # bar: value - # - # ... so lets return and let the hash parser handle it - return 1; - - } else { - die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; - } - } - - return 1; + my ($self, $array, $indent, $lines) = @_; + + while ( @$lines ) { + # Check for a new document + if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { + while ( @$lines and $lines->[0] !~ /^---/ ) { + shift @$lines; + } + return 1; + } + + # Check the indent level + $lines->[0] =~ /^(\s*)/; + if ( length($1) < $indent->[-1] ) { + return 1; + } elsif ( length($1) > $indent->[-1] ) { + die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; + } + + if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) { + # Inline nested hash + my $indent2 = length("$1"); + $lines->[0] =~ s/-/ /; + push @$array, { }; + $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines ); + + } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) { + # Array entry with a value + shift @$lines; + push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines ); + + } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) { + shift @$lines; + unless ( @$lines ) { + push @$array, undef; + return 1; + } + if ( $lines->[0] =~ /^(\s*)\-/ ) { + my $indent2 = length("$1"); + if ( $indent->[-1] == $indent2 ) { + # Null array entry + push @$array, undef; + } else { + # Naked indenter + push @$array, [ ]; + $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines ); + } + + } elsif ( $lines->[0] =~ /^(\s*)\S/ ) { + push @$array, { }; + $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines ); + + } else { + die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; + } + + } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) { + # This is probably a structure like the following... + # --- + # foo: + # - list + # bar: value + # + # ... so lets return and let the hash parser handle it + return 1; + + } else { + die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; + } + } + + return 1; } # Parse an array sub _read_hash { - my ($self, $hash, $indent, $lines) = @_; - - while ( @$lines ) { - # Check for a new document - if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { - while ( @$lines and $lines->[0] !~ /^---/ ) { - shift @$lines; - } - return 1; - } - - # Check the indent level - $lines->[0] =~ /^(\s*)/; - if ( length($1) < $indent->[-1] ) { - return 1; - } elsif ( length($1) > $indent->[-1] ) { - die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; - } - - # Get the key - unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+(?:\#.*)?|$)// ) { - if ( $lines->[0] =~ /^\s*[?\'\"]/ ) { - die \"CPAN::Meta::YAML does not support a feature in line '$lines->[0]'"; - } - die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; - } - my $key = $1; - - # Do we have a value? - if ( length $lines->[0] ) { - # Yes - $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines ); - } else { - # An indent - shift @$lines; - unless ( @$lines ) { - $hash->{$key} = undef; - return 1; - } - if ( $lines->[0] =~ /^(\s*)-/ ) { - $hash->{$key} = []; - $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines ); - } elsif ( $lines->[0] =~ /^(\s*)./ ) { - my $indent2 = length("$1"); - if ( $indent->[-1] >= $indent2 ) { - # Null hash entry - $hash->{$key} = undef; - } else { - $hash->{$key} = {}; - $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines ); - } - } - } - } - - return 1; + my ($self, $hash, $indent, $lines) = @_; + + while ( @$lines ) { + # Check for a new document + if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { + while ( @$lines and $lines->[0] !~ /^---/ ) { + shift @$lines; + } + return 1; + } + + # Check the indent level + $lines->[0] =~ /^(\s*)/; + if ( length($1) < $indent->[-1] ) { + return 1; + } elsif ( length($1) > $indent->[-1] ) { + die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; + } + + # Get the key + unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+(?:\#.*)?|$)// ) { + if ( $lines->[0] =~ /^\s*[?\'\"]/ ) { + die \"CPAN::Meta::YAML does not support a feature in line '$lines->[0]'"; + } + die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; + } + my $key = $1; + + # Do we have a value? + if ( length $lines->[0] ) { + # Yes + $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines ); + } else { + # An indent + shift @$lines; + unless ( @$lines ) { + $hash->{$key} = undef; + return 1; + } + if ( $lines->[0] =~ /^(\s*)-/ ) { + $hash->{$key} = []; + $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines ); + } elsif ( $lines->[0] =~ /^(\s*)./ ) { + my $indent2 = length("$1"); + if ( $indent->[-1] >= $indent2 ) { + # Null hash entry + $hash->{$key} = undef; + } else { + $hash->{$key} = {}; + $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines ); + } + } + } + } + + return 1; } # Save an object to a file sub write { - my $self = shift; - my $file = shift or return $self->_error('No file name provided'); + my $self = shift; + my $file = shift or return $self->_error('No file name provided'); - # Write it to the file - open( CFG, '>' . $file ) or return $self->_error( - "Failed to open file '$file' for writing: $!" - ); - print CFG $self->write_string; - close CFG; + # Write it to the file + open( CFG, '>' . $file ) or return $self->_error( + "Failed to open file '$file' for writing: $!" + ); + print CFG $self->write_string; + close CFG; - return 1; + return 1; } # Save an object to a string sub write_string { - my $self = shift; - return '' unless @$self; - - # Iterate over the documents - my $indent = 0; - my @lines = (); - foreach my $cursor ( @$self ) { - push @lines, '---'; - - # An empty document - if ( ! defined $cursor ) { - # Do nothing - - # A scalar document - } elsif ( ! ref $cursor ) { - $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent ); - - # A list at the root - } elsif ( ref $cursor eq 'ARRAY' ) { - unless ( @$cursor ) { - $lines[-1] .= ' []'; - next; - } - push @lines, $self->_write_array( $cursor, $indent, {} ); - - # A hash at the root - } elsif ( ref $cursor eq 'HASH' ) { - unless ( %$cursor ) { - $lines[-1] .= ' {}'; - next; - } - push @lines, $self->_write_hash( $cursor, $indent, {} ); - - } else { - Carp::croak("Cannot serialize " . ref($cursor)); - } - } - - join '', map { "$_\n" } @lines; + my $self = shift; + return '' unless @$self; + + # Iterate over the documents + my $indent = 0; + my @lines = (); + foreach my $cursor ( @$self ) { + push @lines, '---'; + + # An empty document + if ( ! defined $cursor ) { + # Do nothing + + # A scalar document + } elsif ( ! ref $cursor ) { + $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent ); + + # A list at the root + } elsif ( ref $cursor eq 'ARRAY' ) { + unless ( @$cursor ) { + $lines[-1] .= ' []'; + next; + } + push @lines, $self->_write_array( $cursor, $indent, {} ); + + # A hash at the root + } elsif ( ref $cursor eq 'HASH' ) { + unless ( %$cursor ) { + $lines[-1] .= ' {}'; + next; + } + push @lines, $self->_write_hash( $cursor, $indent, {} ); + + } else { + Carp::croak("Cannot serialize " . ref($cursor)); + } + } + + join '', map { "$_\n" } @lines; } sub _write_scalar { - my $string = $_[1]; - return '~' unless defined $string; - return "''" unless length $string; - if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) { - $string =~ s/\\/\\\\/g; - $string =~ s/"/\\"/g; - $string =~ s/\n/\\n/g; - $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; - return qq|"$string"|; - } - if ( $string =~ /(?:^\W|\s|:\z)/ or $QUOTE{$string} ) { - return "'$string'"; - } - return $string; + my $string = $_[1]; + return '~' unless defined $string; + return "''" unless length $string; + if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) { + $string =~ s/\\/\\\\/g; + $string =~ s/"/\\"/g; + $string =~ s/\n/\\n/g; + $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; + return qq|"$string"|; + } + if ( $string =~ /(?:^\W|\s|:\z)/ or $QUOTE{$string} ) { + return "'$string'"; + } + return $string; } sub _write_array { - my ($self, $array, $indent, $seen) = @_; - if ( $seen->{refaddr($array)}++ ) { - die "CPAN::Meta::YAML does not support circular references"; - } - my @lines = (); - foreach my $el ( @$array ) { - my $line = (' ' x $indent) . '-'; - my $type = ref $el; - if ( ! $type ) { - $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); - push @lines, $line; - - } elsif ( $type eq 'ARRAY' ) { - if ( @$el ) { - push @lines, $line; - push @lines, $self->_write_array( $el, $indent + 1, $seen ); - } else { - $line .= ' []'; - push @lines, $line; - } - - } elsif ( $type eq 'HASH' ) { - if ( keys %$el ) { - push @lines, $line; - push @lines, $self->_write_hash( $el, $indent + 1, $seen ); - } else { - $line .= ' {}'; - push @lines, $line; - } - - } else { - die "CPAN::Meta::YAML does not support $type references"; - } - } - - @lines; + my ($self, $array, $indent, $seen) = @_; + if ( $seen->{refaddr($array)}++ ) { + die "CPAN::Meta::YAML does not support circular references"; + } + my @lines = (); + foreach my $el ( @$array ) { + my $line = (' ' x $indent) . '-'; + my $type = ref $el; + if ( ! $type ) { + $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); + push @lines, $line; + + } elsif ( $type eq 'ARRAY' ) { + if ( @$el ) { + push @lines, $line; + push @lines, $self->_write_array( $el, $indent + 1, $seen ); + } else { + $line .= ' []'; + push @lines, $line; + } + + } elsif ( $type eq 'HASH' ) { + if ( keys %$el ) { + push @lines, $line; + push @lines, $self->_write_hash( $el, $indent + 1, $seen ); + } else { + $line .= ' {}'; + push @lines, $line; + } + + } else { + die "CPAN::Meta::YAML does not support $type references"; + } + } + + @lines; } sub _write_hash { - my ($self, $hash, $indent, $seen) = @_; - if ( $seen->{refaddr($hash)}++ ) { - die "CPAN::Meta::YAML does not support circular references"; - } - my @lines = (); - foreach my $name ( sort keys %$hash ) { - my $el = $hash->{$name}; - my $line = (' ' x $indent) . "$name:"; - my $type = ref $el; - if ( ! $type ) { - $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); - push @lines, $line; - - } elsif ( $type eq 'ARRAY' ) { - if ( @$el ) { - push @lines, $line; - push @lines, $self->_write_array( $el, $indent + 1, $seen ); - } else { - $line .= ' []'; - push @lines, $line; - } - - } elsif ( $type eq 'HASH' ) { - if ( keys %$el ) { - push @lines, $line; - push @lines, $self->_write_hash( $el, $indent + 1, $seen ); - } else { - $line .= ' {}'; - push @lines, $line; - } - - } else { - die "CPAN::Meta::YAML does not support $type references"; - } - } - - @lines; + my ($self, $hash, $indent, $seen) = @_; + if ( $seen->{refaddr($hash)}++ ) { + die "CPAN::Meta::YAML does not support circular references"; + } + my @lines = (); + foreach my $name ( sort keys %$hash ) { + my $el = $hash->{$name}; + my $line = (' ' x $indent) . "$name:"; + my $type = ref $el; + if ( ! $type ) { + $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); + push @lines, $line; + + } elsif ( $type eq 'ARRAY' ) { + if ( @$el ) { + push @lines, $line; + push @lines, $self->_write_array( $el, $indent + 1, $seen ); + } else { + $line .= ' []'; + push @lines, $line; + } + + } elsif ( $type eq 'HASH' ) { + if ( keys %$el ) { + push @lines, $line; + push @lines, $self->_write_hash( $el, $indent + 1, $seen ); + } else { + $line .= ' {}'; + push @lines, $line; + } + + } else { + die "CPAN::Meta::YAML does not support $type references"; + } + } + + @lines; } # Set error sub _error { - $CPAN::Meta::YAML::errstr = $_[1]; - undef; + $CPAN::Meta::YAML::errstr = $_[1]; + undef; } # Retrieve error sub errstr { - $CPAN::Meta::YAML::errstr; + $CPAN::Meta::YAML::errstr; } @@ -563,43 +572,43 @@ sub errstr { # YAML Compatibility sub Dump { - CPAN::Meta::YAML->new(@_)->write_string; + CPAN::Meta::YAML->new(@_)->write_string; } sub Load { - my $self = CPAN::Meta::YAML->read_string(@_); - unless ( $self ) { - Carp::croak("Failed to load YAML document from string"); - } - if ( wantarray ) { - return @$self; - } else { - # To match YAML.pm, return the last document - return $self->[-1]; - } + my $self = CPAN::Meta::YAML->read_string(@_); + unless ( $self ) { + Carp::croak("Failed to load YAML document from string"); + } + if ( wantarray ) { + return @$self; + } else { + # To match YAML.pm, return the last document + return $self->[-1]; + } } BEGIN { - *freeze = *Dump; - *thaw = *Load; + *freeze = *Dump; + *thaw = *Load; } sub DumpFile { - my $file = shift; - CPAN::Meta::YAML->new(@_)->write($file); + my $file = shift; + CPAN::Meta::YAML->new(@_)->write($file); } sub LoadFile { - my $self = CPAN::Meta::YAML->read($_[0]); - unless ( $self ) { - Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'"); - } - if ( wantarray ) { - return @$self; - } else { - # Return only the last document to match YAML.pm, - return $self->[-1]; - } + my $self = CPAN::Meta::YAML->read($_[0]); + unless ( $self ) { + Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'"); + } + if ( wantarray ) { + return @$self; + } else { + # Return only the last document to match YAML.pm, + return $self->[-1]; + } } @@ -610,45 +619,45 @@ sub LoadFile { # Use Scalar::Util if possible, otherwise emulate it BEGIN { - local $@; - eval { - require Scalar::Util; - }; - my $v = eval("$Scalar::Util::VERSION") || 0; - if ( $@ or $v < 1.18 ) { - eval <<'END_PERL'; + local $@; + eval { + require Scalar::Util; + }; + my $v = eval("$Scalar::Util::VERSION") || 0; + if ( $@ or $v < 1.18 ) { + eval <<'END_PERL'; # Scalar::Util failed to load or too old sub refaddr { - my $pkg = ref($_[0]) or return undef; - if ( !! UNIVERSAL::can($_[0], 'can') ) { - bless $_[0], 'Scalar::Util::Fake'; - } else { - $pkg = undef; - } - "$_[0]" =~ /0x(\w+)/; - my $i = do { local $^W; hex $1 }; - bless $_[0], $pkg if defined $pkg; - $i; + my $pkg = ref($_[0]) or return undef; + if ( !! UNIVERSAL::can($_[0], 'can') ) { + bless $_[0], 'Scalar::Util::Fake'; + } else { + $pkg = undef; + } + "$_[0]" =~ /0x(\w+)/; + my $i = do { local $^W; hex $1 }; + bless $_[0], $pkg if defined $pkg; + $i; } END_PERL - } else { - *refaddr = *Scalar::Util::refaddr; - } + } else { + *refaddr = *Scalar::Util::refaddr; + } } 1; - - =pod +=encoding utf-8 + =head1 NAME CPAN::Meta::YAML - Read and write a subset of YAML for CPAN Meta files =head1 VERSION -version 0.008 +version 0.010 =head1 SYNOPSIS @@ -684,7 +693,7 @@ C methods do B support UTF-8 and should not be used. This module is currently derived from L by Adam Kennedy. If there are bugs in how it parses a particular META.yml file, please file a bug report in the YAML::Tiny bugtracker: -L +L =head1 SEE ALSO @@ -697,7 +706,7 @@ L, L, L =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker -at L. +at L. You will be notified automatically of any progress on your issue. =head2 Source Code @@ -705,9 +714,9 @@ You will be notified automatically of any progress on your issue. This is open source software. The code repository is available for public review and contribution under the terms of the license. -L +L - git clone https://github.com/dagolden/cpan-meta-yaml.git + git clone https://github.com/dagolden/CPAN-Meta-YAML.git =head1 AUTHORS @@ -732,7 +741,6 @@ the same terms as the Perl 5 programming language system itself. =cut - __END__ diff --git a/cpan/CPAN-Meta-YAML/t/01_compile.t b/cpan/CPAN-Meta-YAML/t/01_compile.t index bac1b9c..d85d9aa 100644 --- a/cpan/CPAN-Meta-YAML/t/01_compile.t +++ b/cpan/CPAN-Meta-YAML/t/01_compile.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Load testing for CPAN::Meta::YAML use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; diff --git a/cpan/CPAN-Meta-YAML/t/02_basic.t b/cpan/CPAN-Meta-YAML/t/02_basic.t index 14d1132..1aa3686 100644 --- a/cpan/CPAN-Meta-YAML/t/02_basic.t +++ b/cpan/CPAN-Meta-YAML/t/02_basic.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of basic document structures use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -22,138 +22,138 @@ use CPAN::Meta::YAML; # Test a completely empty document yaml_ok( - '', - [ ], - 'empty', + '', + [ ], + 'empty', ); # Just a newline ### YAML.pm has a bug where it dies on a single newline yaml_ok( - "\n\n", - [ ], - 'only_newlines', + "\n\n", + [ ], + 'only_newlines', ); # Just a comment yaml_ok( - "# comment\n", - [ ], - 'only_comment', + "# comment\n", + [ ], + 'only_comment', ); # Empty documents yaml_ok( - "---\n", - [ undef ], - 'only_header', - noyamlperl => 1, + "---\n", + [ undef ], + 'only_header', + noyamlperl => 1, ); yaml_ok( - "---\n---\n", - [ undef, undef ], - 'two_header', - noyamlperl => 1, + "---\n---\n", + [ undef, undef ], + 'two_header', + noyamlperl => 1, ); yaml_ok( - "--- ~\n", - [ undef ], - 'one_undef', - noyamlperl => 1, + "--- ~\n", + [ undef ], + 'one_undef', + noyamlperl => 1, ); yaml_ok( - "--- ~\n", - [ undef ], - 'one_undef2', - noyamlperl => 1, + "--- ~\n", + [ undef ], + 'one_undef2', + noyamlperl => 1, ); yaml_ok( - "--- ~\n---\n", - [ undef, undef ], - 'two_undef', - noyamlperl => 1, + "--- ~\n---\n", + [ undef, undef ], + 'two_undef', + noyamlperl => 1, ); # Just a scalar yaml_ok( - "--- foo\n", - [ 'foo' ], - 'one_scalar', + "--- foo\n", + [ 'foo' ], + 'one_scalar', ); yaml_ok( - "--- foo\n", - [ 'foo' ], - 'one_scalar2', + "--- foo\n", + [ 'foo' ], + 'one_scalar2', ); yaml_ok( - "--- foo\n--- bar\n", - [ 'foo', 'bar' ], - 'two_scalar', - noyamlperl => 1, + "--- foo\n--- bar\n", + [ 'foo', 'bar' ], + 'two_scalar', + noyamlperl => 1, ); # Simple lists yaml_ok( - "---\n- foo\n", - [ [ 'foo' ] ], - 'one_list1', + "---\n- foo\n", + [ [ 'foo' ] ], + 'one_list1', ); yaml_ok( - "---\n- foo\n- bar\n", - [ [ 'foo', 'bar' ] ], - 'one_list2', + "---\n- foo\n- bar\n", + [ [ 'foo', 'bar' ] ], + 'one_list2', ); yaml_ok( - "---\n- ~\n- bar\n", - [ [ undef, 'bar' ] ], - 'one_listundef', - noyamlperl => 1, + "---\n- ~\n- bar\n", + [ [ undef, 'bar' ] ], + 'one_listundef', + noyamlperl => 1, ); # Simple hashs yaml_ok( - "---\nfoo: bar\n", - [ { foo => 'bar' } ], - 'one_hash1', + "---\nfoo: bar\n", + [ { foo => 'bar' } ], + 'one_hash1', ); yaml_ok( - "---\nfoo: bar\nthis: ~\n", - [ { this => undef, foo => 'bar' } ], - 'one_hash2', - noyamlperl => 1, + "---\nfoo: bar\nthis: ~\n", + [ { this => undef, foo => 'bar' } ], + 'one_hash2', + noyamlperl => 1, ); # Simple array inside a hash with an undef yaml_ok( - <<'END_YAML', + <<'END_YAML', --- foo: - bar - ~ - baz END_YAML - [ { foo => [ 'bar', undef, 'baz' ] } ], - 'array_in_hash', - noyamlperl => 1, + [ { foo => [ 'bar', undef, 'baz' ] } ], + 'array_in_hash', + noyamlperl => 1, ); # Simple hash inside a hash with an undef yaml_ok( - <<'END_YAML', + <<'END_YAML', --- foo: ~ bar: foo: bar END_YAML - [ { foo => undef, bar => { foo => 'bar' } } ], - 'hash_in_hash', - noyamlperl => 1, + [ { foo => undef, bar => { foo => 'bar' } } ], + 'hash_in_hash', + noyamlperl => 1, ); # Mixed hash and scalars inside an array yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - foo: ~ @@ -164,92 +164,92 @@ yaml_ok( foo: bar this: that END_YAML - [ [ - { foo => undef, this => 'that' }, - 'foo', - undef, - { foo => 'bar', this => 'that' }, - ] ], - 'hash_in_array', - noyamlperl => 1, + [ [ + { 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', + "---\n- 'foo'\n", + [ [ 'foo' ] ], + 'single_quote1', ); yaml_ok( - "---\n- ' '\n", - [ [ ' ' ] ], - 'single_spaces', + "---\n- ' '\n", + [ [ ' ' ] ], + 'single_spaces', ); yaml_ok( - "---\n- ''\n", - [ [ '' ] ], - 'single_null', + "---\n- ''\n", + [ [ '' ] ], + 'single_null', ); # Double quotes yaml_ok( - "--- \" \"\n", - [ ' ' ], - "only_spaces", - noyamlpm => 1, - noyamlperl => 1, + "--- \" \"\n", + [ ' ' ], + "only_spaces", + noyamlpm => 1, + noyamlperl => 1, ); yaml_ok( - "--- \" foo\"\n--- \"bar \"\n", - [ " foo", "bar " ], - "leading_trailing_spaces", - noyamlpm => 1, - noyamlperl => 1, + "--- \" 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', + "foo: bar\n", + [ { foo => 'bar' } ], + 'implicit_hash', ); yaml_ok( - "- foo\n", - [ [ 'foo' ] ], - 'implicit_array', + "- foo\n", + [ [ 'foo' ] ], + 'implicit_array', ); # Inline nested hash yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - ~ - foo: bar this: that - baz END_YAML - [ [ undef, { foo => 'bar', this => 'that' }, 'baz' ] ], - 'inline_nested_hash', - noyamlperl => 1, + [ [ 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', + "---\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', + "---\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', + "---\na b: c d\n", + [ { 'a b' => 'c d' } ], + 'key_with_whitespace', ); diff --git a/cpan/CPAN-Meta-YAML/t/03_regression.t b/cpan/CPAN-Meta-YAML/t/03_regression.t index 8fae7e4..f85b2ac 100644 --- a/cpan/CPAN-Meta-YAML/t/03_regression.t +++ b/cpan/CPAN-Meta-YAML/t/03_regression.t @@ -1,20 +1,20 @@ -#!/usr/bin/perl - # Testing of common META.yml examples use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; use t::lib::Test; use Test::More tests(37, 0, 13); use CPAN::Meta::YAML qw{ - Load Dump - LoadFile DumpFile - freeze thaw + Load Dump + LoadFile DumpFile + freeze thaw }; @@ -40,17 +40,17 @@ ok( defined(&thaw), 'Found exported thaw functiona' ); # Hash key legally containing a colon yaml_ok( - "---\nFoo::Bar: 1\n", - [ { 'Foo::Bar' => 1 } ], - 'module_hash_key', + "---\nFoo::Bar: 1\n", + [ { 'Foo::Bar' => 1 } ], + 'module_hash_key', ); # Hash indented yaml_ok( - "---\n" - . " foo: bar\n", - [ { foo => "bar" } ], - 'hash_indented', + "---\n" + . " foo: bar\n", + [ { foo => "bar" } ], + 'hash_indented', ); @@ -62,25 +62,25 @@ yaml_ok( # Declarative multi-line scalar yaml_ok( - "---\n" - . " foo: >\n" - . " bar\n" - . " baz\n", - [ { foo => "bar baz\n" } ], - 'simple_multiline', + "---\n" + . " foo: >\n" + . " bar\n" + . " baz\n", + [ { foo => "bar baz\n" } ], + 'simple_multiline', ); # Piped multi-line scalar yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - | foo bar - 1 END_YAML - [ [ "foo\nbar\n", 1 ] ], - 'indented', + [ [ "foo\nbar\n", 1 ] ], + 'indented', ); # ... with a pointless hyphen @@ -91,8 +91,8 @@ yaml_ok( <<'END_YAML', bar - 1 END_YAML - [ [ "foo\nbar", 1 ] ], - 'indented', + [ [ "foo\nbar", 1 ] ], + 'indented', ); @@ -104,60 +104,60 @@ END_YAML # Simple inline case (comment variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', --- #YAML:1.0 foo: bar END_YAML - [ { foo => 'bar' } ], - 'simple_doctype_comment', - nosyck => 1, + [ { foo => 'bar' } ], + 'simple_doctype_comment', + nosyck => 1, ); # Simple inline case (percent variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', --- %YAML:1.0 foo: bar END_YAML - [ { foo => 'bar' } ], - 'simple_doctype_percent', - noyamlpm => 1, - noxs => 1, - noyamlperl => 1, + [ { foo => 'bar' } ], + 'simple_doctype_percent', + noyamlpm => 1, + noxs => 1, + noyamlperl => 1, ); # Simple header (comment variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', %YAML:1.0 --- foo: bar END_YAML - [ { foo => 'bar' } ], - 'predocument_1_0', - noyamlpm => 1, - nosyck => 1, - noxs => 1, - noyamlperl => 1, + [ { foo => 'bar' } ], + 'predocument_1_0', + noyamlpm => 1, + nosyck => 1, + noxs => 1, + noyamlperl => 1, ); # Simple inline case (comment variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', %YAML 1.1 --- foo: bar END_YAML - [ { foo => 'bar' } ], - 'predocument_1_1', - noyamlpm => 1, - nosyck => 1, - noyamlperl => 1, + [ { foo => 'bar' } ], + 'predocument_1_1', + noyamlpm => 1, + nosyck => 1, + noyamlperl => 1, ); # Multiple inline documents (comment variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', --- #YAML:1.0 foo: bar --- #YAML:1.0 @@ -165,33 +165,33 @@ foo: bar --- #YAML:1.0 foo: bar END_YAML - [ { foo => 'bar' }, [ 1 ], { foo => 'bar' } ], - 'multi_doctype_comment', + [ { foo => 'bar' }, [ 1 ], { foo => 'bar' } ], + 'multi_doctype_comment', ); # Simple pre-document case (comment variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', %YAML 1.1 --- foo: bar END_YAML - [ { foo => 'bar' } ], - 'predocument_percent', - noyamlpm => 1, - nosyck => 1, - noyamlperl => 1, + [ { foo => 'bar' } ], + 'predocument_percent', + noyamlpm => 1, + nosyck => 1, + noyamlperl => 1, ); # Simple pre-document case (comment variant) yaml_ok( - <<'END_YAML', + <<'END_YAML', #YAML 1.1 --- foo: bar END_YAML - [ { foo => 'bar' } ], - 'predocument_comment', + [ { foo => 'bar' } ], + 'predocument_comment', ); @@ -202,12 +202,12 @@ END_YAML # Hitchhiker Scalar yaml_ok( - <<'END_YAML', + <<'END_YAML', --- 42 END_YAML - [ 42 ], - 'hitchhiker scalar', - serializes => 1, + [ 42 ], + 'hitchhiker scalar', + serializes => 1, ); @@ -218,45 +218,45 @@ END_YAML # Null HASH/ARRAY yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - foo - {} - bar END_YAML - [ [ 'foo', {}, 'bar' ] ], - 'null hash in array', + [ [ 'foo', {}, 'bar' ] ], + 'null hash in array', ); yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - foo - [] - bar END_YAML - [ [ 'foo', [], 'bar' ] ], - 'null array in array', + [ [ 'foo', [], 'bar' ] ], + 'null array in array', ); yaml_ok( - <<'END_YAML', + <<'END_YAML', --- foo: {} bar: 1 END_YAML - [ { foo => {}, bar => 1 } ], - 'null hash in hash', + [ { foo => {}, bar => 1 } ], + 'null hash in hash', ); yaml_ok( - <<'END_YAML', + <<'END_YAML', --- foo: [] bar: 1 END_YAML - [ { foo => [], bar => 1 } ], - 'null array in hash', + [ { foo => [], bar => 1 } ], + 'null array in hash', ); @@ -266,22 +266,22 @@ END_YAML # Trailing Whitespace yaml_ok( - <<'END_YAML', + <<'END_YAML', --- -abstract: Generate fractal curves -foo: ~ +abstract: Generate fractal curves +foo: ~ arr: - - foo + - foo - ~ - - 'bar' + - 'bar' END_YAML - [ { - abstract => 'Generate fractal curves', - foo => undef, - arr => [ 'foo', undef, 'bar' ], - } ], - 'trailing whitespace', - noyamlperl => 1, + [ { + abstract => 'Generate fractal curves', + foo => undef, + arr => [ 'foo', undef, 'bar' ], + } ], + 'trailing whitespace', + noyamlperl => 1, ); @@ -292,13 +292,13 @@ END_YAML # Quote vs Hash yaml_ok( - <<'END_YAML', + <<'END_YAML', --- author: - 'mst: Matt S. Trout ' END_YAML - [ { author => [ 'mst: Matt S. Trout ' ] } ], - 'hash-like quote', + [ { author => [ 'mst: Matt S. Trout ' ] } ], + 'hash-like quote', ); @@ -309,33 +309,33 @@ END_YAML # Quote and Escaping Idiosyncracies yaml_ok( - <<'END_YAML', + <<'END_YAML', --- name1: 'O''Reilly' name2: 'O''Reilly O''Tool' name3: 'Double '''' Quote' END_YAML - [ { - name1 => "O'Reilly", - name2 => "O'Reilly O'Tool", - name3 => "Double '' Quote", - } ], - 'single quote subtleties', + [ { + name1 => "O'Reilly", + name2 => "O'Reilly O'Tool", + name3 => "Double '' Quote", + } ], + 'single quote subtleties', ); yaml_ok( - <<'END_YAML', + <<'END_YAML', --- slash1: '\\' slash2: '\\foo' slash3: '\\foo\\\\' END_YAML - [ { - slash1 => "\\\\", - slash2 => "\\\\foo", - slash3 => "\\\\foo\\\\\\\\", - } ], - 'single quote subtleties', + [ { + slash1 => "\\\\", + slash2 => "\\\\foo", + slash3 => "\\\\foo\\\\\\\\", + } ], + 'single quote subtleties', ); @@ -346,29 +346,29 @@ END_YAML # Empty Values and Premature EOF yaml_ok( - <<'END_YAML', + <<'END_YAML', --- foo: 0 requires: build_requires: END_YAML - [ { foo => 0, requires => undef, build_requires => undef } ], - 'empty hash keys', - noyamlpm => 1, - noyamlperl => 1, + [ { foo => 0, requires => undef, build_requires => undef } ], + 'empty hash keys', + noyamlpm => 1, + noyamlperl => 1, ); yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - foo - - END_YAML - [ [ 'foo', undef, undef ] ], - 'empty array keys', - noyamlpm => 1, - noyamlperl => 1, + [ [ 'foo', undef, undef ] ], + 'empty array keys', + noyamlpm => 1, + noyamlperl => 1, ); @@ -379,14 +379,14 @@ END_YAML # Comment on the Document Line yaml_ok( - <<'END_YAML', + <<'END_YAML', --- # Comment foo: bar END_YAML - [ { foo => 'bar' } ], - 'comment header', - noyamlpm => 1, - noyamlperl => 1, + [ { foo => 'bar' } ], + 'comment header', + noyamlpm => 1, + noyamlperl => 1, ); @@ -398,11 +398,11 @@ END_YAML # Newlines and tabs yaml_ok( - <<'END_YAML', + <<'END_YAML', foo: "foo\\\n\tbar" END_YAML - [ { foo => "foo\\\n\tbar" } ], - 'special characters', + [ { foo => "foo\\\n\tbar" } ], + 'special characters', ); @@ -413,22 +413,22 @@ END_YAML # Circular Reference Protection SCOPE: { - my $foo = { a => 'b' }; - my $bar = [ $foo, 2 ]; - $foo->{c} = $bar; - my $circ = CPAN::Meta::YAML->new( [ $foo, $bar ] ); - isa_ok( $circ, 'CPAN::Meta::YAML' ); - - # When we try to serialize, it should NOT infinite loop - my $string = undef; - $string = eval { $circ->write_string; }; - is( $string, undef, '->write_string does not return a value' ); - ok( $@, 'Error string is defined' ); - ok( - $@ =~ /does not support circular references/, - 'Got the expected error message', - ); -} + my $foo = { a => 'b' }; + my $bar = [ $foo, 2 ]; + $foo->{c} = $bar; + my $circ = CPAN::Meta::YAML->new( [ $foo, $bar ] ); + isa_ok( $circ, 'CPAN::Meta::YAML' ); + + # When we try to serialize, it should NOT infinite loop + my $string = undef; + $string = eval { $circ->write_string; }; + is( $string, undef, '->write_string does not return a value' ); + ok( $@, 'Error string is defined' ); + ok( + $@ =~ /does not support circular references/, + 'Got the expected error message', + ); +} @@ -438,7 +438,7 @@ SCOPE: { # Confirm we can read the synopsis yaml_ok( - <<'END_YAML', + <<'END_YAML', --- rootproperty: blah section: @@ -447,17 +447,17 @@ section: Foo: Bar empty: ~ END_YAML - [ { - rootproperty => 'blah', - section => { - one => 'two', - three => 'four', - Foo => 'Bar', - empty => undef, - }, - } ], - 'synopsis', - noyamlperl => 1, + [ { + rootproperty => 'blah', + section => { + one => 'two', + three => 'four', + Foo => 'Bar', + empty => undef, + }, + } ], + 'synopsis', + noyamlperl => 1, ); @@ -481,13 +481,13 @@ yaml_ok( # Empty Quote Line yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - foo # - bar END_YAML - [ [ "foo", "bar" ] ], + [ [ "foo", "bar" ] ], ); @@ -498,7 +498,7 @@ END_YAML # Indentation after empty hash value yaml_ok( - <<'END_YAML', + <<'END_YAML', --- Test: optmods: @@ -514,28 +514,28 @@ _meta: name: 'test profile' note: 'note this test profile' END_YAML - [ { - Test => { - optmods => { - Bad => 0, - Foo => 1, - Long => 0, - }, - version => 5, - }, - Test_IncludeA => { - optmods => undef, - }, - Test_IncludeB => { - optmods => undef, - }, - _meta => { - name => 'test profile', - note => 'note this test profile', - }, - } ], - 'Indentation after empty hash value', - noyamlperl => 1, + [ { + Test => { + optmods => { + Bad => 0, + Foo => 1, + Long => 0, + }, + version => 5, + }, + Test_IncludeA => { + optmods => undef, + }, + Test_IncludeB => { + optmods => undef, + }, + _meta => { + name => 'test profile', + note => 'note this test profile', + }, + } ], + 'Indentation after empty hash value', + noyamlperl => 1, ); @@ -546,11 +546,11 @@ END_YAML # Spaces in the Key yaml_ok( - <<'END_YAML', + <<'END_YAML', --- the key: the value END_YAML - [ { 'the key' => 'the value' } ], + [ { 'the key' => 'the value' } ], ); @@ -563,13 +563,13 @@ END_YAML # Tests a particular pathological case yaml_ok( - <<'END_YAML', + <<'END_YAML', --- - value - '><' END_YAML - [ [ 'value', '><' ] ], - 'Pathological >< case', + [ [ 'value', '><' ] ], + 'Pathological >< case', ); @@ -580,11 +580,11 @@ END_YAML # Special Characters #yaml_ok( -# <<'END_YAML', +# <<'END_YAML', #--- #- "Ingy d\xC3\xB6t Net" #END_YAML -# [ [ "Ingy d\xC3\xB6t Net" ] ], +# [ [ "Ingy d\xC3\xB6t Net" ] ], #); @@ -596,16 +596,16 @@ END_YAML # Non-Indenting Sub-List yaml_ok( - <<'END_YAML', + <<'END_YAML', --- foo: - list bar: value END_YAML - [ { foo => [ 'list' ], bar => 'value' } ], - 'Non-indenting sub-list', - noyamlpm => 1, - noyamlperl => 1, + [ { foo => [ 'list' ], bar => 'value' } ], + 'Non-indenting sub-list', + noyamlpm => 1, + noyamlperl => 1, ); @@ -618,23 +618,23 @@ END_YAML # RT #42119: write of two single quotes yaml_ok( - "--- \"A'B'C\"\n", - [ "A'B'C" ], - 'Multiple escaping of quote ok', + "--- \"A'B'C\"\n", + [ "A'B'C" ], + 'Multiple escaping of quote ok', ); # Escapes without whitespace yaml_ok( - "--- A\\B\\C\n", - [ "A\\B\\C" ], - 'Multiple escaping of escape ok', + "--- A\\B\\C\n", + [ "A\\B\\C" ], + 'Multiple escaping of escape ok', ); # Escapes with whitespace yaml_ok( - "--- 'A\\B \\C'\n", - [ "A\\B \\C" ], - 'Multiple escaping of escape with whitespace ok', + "--- 'A\\B \\C'\n", + [ "A\\B \\C" ], + 'Multiple escaping of escape with whitespace ok', ); @@ -645,14 +645,14 @@ yaml_ok( # Check illegal characters that are in legal places yaml_ok( - "--- 'Wow!'\n", - [ "Wow!" ], - 'Bang in a quote', + "--- 'Wow!'\n", + [ "Wow!" ], + 'Bang in a quote', ); yaml_ok( - "--- 'This&that'\n", - [ "This&that" ], - 'Ampersand in a quote', + "--- 'This&that'\n", + [ "This&that" ], + 'Ampersand in a quote', ); @@ -663,16 +663,16 @@ yaml_ok( # Check for unescaped boolean keywords is_deeply( - CPAN::Meta::YAML->new( 'True' )->write_string, - "--- 'True'\n", - 'Idiomatic trivial boolean string is escaped', + CPAN::Meta::YAML->new( 'True' )->write_string, + "--- 'True'\n", + 'Idiomatic trivial boolean string is escaped', ); is_deeply( CPAN::Meta::YAML->new( [ qw{ - null Null NULL - y Y yes Yes YES n N no No NO - true True TRUE false False FALSE - on On ON off Off OFF + null Null NULL + y Y yes Yes YES n N no No NO + true True TRUE false False FALSE + on On ON off Off OFF } ] )->write_string, <<'END_YAML' ); --- - 'null' @@ -710,7 +710,7 @@ END_YAML # Always quote for scalars ending with : is_deeply( - CPAN::Meta::YAML->new( [ 'A:' ] )->write_string, - "---\n- 'A:'\n", - 'Simple scalar ending in a colon is correctly quoted', + CPAN::Meta::YAML->new( [ 'A:' ] )->write_string, + "---\n- 'A:'\n", + 'Simple scalar ending in a colon is correctly quoted', ); diff --git a/cpan/CPAN-Meta-YAML/t/05_export.t b/cpan/CPAN-Meta-YAML/t/05_export.t index cf63861..edb43c8 100644 --- a/cpan/CPAN-Meta-YAML/t/05_export.t +++ b/cpan/CPAN-Meta-YAML/t/05_export.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of basic document structures use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use Test::More tests => 6; diff --git a/cpan/CPAN-Meta-YAML/t/11_meta_yml.t b/cpan/CPAN-Meta-YAML/t/11_meta_yml.t index c8953bb..e2604e2 100644 --- a/cpan/CPAN-Meta-YAML/t/11_meta_yml.t +++ b/cpan/CPAN-Meta-YAML/t/11_meta_yml.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of common META.yml examples use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -21,7 +21,7 @@ use CPAN::Meta::YAML; # Testing CPAN::Meta::YAML's own META.yml file yaml_ok( - <<'END_YAML', + <<'END_YAML', abstract: Read/Write YAML files with as little code as possible author: 'Adam Kennedy ' build_requires: @@ -39,26 +39,26 @@ requires: perl: 5.005 version: 0.03 END_YAML - [ { - abstract => 'Read/Write YAML files with as little code as possible', - author => 'Adam Kennedy ', - build_requires => { - 'File::Spec' => '0.80', - 'Test::More' => '0.47', - }, - distribution_type => 'module', - generated_by => 'Module::Install version 0.63', - license => 'perl', - name => 'YAML-Tiny', - no_index => { - directory => [ qw{inc t} ], - }, - requires => { - perl => '5.005', - }, - version => '0.03', - } ], - 'CPAN::Meta::YAML', + [ { + abstract => 'Read/Write YAML files with as little code as possible', + author => 'Adam Kennedy ', + build_requires => { + 'File::Spec' => '0.80', + 'Test::More' => '0.47', + }, + distribution_type => 'module', + generated_by => 'Module::Install version 0.63', + license => 'perl', + name => 'YAML-Tiny', + no_index => { + directory => [ qw{inc t} ], + }, + requires => { + perl => '5.005', + }, + version => '0.03', + } ], + 'CPAN::Meta::YAML', ); @@ -70,7 +70,7 @@ END_YAML # Testing a META.yml from a commercial project that crashed yaml_ok( - <<'END_YAML', + <<'END_YAML', # http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: ITS-SIN-FIDS-Content-XML @@ -84,19 +84,19 @@ requires: distribution_type: module generated_by: ExtUtils::MakeMaker version 6.30 END_YAML - [ { - name => 'ITS-SIN-FIDS-Content-XML', - version => "0.01", # this kludge is to prevent floating point comparison errors - version_from => 'lib/ITS/SIN/FIDS/Content/XML.pm', - installdirs => 'site', - requires => { - 'Test::More' => 0.45, - 'XML::Simple' => 2, - }, - distribution_type => 'module', - generated_by => 'ExtUtils::MakeMaker version 6.30', - } ], - 'CPAN::Meta::YAML', + [ { + name => 'ITS-SIN-FIDS-Content-XML', + version => "0.01", # this kludge is to prevent floating point comparison errors + version_from => 'lib/ITS/SIN/FIDS/Content/XML.pm', + installdirs => 'site', + requires => { + 'Test::More' => 0.45, + 'XML::Simple' => 2, + }, + distribution_type => 'module', + generated_by => 'ExtUtils::MakeMaker version 6.30', + } ], + 'CPAN::Meta::YAML', ); @@ -108,7 +108,7 @@ END_YAML # Testing various failing META.yml files from CPAN yaml_ok( - <<'END_YAML', + <<'END_YAML', --- abstract: Mii in Nintendo Wii data parser and builder author: Toru Yamaguchi @@ -134,37 +134,37 @@ requires: XML::LibXML: 1.62 version: 0.02 END_YAML - [ { - abstract => 'Mii in Nintendo Wii data parser and builder', - author => 'Toru Yamaguchi ', - distribution_type => 'module', - generated_by => 'Module::Install version 0.65', - license => 'perl', - 'meta-spec' => { - url => 'http://module-build.sourceforge.net/META-spec-v1.3.html', - version => '1.3', - }, - name => 'Games-Nintendo-Wii-Mii', - no_index => { - directory => [ qw{ inc t } ], - }, - requires => { - 'Carp' => '1.03', - 'Class::Accessor::Fast' => '0.3', - 'File::Slurp' => '9999.12', - 'IO::File' => '1.1', - 'Readonly' => '0', - 'Tie::IxHash' => '1.21', - 'URI' => '1.35', - 'XML::LibXML' => '1.62', - }, - version => '0.02', - } ], - 'Games-Nintendo-Wii-Mii', + [ { + abstract => 'Mii in Nintendo Wii data parser and builder', + author => 'Toru Yamaguchi ', + distribution_type => 'module', + generated_by => 'Module::Install version 0.65', + license => 'perl', + 'meta-spec' => { + url => 'http://module-build.sourceforge.net/META-spec-v1.3.html', + version => '1.3', + }, + name => 'Games-Nintendo-Wii-Mii', + no_index => { + directory => [ qw{ inc t } ], + }, + requires => { + 'Carp' => '1.03', + 'Class::Accessor::Fast' => '0.3', + 'File::Slurp' => '9999.12', + 'IO::File' => '1.1', + 'Readonly' => '0', + 'Tie::IxHash' => '1.21', + 'URI' => '1.35', + 'XML::LibXML' => '1.62', + }, + version => '0.02', + } ], + 'Games-Nintendo-Wii-Mii', ); yaml_ok( - <<'END_YAML', + <<'END_YAML', # http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Acme-Time-Baby @@ -177,19 +177,19 @@ requires: distribution_type: module generated_by: ExtUtils::MakeMaker version 6.17 END_YAML - [ { - name => 'Acme-Time-Baby', - version => '2.106', - version_from => 'Baby.pm', - installdirs => 'site', - requires => { - warnings => undef, - }, - distribution_type => 'module', - generated_by => 'ExtUtils::MakeMaker version 6.17', - } ], - 'Acme-Time-Baby', - noyamlperl => 1, + [ { + name => 'Acme-Time-Baby', + version => '2.106', + version_from => 'Baby.pm', + installdirs => 'site', + requires => { + warnings => undef, + }, + distribution_type => 'module', + generated_by => 'ExtUtils::MakeMaker version 6.17', + } ], + 'Acme-Time-Baby', + noyamlperl => 1, ); @@ -200,7 +200,7 @@ END_YAML # File with a YAML header yaml_ok( - <<'END_YAML', + <<'END_YAML', --- #YAML:1.0 name: Data-Swap version: 0.05 @@ -210,18 +210,18 @@ requires: perl: 5.6.0 dynamic_config: 0 END_YAML - [ { - name => 'Data-Swap', - version => '0.05', - license => 'perl', - distribution_type => 'module', - requires => { - perl => '5.6.0', - }, - dynamic_config => '0', - } ], - 'Data-Swap', - nosyck => 1, + [ { + name => 'Data-Swap', + version => '0.05', + license => 'perl', + distribution_type => 'module', + requires => { + perl => '5.6.0', + }, + dynamic_config => '0', + } ], + 'Data-Swap', + nosyck => 1, ); @@ -232,165 +232,165 @@ END_YAML # Various files that fail for unknown reasons SCOPE: { - my $content = load_ok( - 'Template-Provider-Unicode-Japanese.yml', - catfile( test_data_directory(), 'Template-Provider-Unicode-Japanese.yml' ), - 100 - ); - yaml_ok( - $content, - [ { - abstract => 'Decode all templates by Unicode::Japanese', - author => 'Hironori Yoshida C<< >>', - distribution_type => 'module', - generated_by => 'Module::Install version 0.65', - license => 'perl', - 'meta-spec' => { - url => 'http://module-build.sourceforge.net/META-spec-v1.3.html', - version => '1.3', - }, - name => 'Template-Provider-Unicode-Japanese', - no_index => { - directory => [ qw{ inc t } ], - }, - requires => { - 'Template::Config' => 0, - 'Unicode::Japanese' => 0, - perl => '5.6.0', - version => '0', - }, - version => '1.2.1', - } ], - 'Template-Provider-Unicode-Japanese', - noyamlperl => 1, - ); + my $content = load_ok( + 'Template-Provider-Unicode-Japanese.yml', + catfile( test_data_directory(), 'Template-Provider-Unicode-Japanese.yml' ), + 100 + ); + yaml_ok( + $content, + [ { + abstract => 'Decode all templates by Unicode::Japanese', + author => 'Hironori Yoshida C<< >>', + distribution_type => 'module', + generated_by => 'Module::Install version 0.65', + license => 'perl', + 'meta-spec' => { + url => 'http://module-build.sourceforge.net/META-spec-v1.3.html', + version => '1.3', + }, + name => 'Template-Provider-Unicode-Japanese', + no_index => { + directory => [ qw{ inc t } ], + }, + requires => { + 'Template::Config' => 0, + 'Unicode::Japanese' => 0, + perl => '5.6.0', + version => '0', + }, + version => '1.2.1', + } ], + 'Template-Provider-Unicode-Japanese', + noyamlperl => 1, + ); } SCOPE: { - my $content = load_ok( - 'HTML-WebDAO.yml', - catfile( test_data_directory(), 'HTML-WebDAO.yml' ), - 100 - ); - yaml_ok( - $content, - [ { - abstract => 'Perl extension for create complex web application', - author => [ - 'Zahatski Aliaksandr, Ezagap@users.sourceforge.netE', - ], - license => 'perl', - name => 'HTML-WebDAO', - version => '0.04', - } ], - 'HTML-WebDAO', - nosyck => 1, - ); + my $content = load_ok( + 'HTML-WebDAO.yml', + catfile( test_data_directory(), 'HTML-WebDAO.yml' ), + 100 + ); + yaml_ok( + $content, + [ { + abstract => 'Perl extension for create complex web application', + author => [ + 'Zahatski Aliaksandr, Ezagap@users.sourceforge.netE', + ], + license => 'perl', + name => 'HTML-WebDAO', + version => '0.04', + } ], + 'HTML-WebDAO', + nosyck => 1, + ); } SCOPE: { - my $content = load_ok( - 'Spreadsheet-Read.yml', - catfile( test_data_directory(), 'Spreadsheet-Read.yml' ), - 100 - ); - yaml_ok( - $content, - [ { - 'resources' => { - 'license' => 'http://dev.perl.org/licenses/' - }, - 'meta-spec' => { - 'version' => '1.4', - 'url' => 'http://module-build.sourceforge.net/META-spec-v1.4.html' - }, - 'distribution_type' => 'module', - 'generated_by' => 'Author', - 'version' => 'VERSION', - 'name' => 'Read', - 'author' => [ - 'H.Merijn Brand ' - ], - 'license' => 'perl', - 'build_requires' => { - 'Test::More' => '0', - 'Test::Harness' => '0', - 'perl' => '5.006' - }, - 'provides' => { - 'Spreadsheet::Read' => { - 'version' => 'VERSION', - 'file' => 'Read.pm' - } - }, - 'optional_features' => [ - { - 'opt_csv' => { - 'requires' => { - 'Text::CSV_XS' => '0.23' - }, - 'recommends' => { - 'Text::CSV_PP' => '1.10', - 'Text::CSV_XS' => '0.58', - 'Text::CSV' => '1.10' - }, - 'description' => 'Provides parsing of CSV streams' - } - }, - { - 'opt_excel' => { - 'requires' => { - 'Spreadsheet::ParseExcel' => '0.26', - 'Spreadsheet::ParseExcel::FmtDefault' => '0' - }, - 'recommends' => { - 'Spreadsheet::ParseExcel' => '0.42' - }, - 'description' => 'Provides parsing of Microsoft Excel files' - } - }, - { - 'opt_excelx' => { - 'requires' => { - 'Spreadsheet::XLSX' => '0.07' - }, - 'description' => 'Provides parsing of Microsoft Excel 2007 files' - } - }, - { - 'opt_oo' => { - 'requires' => { - 'Spreadsheet::ReadSXC' => '0.2' - }, - 'description' => 'Provides parsing of OpenOffice spreadsheets' - } - }, - { - 'opt_tools' => { - 'recommends' => { - 'Tk::TableMatrix::Spreadsheet' => '0', - 'Tk::NoteBook' => '0', - 'Tk' => '0' - }, - 'description' => 'Spreadsheet tools' - } - } - ], - 'requires' => { - 'perl' => '5.006', - 'Data::Dumper' => '0', - 'Exporter' => '0', - 'Carp' => '0' - }, - 'recommends' => { - 'perl' => '5.008005', - 'IO::Scalar' => '0', - 'File::Temp' => '0.14' - }, - 'abstract' => 'Meta-Wrapper for reading spreadsheet data' - } ], - 'Spreadsheet-Read', - noyamlpm => 1, - noyamlperl => 1, - ); + my $content = load_ok( + 'Spreadsheet-Read.yml', + catfile( test_data_directory(), 'Spreadsheet-Read.yml' ), + 100 + ); + yaml_ok( + $content, + [ { + 'resources' => { + 'license' => 'http://dev.perl.org/licenses/' + }, + 'meta-spec' => { + 'version' => '1.4', + 'url' => 'http://module-build.sourceforge.net/META-spec-v1.4.html' + }, + 'distribution_type' => 'module', + 'generated_by' => 'Author', + 'version' => 'VERSION', + 'name' => 'Read', + 'author' => [ + 'H.Merijn Brand ' + ], + 'license' => 'perl', + 'build_requires' => { + 'Test::More' => '0', + 'Test::Harness' => '0', + 'perl' => '5.006' + }, + 'provides' => { + 'Spreadsheet::Read' => { + 'version' => 'VERSION', + 'file' => 'Read.pm' + } + }, + 'optional_features' => [ + { + 'opt_csv' => { + 'requires' => { + 'Text::CSV_XS' => '0.23' + }, + 'recommends' => { + 'Text::CSV_PP' => '1.10', + 'Text::CSV_XS' => '0.58', + 'Text::CSV' => '1.10' + }, + 'description' => 'Provides parsing of CSV streams' + } + }, + { + 'opt_excel' => { + 'requires' => { + 'Spreadsheet::ParseExcel' => '0.26', + 'Spreadsheet::ParseExcel::FmtDefault' => '0' + }, + 'recommends' => { + 'Spreadsheet::ParseExcel' => '0.42' + }, + 'description' => 'Provides parsing of Microsoft Excel files' + } + }, + { + 'opt_excelx' => { + 'requires' => { + 'Spreadsheet::XLSX' => '0.07' + }, + 'description' => 'Provides parsing of Microsoft Excel 2007 files' + } + }, + { + 'opt_oo' => { + 'requires' => { + 'Spreadsheet::ReadSXC' => '0.2' + }, + 'description' => 'Provides parsing of OpenOffice spreadsheets' + } + }, + { + 'opt_tools' => { + 'recommends' => { + 'Tk::TableMatrix::Spreadsheet' => '0', + 'Tk::NoteBook' => '0', + 'Tk' => '0' + }, + 'description' => 'Spreadsheet tools' + } + } + ], + 'requires' => { + 'perl' => '5.006', + 'Data::Dumper' => '0', + 'Exporter' => '0', + 'Carp' => '0' + }, + 'recommends' => { + 'perl' => '5.008005', + 'IO::Scalar' => '0', + 'File::Temp' => '0.14' + }, + 'abstract' => 'Meta-Wrapper for reading spreadsheet data' + } ], + 'Spreadsheet-Read', + noyamlpm => 1, + noyamlperl => 1, + ); } diff --git a/cpan/CPAN-Meta-YAML/t/12_plagger.t b/cpan/CPAN-Meta-YAML/t/12_plagger.t index e2061be..86abc3b 100644 --- a/cpan/CPAN-Meta-YAML/t/12_plagger.t +++ b/cpan/CPAN-Meta-YAML/t/12_plagger.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing Plagger config samples from Miyagawa-san's YAPC::NA 2006 talk use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -21,7 +21,7 @@ use CPAN::Meta::YAML; # Example Plagger Configuration 1 yaml_ok( - <<'END_YAML', + <<'END_YAML', plugins: - module: Subscription::Bloglines config: @@ -37,28 +37,28 @@ plugins: via: smtp host: smtp.example.com END_YAML - [ { plugins => [ - { - module => 'Subscription::Bloglines', - config => { - username => 'you@example.pl', - password => 'foobar', - mark_read => 1, - }, - }, - { - module => 'Publish::Gmail', - config => { - mailto => 'example@gmail.com', - mailfrom => 'miyagawa@example.com', - mailroute => { - via => 'smtp', - host => 'smtp.example.com', - }, - }, - }, - ] } ], - 'Plagger', + [ { plugins => [ + { + module => 'Subscription::Bloglines', + config => { + username => 'you@example.pl', + password => 'foobar', + mark_read => 1, + }, + }, + { + module => 'Publish::Gmail', + config => { + mailto => 'example@gmail.com', + mailfrom => 'miyagawa@example.com', + mailroute => { + via => 'smtp', + host => 'smtp.example.com', + }, + }, + }, + ] } ], + 'Plagger', ); @@ -69,7 +69,7 @@ END_YAML # Example Plagger Configuration 2 yaml_ok( - <<'END_YAML', + <<'END_YAML', plugins: - module: Subscription::Config config: @@ -95,33 +95,33 @@ plugins: - '#plagger-ja' - '#plagger' - + END_YAML - [ { plugins => [ { - module => 'Subscription::Config', - config => { - feed => [ 'http://plagger.org/.../rss' ], - }, - }, { - module => 'Filter::Rule', - rule => { - module => 'Fresh', - mtime => { - path => '/tmp/rssbot.time', - autoupdate => 1, - }, - }, - }, { - module => 'Notify::IRC', - config => { - daemon_port => 9999, - nickname => 'plaggerbot', - server_host => 'chat.freenode.net', - server_channels => [ - '#plagger-ja', - '#plagger', - ], - }, - } ] } ], - 'plagger2', -); + [ { plugins => [ { + module => 'Subscription::Config', + config => { + feed => [ 'http://plagger.org/.../rss' ], + }, + }, { + module => 'Filter::Rule', + rule => { + module => 'Fresh', + mtime => { + path => '/tmp/rssbot.time', + autoupdate => 1, + }, + }, + }, { + module => 'Notify::IRC', + config => { + daemon_port => 9999, + nickname => 'plaggerbot', + server_host => 'chat.freenode.net', + server_channels => [ + '#plagger-ja', + '#plagger', + ], + }, + } ] } ], + 'plagger2', +); diff --git a/cpan/CPAN-Meta-YAML/t/13_perl_smith.t b/cpan/CPAN-Meta-YAML/t/13_perl_smith.t index 6e4a70d..b6e4977 100644 --- a/cpan/CPAN-Meta-YAML/t/13_perl_smith.t +++ b/cpan/CPAN-Meta-YAML/t/13_perl_smith.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of common META.yml examples use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -24,126 +24,126 @@ my $vanilla_file = catfile( test_data_directory(), 'vanilla.yml' ); my $vanilla = load_ok( 'yanilla.yml', $vanilla_file, 1000 ); yaml_ok( - $vanilla, - [ { - package_name => 'VanillaPerl', - package_version => 5, - download_dir => 'c:\temp\vp_sources', - build_dir => 'c:\temp\vp_build', - image_dir => 'c:\vanilla-perl', - binary => [ - { - name => 'dmake', - url => 'http://search.cpan.org/CPAN/authors/id/S/SH/SHAY/dmake-4.5-20060619-SHAY.zip', - license => { - 'dmake/COPYING' => 'dmake/COPYING', - 'dmake/readme/license.txt' => 'dmake/license.txt', - }, - install_to => { - 'dmake/dmake.exe' => 'dmake/bin/dmake.exe', - 'dmake/startup' => 'dmake/bin/startup', - }, - }, - { - name => 'gcc-core', - url => 'http://umn.dl.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gz', - license => { - 'COPYING' => 'gcc/COPYING', - 'COPYING.lib' => 'gcc/COPYING.lib', - }, - install_to => 'mingw', - }, - { - name => 'gcc-g++', - url => 'http://umn.dl.sourceforge.net/mingw/gcc-g++-3.4.5-20060117-1.tar.gz', - license => undef, - install_to => 'mingw', - }, - { - name => 'binutils', - url => 'http://umn.dl.sourceforge.net/mingw/binutils-2.16.91-20060119-1.tar.gz', - license => { - 'Copying' => 'binutils/Copying', - 'Copying.lib' => 'binutils/Copying.lib', - }, - install_to => 'mingw', - }, - { - name => 'mingw-runtime', - url => 'http://umn.dl.sourceforge.net/mingw/mingw-runtime-3.10.tar.gz', - license => { - 'doc/mingw-runtime/Contributors' => 'mingw/Contributors', - 'doc/mingw-runtime/Disclaimer' => 'mingw/Disclaimer', - }, - install_to => 'mingw', - }, - { - name => 'w32api', - url => 'http://umn.dl.sourceforge.net/mingw/w32api-3.6.tar.gz', - license => undef, - install_to => 'mingw', - extra => { - 'extra\README.w32api' => 'licenses\win32api\README.w32api', - }, - } - ], - source => [ - { - name => 'perl', - url => 'http://mirrors.kernel.org/CPAN/src/perl-5.8.8.tar.gz', - license => { - 'perl-5.8.8/Readme' => 'perl/Readme', - 'perl-5.8.8/Artistic' => 'perl/Artistic', - 'perl-5.8.8/Copying' => 'perl/Copying', - }, - unpack_to => 'perl', - install_to => 'perl', - after => { - 'extra\Config.pm' => 'lib\CPAN\Config.pm', - }, - } - ], - modules => [ - { - name => 'Win32::Job', - unpack_to => { - APIFile => 'Win32API-File', - }, - }, - { - name => 'IO', - force => 1, - }, - { - name => 'Compress::Zlib', - }, - { - name => 'IO::Zlib', - }, - { - name => 'Archive::Tar', - }, - { - name => 'Net::FTP', - extra => { - 'extra\libnet.cfg' => 'libnet.cfg', - }, - }, - ], - extra => { - 'README' => 'README.txt', - 'LICENSE.txt' => 'LICENSE.txt', - 'Changes' => 'Release-Notes.txt', - 'extra\Config.pm' => 'perl\lib\CPAN\Config.pm', - 'extra\links\Perl-Documentation.url' => 'links\Perl Documentation.url', - 'extra\links\Perl-Homepage.url' => 'links\Perl Homepage.url', - 'extra\links\Perl-Mailing-Lists.url' => 'links\Perl Mailing Lists.url', - 'extra\links\Perlmonks-Community-Forum.url' => 'links\Perlmonks Community Forum.url', - 'extra\links\Search-CPAN-Modules.url' => 'links\Search CPAN Modules.url', - 'extra\links\Vanilla-Perl-Homepage.url' => 'links\Vanilla Perl Homepage.url', - }, - } ], - 'vanilla.yml', - nosyck => 1, - noyamlperl => 1, + $vanilla, + [ { + package_name => 'VanillaPerl', + package_version => 5, + download_dir => 'c:\temp\vp_sources', + build_dir => 'c:\temp\vp_build', + image_dir => 'c:\vanilla-perl', + binary => [ + { + name => 'dmake', + url => 'http://search.cpan.org/CPAN/authors/id/S/SH/SHAY/dmake-4.5-20060619-SHAY.zip', + license => { + 'dmake/COPYING' => 'dmake/COPYING', + 'dmake/readme/license.txt' => 'dmake/license.txt', + }, + install_to => { + 'dmake/dmake.exe' => 'dmake/bin/dmake.exe', + 'dmake/startup' => 'dmake/bin/startup', + }, + }, + { + name => 'gcc-core', + url => 'http://umn.dl.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gz', + license => { + 'COPYING' => 'gcc/COPYING', + 'COPYING.lib' => 'gcc/COPYING.lib', + }, + install_to => 'mingw', + }, + { + name => 'gcc-g++', + url => 'http://umn.dl.sourceforge.net/mingw/gcc-g++-3.4.5-20060117-1.tar.gz', + license => undef, + install_to => 'mingw', + }, + { + name => 'binutils', + url => 'http://umn.dl.sourceforge.net/mingw/binutils-2.16.91-20060119-1.tar.gz', + license => { + 'Copying' => 'binutils/Copying', + 'Copying.lib' => 'binutils/Copying.lib', + }, + install_to => 'mingw', + }, + { + name => 'mingw-runtime', + url => 'http://umn.dl.sourceforge.net/mingw/mingw-runtime-3.10.tar.gz', + license => { + 'doc/mingw-runtime/Contributors' => 'mingw/Contributors', + 'doc/mingw-runtime/Disclaimer' => 'mingw/Disclaimer', + }, + install_to => 'mingw', + }, + { + name => 'w32api', + url => 'http://umn.dl.sourceforge.net/mingw/w32api-3.6.tar.gz', + license => undef, + install_to => 'mingw', + extra => { + 'extra\README.w32api' => 'licenses\win32api\README.w32api', + }, + } + ], + source => [ + { + name => 'perl', + url => 'http://mirrors.kernel.org/CPAN/src/perl-5.8.8.tar.gz', + license => { + 'perl-5.8.8/Readme' => 'perl/Readme', + 'perl-5.8.8/Artistic' => 'perl/Artistic', + 'perl-5.8.8/Copying' => 'perl/Copying', + }, + unpack_to => 'perl', + install_to => 'perl', + after => { + 'extra\Config.pm' => 'lib\CPAN\Config.pm', + }, + } + ], + modules => [ + { + name => 'Win32::Job', + unpack_to => { + APIFile => 'Win32API-File', + }, + }, + { + name => 'IO', + force => 1, + }, + { + name => 'Compress::Zlib', + }, + { + name => 'IO::Zlib', + }, + { + name => 'Archive::Tar', + }, + { + name => 'Net::FTP', + extra => { + 'extra\libnet.cfg' => 'libnet.cfg', + }, + }, + ], + extra => { + 'README' => 'README.txt', + 'LICENSE.txt' => 'LICENSE.txt', + 'Changes' => 'Release-Notes.txt', + 'extra\Config.pm' => 'perl\lib\CPAN\Config.pm', + 'extra\links\Perl-Documentation.url' => 'links\Perl Documentation.url', + 'extra\links\Perl-Homepage.url' => 'links\Perl Homepage.url', + 'extra\links\Perl-Mailing-Lists.url' => 'links\Perl Mailing Lists.url', + 'extra\links\Perlmonks-Community-Forum.url' => 'links\Perlmonks Community Forum.url', + 'extra\links\Search-CPAN-Modules.url' => 'links\Search CPAN Modules.url', + 'extra\links\Vanilla-Perl-Homepage.url' => 'links\Vanilla Perl Homepage.url', + }, + } ], + 'vanilla.yml', + nosyck => 1, + noyamlperl => 1, ); diff --git a/cpan/CPAN-Meta-YAML/t/14_yaml_org.t b/cpan/CPAN-Meta-YAML/t/14_yaml_org.t index c2945b9..18b5eb5 100644 --- a/cpan/CPAN-Meta-YAML/t/14_yaml_org.t +++ b/cpan/CPAN-Meta-YAML/t/14_yaml_org.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of common META.yml examples use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -24,40 +24,40 @@ my $sample_file = catfile( test_data_directory(), 'sample.yml' ); my $sample = load_ok( 'sample.yml', $sample_file, 500 ); yaml_ok( - $sample, - [ { - invoice => 34843, - date => '2001-01-23', - 'bill-to' => { - given => 'Chris', - family => 'Dumars', - address => { - lines => "458 Walkman Dr.\nSuite #292\n", - city => 'Royal Oak', - state => 'MI', - postal => 48046, - }, - }, - product => [ - { - sku => 'BL394D', - quantity => '4', - description => 'Basketball', - price => '450.00', - }, - { - sku => 'BL4438H', - quantity => '1', - description => 'Super Hoop', - price => '2392.00', - }, - ], - tax => '251.42', - total => '4443.52', - comments => <<'END_TEXT', + $sample, + [ { + invoice => 34843, + date => '2001-01-23', + 'bill-to' => { + given => 'Chris', + family => 'Dumars', + address => { + lines => "458 Walkman Dr.\nSuite #292\n", + city => 'Royal Oak', + state => 'MI', + postal => 48046, + }, + }, + product => [ + { + sku => 'BL394D', + quantity => '4', + description => 'Basketball', + price => '450.00', + }, + { + sku => 'BL4438H', + quantity => '1', + description => 'Super Hoop', + price => '2392.00', + }, + ], + tax => '251.42', + total => '4443.52', + comments => <<'END_TEXT', Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338. END_TEXT - } ], - 'sample.yml', - # nosyck => 1, + } ], + 'sample.yml', + # nosyck => 1, ); diff --git a/cpan/CPAN-Meta-YAML/t/15_multibyte.t b/cpan/CPAN-Meta-YAML/t/15_multibyte.t index 5adbc1e..0798084 100644 --- a/cpan/CPAN-Meta-YAML/t/15_multibyte.t +++ b/cpan/CPAN-Meta-YAML/t/15_multibyte.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of META.yml containing AVAR's name use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -30,23 +30,23 @@ my $yaml = eval { CPAN::Meta::YAML->read_string( $yaml_copy ); }; is( $@, '', "$name: CPAN::Meta::YAML parses without error" ); is( $yaml_copy, $sample, "$name: CPAN::Meta::YAML does not modify the input string" ); SKIP: { - skip( "Shortcutting after failure", 2 ) if $@; - isa_ok( $yaml, 'CPAN::Meta::YAML' ); - is_deeply( $yaml->[0]->{build_requires}, { - 'Config' => 0, - 'Test::More' => 0, - 'XSLoader' => 0, - }, 'build_requires ok' ); + skip( "Shortcutting after failure", 2 ) if $@; + isa_ok( $yaml, 'CPAN::Meta::YAML' ); + is_deeply( $yaml->[0]->{build_requires}, { + 'Config' => 0, + 'Test::More' => 0, + 'XSLoader' => 0, + }, 'build_requires ok' ); } SKIP: { - unless ( CPAN::Meta::YAML::HAVE_UTF8() ) { - skip("no utf8 support", 2 ); - } - eval { utf8::is_utf8('') }; - if ( $@ ) { - skip("no is_utf8 to test with until 5.8.1", 2); - } - ok( utf8::is_utf8($yaml->[0]->{author}), "utf8 decoded" ); - is( length($yaml->[0]->{author}), 39, "utf8 decoded as characters" ); + unless ( CPAN::Meta::YAML::HAVE_UTF8() ) { + skip("no utf8 support", 2 ); + } + eval { utf8::is_utf8('') }; + if ( $@ ) { + skip("no is_utf8 to test with until 5.8.1", 2); + } + ok( utf8::is_utf8($yaml->[0]->{author}), "utf8 decoded" ); + is( length($yaml->[0]->{author}), 39, "utf8 decoded as characters" ); } diff --git a/cpan/CPAN-Meta-YAML/t/16_nullrefs.t b/cpan/CPAN-Meta-YAML/t/16_nullrefs.t index 158467e..36bd730 100644 --- a/cpan/CPAN-Meta-YAML/t/16_nullrefs.t +++ b/cpan/CPAN-Meta-YAML/t/16_nullrefs.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing for null references use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -21,10 +21,10 @@ use CPAN::Meta::YAML; # Example Empty References yaml_ok( - <<'END_YAML', + <<'END_YAML', --- [] --- {} END_YAML - [ [], {} ], - 'Empty references', + [ [], {} ], + 'Empty references', ); diff --git a/cpan/CPAN-Meta-YAML/t/17_toolbar.t b/cpan/CPAN-Meta-YAML/t/17_toolbar.t index f5d4d43..31ad6bc 100644 --- a/cpan/CPAN-Meta-YAML/t/17_toolbar.t +++ b/cpan/CPAN-Meta-YAML/t/17_toolbar.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing of a known-bad file from an editor use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -25,26 +25,26 @@ my $toolbar_file = catfile( test_data_directory(), 'toolbar.yml' ); my $toolbar = load_ok( 'toolbar.yml', $toolbar_file, 100 ); yaml_ok( - $toolbar, - [ { - main_toolbar => [ - 'item file-new', - 'item file-open', - 'item file-print#', - 'item file-close#', - 'item file-save-all', - 'item file-save', - undef, - 'item edit-changes-undo', - 'item edit-changes-redo', - undef, - 'item edit-cut', - 'item edit-copy', - 'item edit-paste', - 'item edit-replace', - 'item edit-delete', - ] - } ], - 'toolbar.yml', - noyamlperl => 1, + $toolbar, + [ { + main_toolbar => [ + 'item file-new', + 'item file-open', + 'item file-print#', + 'item file-close#', + 'item file-save-all', + 'item file-save', + undef, + 'item edit-changes-undo', + 'item edit-changes-redo', + undef, + 'item edit-cut', + 'item edit-copy', + 'item edit-paste', + 'item edit-replace', + 'item edit-delete', + ] + } ], + 'toolbar.yml', + noyamlperl => 1, ); diff --git a/cpan/CPAN-Meta-YAML/t/18_tap.t b/cpan/CPAN-Meta-YAML/t/18_tap.t index adb2f01..9c86748 100644 --- a/cpan/CPAN-Meta-YAML/t/18_tap.t +++ b/cpan/CPAN-Meta-YAML/t/18_tap.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing relating to functionality in the Test Anything Protocol use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -22,59 +22,59 @@ use CPAN::Meta::YAML (); # Make sure we support x-foo keys yaml_ok( - "---\nx-foo: 1\n", - [ { 'x-foo' => 1 } ], - 'x-foo key', + "---\nx-foo: 1\n", + [ { 'x-foo' => 1 } ], + 'x-foo key', ); # Document ending (hash) yaml_ok( - "---\n" - . " foo: bar\n" - . "...\n", - [ { foo => "bar" } ], - 'document_end_hash', - noyamlpm => 1, - nosyck => 1, - noyamlperl => 1, + "---\n" + . " foo: bar\n" + . "...\n", + [ { foo => "bar" } ], + 'document_end_hash', + noyamlpm => 1, + nosyck => 1, + noyamlperl => 1, ); # Document ending (array) yaml_ok( - "---\n" - . "- foo\n" - . "...\n", - [ [ 'foo' ] ], - 'document_end_array', - noyamlpm => 1, - noyamlperl => 1, + "---\n" + . "- foo\n" + . "...\n", + [ [ 'foo' ] ], + 'document_end_array', + noyamlpm => 1, + noyamlperl => 1, ); # Multiple documents (simple) yaml_ok( - "---\n" - . "- foo\n" - . "...\n" - . "---\n" - . "- foo\n" - . "...\n", - [ [ 'foo' ], [ 'foo' ] ], - 'multi_document_simple', - noyamlpm => 1, - noyamlperl => 1, + "---\n" + . "- foo\n" + . "...\n" + . "---\n" + . "- foo\n" + . "...\n", + [ [ 'foo' ], [ 'foo' ] ], + 'multi_document_simple', + noyamlpm => 1, + noyamlperl => 1, ); # Multiple documents (whitespace-separated) yaml_ok( - "---\n" - . "- foo\n" - . "...\n" - . "\n" - . "---\n" - . "- foo\n" - . "...\n", - [ [ 'foo' ], [ 'foo' ] ], - 'multi_document_space', - noyamlpm => 1, - noyamlperl => 1, + "---\n" + . "- foo\n" + . "...\n" + . "\n" + . "---\n" + . "- foo\n" + . "...\n", + [ [ 'foo' ], [ 'foo' ] ], + 'multi_document_space', + noyamlpm => 1, + noyamlperl => 1, ); diff --git a/cpan/CPAN-Meta-YAML/t/19_errors.t b/cpan/CPAN-Meta-YAML/t/19_errors.t index e5cb645..cac7714 100644 --- a/cpan/CPAN-Meta-YAML/t/19_errors.t +++ b/cpan/CPAN-Meta-YAML/t/19_errors.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing documents that should fail use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -35,10 +35,10 @@ END_YAML yaml_error( <<'END_YAML', $FEATURE ); --- -version: !!perl/hash:version +version: !!perl/hash:version original: v2.0.2 qv: 1 - version: + version: - 2 - 0 - 2 diff --git a/cpan/CPAN-Meta-YAML/t/20_subclass.t b/cpan/CPAN-Meta-YAML/t/20_subclass.t index 50b5ea1..97ee993 100644 --- a/cpan/CPAN-Meta-YAML/t/20_subclass.t +++ b/cpan/CPAN-Meta-YAML/t/20_subclass.t @@ -1,11 +1,11 @@ -#!/usr/bin/perl - # Testing documents that should fail use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -20,27 +20,27 @@ use Test::More tests => 1; # Customized Class SCOPE: { - package Foo; - - use CPAN::Meta::YAML; - - use vars qw{@ISA}; - BEGIN { - @ISA = 'CPAN::Meta::YAML'; - } - - sub _write_scalar { - my $self = shift; - my $string = shift; - my $indent = shift; - if ( defined $indent ) { - return "'$indent'"; - } else { - return 'undef'; - } - } - - 1; + package Foo; + + use CPAN::Meta::YAML; + + use vars qw{@ISA}; + BEGIN { + @ISA = 'CPAN::Meta::YAML'; + } + + sub _write_scalar { + my $self = shift; + my $string = shift; + my $indent = shift; + if ( defined $indent ) { + return "'$indent'"; + } else { + return 'undef'; + } + } + + 1; } @@ -51,6 +51,6 @@ SCOPE: { # Generate the value my $object = Foo->new( - { foo => 'bar' } + { foo => 'bar' } ); is( $object->write_string, "---\nfoo: '1'\n", 'Subclassing works' ); diff --git a/cpan/CPAN-Meta-YAML/t/21_bom.t b/cpan/CPAN-Meta-YAML/t/21_bom.t index e28eff6..4765fa6 100644 --- a/cpan/CPAN-Meta-YAML/t/21_bom.t +++ b/cpan/CPAN-Meta-YAML/t/21_bom.t @@ -1,9 +1,9 @@ -#!/usr/bin/perl - use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -28,7 +28,7 @@ my $yaml = eval { CPAN::Meta::YAML->read_string( $yaml_copy ); }; is( $@, '', "$name: CPAN::Meta::YAML parses without error" ); is( $yaml_copy, $sample, "$name: CPAN::Meta::YAML does not modify the input string" ); SKIP: { - skip( "Shortcutting after failure", 2 ) if $@; - is( $yaml, undef, "file not parsed" ); - is( CPAN::Meta::YAML->errstr, "Stream has a non UTF-8 BOM", "correct error" ); + skip( "Shortcutting after failure", 2 ) if $@; + is( $yaml, undef, "file not parsed" ); + is( CPAN::Meta::YAML->errstr, "Stream has a non UTF-8 BOM", "correct error" ); } diff --git a/cpan/CPAN-Meta-YAML/t/22_comments.t b/cpan/CPAN-Meta-YAML/t/22_comments.t index 8b3f4df..1f0f402 100644 --- a/cpan/CPAN-Meta-YAML/t/22_comments.t +++ b/cpan/CPAN-Meta-YAML/t/22_comments.t @@ -1,12 +1,12 @@ -#!/usr/bin/perl - # Testing of inline comments. These comments can be quite useful in config # files and people will expect them to work. use strict; +use warnings; + BEGIN { - $| = 1; - $^W = 1; + $| = 1; + $^W = 1; } use File::Spec::Functions ':ALL'; @@ -22,7 +22,7 @@ use CPAN::Meta::YAML; # Main Tests yaml_ok( - <<'END_YAML', + <<'END_YAML', --- a: b#content c: d #comment @@ -41,33 +41,33 @@ l: [] # comment m: # comment n: o END_YAML - [ - { - a => 'b#content', - c => 'd', - e => [ - 'f', - 'g# content', - ], - h => 'single', - h2 => 'single # content', - i => 'double', - i2 => 'double # content', - j => "literal # content\nblock # content\n", - k => {}, - l => [], - m => { - n => 'o', - }, - }, - ], - 'Properly ignore comments', - noyamlpm => 1, + [ + { + a => 'b#content', + c => 'd', + e => [ + 'f', + 'g# content', + ], + h => 'single', + h2 => 'single # content', + i => 'double', + i2 => 'double # content', + j => "literal # content\nblock # content\n", + k => {}, + l => [], + m => { + n => 'o', + }, + }, + ], + 'Properly ignore comments', + noyamlpm => 1, ); # Repeat, with otherwise illegal characters in the comments yaml_ok( - <<'END_YAML', + <<'END_YAML', --- a: b#content c: d #comment '"!&@%` @@ -86,26 +86,26 @@ l: [] # comment '"!&@%` m: # comment '"!&@%` n: o END_YAML - [ - { - a => 'b#content', - c => 'd', - e => [ - 'f', - 'g# content', - ], - h => 'single', - h2 => 'single # content', - i => 'double', - i2 => 'double # content', - j => "literal # content\nblock # content\n", - k => {}, - l => [], - m => { - n => 'o', - }, - }, - ], - 'Properly ignore comments (with otherwise illegal characters)', - noyamlpm => 1, + [ + { + a => 'b#content', + c => 'd', + e => [ + 'f', + 'g# content', + ], + h => 'single', + h2 => 'single # content', + i => 'double', + i2 => 'double # content', + j => "literal # content\nblock # content\n", + k => {}, + l => [], + m => { + n => 'o', + }, + }, + ], + 'Properly ignore comments (with otherwise illegal characters)', + noyamlpm => 1, ); diff --git a/cpan/CPAN-Meta-YAML/t/lib/Test.pm b/cpan/CPAN-Meta-YAML/t/lib/Test.pm index 92cb05e..63dae54 100644 --- a/cpan/CPAN-Meta-YAML/t/lib/Test.pm +++ b/cpan/CPAN-Meta-YAML/t/lib/Test.pm @@ -1,308 +1,310 @@ package t::lib::Test; use strict; +use warnings; + use Exporter (); use File::Spec (); use Test::More (); use vars qw{@ISA @EXPORT}; BEGIN { - @ISA = qw{ Exporter }; - @EXPORT = qw{ - tests yaml_ok yaml_error slurp load_ok - test_data_directory - }; + @ISA = qw{ Exporter }; + @EXPORT = qw{ + tests yaml_ok yaml_error slurp load_ok + test_data_directory + }; } # Do we have the authorative YAML to test against eval { - require YAML; + require YAML; - # This doesn't currently work, but is documented to. - # So if it ever turns up, use it. - $YAML::UseVersion = 1; + # This doesn't currently work, but is documented to. + # So if it ever turns up, use it. + $YAML::UseVersion = 1; }; my $HAVE_YAMLPM = !! ( - $YAML::VERSION - and - $YAML::VERSION >= 0.66 + $YAML::VERSION + and + $YAML::VERSION >= 0.66 ); sub have_yamlpm { $HAVE_YAMLPM } # Do we have YAML::Perl to test against? eval { - require YAML::Perl; + require YAML::Perl; }; my $HAVE_YAMLPERL = !! ( - $YAML::Perl::VERSION - and - $YAML::Perl::VERSION >= 0.02 + $YAML::Perl::VERSION + and + $YAML::Perl::VERSION >= 0.02 ); sub have_yamlperl { $HAVE_YAMLPERL } # Do we have YAML::Syck to test against? eval { - require YAML::Syck; + require YAML::Syck; }; my $HAVE_SYCK = !! ( - $YAML::Syck::VERSION - and - $YAML::Syck::VERSION >= 1.05 + $YAML::Syck::VERSION + and + $YAML::Syck::VERSION >= 1.05 ); sub have_syck { $HAVE_SYCK } # Do we have YAML::XS to test against? eval { - require YAML::XS; + require YAML::XS; }; my $HAVE_XS = !! ( - $YAML::XS::VERSION - and - $YAML::XS::VERSION >= 0.29 + $YAML::XS::VERSION + and + $YAML::XS::VERSION >= 0.29 ); sub have_xs{ $HAVE_XS } # 22 tests per call to yaml_ok # 4 tests per call to load_ok sub tests { - return ( tests => count(@_) ); + return ( tests => count(@_) ); } sub test_data_directory { - return File::Spec->catdir( 't', 'data' ); + return File::Spec->catdir( 't', 'data' ); } sub count { - my $yaml_ok = shift || 0; - my $load_ok = shift || 0; - my $single = shift || 0; - my $count = $yaml_ok * 38 + $load_ok * 4 + $single; - return $count; + my $yaml_ok = shift || 0; + my $load_ok = shift || 0; + my $single = shift || 0; + my $count = $yaml_ok * 38 + $load_ok * 4 + $single; + return $count; } sub yaml_ok { - my $string = shift; - my $object = shift; - my $name = shift || 'unnamed'; - my %options = ( @_ ); - bless $object, 'CPAN::Meta::YAML'; - - # If YAML itself is available, test with it - SKIP: { - unless ( $HAVE_YAMLPM ) { - Test::More::skip( "Skipping YAML.pm, not available for testing", 7 ); - } - if ( $options{noyamlpm} ) { - Test::More::skip( "Skipping YAML.pm for known-broken feature", 7 ); - } - - # Test writing with YAML.pm - my $yamlpm_out = eval { YAML::Dump( @$object ) }; - Test::More::is( $@, '', "$name: YAML.pm saves without error" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 4 ) if $@; - Test::More::ok( - !!(defined $yamlpm_out and ! ref $yamlpm_out), - "$name: YAML.pm serializes correctly", - ); - my @yamlpm_round = eval { YAML::Load( $yamlpm_out ) }; - Test::More::is( $@, '', "$name: YAML.pm round-trips without error" ); - Test::More::skip( "Shortcutting after failure", 2 ) if $@; - my $round = bless [ @yamlpm_round ], 'CPAN::Meta::YAML'; - Test::More::is_deeply( $round, $object, "$name: YAML.pm round-trips correctly" ); - } - - # Test reading with YAML.pm - my $yamlpm_copy = $string; - my @yamlpm_in = eval { YAML::Load( $yamlpm_copy ) }; - Test::More::is( $@, '', "$name: YAML.pm loads without error" ); - Test::More::is( $yamlpm_copy, $string, "$name: YAML.pm does not modify the input string" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 1 ) if $@; - Test::More::is_deeply( \@yamlpm_in, $object, "$name: YAML.pm parses correctly" ); - } - } - - # If YAML::Syck itself is available, test with it - SKIP: { - unless ( $HAVE_SYCK ) { - Test::More::skip( "Skipping YAML::Syck, not available for testing", 7 ); - } - if ( $options{nosyck} ) { - Test::More::skip( "Skipping YAML::Syck for known-broken feature", 7 ); - } - unless ( @$object == 1 ) { - Test::More::skip( "Skipping YAML::Syck for unsupported feature", 7 ); - } - - # Test writing with YAML::Syck - my $syck_out = eval { YAML::Syck::Dump( @$object ) }; - Test::More::is( $@, '', "$name: YAML::Syck saves without error" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 4 ) if $@; - Test::More::ok( - !!(defined $syck_out and ! ref $syck_out), - "$name: YAML::Syck serializes correctly", - ); - my @syck_round = eval { YAML::Syck::Load( $syck_out ) }; - Test::More::is( $@, '', "$name: YAML::Syck round-trips without error" ); - Test::More::skip( "Shortcutting after failure", 2 ) if $@; - my $round = bless [ @syck_round ], 'CPAN::Meta::YAML'; - Test::More::is_deeply( $round, $object, "$name: YAML::Syck round-trips correctly" ); - } - - # Test reading with YAML::Syck - my $syck_copy = $string; - my @syck_in = eval { YAML::Syck::Load( $syck_copy ) }; - Test::More::is( $@, '', "$name: YAML::Syck loads without error" ); - Test::More::is( $syck_copy, $string, "$name: YAML::Syck does not modify the input string" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 1 ) if $@; - Test::More::is_deeply( \@syck_in, $object, "$name: YAML::Syck parses correctly" ); - } - } - - # If YAML::XS itself is available, test with it - SKIP: { - unless ( $HAVE_XS ) { - Test::More::skip( "Skipping YAML::XS, not available for testing", 7 ); - } - if ( $options{noxs} ) { - Test::More::skip( "Skipping YAML::XS for known-broken feature", 7 ); - } - - # Test writing with YAML::XS - my $xs_out = eval { YAML::XS::Dump( @$object ) }; - Test::More::is( $@, '', "$name: YAML::XS saves without error" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 4 ) if $@; - Test::More::ok( - !!(defined $xs_out and ! ref $xs_out), - "$name: YAML::XS serializes correctly", - ); - my @xs_round = eval { YAML::XS::Load( $xs_out ) }; - Test::More::is( $@, '', "$name: YAML::XS round-trips without error" ); - Test::More::skip( "Shortcutting after failure", 2 ) if $@; - my $round = bless [ @xs_round ], 'CPAN::Meta::YAML'; - Test::More::is_deeply( $round, $object, "$name: YAML::XS round-trips correctly" ); - } - - # Test reading with YAML::XS - my $xs_copy = $string; - my @xs_in = eval { YAML::XS::Load( $xs_copy ) }; - Test::More::is( $@, '', "$name: YAML::XS loads without error" ); - Test::More::is( $xs_copy, $string, "$name: YAML::XS does not modify the input string" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 1 ) if $@; - Test::More::is_deeply( \@xs_in, $object, "$name: YAML::XS parses correctly" ); - } - } - - # If YAML::Perl is available, test with it - SKIP: { - unless ( $HAVE_YAMLPERL ) { - Test::More::skip( "Skipping YAML::Perl, not available for testing", 7 ); - } - if ( $options{noyamlperl} ) { - Test::More::skip( "Skipping YAML::Perl for known-broken feature", 7 ); - } - - # Test writing with YAML.pm - my $yamlperl_out = eval { YAML::Perl::Dump( @$object ) }; - Test::More::is( $@, '', "$name: YAML::Perl saves without error" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 4 ) if $@; - Test::More::ok( - !!(defined $yamlperl_out and ! ref $yamlperl_out), - "$name: YAML::Perl serializes correctly", - ); - my @yamlperl_round = eval { YAML::Perl::Load( $yamlperl_out ) }; - Test::More::is( $@, '', "$name: YAML::Perl round-trips without error" ); - Test::More::skip( "Shortcutting after failure", 2 ) if $@; - my $round = bless [ @yamlperl_round ], 'CPAN::Meta::YAML'; - Test::More::is_deeply( $round, $object, "$name: YAML::Perl round-trips correctly" ); - } - - # Test reading with YAML::Perl - my $yamlperl_copy = $string; - my @yamlperl_in = eval { YAML::Perl::Load( $yamlperl_copy ) }; - Test::More::is( $@, '', "$name: YAML::Perl loads without error" ); - Test::More::is( $yamlperl_copy, $string, "$name: YAML::Perl does not modify the input string" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 1 ) if $@; - Test::More::is_deeply( \@yamlperl_in, $object, "$name: YAML::Perl parses correctly" ); - } - } - - # Does the string parse to the structure - my $yaml_copy = $string; - my $yaml = eval { CPAN::Meta::YAML->read_string( $yaml_copy ); }; - Test::More::is( $@, '', "$name: CPAN::Meta::YAML parses without error" ); - Test::More::is( $yaml_copy, $string, "$name: CPAN::Meta::YAML does not modify the input string" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 2 ) if $@; - Test::More::isa_ok( $yaml, 'CPAN::Meta::YAML' ); - Test::More::is_deeply( $yaml, $object, "$name: CPAN::Meta::YAML parses correctly" ); - } - - # Does the structure serialize to the string. - # We can't test this by direct comparison, because any - # whitespace or comments would be lost. - # So instead we parse back in. - my $output = eval { $object->write_string }; - Test::More::is( $@, '', "$name: CPAN::Meta::YAML serializes without error" ); - SKIP: { - Test::More::skip( "Shortcutting after failure", 5 ) if $@; - Test::More::ok( - !!(defined $output and ! ref $output), - "$name: CPAN::Meta::YAML serializes correctly", - ); - my $roundtrip = eval { CPAN::Meta::YAML->read_string( $output ) }; - Test::More::is( $@, '', "$name: CPAN::Meta::YAML round-trips without error" ); - Test::More::skip( "Shortcutting after failure", 2 ) if $@; - Test::More::isa_ok( $roundtrip, 'CPAN::Meta::YAML' ); - Test::More::is_deeply( $roundtrip, $object, "$name: CPAN::Meta::YAML round-trips correctly" ); - - # Testing the serialization - Test::More::skip( "Shortcutting perfect serialization tests", 1 ) unless $options{serializes}; - Test::More::is( $output, $string, 'Serializes ok' ); - } - - # Return true as a convenience - return 1; + my $string = shift; + my $object = shift; + my $name = shift || 'unnamed'; + my %options = ( @_ ); + bless $object, 'CPAN::Meta::YAML'; + + # If YAML itself is available, test with it + SKIP: { + unless ( $HAVE_YAMLPM ) { + Test::More::skip( "Skipping YAML.pm, not available for testing", 7 ); + } + if ( $options{noyamlpm} ) { + Test::More::skip( "Skipping YAML.pm for known-broken feature", 7 ); + } + + # Test writing with YAML.pm + my $yamlpm_out = eval { YAML::Dump( @$object ) }; + Test::More::is( $@, '', "$name: YAML.pm saves without error" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 4 ) if $@; + Test::More::ok( + !!(defined $yamlpm_out and ! ref $yamlpm_out), + "$name: YAML.pm serializes correctly", + ); + my @yamlpm_round = eval { YAML::Load( $yamlpm_out ) }; + Test::More::is( $@, '', "$name: YAML.pm round-trips without error" ); + Test::More::skip( "Shortcutting after failure", 2 ) if $@; + my $round = bless [ @yamlpm_round ], 'CPAN::Meta::YAML'; + Test::More::is_deeply( $round, $object, "$name: YAML.pm round-trips correctly" ); + } + + # Test reading with YAML.pm + my $yamlpm_copy = $string; + my @yamlpm_in = eval { YAML::Load( $yamlpm_copy ) }; + Test::More::is( $@, '', "$name: YAML.pm loads without error" ); + Test::More::is( $yamlpm_copy, $string, "$name: YAML.pm does not modify the input string" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 1 ) if $@; + Test::More::is_deeply( \@yamlpm_in, $object, "$name: YAML.pm parses correctly" ); + } + } + + # If YAML::Syck itself is available, test with it + SKIP: { + unless ( $HAVE_SYCK ) { + Test::More::skip( "Skipping YAML::Syck, not available for testing", 7 ); + } + if ( $options{nosyck} ) { + Test::More::skip( "Skipping YAML::Syck for known-broken feature", 7 ); + } + unless ( @$object == 1 ) { + Test::More::skip( "Skipping YAML::Syck for unsupported feature", 7 ); + } + + # Test writing with YAML::Syck + my $syck_out = eval { YAML::Syck::Dump( @$object ) }; + Test::More::is( $@, '', "$name: YAML::Syck saves without error" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 4 ) if $@; + Test::More::ok( + !!(defined $syck_out and ! ref $syck_out), + "$name: YAML::Syck serializes correctly", + ); + my @syck_round = eval { YAML::Syck::Load( $syck_out ) }; + Test::More::is( $@, '', "$name: YAML::Syck round-trips without error" ); + Test::More::skip( "Shortcutting after failure", 2 ) if $@; + my $round = bless [ @syck_round ], 'CPAN::Meta::YAML'; + Test::More::is_deeply( $round, $object, "$name: YAML::Syck round-trips correctly" ); + } + + # Test reading with YAML::Syck + my $syck_copy = $string; + my @syck_in = eval { YAML::Syck::Load( $syck_copy ) }; + Test::More::is( $@, '', "$name: YAML::Syck loads without error" ); + Test::More::is( $syck_copy, $string, "$name: YAML::Syck does not modify the input string" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 1 ) if $@; + Test::More::is_deeply( \@syck_in, $object, "$name: YAML::Syck parses correctly" ); + } + } + + # If YAML::XS itself is available, test with it + SKIP: { + unless ( $HAVE_XS ) { + Test::More::skip( "Skipping YAML::XS, not available for testing", 7 ); + } + if ( $options{noxs} ) { + Test::More::skip( "Skipping YAML::XS for known-broken feature", 7 ); + } + + # Test writing with YAML::XS + my $xs_out = eval { YAML::XS::Dump( @$object ) }; + Test::More::is( $@, '', "$name: YAML::XS saves without error" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 4 ) if $@; + Test::More::ok( + !!(defined $xs_out and ! ref $xs_out), + "$name: YAML::XS serializes correctly", + ); + my @xs_round = eval { YAML::XS::Load( $xs_out ) }; + Test::More::is( $@, '', "$name: YAML::XS round-trips without error" ); + Test::More::skip( "Shortcutting after failure", 2 ) if $@; + my $round = bless [ @xs_round ], 'CPAN::Meta::YAML'; + Test::More::is_deeply( $round, $object, "$name: YAML::XS round-trips correctly" ); + } + + # Test reading with YAML::XS + my $xs_copy = $string; + my @xs_in = eval { YAML::XS::Load( $xs_copy ) }; + Test::More::is( $@, '', "$name: YAML::XS loads without error" ); + Test::More::is( $xs_copy, $string, "$name: YAML::XS does not modify the input string" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 1 ) if $@; + Test::More::is_deeply( \@xs_in, $object, "$name: YAML::XS parses correctly" ); + } + } + + # If YAML::Perl is available, test with it + SKIP: { + unless ( $HAVE_YAMLPERL ) { + Test::More::skip( "Skipping YAML::Perl, not available for testing", 7 ); + } + if ( $options{noyamlperl} ) { + Test::More::skip( "Skipping YAML::Perl for known-broken feature", 7 ); + } + + # Test writing with YAML.pm + my $yamlperl_out = eval { YAML::Perl::Dump( @$object ) }; + Test::More::is( $@, '', "$name: YAML::Perl saves without error" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 4 ) if $@; + Test::More::ok( + !!(defined $yamlperl_out and ! ref $yamlperl_out), + "$name: YAML::Perl serializes correctly", + ); + my @yamlperl_round = eval { YAML::Perl::Load( $yamlperl_out ) }; + Test::More::is( $@, '', "$name: YAML::Perl round-trips without error" ); + Test::More::skip( "Shortcutting after failure", 2 ) if $@; + my $round = bless [ @yamlperl_round ], 'CPAN::Meta::YAML'; + Test::More::is_deeply( $round, $object, "$name: YAML::Perl round-trips correctly" ); + } + + # Test reading with YAML::Perl + my $yamlperl_copy = $string; + my @yamlperl_in = eval { YAML::Perl::Load( $yamlperl_copy ) }; + Test::More::is( $@, '', "$name: YAML::Perl loads without error" ); + Test::More::is( $yamlperl_copy, $string, "$name: YAML::Perl does not modify the input string" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 1 ) if $@; + Test::More::is_deeply( \@yamlperl_in, $object, "$name: YAML::Perl parses correctly" ); + } + } + + # Does the string parse to the structure + my $yaml_copy = $string; + my $yaml = eval { CPAN::Meta::YAML->read_string( $yaml_copy ); }; + Test::More::is( $@, '', "$name: CPAN::Meta::YAML parses without error" ); + Test::More::is( $yaml_copy, $string, "$name: CPAN::Meta::YAML does not modify the input string" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 2 ) if $@; + Test::More::isa_ok( $yaml, 'CPAN::Meta::YAML' ); + Test::More::is_deeply( $yaml, $object, "$name: CPAN::Meta::YAML parses correctly" ); + } + + # Does the structure serialize to the string. + # We can't test this by direct comparison, because any + # whitespace or comments would be lost. + # So instead we parse back in. + my $output = eval { $object->write_string }; + Test::More::is( $@, '', "$name: CPAN::Meta::YAML serializes without error" ); + SKIP: { + Test::More::skip( "Shortcutting after failure", 5 ) if $@; + Test::More::ok( + !!(defined $output and ! ref $output), + "$name: CPAN::Meta::YAML serializes correctly", + ); + my $roundtrip = eval { CPAN::Meta::YAML->read_string( $output ) }; + Test::More::is( $@, '', "$name: CPAN::Meta::YAML round-trips without error" ); + Test::More::skip( "Shortcutting after failure", 2 ) if $@; + Test::More::isa_ok( $roundtrip, 'CPAN::Meta::YAML' ); + Test::More::is_deeply( $roundtrip, $object, "$name: CPAN::Meta::YAML round-trips correctly" ); + + # Testing the serialization + Test::More::skip( "Shortcutting perfect serialization tests", 1 ) unless $options{serializes}; + Test::More::is( $output, $string, 'Serializes ok' ); + } + + # Return true as a convenience + return 1; } sub yaml_error { - my $string = shift; - my $like = shift; - my $yaml = CPAN::Meta::YAML->read_string( $string ); - Test::More::is( $yaml, undef, '->read_string returns undef' ); - Test::More::ok( CPAN::Meta::YAML->errstr =~ /$like/, "Got expected error" ); - # NOTE: like() gives better diagnostics (but requires 5.005) - # Test::More::like( $@, qr/$_[0]/, "CPAN::Meta::YAML throws expected error" ); + my $string = shift; + my $like = shift; + my $yaml = CPAN::Meta::YAML->read_string( $string ); + Test::More::is( $yaml, undef, '->read_string returns undef' ); + Test::More::ok( CPAN::Meta::YAML->errstr =~ /$like/, "Got expected error" ); + # NOTE: like() gives better diagnostics (but requires 5.005) + # Test::More::like( $@, qr/$_[0]/, "CPAN::Meta::YAML throws expected error" ); } sub slurp { - my $file = shift; - local $/ = undef; - open( FILE, " $file" ) or die "open($file) failed: $!"; - binmode( FILE, $_[0] ) if @_ > 0 && $] > 5.006; - # binmode(FILE); # disable perl's BOM interpretation - my $source = ; - close( FILE ) or die "close($file) failed: $!"; - $source; + my $file = shift; + local $/ = undef; + open( FILE, " $file" ) or die "open($file) failed: $!"; + binmode( FILE, $_[0] ) if @_ > 0 && $] > 5.006; + # binmode(FILE); # disable perl's BOM interpretation + my $source = ; + close( FILE ) or die "close($file) failed: $!"; + $source; } sub load_ok { - my $name = shift; - my $file = shift; - my $size = shift; - Test::More::ok( -f $file, "Found $name" ); - Test::More::ok( -r $file, "Can read $name" ); - my $content = slurp( $file ); - Test::More::ok( (defined $content and ! ref $content), "Loaded $name" ); - Test::More::ok( ($size < length $content), "Content of $name larger than $size bytes" ); - return $content; + my $name = shift; + my $file = shift; + my $size = shift; + Test::More::ok( -f $file, "Found $name" ); + Test::More::ok( -r $file, "Can read $name" ); + my $content = slurp( $file ); + Test::More::ok( (defined $content and ! ref $content), "Loaded $name" ); + Test::More::ok( ($size < length $content), "Content of $name larger than $size bytes" ); + return $content; } 1; -- 2.7.4