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