diff -r 73a1feb507fb -r bc78a40cd63c tsrc/unittestrunner/unittest_qt.pl --- a/tsrc/unittestrunner/unittest_qt.pl Tue Aug 31 15:12:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,442 +0,0 @@ -# -# Copyright (c) 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: -# -#!/usr/bin/perl - -use File::Copy; -use Cwd; -use Getopt::Long; -use XML::Parser::Expat; -use Data::Dumper; - -#---------------------------------------Initialization------------------------------------------------------# - -$projectrootname = "/"; #is set to correct at run-time -$projectdrive = "z:"; #is set to correct at run-time - -$unitTestRunner = "unittest_qt.pl"; -$scriptLocation = "mmsharinguis/tsrc/unittestrunner"; -$coverageResultsDirDefault = "mmsharinguis/tsrc/unittestrunner/qtresults/"; -$testConfigDefault = "unittest_qt_config.txt"; -$qtProFileDefault = "tsrc.pro"; -$buildResults = "BuildResults.txt"; -$coverageDat = "MON.dat"; -$coverageSymbols = "MON.sym"; -$coverageProfile = "profile.txt"; - -$coverageResultsFile = "CTCHTML/index.html"; -$finalResultsFile = "AllResults.html"; -$cssFile = "CTCHTML/ctc.css"; -$cssLink = " \$param_noclean, - "config:s" => \$testConfig, - "pro:s" => \$qtProFile, - "results:s" => \$coverageResultsDir, - "help" => \$help); - -$startdir = cwd; - -if (defined $help){ - print_help(); - exit; -} - -findProjectDriveAndRoot(); - -createResultsDir(); - -# set target for intrumentation result -$ENV{'CTC_DATA_PATH'}= "$coverageResultsDir"; - -doClean(); - -parseConfigFile(); - -buildTests(); - -runTests(); - -chdir($startdir); - -# create textual output -chdir("$coverageResultsDir"); -doSystemCall("ctcpost $coverageSymbols $coverageDat -p $coverageProfile -T 70"); -doSystemCall("ctc2html -i $coverageProfile -t 70"); - -# clear target for intrumentation result -$ENV{'CTC_DATA_PATH'}= ""; - -combineResults(); - -chdir($startdir); - -#---------------------------------------Main Ends-------------------------------------------------------------# - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub findProjectDriveAndRoot() -{ - $tempStartDir = $startdir; - if ($tempStartDir =~ m/$scriptLocation/){ - # extract project root - for ($tempStartDir) { - s/$scriptLocation+$//; - } - # divide it to drive and root - if ($tempStartDir =~ /^(.:)(.*)/){ - $projectdrive = $1; - $projectrootname = $2; - } - print "project drive: $projectdrive \n"; - print "project root: $projectrootname \n"; - } - else{ - print "cannot determine project drive and root, use defaults!\n"; - } -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub createResultsDir() -{ - # create directory for results - if ( defined $coverageResultsDir ){ - if ($coverageResultsDir =~ /^(.:)/){ - print("Drive name given in results dir arg\n"); - } - else{ - $coverageResultsDir = "$projectdrive" . "/" . "$coverageResultsDir"; - } - } - else{ - $coverageResultsDir = "$projectdrive$projectrootname$coverageResultsDirDefault"; - } - print ("Writing results to $coverageResultsDir \n\n"); - if (mkdir("$coverageResultsDir", 0755)){ - print("The results directory was created successfully! \n"); - } - else { - print("The results directory already exists. \n"); - } -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub doClean() -{ - if (!defined $param_noclean) - { - # clear previous results - print("Cleaning previous results. \n"); - unlink("$coverageResultsDir$buildResults"); - unlink("$coverageResultsDir$coverageDat"); - unlink("$coverageResultsDir$coverageSymbols"); - unlink("$coverageResultsDir$coverageProfile"); - unlink("$coverageResultsDir$finalResultsFile"); - } -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub parseConfigFile() -{ - if ( !defined $testConfig ){ - print("Config file not defined, using default. \n"); - $testConfig = $testConfigDefault; - } - - open(CONFIG, $testConfig) or die("file $testConfig not found!\n"); - - @config_file_content = ; - - - for ($j = 0; $j <= $#config_file_content; $j++) - { - # remove \n from each line - $currline = @config_file_content[$j]; - for ($currline) { - s/\n+$//; - } - @{ $testNamesAndLogFiles [$j] } = split( ",", $currline ); - } - - print Dumper( @testNamesAndLogFiles ); - - close(CONFIG); -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub buildTests() -{ - if ( !defined $qtProFile ){ - print("Pro file not defined, using default. \n"); - $qtProFile = $qtProFileDefault; - } - doSystemCall( "qmake $qtProFile" ); - doSystemCall( "sbs reallyclean" ); - doSystemCall( "qmake $qtProFile" ); - - $exclude = "-C \"EXCLUDE+*\tsrc\*\" -C \"EXCLUDE+*/*/tsrc/*\" -C \"EXCLUDE+*/*/*/tsrc/*\" -C \"EXCLUDE+moc_*\""; - - doSystemCall( "call ctcwrap -i d -n $coverageResultsDir$coverageSymbols $exclude -2comp sbs.bat -c winscw_udeb" ); -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub runTests() -{ - for $i ( 0 .. $#testNamesAndLogFiles ) { - $testName = $testNamesAndLogFiles[$i][0]; - print("Running tests for: $testName\n"); - - $testCall = "\\epoc32\\release\\winscw\\udeb\\" . $testName . " -xml"; - doSystemCall( $testCall ); - - for $j ( 1 .. $#{ $testNamesAndLogFiles [$i] } ) { - $logFile = $projectdrive . "\\epoc32\\winscw\\c\\" . $testNamesAndLogFiles[$i][$j]; - print("Copying log file: $logFile\n"); - copy( $logFile, "$coverageResultsDir" ); - } - } -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub combineResults() -{ - open(COVERAGE, "$coverageResultsDir$coverageResultsFile") or die("file $coverageResultsFile not found!\n"); - @coverageFileContent = ; - - # append coverage information after eunit results - - for ($j = 0; $j <= $#coverageFileContent; $j++){ - $currentLine = @coverageFileContent[$j]; - - if ($currentLine =~ /$cssLink/){ - if ( open(CSSFILE, "$coverageResultsDir$cssFile") ){ - # append css styles to results html - $outputString .= "\n"; - close(CSSFILE); - } - } - else{ - $outputString .= $currentLine; - - if ($currentLine =~ /$outputFileBodyStart/){ - $outputString .= parseXmlResults(); - $outputString .= "

" - } - } - } - - open(NEWRESULTSFILE, "> $coverageResultsDir$finalResultsFile") or die "Cannot open final results file\n"; - print NEWRESULTSFILE "$outputString"; - close(NEWRESULTSFILE); - close(OUTPUT); - close(COVERAGE); -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub parseXmlResults() -{ - $qtestOutputString = "QTestLib Results

\n"; - - - for $i ( 0 .. $#testNamesAndLogFiles ) { - $testName = $testNamesAndLogFiles[$i][0]; - - for $j ( 1 .. $#{ $testNamesAndLogFiles [$i] } ) { - $logFile = $testNamesAndLogFiles[$i][$j]; - if ( -e "$coverageResultsDir$logFile" ){ - print("Parsing: $logFile\n"); - open(TESTRESULTS, "$coverageResultsDir$logFile"); - $parser = new XML::Parser::Expat; - $parser->setHandlers('Start' => \&sh, - 'End' => \&eh, - 'Char' => \&ch); - - $totalCount = 0; - $passedCount = 0; - $failedCount = 0; - eval{ - ### try block - $parser->parse(*TESTRESULTS); - }; - if ($@){ - ### catch block - print("$logFile, parsing failed\n"); - $qtestOutputString .= "$logFile parsing failed, testcase execution might have failed
\n"; - }; - close(TESTRESULTS); - - } - else{ - - print("$logFile, not found\n"); - $qtestOutputString .= ""; - $qtestOutputString .= "$testName => "; - $qtestOutputString .= "$logFile not found, testcase building might have failed
\n"; - } - } - } - - return $qtestOutputString; -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub sh -{ - my ($p, $el, %atts) = @_; - if ( $el eq $xmlDllLine ) - { - $qtestOutputString .= ""; - $dllName = %atts->{name}; - @dllNameParts = split m!(\\)!, $dllName; - $dllName = $dllNameParts[$#dllNameParts]; - $qtestOutputString .= "$dllName => "; - } - - if ( $el eq $xmlResultLine ) - { - $status = %atts->{type}; - if ( $status eq $xmlCasePassed ) - { - $passedCount++; - } - else - { - $failedCount++; - } - } -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub eh -{ - my ($p, $el) = @_; - if ( $el eq $xmlDllLine ) - { - $totalCount = $passedCount + $failedCount; - if ( $failedCount > 0 || $totalCount == 0 ) - { - $qtestOutputString .= "Testcases passed/run: $passedCount/$totalCount
\n"; - } - else - { - $qtestOutputString .= "Testcases passed/run: $passedCount/$totalCount
\n"; - } - $passedCount = 0; - $failedCount = 0; - } -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub ch -{ - my ($p, $el) = @_; - #print ("$el\n"); -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub doSystemCall -{ - #print("\nDoing system call: $_[0]\n"); - #system($_[0]); - system("echo Doing system call: $_[0] >> $coverageResultsDir$buildResults"); - system("$_[0] >> $coverageResultsDir$buildResults 2>&1"); -} - -# ----------------------------------------------------------------------------- -# -# ----------------------------------------------------------------------------- -# -sub print_help -{ - print("\n*************************************************************\n\n"); - print("Script runs by default all multimediasharing qt tests\n"); - print("and creates build, test and coverage results to:\n\n"); - print(" mmsharing/src/internal/unittestrunner/qtresults/\n\n"); - print("Own configuration file (list of components to be processed)\n"); - print("can be used as well:\n\n"); - print(" >unittest_ctc.pl -config=myowntestcomponents.txt\n\n"); - print("The text file should follow the syntax of default configuration file\n"); - print("mmsharing/src/internal/unittestrunner/unittest_qt_config.txt\n\n"); - print("When running just some set of components you might want to \"merge\" the results"); - print("with existing coverage results.\n"); - print("That is possible with command:\n\n"); - print(" >unittest_ctc.pl -eunitdlls=myowneunitcomponents.txt -noclean\n"); - print("\n*************************************************************\n"); -}