| 1 | #!./perl -w |
| 2 | |
| 3 | # Test the well-formed-ness of the MANIFEST file. |
| 4 | |
| 5 | BEGIN { |
| 6 | chdir 't'; |
| 7 | @INC = '../lib'; |
| 8 | } |
| 9 | |
| 10 | use strict; |
| 11 | use File::Spec; |
| 12 | require './test.pl'; |
| 13 | |
| 14 | plan('no_plan'); |
| 15 | |
| 16 | my $manifest = File::Spec->catfile(File::Spec->updir(), 'MANIFEST'); |
| 17 | |
| 18 | open my $m, '<', $manifest or die "Can't open '$manifest': $!"; |
| 19 | my @files; |
| 20 | # Test that MANIFEST uses tabs - not spaces - after the name of the file. |
| 21 | while (<$m>) { |
| 22 | chomp; |
| 23 | unless( /\s/ ) { |
| 24 | push @files, $_; |
| 25 | # no need for further tests on lines without whitespace (i.e., filename only) |
| 26 | next; |
| 27 | } |
| 28 | my ($file, $separator) = /^(\S+)(\s+)/; |
| 29 | push @files, $file; |
| 30 | |
| 31 | isnt($file, undef, "Line $. doesn't start with a blank") or next; |
| 32 | # Remember, we're running from t/ |
| 33 | ok(-f "../$file", "File $file exists"); |
| 34 | if ($separator !~ tr/\t//c) { |
| 35 | # It's all tabs |
| 36 | next; |
| 37 | } elsif ($separator !~ tr/ //c) { |
| 38 | # It's all spaces |
| 39 | fail("Spaces in entry for $file"); |
| 40 | } elsif ($separator =~ tr/\t//) { |
| 41 | fail("Mixed tabs and spaces in entry for $file"); |
| 42 | } else { |
| 43 | fail("Odd whitespace in entry for $file"); |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | close $m or die $!; |
| 48 | |
| 49 | # Test that MANIFEST is properly sorted |
| 50 | SKIP: { |
| 51 | skip("'Porting/manisort' not found", 1) if (! -f '../Porting/manisort'); |
| 52 | |
| 53 | my $result = runperl('progfile' => '../Porting/manisort', |
| 54 | 'args' => [ '-c', '../MANIFEST' ], |
| 55 | 'stderr' => 1); |
| 56 | |
| 57 | like($result, qr/is sorted properly/, 'MANIFEST sorted properly'); |
| 58 | } |
| 59 | |
| 60 | SKIP: { |
| 61 | chdir ".."; |
| 62 | skip("not under git control", 3) unless -d '.git'; |
| 63 | chomp(my @repo= grep { !/\.gitignore$/ } `git ls-files`); |
| 64 | skip("git ls-files didnt work",3) |
| 65 | if !@repo; |
| 66 | is( 0+@repo, 0+@files, "git ls-files has a corresponding number of files as does MANIFEST"); |
| 67 | my %repo= map { $_ => 1 } @repo; |
| 68 | my %mani= map { $_ => 1 } @files; |
| 69 | is( 0+keys %mani, 0+@files, "no duplicate files in MANIFEST"); |
| 70 | delete $mani{$_} for @repo; |
| 71 | delete $repo{$_} for @files; |
| 72 | my @not_in_mani= keys %repo; |
| 73 | my @still_in_mani= keys %mani; |
| 74 | |
| 75 | is( 0+@not_in_mani, 0, "Nothing added to the repo that isn't in MANIFEST"); |
| 76 | is( "not in MANIFEST: @not_in_mani", "not in MANIFEST: ", |
| 77 | "Nothing added to the repo that isn't in MANIFEST"); |
| 78 | is( 0+@still_in_mani, 0, "Nothing in the MANIFEST that isn't tracked by git"); |
| 79 | is( "should not be in MANIFEST: @still_in_mani", "should not be in MANIFEST: ", |
| 80 | "Nothing in the MANIFEST that isn't tracked by git"); |
| 81 | |
| 82 | } |
| 83 | |
| 84 | # EOF |