diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/test/tinterpretsisinteg/testlistreader.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/test/tinterpretsisinteg/testlistreader.pm Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,220 @@ +# +# Copyright (c) 2004-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: +# Package contains routines to handle the parsing of the test list +# + +package testlistreader; +use strict; +use File::Copy; +my $Path = "\\epoc32\\winscw\\c\\tswi\\tinterpretsisinteg\\"; +my $domPath = $Path."xml"; +my $runType = 0; +mkdir($domPath); +copy("/epoc32/tools/migrationtool/xml/dom.pm" , "$domPath"); + +sub new { + my $proto = shift; + my $controller = shift; + $runType = shift; + my $class = ref($proto) || $proto; + my $self = {}; + $self->{'verbose'} = 0; + $self->{'currentTag'} = ""; + $self->{'controller'} = $controller; + $self->{'runType'} = $runType; + bless ($self, $class); + return $self; +} + +# utility function to extract text associated with an XML tag +sub getText { + my ($self, $node, $tag) = @_; + + $self->{'currentTag'} = $tag; + if ($node->getElementsByTagName($tag)->getLength > 0) + { + my $text = $node->getElementsByTagName($tag)->item(0)->getFirstChild->getNodeValue; + return $text; + } + else + { + return undef; + } +} + +sub parseFiles { + my ($self, $specialFile, @normalFiles) = @_; + my $controller = $self->{'controller'}; + my $firstDone = 0; + foreach my $file (@normalFiles) + { + my $base = 0; + if ($firstDone) + { + $base = 0; + } + else + { + $base = 1; + } + $firstDone = 0; + my $baseDir = $self->parseFile($file, $base); + $controller->setBaseDir($baseDir); + } + if (length($specialFile) > 0) + { + my @order = $self->parseOnlyTests($specialFile); + $controller->setOrder(\@order); + } +} + + +sub parseFile { + my ($self, $filename) = @_; + my $parser= XML::DOM::Parser->new(); + my $doc = $parser->parsefile($filename); + my $controller = $self->{'controller'}; + my $baseDir=""; + + my $getBase = 0; + + #the xml file must have a tag + my $root = $self->getText($doc, 'testlist'); + die "Missing tag <".$self->{'currentTag'}."> in $filename\n" if (!(defined $root)); + + my $testCount = 0; + foreach my $test ($doc->getElementsByTagName('test')) { + my %testEntry; + $testCount++; + + # the test element must have an id attribute + my $testid = $test->getAttribute('id'); + die "Must have the id attribute for test $testCount in file\n" if (length($testid) ==0); + + my $testtype = $test->getAttribute('type'); + $testEntry{'id'} = $testid; + + #add all the other elements in the test element to the current test entry + foreach my $elem ($test->getChildNodes) + { + if ($elem->getNodeType == 1) + { + #an element + my $key = $elem->getNodeName; + my $value = undef; + if (length($elem->getFirstChild) > 0) + { + $value = $elem->getFirstChild->getNodeValue; + } + $testEntry{$key} = $value; + #some of the elements have attributes. These also need to be + #added to the current test entry + + if ($key eq "command") + { + $testEntry{'command_dir'} = $elem->getAttribute('dir'); + my $log = $elem->getAttribute('log'); + if (length($log)) + { + if (lc($log) =~/yes/) + { + $testEntry{'log'} = 1; + } + else + { + $testEntry{'log'} = 0; + } + } + else + { + $testEntry{'log'} = 1; + } + } + elsif ($key eq "check") + { + + my $c_type = $elem->getAttribute('type'); + $testEntry{'check_type'} = $c_type if (length($c_type)); + + my $c_prog = $elem->getAttribute('name'); + $testEntry{'check_prog'} = $c_prog if (length($c_prog)); + # check if base results directory is required for checking + # the results + if (exists($testEntry{'check_type'})) + { + $getBase = 1 if ($testEntry{'check_type'} eq "diff" ); + } + } + } + } + + #now check that all the mandatory elements and attribute exist + if ($getBase) + { + $baseDir = $self->getText($doc, 'baseResultDir'); + die "Missing tag <".$self->{'currentTag'}."> in $filename\n" if (!(defined $baseDir)); + } + die "Empty or missing 'title' tag for test " . $testEntry{'id'} . "\n" if (length($testEntry{'title'}) == 0); + die "Empty or missing 'command' tag for test " . $testEntry{'id'} . "\n" if (length($testEntry{'command'}) == 0); + die "Empty or missing 'check' tag with 'type' attribute for test " . $testEntry{'id'} . "\n" if (length($testEntry{'check_type'}) == 0); + + die "Invalid 'type' attribute value (" . $testEntry{'check_type'} . ") for 'check' tag test " . $testEntry{'id'} . "\n" if ($testEntry{'check_type'} ne "diff" && $testEntry{'check_type'} ne "program" && $testEntry{'check_type'} ne "result") ; + if (length($testtype)) + { + $testEntry{'type'} = $testtype; + } + else + { + $testEntry{'type'} = 'basic'; + } + # if the test is for 9.6 & future release and the type is nativeonly + # do not include it in the entry + if(nativeOnly($self->{'runType'},$testtype)) + { + $controller->addTest(\%testEntry); + } + } + return $baseDir; + $doc->dispose; +} + +sub nativeOnly() + { + my ($runType,$type) = @_; + if( ($runType eq "usifnative") && ($type eq "nativeonly") ) + { + return 0; + } + return 1; + } + +# parse a XML file with test references only +sub parseOnlyTests { + my ($self, $filename) = @_; + my $controller = $self->{'controller'}; + my $parser= XML::DOM::Parser->new(); + my $doc = $parser->parsefile($filename); + my @newOrder; + + # file only contains list of tests to be executed + foreach my $test ($doc->getElementsByTagName('test')) { + my $testid = $test->getAttribute('id'); + push @newOrder, $testid; + } + $doc->dispose; + return @newOrder; +} + +1;