--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/test.pl Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,226 @@
+#!\bin\perl -w
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# distillsrc.pl test script
+#
+#
+
+use FindBin;
+use Cwd ('chdir','abs_path');
+
+my $cwd = abs_path($FindBin::Bin."\\..");
+chdir($cwd) or die "Couldn't change directory to $cwd\n";
+
+# Test cases
+#
+# Entry format: [parameters, [[pass regexps],[fail regexps]]]
+#
+# [pass regexps] and [fail regexps] are lists of regular expressions, each
+# as a string. All pass regexps must match. No fail regexps may match.
+# If a line matches both, it is said to have passed (hence a generic failure
+# rule can be written to match any output which wasn't expected)
+my @testcases =
+ (
+ ['-r fred -l beech' ,
+ [
+ ['^ERROR: RealTimeBuild:.*srcpath must be given'],
+ ['^ERROR: RealTimeBuild:']
+ ]
+ ],
+ ['-s fred -l beech' ,
+ [
+ ['^ERROR: RealTimeBuild:.*srcroot must be given'],
+ ['^ERROR: RealTimeBuild:']
+ ]
+ ],
+ ['-r fred -s src' ,
+ [
+ ['^ERROR: RealTimeBuild:.*platform'],
+ ['^ERROR: RealTimeBuild:']
+ ]
+ ],
+ ['-d -r test -s source -p prefix -l fred -c test\options.txt -N' ,
+ [
+ [
+ '= spacey$',
+ '= whole$',
+ '^DUMMY: File test\\\\source\\\\fixer.mrp',
+ '^DUMMY: File test\\\\source\\\\DISTRIBUTION\\.POLICY',
+ '^DUMMY: File test\\\\source\\\\missing\\\\unowned'
+ ],
+ [
+ '^DUMMY:.*is not specified in any \\.mrp file',
+ 'does not include itself'
+ ]
+ ]
+ ],
+ ['-d -r test -s source -p prefix -l fred -c test\options.txt -m test\source\fixer.mrp' ,
+ [
+ [
+ '= spacey$',
+ '= whole$',
+ '= fixer$',
+ 'WARNING: \[fixer\] Case of .test\\\\soUrce\\\\DIStribuTION.poliCY. does not match.* Should be test\\\\source\\\\DISTRIBUTION.POLICY$',
+ 'WARNING: \[fixer\] Case of .test\\\\soUrce\\\\missing.* does not match.* Should be test\\\\source\\\\missing',
+ 'source\\\\spacey\\\\spa cey.txt = spacey$',
+ ],
+ [
+ '^DUMMY:.*is not specified in any \\.mrp file',
+ 'does not include itself'
+ ]
+ ]
+ ],
+ ['-d -r test -s source -p prefix -l fred -f test\base.txt' ,
+ [
+ [
+ '= whole$',
+ '^DUMMY: File test\\\\source\\\\fixer\\.mrp',
+ '^DUMMY: File test\\\\source\\\\DISTRIBUTION\\.POLICY',
+ '^DUMMY: Directory test\\\\source\\\\missing',
+ '^DUMMY: File test\\\\source\\\\shared\\\\missing',
+ '^DUMMY: Directory test\\\\source\\\\spacey'
+ ],
+ [
+ '^DUMMY:.*is not specified in any \\.mrp file',
+ 'does not include itself'
+ ]
+ ]
+ ],
+ ['-d -r test -s nowt -l fred -m test\naughty.mrp' ,
+ [
+ [
+ 'nothing_important.* doesn\'t exist',
+ 'No \.mrp files claim any source',
+ 'naughty\.mrp.*does not include itself'
+ ],
+ ['^DUMMY:.*is not specified in any \\.mrp file']
+ ]
+ ],
+ ['-r test -s source -l fred -m test\not_present.mrp' ,
+ [
+ ['^ERROR: RealTimeBuild:.*not_present\\.mrp.*does not exist'],
+ []
+ ]
+ ],
+ ['-r test -s source -l fred -m test\duffer.mrp',
+ [
+ ['^ERROR: RealTimeBuild:.*not a valid command.*test\\\\duffer\\.mrp'],
+ ['= duffer$']
+ ]
+ ],
+ ['-d -r test -s source -p prefix -l fred -f test\base.txt',
+ [
+ [
+ '^WARNING:.*Case of \'.*complete.mrp\' does not match.* Should be.*source.*$',
+ '^WARNING:.*Case of \'.*whole.mrp\' does not match.* Should be.*whole.whole.*$',
+ ],
+ ['^WARNING:.*Case of .* does not match.* Should be.*$']
+ ]
+ ],
+ ['-d -r test -s source -p prefix -l fred -m test\bincase.mrp',
+ [
+ [
+ '^REMARK:.*\\\\epoc32\\\\thisOneIsnt should be lower case',
+ '^REMARK:.*\\\\epoc32\\\\andNorIs\/thisone should be lower case',
+ '^REMARK:.*\\\\epoc32\\\\thisonesNot should be lower case',
+ '^REMARK:.*\\\\epoc32\\\\norThis\\\\one should be lower case'
+ ],
+ ['^REMARK:.*should be lower case.*$']
+ ]
+ ]
+ );
+
+my $passes = 0;
+my $tests = 0;
+
+foreach my $testcase (@testcases)
+ {
+ my $cmd = "distillsrc.pl ".$testcase->[0];
+ print "\nRunning $cmd\n";
+ my @output = `perl $cmd 2>&1`;
+ my @passregexps = @{$testcase->[1]->[0]};
+ my @failregexps = @{$testcase->[1]->[1]};
+
+ my $testpass = -1; # (unset)
+
+ foreach my $line (@output)
+ {
+ chomp ($line);
+ my $pass = 0;
+ my $fail = 0;
+
+ foreach my $passregexp (@passregexps)
+ {
+ if ($line =~ /$passregexp/)
+ {
+ $pass = 1;
+
+ # Remove rule from list
+ @passregexps = grep($_ ne $passregexp, @passregexps);
+ }
+ }
+
+ if (!$pass)
+ {
+ foreach my $failregexp (@failregexps)
+ {
+ if ($line =~ /$failregexp/)
+ {
+ $fail = 1;
+ }
+ }
+ }
+
+ if ($pass)
+ {
+ print "GOOD:$line\n";
+ if ($testpass == -1)
+ {
+ $testpass = 1; # Passed (so far)
+ }
+ }
+ elsif ($fail)
+ {
+ print "BAD:$line\n";
+ $testpass = 0; # Failed
+ }
+ else { print "OKEH:$line\n"; }
+ }
+
+ if ($testpass == 1)
+ {
+ if ((scalar @passregexps) == 0)
+ {
+ print "*** PASS\n";
+ $passes ++;
+ }
+ else
+ {
+ print "*** FAIL - tests not matched:\n> ";
+ print join("\n> ", @passregexps)."\n";
+ }
+ }
+ elsif ($testpass == 0)
+ {
+ print "*** FAIL - hard fail\n";
+ }
+ else
+ {
+ print "*** FAIL - no tests matched\n";
+ }
+
+ $tests ++;
+ }
+
+print "*** Out of $tests tests, $passes passed\n";