--- /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 <testlist> 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;