2004-07-16 Martin Baulig <martin@ximian.com>
[mono.git] / mcs / tests / gen-test.pl
1 #!/usr/bin/perl -w
2
3 my $gmcs = "gmcs";
4 my $monodis = "monodis";
5 my $mono = "mono";
6
7 my @normal = qw[gen-1 gen-2 gen-3 gen-4 gen-5 gen-6 gen-7 gen-8 gen-9 gen-10 gen-11 gen-12
8                 gen-14 gen-15 gen-16 gen-18 gen-19 gen-20 gen-21 gen-22 gen-23 gen-24 gen-25
9                 gen-26 gen-27 gen-28 gen-29 gen-30 gen-32 gen-33 gen-34 gen-35 gen-36 gen-37
10                 gen-38 gen-39 gen-40 gen-41 gen-42 gen-43 gen-44 gen-45 gen-46 gen-48 gen-49
11                 gen-50 gen-51 gen-52 gen-53 gen-54 gen-55 gen-56 gen-58 gen-59 gen-60 gen-62];
12 my @compileonly = qw[];
13 my @library = qw[gen-13 gen-17 gen-31 gen-47];
14
15 sub RunTest
16 {
17     my ($quiet,@args) = @_;
18     my $cmdline = join ' ', @args;
19
20     $cmdline .= " > /dev/null" if $quiet;
21
22     print "Running $cmdline\n";
23
24     my $exitcode = system $cmdline;
25     if ($exitcode != 0) {
26         print "Command failed!\n";
27         return 0;
28     }
29
30     return 1;
31 }
32
33 sub NormalTest
34 {
35     my ($file) = @_;
36
37     my $cs = qq[$file.cs];
38     my $exe = qq[$file.exe];
39
40     RunTest (0, $gmcs, $cs) or return 0;
41     RunTest (1, $monodis, $exe) or return 0;
42     RunTest (1, $mono, $exe) or return 0;
43
44     return 1;
45 }
46
47 sub CompileOnlyTest
48 {
49     my ($file) = @_;
50
51     my $cs = qq[$file.cs];
52     my $exe = qq[$file.exe];
53
54     RunTest (0, $gmcs, $cs) or return 0;
55
56     return 1;
57 }
58
59 sub LibraryTest
60 {
61     my ($file) = @_;
62
63     my $cs_dll = qq[$file-dll.cs];
64     my $dll = qq[$file-dll.dll];
65     my $cs_exe = qq[$file-exe.cs];
66     my $exe = qq[$file-exe.exe];
67
68     RunTest (0, $gmcs, "/target:library", $cs_dll) or return 0;
69     RunTest (1, $monodis, $dll) or return 0;
70     RunTest (0, $gmcs, "/r:$dll", $cs_exe) or return 0;
71     RunTest (1, $monodis, $exe) or return 0;
72     RunTest (0, $mono, $exe) or return 0;
73 }
74
75 my @verify;
76 push @verify, "cologne";
77 push @verify, 'bin/peverify.sh';
78
79 foreach my $file (@normal) {
80     print "RUNNING TEST: $file\n";
81     if (NormalTest ($file)) {
82         print STDERR "TEST SUCCEEDED: $file\n";
83         push @verify, qq[$file.exe];
84     } else {
85         print STDERR "TEST FAILED: $file\n";
86     }
87 }
88
89 foreach my $file (@compileonly) {
90     print "RUNNING COMPILATION ONLY TEST: $file\n";
91     if (CompileOnlyTest ($file)) {
92         print STDERR "TEST SUCCEEDED: $file\n";
93         push @verify, qq[$file.exe];
94     } else {
95         print STDERR "TEST FAILED: $file\n";
96     }
97 }
98
99 foreach my $file (@library) {
100     print "RUNNING LIBRARY TEST: $file\n";
101     if (LibraryTest ($file)) {
102         print STDERR "TEST SUCCEEDED: $file\n";
103         push @verify, qq[$file-dll.dll];
104         push @verify, qq[$file-exe.exe];
105     } else {
106         print STDERR "TEST FAILED: $file\n";
107     }
108 }
109
110 my $hostname = `hostname --fqdn`;
111 chop $hostname;
112
113 if ($hostname eq 'gondor.boston.ximian.com') {
114     print STDERR "VERIFYING TESTS\n";
115     RunTest (0, "ssh", @verify);
116 }