--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools_os/romkiteka2/test/test.buildrom.pl Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,179 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "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:
+#
+
+my $fails = 0;
+my $total = 0;
+
+# Each test has an input OBY file and an output OBY file.
+# runTest assumes there is also a <input>.oby.out file which
+# contains the expected OBY output.
+
+# Adding a "." to the feature variant name (for example using
+# the option "-DFEATUREVARIANT=.phone") means that buildrom will
+# look for the variant file in ./phone.var rather than in the
+# default location of EPOCROOT/epoc32/tools/variant/phone.var
+
+# test the minimal OBY file
+
+$fails += runTest("-s", "minimal.oby", "result.oby");
+$total++;
+
+# test the include path from a feature-variant OBY file
+
+$fails += runTest("-s -DFEATUREVARIANT=.phone", "var1.oby", "result.oby");
+$total++;
+
+# test the file substitutions in a feature-variant OBY file
+
+$fails += runTest("-s -DFEATUREVARIANT=.phone", "var2.oby", "result.oby");
+$total++;
+
+# test an OBY file that is on the include path from a feature-variant
+
+$fails += runTest("-s -DFEATUREVARIANT=.phone", "varB", "result.oby");
+$total++;
+
+# test that absolute paths work everywhere
+
+createDummyInclude($ENV{'EPOCROOT'} . "epoc32/include/test/abs.hrh");
+createDummyInclude($ENV{'EPOCROOT'} . "epoc32/include/test/incA/absA.iby");
+createDummyInclude($ENV{'EPOCROOT'} . "epoc32/include/test/incB/absB.iby");
+
+$fails += runTest("-s -DFEATUREVARIANT=.abs", "var3.oby", "result.oby");
+$total++;
+
+###########################################################################
+# report the results and finish
+
+print "\n\n$fails test";
+print "s" unless ($fails == 1);
+print " failed (out of $total run).\n";
+exit 0;
+
+###########################################################################
+
+sub runTest
+{
+ my $options = shift;
+ my $inFile = shift;
+ my $outFile = shift;
+ my $expFile = "$inFile.out";
+
+ my $command = "buildrom -fm=..\\include\\featureUIDs.xml $options $inFile";
+
+ # remove the output if it already exists
+ unlink($outFile);
+
+ # run the command (it will error because we do not have everything
+ # required by rombuild, but we will get an output oby file which
+ # shows whether buildrom did the right thing or not).
+ system($command . " >nul 2>&1");
+
+ if (!open(OUTPUT, $outFile))
+ {
+ print STDERR "FAILED: $command\n\t$outFile was not created\n";
+ return 1;
+ }
+
+ if (!open(EXPECT, $expFile))
+ {
+ print STDERR "FAILED: $command\n\t$expFile was not found\n";
+ close(OUTPUT);
+ return 1;
+ }
+
+ my $outLine;
+ my $expLine;
+ my $lineNumber = 1;
+ my $outMissing = 0;
+ my $expMissing = 0;
+ my $nonMatches = 0;
+
+ while ($expLine = <EXPECT>)
+ {
+ $expLine =~ s/^\s+//;
+ $expLine =~ s/\s+$//;
+
+ if ($outLine = <OUTPUT>)
+ {
+ $outLine =~ s/^\s+//;
+ $outLine =~ s/\s+$//;
+
+ if (!($expLine eq $outLine))
+ {
+ print STDERR "FAILED: $command\n";
+ print STDERR "\texpected output line $lineNumber was:\n";
+ print STDERR "\t$expLine\n";
+ print STDERR "\tactual output line $lineNumber was:\n";
+ print STDERR "\t$outLine\n";
+ $nonMatches++;
+ }
+ }
+ else
+ {
+ $outMissing++;
+ }
+ $lineNumber++;
+ }
+ while ($outLine = <OUTPUT>)
+ {
+ $expMissing++;
+ }
+
+ close(EXPECT);
+ close(OUTPUT);
+
+ if ($nonMatches)
+ {
+ print STDERR "FAILED: $command\n";
+ print STDERR "\t$nonMatches lines did not match\n";
+ return 1;
+ }
+ if ($outMissing)
+ {
+ print STDERR "FAILED: $command\n";
+ print STDERR "\toutput file $outFile is $outMissing lines too short\n";
+ return 1;
+ }
+ if ($expMissing)
+ {
+ print STDERR "FAILED: $command\n";
+ print STDERR "\toutput file $outFile is $expMissing lines too long\n";
+ return 1;
+ }
+
+ print STDERR "OK: $command\n";
+ return 0; # OK
+}
+
+use File::Basename;
+
+sub createDummyInclude
+{
+ my $file = shift;
+ my $dir = dirname($file);
+
+ mkdir($dir) if (!-d $dir);
+
+ if (open(FILE, ">$file"))
+ {
+ print FILE "/* test file */\n";
+ close(FILE);
+ }
+ else
+ {
+ print STDERR "could not write file $file\n";
+ }
+}