bbf038a001ca2aa7ab1e694e50a87827c4dd99c3
[perl.git] / t / lib / manifest.t
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
20 my $last_seen = '';
21 my $sorted = 1;
22
23 # Test that MANIFEST uses tabs - not spaces - after the name of the file.
24 while (<$m>) {
25     chomp;
26
27     my ($file, $separator) = /^(\S+)(\s*)/;
28     isnt($file, undef, "Line $. doesn't start with a blank") or next;
29
30     # Manifest order is "dictionary order, lowercase" for ASCII:
31     my $normalised = $_;
32     $normalised =~ tr/A-Z/a-z/;
33     $normalised =~ s/[^a-z0-9\s]//g;
34
35     if ($normalised le $last_seen) {
36         fail("Sort order broken by $file");
37         undef $sorted;
38     }
39     $last_seen = $normalised;
40
41     if (!$separator) {
42         # Ignore lines without whitespace (i.e., filename only)
43     } elsif ($separator !~ tr/\t//c) {
44         # It's all tabs
45         next;
46     } elsif ($separator !~ tr/ //c) {
47         # It's all spaces
48         fail("Spaces in entry for $file");
49     } elsif ($separator =~ tr/\t//) {
50         fail("Mixed tabs and spaces in entry for $file");
51     } else {
52         fail("Odd whitespace in entry for $file");
53     }
54 }
55
56 close $m or die $!;
57
58 ok($sorted, 'MANIFEST properly sorted');
59
60 # EOF