sbsv2/raptor/test/unit_suite/filter_interface_unit.py
author lorewang
Wed, 01 Dec 2010 16:05:36 +0800
changeset 715 e0739b8406dd
parent 674 37ee82a83d43
permissions -rw-r--r--
Specify extenal tool with path
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     1
#
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     2
# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     3
# All rights reserved.
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     4
# This component and the accompanying materials are made available
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     5
# under the terms of the License "Eclipse Public License v1.0"
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     6
# which accompanies this distribution, and is available
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     8
#
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
     9
# Initial Contributors:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    11
#
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    12
# Contributors:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    13
#
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    14
# Description: 
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    15
#
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    16
# Unit tests for the filter_interface module
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    17
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    18
import unittest
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    19
import filter_interface
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    20
import sys
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    21
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    22
# No point testing the Filter interface - it's fully abstract
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    23
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    24
class TestFilterInterface(unittest.TestCase):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    25
	def testSAXFilter(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    26
		# Areas for improvement:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    27
		# - Test non-well formed XML
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    28
		# - Test all error cases (error, fatalError, warning)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    29
		class testFilter(filter_interface.FilterSAX):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    30
			def __init__(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    31
				super(testFilter,self).__init__()
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    32
				self.failed = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    33
				self.seendoc = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    34
				self.startcount = 2
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    35
				self.endcount = 2
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    36
				self.charcount = 14
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    37
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    38
			def startDocument(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    39
				if self.seendoc:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    40
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    41
					sys.stdout.write('FAIL: Nested document elements')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    42
				self.seendoc = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    43
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    44
			def startElement(self, name, attributes):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    45
				self.startcount -= 1
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    46
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    47
				if self.startcount < 0:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    48
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    49
					# Report the number of excessive start elements
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    50
					sys.stdout.write('FAIL: Seen {0} too many start elements'.format(0-self.startcount))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    51
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    52
			def endElement(self, name):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    53
				self.endcount -= 1
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    54
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    55
				if self.endcount < 0:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    56
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    57
					# Report the number of excessive end elements
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    58
					sys.stdout.write('FAIL: Seen {0} too many end elements'.format(0-self.endcount))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    59
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    60
			def endDocument(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    61
				if not self.seendoc:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    62
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    63
					self.stdout.write('FAIL: Not in a document at doc end')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    64
				self.seendoc = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    65
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    66
			def characters(self, char):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    67
				self.charcount -= len(char)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    68
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    69
				if self.charcount < 0:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    70
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    71
					# Report the number of excessive characters
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    72
					sys.stdout.write('FAIL: Seen {0} too many characters'.format(0-self.charcount))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    73
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    74
			def finish(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    75
				# if self.seendoc:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    76
				# 	self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    77
				#	sys.stdout.write('FAIL: Still in a doc at end')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    78
				if self.startcount > 0:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    79
					# Already tested to see if it's less than 0
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    80
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    81
					sys.stdout.write('FAIL: Not enough start elements')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    82
				if self.endcount > 0:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    83
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    84
					sys.stdout.write('FAIL: Not enough end elements')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    85
				if self.charcount > 0:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    86
					self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    87
					sys.stdout.write('FAIL: Not enough chars')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    88
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    89
		
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    90
		filter = testFilter()
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    91
		filter.open([])
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    92
		self.assertTrue(filter.write("<foo>FooText<bar>BarText</bar></foo>"))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    93
		filter.finish()
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    94
		self.assertFalse(filter.failed)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    95
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    96
	def testPerRecipeFilter(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    97
		class testFilter(filter_interface.PerRecipeFilter):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    98
			recipes = [ { 'name':'recipe1', 'target':'target1', 'host':'host1', 'layer':'layer1',  'component':'component1', 'bldinf':'test1.inf', 'mmp':'test1.mmp', 'config':'winscw_test1', 'platform':'plat1', 'phase':'PHASE1', 'source':'source1', 'prereqs':'prereqs1', 'text':'\nTest text 1\n\n'},
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
    99
			{ 'name':'recipe2', 'target':'target2', 'host':'host2', 'layer':'layer2',  'component':'component2', 'bldinf':'test2.inf', 'mmp':'test2.mmp', 'config':'winscw_test2', 'platform':'', 'phase':'PHASE2', 'source':'', 'prereqs':'', 'text':'\nTest text 2\n\n'} ]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   100
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   101
			def __init__(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   102
				super(testFilter,self).__init__()
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   103
				self.failed = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   104
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   105
			def HandleRecipe(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   106
				testRecipe = self.recipes[0]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   107
				self.recipes = self.recipes[1:]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   108
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   109
				for key in testRecipe.keys():
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   110
					if not self.__dict__.has_key(key):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   111
						self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   112
						sys.stdout.write('FAIL: self.{0} not set\n'.format(key))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   113
					elif self.__dict__[key] != testRecipe[key]:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   114
						self.failed = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   115
						sys.stdout.write('FAIL: {0} != {1}\n'.format(repr(self.__dict__[key]),repr(testRecipe[key])))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   116
	
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   117
		filter = testFilter()
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   118
		filter.open([])
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   119
		self.assertTrue(filter.write('''<?xml version="1.0" encoding="ISO-8859-1" ?>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   120
<buildlog sbs_version="99.99.9 [ISODATE symbian build system CHANGESET]" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build/log http://symbian.com/xml/build/log/1_0.xsd">
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   121
<info>sbs: version 99.99.9 [ISODATE symbian build system CHANGESET]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   122
</info>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   123
<progress:discovery object_type='bld.inf references' count='1' />
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   124
<whatlog bldinf='test.inf' mmp='' config=''>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   125
<export destination='test' source='test2'/>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   126
</whatlog>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   127
<recipe name='recipe1' target='target1' host='host1' layer='layer1' component='component1' bldinf='test1.inf' mmp='test1.mmp' config='winscw_test1' platform='plat1' phase='PHASE1' source='source1' prereqs='prereqs1'>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   128
<![CDATA[Test text 1]]><time start='1234567890.01234' elapsed='1.234' />
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   129
<status exit='ok' attempt='1' flags='FLAGS1' />
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   130
</recipe>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   131
<recipe name='recipe2' target='target2' host='host2' layer='layer2' component='component2' bldinf='test2.inf' mmp='test2.mmp' config='winscw_test2' platform='' phase='PHASE2' source='' prereqs=''>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   132
<![CDATA[Test text 2]]><time start='0123456789.12340' elapsed='2.345' />
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   133
<status exit='failed' attempt='2' flags='FLAGS2' />
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   134
</recipe>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   135
</buildlog>
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   136
'''))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   137
		self.assertFalse(filter.failed)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   138
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   139
# run all the tests
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   140
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   141
from raptor_tests import SmokeTest
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   142
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   143
def run():
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   144
	t = SmokeTest()
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   145
	t.id = "999"
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   146
	t.name = "filter_interface_unit"
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   147
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   148
	tests = unittest.makeSuite(TestFilterInterface)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   149
	result = unittest.TextTestRunner(verbosity=2).run(tests)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   150
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   151
	if result.wasSuccessful():
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   152
		t.result = SmokeTest.PASS
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   153
	else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   154
		t.result = SmokeTest.FAIL
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   155
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents:
diff changeset
   156
	return t