This is an automated email from the git hooks/post-receive script. dod pushed a commit to branch master in repository libconfig-model-tester-perl.
commit 71974a8b2d00340eb4afe9f3391426cc17418125 Author: Dominique Dumont <d...@debian.org> Date: Fri May 29 21:39:59 2015 +0200 Imported Upstream version 2.051 --- Build.PL | 2 +- Changes | 6 ++++ LICENSE | 2 +- META.json | 4 +-- META.yml | 4 +-- lib/Config/Model/Tester.pm | 76 +++++++++++++++++++++++++++++++++++++++++++--- 6 files changed, 84 insertions(+), 10 deletions(-) diff --git a/Build.PL b/Build.PL index 6a8039c..7c493dd 100644 --- a/Build.PL +++ b/Build.PL @@ -18,7 +18,7 @@ my %module_build_args = ( "Dominique Dumont" ], "dist_name" => "Config-Model-Tester", - "dist_version" => "2.050", + "dist_version" => "2.051", "license" => "lgpl", "module_name" => "Config::Model::Tester", "recommends" => {}, diff --git a/Changes b/Changes index 3d1a60a..036830e 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,9 @@ +2.051 2015-05-20 + + * New features: + + Added has_key and has_not_key parameters to check hash + element content + 2.050 2015-03-29 * Bug fix: diff --git a/LICENSE b/LICENSE index 214c2b0..dc26452 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -This software is Copyright (c) 2014 by Dominique Dumont. +This software is Copyright (c) 2015 by Dominique Dumont. This is free software, licensed under: diff --git a/META.json b/META.json index 5dae0e1..ae02472 100644 --- a/META.json +++ b/META.json @@ -4,7 +4,7 @@ "Dominique Dumont" ], "dynamic_config" : 0, - "generated_by" : "Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.142690", + "generated_by" : "Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.150001", "license" : [ "lgpl_2_1" ], @@ -52,6 +52,6 @@ "web" : "http://github.com/dod38fr/config-model-tester.git" } }, - "version" : "2.050" + "version" : "2.051" } diff --git a/META.yml b/META.yml index 606ffd9..ce4f17b 100644 --- a/META.yml +++ b/META.yml @@ -7,7 +7,7 @@ build_requires: configure_requires: Module::Build: '0.34' dynamic_config: 0 -generated_by: 'Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.142690' +generated_by: 'Dist::Zilla version 5.020, CPAN::Meta::Converter version 2.150001' license: lgpl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -28,4 +28,4 @@ resources: bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Config-Model-Tester homepage: https://github.com/dod38fr/config-model/wiki repository: git://github.com/dod38fr/config-model-tester.git -version: '2.050' +version: '2.051' diff --git a/lib/Config/Model/Tester.pm b/lib/Config/Model/Tester.pm index 5c208da..fc21411 100644 --- a/lib/Config/Model/Tester.pm +++ b/lib/Config/Model/Tester.pm @@ -1,7 +1,7 @@ # # This file is part of Config-Model-Tester # -# This software is Copyright (c) 2014 by Dominique Dumont. +# This software is Copyright (c) 2015 by Dominique Dumont. # # This is free software, licensed under: # @@ -9,7 +9,7 @@ # package Config::Model::Tester; # ABSTRACT: Test framework for Config::Model -$Config::Model::Tester::VERSION = '2.050'; +$Config::Model::Tester::VERSION = '2.051'; use warnings; use strict; use locale; @@ -257,6 +257,52 @@ sub check_annotation { } } +sub has_key { + my ($root, $c, $nw) = @_; + + _test_key($root, $c, $nw, 0); +} + +sub has_not_key { + my ($root, $c, $nw) = @_; + + _test_key($root, $c, $nw, 1); +} + +sub _test_key { + my ($root, $c, $nw, $invert) = @_; + + my @checks = ref $c eq 'ARRAY' ? @$c + : map { ( $_ => $c->{$_})} sort keys %$c ; + + while (@checks) { + my $path = shift @checks; + my $spec = shift @checks; + my @key_checks = ref $spec eq 'ARRAY' ? @$spec: ($spec); + + my $obj = $root->grab( step => $path, type => 'hash' ); + my @keys = $obj->fetch_all_indexes; + my $res = 0; + foreach my $check (@key_checks) { + my @match ; + foreach my $k (@keys) { + if (ref $check eq 'Regexp') { + push @match, $k if $k =~ $check; + } + else { + push @match, $k if $k eq $check; + } + } + if ($invert) { + is(scalar @match,0, "check $check matched no key" ); + } + else { + ok(scalar @match, "check $check matched with keys @match" ); + } + } + } +} + sub write_data_back { my ($model_test, $inst, $t) = @_; local $Config::Model::Value::nowarning = $t->{no_warnings} || 0; @@ -401,6 +447,9 @@ sub run_model_test { check_data("first", $root, $t->{check}, $t->{no_warnings}) if $t->{check}; + has_key ( $root, $t->{has_key}, $t->{no_warnings}) if $t->{has_key} ; + has_not_key ( $root, $t->{has_not_key}, $t->{no_warnings}) if $t->{has_not_key} ; + check_annotation($root,$t) if $t->{verify_annotation}; write_data_back ($model_test, $inst, $t) ; @@ -490,7 +539,7 @@ Config::Model::Tester - Test framework for Config::Model =head1 VERSION -version 2.050 +version 2.051 =head1 SYNOPSIS @@ -765,6 +814,25 @@ A regexp can also be used to check value: =item * +Verify if a hash contains one or more keys (or keys matching a regexp): + + has_key => [ + 'sections' => 'debian', # sections must point to a hash element + 'control' => [qw/source binary/], + 'copyright Files' => qr/.c$/, + 'copyright Files' => [qr/\.h$/], qr/\.c$/], + ], + +=item * + +Verify that a hash has B<not> a key (or a key matching a regexp): + + has_not_key => [ + 'copyright Files' => qr/.virus$/ # silly, isn't ? + ], + +=item * + Verify annotation extracted from the configuration file comments: verify_annotation => { @@ -938,7 +1006,7 @@ Dominique Dumont =head1 COPYRIGHT AND LICENSE -This software is Copyright (c) 2014 by Dominique Dumont. +This software is Copyright (c) 2015 by Dominique Dumont. This is free software, licensed under: -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libconfig-model-tester-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits