imgtools_os/romkiteka2/test/test.buildrom.pl
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /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";
+	}
+}