X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Ftools%2Fscan-tests.pl;h=5cb0f8625f5a1a55c58b320bd1a79ebb14b8edf1;hb=3c69c038cdbc165b5d72ae0b547b5cb3685ef554;hp=9a1600bd476d5caf889e5c790ae7b884c3bf5762;hpb=7e16486f3116025982e11e8e095b66df9302744d;p=mono.git diff --git a/mcs/tools/scan-tests.pl b/mcs/tools/scan-tests.pl index 9a1600bd476..5cb0f8625f5 100755 --- a/mcs/tools/scan-tests.pl +++ b/mcs/tools/scan-tests.pl @@ -3,83 +3,148 @@ use strict; use Carp; -my @alltests; -my @allsuites; - -my @badtests = qw[System.Collections.HastableTest System.Collections.StackTest System.IO.PathTest]; +my @allfiles; + +my @badsuites = qw[System\.Collections/HashtableTest System\.Collections/StackTest System\.Collections\.Specialized\.BasicOperationsTest]; +my @badtests = qw[PathTest:TestGetTempFileName XmlTextReaderTests:TestIsNameChar XmlTextReaderTests:TestIsFirstNameChar ByteTest:TestParse]; +my @mapfiles = ('s,^MonoTests\.(.*)/,$1/,', + 's,^Ximian\.Mono\.Tests(.*)/,,', + 's,^System\.Net/,,', + 's,^Collections\.Specialized\.,,', + 's,^Text\.RegularExpressions\.,,' + ); +my @maptests = (); +my @mapnamespace = (); die "Usage: $0 input output" unless $#ARGV == 1; -open INPUT, $ARGV[0] or croak "open ($ARGV[0]): $!"; -while (defined ($_ = )) { - next unless /^\s*suite\.AddTest\s*\((.*)\.(.*?)\.Suite\)/; +my $namespace = 'MonoTests'; - push @alltests, [$1,$2]; -} -close INPUT; +sub parse_test { + my ($filename, $namespace, $testname, $suite) = @_; -open OUTPUT, "> $ARGV[1]" or croak "open (> $ARGV[1]): $!"; -select OUTPUT; + foreach (@badsuites) { + return if $filename =~ /$_/; + } -print qq[using NUnit.Framework;\n]; -print qq[using System;\n]; -print qq[using System.Threading;\n]; -print qq[using System.Globalization;\n\n]; + my $map; + foreach $map (@mapfiles) { + eval "\$filename =~ $map"; + } + foreach (@allfiles) { + return if $filename eq $_->[0]; + } -my $alltest; -foreach $alltest (@alltests) { + # print STDERR "PARSE: |$filename|\n"; - my @suites; + push @allfiles, [$filename,$namespace,$testname,$suite,[]]; - my $testname = $alltest->[0]; - my $filename = $alltest->[0]."/".$alltest->[1].".cs"; + my $INPUT; + open $INPUT, $filename or croak "open ($filename): $!"; + while (defined ($_ = <$INPUT>)) { + if (/^\s*namespace\s*([\w\.]+?)\s*$/) { + $namespace = $1; + next; + } + if (/^\s*suite\.AddTest\s*\((.*)\.(.*?)\.Suite\)/) { + my $filename = (defined $namespace) ? qq[$namespace.$1/$2.cs] : qq[$1/$2.cs]; + my $nsprefix = (defined $namespace) ? qq[$namespace.$1] : qq[MonoTests.$1]; + parse_test ($filename, $nsprefix, $1, $2); + next; + } + if (/^\s*suite\.AddTest\s*\((.*?)\.Suite\)/) { + my $filename = (defined $namespace) ? qq[$namespace/$1.cs] : qq[$1.cs]; + parse_test ($filename, $namespace, '', $1); + next; + } + if (/^\s*suite\.AddTest\s*\(\s*new\s+TestSuite\s*\(\s*typeof\(\s*(.*)\s*\)\s*\)\s*\);/) { + my $filename = (defined $namespace) ? qq[$namespace/$1.cs] : qq[$1.cs]; + parse_test ($filename, $namespace, '', $1); + next; + } + } + close $INPUT; +} - open ALLTEST, $filename or croak "open ($filename): $!"; - while (defined ($_ = )) { - next unless /^\s*suite\.AddTest\s*\((.*)\.Suite\)/; - my $name = $1; +parse_test ($ARGV[0], undef, '', ''); - next if grep $name, @badtests; +my $file; +foreach $file (@allfiles) { + my ($filename,$namespace,$testname,$suite) = @$file; - push @suites, $name; - push @allsuites, qq[$testname.Run$name]; + open SUITE, $filename or croak "open ($filename): $!"; + while (defined ($_ = )) { + next unless /^\s*public\s+void\s+(Test.*?)\s*\(\s*\)/; + push @{$file->[4]}, $1; } - close ALLTEST; - - print qq[namespace MonoTests.$testname\n\{\n]; + close SUITE; +} - my $suite; - foreach $suite (@suites) { +open OUTPUT, "> $ARGV[1]" or croak "open (> $ARGV[1]): $!"; +select OUTPUT; - my @tests; +print qq[using NUnit.Framework;\n]; +print qq[using System;\n]; +print qq[using System.Threading;\n]; +print qq[using System.Globalization;\n\n]; - open SUITE, qq[$testname/$suite.cs] or - croak "open ($testname/$suite.cs): $!"; - while (defined ($_ = )) { - next unless /^\s*public\s+void\s+(Test.*?)\s*\(\s*\)/; - push @tests, $1; - } - close SUITE; - print qq[\tpublic class Run$suite : $suite\n\t\{\n]; - print qq[\t\tprotected override void RunTest ()\n\t\t\{\n]; - foreach (@tests) { - print qq[\t\t\t$_ ();\n]; +my $alltest; +foreach $alltest (@allfiles) { + + my ($filename,$namespace,$testname,$suite,$tests) = @$alltest; + my @tests = @$tests; + + next unless defined $namespace; + next unless $#tests >= 0; + + # print STDERR "DOING TEST: |$testname|$filename|\n"; + + $namespace .= ".$testname" unless $testname eq ''; + + print qq[namespace $namespace\n\{\n]; + print qq[\tpublic class Run$suite : $suite\n\t\{\n]; + print qq[\t\tprotected override void RunTest ()\n\t\t\{\n]; +# print qq[\t\t\tbool errorThrown = false;\n\n]; + my $test; + testloop: + foreach $test (@tests) { + my $badtest; + $filename =~ s/\.cs$//; + my $fullname = qq[$filename:$test]; + # print STDERR "TEST: |$fullname|\n"; + foreach $badtest (@badtests) { + next testloop if $fullname =~ /$badtest/; } - print qq[\t\t\}\n\t\}\n]; +# print qq[\t\t\ttry \{\n\t\t\t\t$test ();\n\t\t\t\} catch \{\n]; +# print qq[\t\t\t\tConsole.WriteLine ("$namespace:$suite:$test failed");\n]; +# print qq[\t\t\t\terrorThrown = true;\n]; +# print qq[\t\t\t\}\n]; + print qq[\t\t\t$test ();\n]; +# print qq[\t\t\tConsole.WriteLine ("$namespace:$suite:$test DONE");\n]; } + print qq[\n]; +# print qq[\t\t\tif (errorThrown)\n\t\t\t\tthrow new ArgumentException ();\n]; + print qq[\t\t\}\n\t\}\n]; print qq[\}\n\n]; } -print qq[namespace MonoTests\n\{\n]; +print qq[namespace $namespace\n\{\n]; print qq[\tpublic class RunAllTests\n\t\{\n]; print qq[\t\tpublic static void AddAllTests (TestSuite suite)\n]; print qq[\t\t\{\n]; -my $suite; -foreach $suite (@allsuites) { - print qq[\t\t\tsuite.AddTest (new MonoTests.$suite ());\n]; +foreach $alltest (@allfiles) { + my ($filename,$namespace,$testname,$suite,$tests) = @$alltest; + my @tests = @$tests; + + next unless defined $namespace; + next unless $#tests >= 0; + + $namespace .= ".$testname" unless $testname eq ''; + + print qq[\t\t\tsuite.AddTest (new $namespace.Run$suite ());\n]; } print qq[\t\t\}\n\t\}\n\}\n\n]; @@ -89,7 +154,7 @@ print qq[\tpublic static void Main()\n\t\{\n]; print qq[\t\tThread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");\n\n]; print qq[\t\tTestResult result = new TestResult ();\n]; print qq[\t\tTestSuite suite = new TestSuite ();\n]; -print qq[\t\tMonoTests.RunAllTests.AddAllTests (suite);\n]; +print qq[\t\t$namespace.RunAllTests.AddAllTests (suite);\n]; print qq[\t\tsuite.Run (result);\n]; print qq[\t\tMonoTests.MyTestRunner.Print (result);\n]; print qq[\t\}\n\}\n\n];