ソースを参照

Import tests from Parse::DebianChangelog

Frank Lichtenheld 18 年 前
コミット
51dced9b62
共有4 個のファイルを変更した2058 個の追加0 個の削除を含む
  1. 250 0
      scripts/t/600_Dpkg_Changelog.t
  2. 41 0
      scripts/t/600_Dpkg_Changelog/countme
  3. 12 0
      scripts/t/600_Dpkg_Changelog/misplaced-tz
  4. 1755 0
      scripts/t/600_Dpkg_Changelog/shadow

+ 250 - 0
scripts/t/600_Dpkg_Changelog.t

@@ -0,0 +1,250 @@
+# -*- perl -*-
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl Parse-DebianChangelog.t'
+
+#########################
+
+# change 'tests => 1' to 'tests => last_test_to_print';
+
+use strict;
+use warnings;
+
+use File::Basename;
+use XML::Simple;
+
+BEGIN {
+    my $no_examples = 3;
+    my $no_err_examples = 1;
+    my $no_tests = $no_examples * 13
+	+ $no_err_examples * 2
+	+ 49;
+
+    require Test::More;
+    import Test::More tests => $no_tests, ;
+}
+BEGIN {
+    use_ok('Parse::DebianChangelog');
+    use_ok('Parse::DebianChangelog::ChangesFilters', ':all' );
+};
+
+#########################
+
+my $test = Parse::DebianChangelog->init( { infile => '/nonexistant',
+					   quiet => 1 } );
+ok( !defined($test), "fatal parse errors lead to init() returning undef");
+
+my $save_data;
+foreach my $file (qw(Changes t/examples/countme t/examples/shadow)) {
+
+    my $changes = Parse::DebianChangelog->init( { infile => $file,
+						  quiet => 1 } );
+    my $errors = $changes->get_parse_errors();
+    my $basename = basename( $file );
+
+#    use Data::Dumper;
+#    diag(Dumper($changes));
+
+    ok( !$errors, "Parse example changelog $file without errors" );
+
+    my @data = $changes->data;
+
+    ok( @data, "data is not empty" );
+
+    my $html_out = $changes->html( { outfile => "t/$basename.html.tmp",
+				     template => "tmpl/default.tmpl" } );
+
+    is( `tidy -qe t/$basename.html.tmp 2>&1`, '',
+	'Generated HTML has no tidy errors' );
+
+    ok( ($changes->delete_filter( 'html::changes',
+				  \&common_licenses ))[0]
+	== \&common_licenses );
+    ok( ! $changes->delete_filter( 'html::changes',
+				   \&common_licenses ) );
+
+    $changes->html( { outfile => "t/$basename.html.tmp.2",
+		      template => "tmpl/default.tmpl" } );
+    is( `tidy -qe t/$basename.html.tmp.2 2>&1`, '',
+	'Generated HTML has no tidy errors' );
+
+    $changes->add_filter( 'html::changes',
+			  \&common_licenses );
+
+    my $html_out2 = $changes->html();
+
+    # remove timestamps since they will differ
+    $html_out =~ s/Generated .*? by//go;
+    $html_out2 =~ s/Generated .*? by//go;
+
+    is( $html_out, $html_out2 )
+	and unlink "t/$basename.html.tmp", "t/$basename.html.tmp.2";
+
+    my $str = $changes->dpkg_str();
+
+    is( $str, `dpkg-parsechangelog -l$file`,
+	'Output of dpkg_str equal to output of dpkg-parsechangelog' );
+
+    if ($file eq 't/examples/countme') {
+	$save_data = $changes->rfc822_str({ all => 1 });
+
+	# test range options
+	cmp_ok( @data, '==', 7, "no options -> count" );
+	my $all_versions = join( '/', map { $_->Version } @data);
+
+	sub check_options {
+	    my ($changes, $data, $options, $count, $versions,
+		$check_name) = @_;
+
+	    my @cnt = $changes->data( $options );
+	    cmp_ok( @cnt, '==', $count, "$check_name -> count" );
+	    if ($count == @$data) {
+		is_deeply( \@cnt, $data, "$check_name -> returns all" );
+
+	    } else {
+		is( join( "/", map { $_->Version } @cnt),
+		    $versions, "$check_name -> versions" );
+	    }
+	}
+
+	check_options( $changes, \@data,
+		       { count => 3 }, 3, '2:2.0-1/1:2.0~rc2-3/1:2.0~rc2-2',
+		       'positve count' );
+	check_options( $changes, \@data,
+		       { count => -3 }, 3,
+		       '1:2.0~rc2-1sarge2/1:2.0~rc2-1sarge1/1.5-1',
+		       'negative count' );
+	check_options( $changes, \@data,
+		       { count => 1 }, 1, '2:2.0-1',
+		       'count 1' );
+	check_options( $changes, \@data,
+		       { count => 1, default_all => 1 }, 1, '2:2.0-1',
+		       'count 1 (d_a 1)' );
+	check_options( $changes, \@data,
+		       { count => -1 }, 1, '1.5-1',
+		       'count -1' );
+
+	check_options( $changes, \@data,
+		       { count => 3, offset => 2 }, 3,
+		       '1:2.0~rc2-2/1:2.0~rc2-1sarge3/1:2.0~rc2-1sarge2',
+		       'positve count + positive offset' );
+	check_options( $changes, \@data,
+		       { count => -3, offset => 4 }, 3,
+		       '1:2.0~rc2-3/1:2.0~rc2-2/1:2.0~rc2-1sarge3',
+		       'negative count + positive offset' );
+
+	check_options( $changes, \@data,
+		       { count => 4, offset => 5 }, 2,
+		       '1:2.0~rc2-1sarge1/1.5-1',
+		       'positve count + positive offset (>max)' );
+	check_options( $changes, \@data,
+		       { count => -4, offset => 2 }, 2,
+		       '2:2.0-1/1:2.0~rc2-3',
+		       'negative count + positive offset (<0)' );
+
+	check_options( $changes, \@data,
+		       { count => 3, offset => -4 }, 3,
+		       '1:2.0~rc2-1sarge3/1:2.0~rc2-1sarge2/1:2.0~rc2-1sarge1',
+		       'positve count + negative offset' );
+	check_options( $changes, \@data,
+		       { count => -3, offset => -3 }, 3,
+		       '1:2.0~rc2-3/1:2.0~rc2-2/1:2.0~rc2-1sarge3',
+		       'negative count + negative offset' );
+
+	check_options( $changes, \@data,
+		       { count => 5, offset => -2 }, 2,
+		       '1:2.0~rc2-1sarge1/1.5-1',
+		       'positve count + negative offset (>max)' );
+	check_options( $changes, \@data,
+		       { count => -5, offset => -4 }, 3,
+		       '2:2.0-1/1:2.0~rc2-3/1:2.0~rc2-2',
+		       'negative count + negative offset (<0)' );
+
+	check_options( $changes, \@data,
+		       { count => 7 }, 7, '',
+		       'count 7 (max)' );
+	check_options( $changes, \@data,
+		       { count => -7 }, 7, '',
+		       'count -7 (-max)' );
+	check_options( $changes, \@data,
+		       { count => 10 }, 7, '',
+		       'count 10 (>max)' );
+	check_options( $changes, \@data,
+		       { count => -10 }, 7, '',
+		       'count -10 (<-max)' );
+
+	check_options( $changes, \@data,
+		       { from => '1:2.0~rc2-1sarge3' }, 4,
+		       '2:2.0-1/1:2.0~rc2-3/1:2.0~rc2-2/1:2.0~rc2-1sarge3',
+		       'from => "1:2.0~rc2-1sarge3"' );
+	check_options( $changes, \@data,
+		       { since => '1:2.0~rc2-1sarge3' }, 3,
+		       '2:2.0-1/1:2.0~rc2-3/1:2.0~rc2-2',
+		       'since => "1:2.0~rc2-1sarge3"' );
+	check_options( $changes, \@data,
+		       { to => '1:2.0~rc2-1sarge2' }, 3,
+		       '1:2.0~rc2-1sarge2/1:2.0~rc2-1sarge1/1.5-1',
+		       'to => "1:2.0~rc2-1sarge2"' );
+	check_options( $changes, \@data,
+		       { until => '1:2.0~rc2-1sarge2' }, 2,
+		       '1:2.0~rc2-1sarge1/1.5-1',
+		       'until => "1:2.0~rc2-1sarge2"' );
+	#TODO: test combinations
+    }
+
+    if ($file eq 'Changes') {
+	my $v = $data[0]->Version;
+	$v =~ s/[a-z]$//;
+	cmp_ok( $v, 'eq', $Parse::DebianChangelog::VERSION,
+		'version numbers in module and Changes match' );
+    }
+
+    my $oldest_version = $data[-1]->Version;
+    $str = $changes->dpkg_str({ since => $oldest_version });
+
+    is( $str, `dpkg-parsechangelog -v$oldest_version -l$file`,
+	'Output of dpkg_str equal to output of dpkg-parsechangelog' )
+	or diag("oldest_version=$oldest_version");
+
+    $str = $changes->rfc822_str();
+
+    ok( 1 );
+
+    $str = $changes->rfc822_str({ since => $oldest_version });
+
+    ok( 1 );
+
+    $str = $changes->xml( { outfile => "t/$basename.xml.tmp" });
+
+    ok( XMLin($str, ForceArray => {},
+	      KeyAttr => {} ), "can read in the result of XMLout" );
+    ok( (-s "t/$basename.xml.tmp") == length($str) );
+
+    unlink( "t/$basename.xml.tmp" );
+
+}
+
+open CHANGES, '<', 't/examples/countme';
+my $string = join('',<CHANGES>);
+
+my $str_changes = Parse::DebianChangelog->init( { instring => $string,
+						  quiet => 1 } );
+my $errors = $str_changes->get_parse_errors();
+ok( !$errors,
+    "Parse example changelog t/examples/countme without errors from string" );
+
+my $str_data = $str_changes->rfc822_str({ all => 1 });
+is( $str_data, $save_data,
+    "Compare result of parse from string with result of parse from file" );
+
+
+foreach my $test (( [ 't/examples/misplaced-tz', 6 ])) {
+
+    my $file = shift @$test;
+    my $changes = Parse::DebianChangelog->init( { infile => $file,
+						  quiet => 1 } );
+    my @errors = $changes->get_parse_errors();
+
+    ok( @errors, 'errors occoured' );
+    is_deeply( [ map { $_->[1] } @errors ], $test, 'check line numbers' );
+
+}

+ 41 - 0
scripts/t/600_Dpkg_Changelog/countme

@@ -0,0 +1,41 @@
+countme (2:2.0-1) unstable; urgency=low
+
+  * Final
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Tue,  4 Oct 2005 01:49:05 +0200
+
+countme (1:2.0~rc2-3) unstable; urgency=low
+
+  * kadabra
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Tue,  4 Oct 2005 01:48:05 +0200
+
+countme (1:2.0~rc2-2) unstable; urgency=low
+
+  * Abra
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Tue,  4 Oct 2005 01:47:48 +0200
+
+countme (1:2.0~rc2-1sarge3) unstable; urgency=low
+
+  * Baz
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Tue,  4 Oct 2005 01:47:19 +0200
+
+countme (1:2.0~rc2-1sarge2) unstable; urgency=low
+
+  * Bar
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Tue,  4 Oct 2005 01:47:08 +0200
+
+countme (1:2.0~rc2-1sarge1) unstable; urgency=low
+
+  * Foo
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Tue,  4 Oct 2005 01:46:49 +0200
+
+countme (1.5-1) unstable; urgency=low
+
+  * Initial
+
+ -- Frank Lichtenheld <frank@lichtenheld.de>  Thu, 01 Jan 1970 00:00:00 +0000

+ 12 - 0
scripts/t/600_Dpkg_Changelog/misplaced-tz

@@ -0,0 +1,12 @@
+error-tz (1.1-1) unstable; urgency=low
+
+  * 
+
+ -- Frank Lichtenheld <djpig@debian.org>  Mon, 16 Jul 2007 02:54:18 +0200
++0200
+
+error-tz (1.0-1) unstable; urgency=low
+
+  * 
+
+ -- Frank Lichtenheld <djpig@debian.org>  Mon, 16 Jul 2007 02:54:18 +0200

ファイルの差分が大きいため隠しています
+ 1755 - 0
scripts/t/600_Dpkg_Changelog/shadow