[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[SCM] Debian package checker branch, master, updated. 2.5.11-227-gb60a6e5



The following commit has been merged in the master branch:
commit b60a6e5daeaf5fae3270524c2a44ec242b7327ee
Author: Niels Thykier <niels@thykier.net>
Date:   Sat Apr 6 22:38:25 2013 +0200

    t/runtests: Validate the name of tests
    
    Before running any tests in a suite, check that the test name
    (declared in the desc) matches the expected.
    
    Signed-off-by: Niels Thykier <niels@thykier.net>

diff --git a/t/runtests b/t/runtests
index 390f7f8..0b6a399 100755
--- a/t/runtests
+++ b/t/runtests
@@ -35,6 +35,7 @@ use threads;
 use Thread::Queue;
 
 use Data::Dumper;
+use File::Basename qw(basename dirname);
 use Getopt::Long qw(GetOptions);
 use List::MoreUtils qw(none);
 use Text::Template;
@@ -257,7 +258,7 @@ if ($singletest) {
     $desc =~ s/\.changes$//;
     $desc = "$desc.desc";
     if (-f $desc) {
-        @tests = read_dpkg_control($desc);
+        push @tests, read_test_desc($desc);
     }
 } elsif ($tag) {
     @tests = find_tests_for_tag($tag, "$TESTSET/changes/*.desc");
@@ -265,7 +266,7 @@ if ($singletest) {
     unless (-d "$TESTSET/changes") {
         fail("cannot find $TESTSET/changes: $!");
     }
-    @tests = map { read_dpkg_control($_) } sort(glob("$TESTSET/changes/*.desc"));
+    @tests = map { read_test_desc($_) } sort(glob("$TESTSET/changes/*.desc"));
 }
 print "Found the following changes tests: @tests\n" if $DEBUG;
 print "Changes tests:\n" if @tests;
@@ -284,9 +285,9 @@ foreach my $tsi (['debs', "$TESTSET/debs/*/desc", sub { generic_test_runner('deb
     if ($singletest) {
         my $test = $singletest;
         if (-d "$TESTSET/$tdir/$test") {
-            @tests = read_dpkg_control("$TESTSET/$tdir/$test/desc");
+            push @tests, read_test_desc("$TESTSET/$tdir/$test/desc");
         } elsif (-f "$LINTIAN_ROOT/checks/$singletest.desc"){
-            @tests = map { read_dpkg_control($_) } glob "$TESTSET/$tdir/$singletest-*/desc";
+            @tests = map { read_test_desc($_) } glob("$TESTSET/$tdir/$singletest-*/desc");
         }
     } elsif ($tag) {
         @tests = find_tests_for_tag($tag, $globstr);
@@ -294,7 +295,7 @@ foreach my $tsi (['debs', "$TESTSET/debs/*/desc", sub { generic_test_runner('deb
         unless (-d "$TESTSET/$tdir/") {
             fail("cannot find $TESTSET/$tdir: $!");
         }
-        @tests = map { read_dpkg_control($_) } glob $globstr;
+        @tests = map { read_test_desc($_) } glob($globstr);
     }
     @tests = sort {
         $a->{sequence} <=> $b->{sequence}
@@ -336,7 +337,7 @@ sub find_tests_for_tag {
     my ($tag, $glob) = @_;
     return generic_find_test_for_tag($tag, $glob, sub {
         my ($tag, $desc) = @_;
-        my ($data) = read_dpkg_control($desc);
+        my $data = read_test_desc($desc);
         my $tagnames = $data->{'test-for'}//'';
         $tagnames .= ' ' . $data->{'test-against'} if $data->{'test-against'};
         my %table = map { $_ => 1 } split(m/\s++/o, $tagnames);
@@ -576,11 +577,11 @@ sub generic_find_test_for_tag {
         my $testname;
         next unless $res;
 
-        if ($res =~ m/^\d+$/o){
+        if (not ref $res and $res =~ m/^\d+$/o){
             # returned a truth value; use the regex to deduce the test name
             ($testname) = ($file =~ m,.*/([^/]+)[/\.]tags$,);
         } else {
-            # The code returned the test name for us
+            # The code returned the test name or test data for us
             $testname = $res;
         }
         push @tests, $testname;
@@ -916,6 +917,33 @@ sub check_test_is_sane {
     return 1;
 }
 
+sub read_test_desc {
+    my ($filename) = @_;
+    my @paragraphs = read_dpkg_control($filename);
+    my $testdata;
+    my $expected_name;
+    if (scalar(@paragraphs) != 1) {
+        fail("$filename does not have exactly one paragraph")
+    }
+    $testdata = $paragraphs[0];
+    if ($filename =~ m{/desc$}) {
+        # t/<suite>/<testname>/desc
+        $expected_name = basename(dirname($filename));
+    } else {
+        # t/changes/<testname>.desc
+        $expected_name = basename($filename, '.desc');
+    }
+
+    if (!exists $testdata->{'testname'}) {
+        fail("$filename is missing Testname field");
+    }
+    if ($expected_name ne $testdata->{'testname'}) {
+        fail("$filename is called $testdata->{'testname'}"
+             . " instead of $expected_name");
+    }
+    return $testdata;
+}
+
 sub msg_flush {
     my %msg = ( id => threads->tid() );
     $MSG_Q->enqueue(\%msg);

-- 
Debian package checker


Reply to: