This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch master in repository dpkg.
commit c670a64c1b430b0e49e673a746656493fd35bd4d Author: Guillem Jover <[email protected]> Date: Thu Aug 31 12:02:50 2017 +0200 scripts/t: Add new unit test for Dpkg::Control::Fields --- debian/changelog | 1 + scripts/Makefile.am | 1 + scripts/t/Dpkg_Control_Fields.t | 247 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 249 insertions(+) diff --git a/debian/changelog b/debian/changelog index 20cdc5d..18e925c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -105,6 +105,7 @@ dpkg (1.19.0) UNRELEASED; urgency=medium matches the newest entry in the CHANGES section. - Use Module::Metadata instead of grepping for $VERSION in pod-coverage. - Avoid many function arguments in Dpkg_Changelog.t check_options(). + - Add a new unit test for Dpkg::Control::FieldsCore. [ Updated programs translations ] * German (Sven Joachim). diff --git a/scripts/Makefile.am b/scripts/Makefile.am index b66682e..bc9351b 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -231,6 +231,7 @@ test_scripts = \ t/Dpkg_Vendor.t \ t/Dpkg_Changelog.t \ t/Dpkg_Changelog_Ubuntu.t \ + t/Dpkg_Control_Fields.t \ t/Dpkg_Control.t \ t/Dpkg_Control_Tests.t \ t/Dpkg_Index.t \ diff --git a/scripts/t/Dpkg_Control_Fields.t b/scripts/t/Dpkg_Control_Fields.t new file mode 100644 index 0000000..74d1739 --- /dev/null +++ b/scripts/t/Dpkg_Control_Fields.t @@ -0,0 +1,247 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:paths); + +BEGIN { + plan tests => 2394; + + use_ok('Dpkg::Control::Types'); + use_ok('Dpkg::Control::FieldsCore'); +} + +#my $datadir = test_get_data_path('t/Dpkg_Control_Fields'); + +my @src_dep_fields = qw( + Build-Depends Build-Depends-Arch Build-Depends-Indep + Build-Conflicts Build-Conflicts-Arch Build-Conflicts-Indep +); +my @bin_dep_fields = qw( + Pre-Depends Depends Recommends Suggests Enhances + Conflicts Breaks Replaces Provides Built-Using +); +my @src_checksums = qw( + Checksums-Md5 Checksums-Sha1 Checksums-Sha256 +); +my @bin_checksums = qw( + MD5sum SHA1 SHA256 +); +my @src_files = (@src_checksums, qw(Files)); +my @bin_files = (qw(Filename Size), @bin_checksums); +my @vcs_fields = qw( + Vcs-Browser Vcs-Arch Vcs-Bzr Vcs-Cvs Vcs-Darcs Vcs-Git Vcs-Hg Vcs-Mtn + Vcs-Svn +); +my @test_fields = qw( + Testsuite Testsuite-Triggers +); + +my %fields = ( + CTRL_INFO_SRC() => { + name => 'debian/control source stanza', + unordered => 1, + fields => [ + qw(Bugs Homepage Origin Maintainer Priority Section Source + Standards-Version), @test_fields, qw(Uploaders), + @vcs_fields, @src_dep_fields + ], + }, + CTRL_INFO_PKG() => { + name => 'debian/control binary stanza', + unordered => 1, + fields => [ + qw(Architecture Build-Essential Build-Profiles Built-For-Profiles + Description Essential Homepage + Installer-Menu-Item Kernel-Version Multi-Arch + Package Package-Type Priority Section Subarchitecture + Tag Task), @bin_dep_fields + ], + }, + CTRL_PKG_SRC() => { + name => '.dsc', + fields => [ + qw(Format Source Binary Architecture Version + Origin Maintainer Uploaders Homepage Standards-Version), + @vcs_fields, @test_fields, @src_dep_fields, + qw(Package-List), + @src_files + ], + }, + CTRL_PKG_DEB() => { + name => 'DEBIAN/control', + fields => [ + qw(Package Package-Type Source Version Built-Using Kernel-Version + Built-For-Profiles Auto-Built-Package Architecture + Subarchitecture Installer-Menu-Item + Build-Essential Essential Origin Bugs + Maintainer Installed-Size), @bin_dep_fields, + qw(Section Priority Multi-Arch Homepage Description Tag Task) + ], + }, + CTRL_INDEX_SRC() => { + name => 'Sources', + fields => [ + qw(Format Package Binary Architecture Version Priority Section + Origin Maintainer Uploaders Homepage Standards-Version), + @vcs_fields, @test_fields, @src_dep_fields, + qw(Package-List Directory), + @src_files + ], + }, + CTRL_INDEX_PKG() => { + name => 'Packages', + fields => [ + qw(Package Package-Type Source Version Built-Using Kernel-Version + Built-For-Profiles Auto-Built-Package Architecture + Subarchitecture Installer-Menu-Item + Build-Essential Essential Origin Bugs + Maintainer Installed-Size), @bin_dep_fields, @bin_files, + qw(Section Priority Multi-Arch Homepage Description Tag Task) + ], + }, + CTRL_REPO_RELEASE() => { + name => 'Release', + fields => [ + qw(Origin Label Suite Codename Changelogs Date Valid-Until + Architectures Components Description), + @bin_checksums + ], + }, + CTRL_CHANGELOG() => { + name => 'debian/changelog', + fields => [ + qw(Source Binary-Only Version Distribution Urgency Maintainer + Timestamp Date Closes Changes) + ], + }, + CTRL_COPYRIGHT_HEADER() => { + name => 'debian/copyright Format stanza', + fields => [ + qw(Format Upstream-Name Upstream-Contact Source Disclaimer Comment + License Copyright) + ], + }, + CTRL_COPYRIGHT_FILES() => { + name => 'debian/copyright Files stanza', + fields => [ + qw(Files Copyright License Comment) + ], + }, + CTRL_COPYRIGHT_LICENSE() => { + name => 'debian/copyright License stanza', + fields => [ + qw(License Comment) + ], + }, + CTRL_TESTS() => { + name => 'debian/tests/control', + unordered => 1, + fields => [ + qw(Classes Depends Features Restrictions Test-Command Tests + Tests-Directory) + ], + }, + CTRL_FILE_BUILDINFO() => { + name => '.buildinfo', + fields => [ + qw(Format Source Binary Architecture Version Binary-Only-Changes), + @src_checksums, + qw(Build-Origin Build-Architecture Build-Date Build-Path + Installed-Build-Depends Environment) + ], + }, + CTRL_FILE_CHANGES() => { + name => '.changes', + fields => [ + qw(Format Date Source Binary Binary-Only Built-For-Profiles + Architecture Version Distribution Urgency Maintainer + Changed-By Description Closes Changes), + @src_files + ], + }, + CTRL_FILE_VENDOR() => { + name => 'dpkg origin', + unordered => 1, + fields => [ + qw(Bugs Parent Vendor Vendor-Url) + ], + }, + CTRL_FILE_STATUS() => { + name => 'dpkg status', + fields => [ + qw(Package Essential Status Priority Section Installed-Size + Origin Maintainer Bugs Architecture Multi-Arch Source + Version Config-Version + Replaces Provides Depends Pre-Depends + Recommends Suggests Breaks Conflicts Enhances + Conffiles Description Triggers-Pending Triggers-Awaited + Auto-Built-Package Build-Essential Built-For-Profiles + Built-Using Homepage Installer-Menu-Item Kernel-Version + Package-Type Subarchitecture Tag Task) + ], + }, +); + +is_deeply([ field_list_src_dep() ], + [ @src_dep_fields ], + 'List of build dependencies'); +is_deeply([ field_list_pkg_dep() ], + [ @bin_dep_fields ], + 'List of build dependencies'); + +is(field_capitalize('invented-field'), 'Invented-Field', + 'Field Invented-Field capitalization'); +ok(!field_is_official('invented-field'), + 'Field Invented-Field is not official'); + +my %known_fields; +foreach my $type (sort keys %fields) { + if (not $fields{$type}->{unordered}) { + is_deeply([ field_ordered_list($type) ], $fields{$type}->{fields}, + "List of $fields{$type}->{name} fields"); + } + + foreach my $field (@{$fields{$type}->{fields}}) { + $known_fields{$field} = 1; + } +} + +foreach my $field (sort keys %known_fields) { + is(field_capitalize($field), $field, "Field $field capitalization"); + is(field_capitalize(lc $field), $field, "Field lc($field) capitalization"); + is(field_capitalize(uc $field), $field, "Field uc($field) capitalization"); + + ok(field_is_official($field), "Field $field is official"); + ok(field_is_official(lc $field), "Field lc($field) is official"); + ok(field_is_official(uc $field), "Field uc($field) is official"); +} + +foreach my $type (sort keys %fields) { + my %allowed_fields = map { $_ => 1 } @{$fields{$type}->{fields}}; + + foreach my $field (sort keys %known_fields) { + if ($allowed_fields{$field}) { + ok(field_is_allowed_in($field, $type), + "Field $field allowed for type $type"); + } else { + ok(!field_is_allowed_in($field, $type), + "Field $field not allowed for type $type"); + } + } +} -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/dpkg/dpkg.git

