206 import AthenaPython.PyAthena as PyAthena
209 top.Members += [parOR("nest1")]
210 nest2 = seqAND("nest2")
211 top.Members += [nest2]
212 top.Members += [PyAthena.Alg("SomeAlg0")]
213 nest2.Members += [parOR("deep_nest1")]
214 nest2.Members += [parOR("deep_nest2")]
216 nest2.Members += [PyAthena.Alg("SomeAlg1")]
217 nest2.Members += [PyAthena.Alg("SomeAlg2")]
218 nest2.Members += [PyAthena.Alg("SomeAlg3")]
221 def test_findTop( self ):
222 f = findSubSequence( self.top, "top")
223 self.assertIsNotNone( f, "Can not find sequence at start" )
224 self.assertEqual( f.getName(), "top", "Wrong sequence" )
225 # a one level deep search
226 nest2 = findSubSequence( self.top, "nest2" )
227 self.assertIsNotNone( nest2, "Can not find sub sequence" )
228 self.assertEqual( nest2.getName(), "nest2", "Sub sequence incorrect" )
230 def test_findDeep( self ):
232 d = findSubSequence( self.top, "deep_nest2")
233 self.assertIsNotNone( d, "Deep searching for sub seqeunce fails" )
234 self.assertEqual( d.getName(), "deep_nest2", "Wrong sub sequence in deep search" )
236 def test_findMissing( self ):
237 # algorithm is not a sequence
238 d = findSubSequence( self.top, "SomeAlg1")
239 self.assertIsNone( d, "Algorithm confused as a sequence" )
241 # no on demand creation
242 inexistent = findSubSequence( self.top, "not_there" )
243 self.assertIsNone( inexistent, "ERROR, found sub sequence that does not relay exist" )
246 inexistent = findOwningSequence(self.top, "not_there")
247 self.assertIsNone( inexistent, "ERROR, found owner of inexistent sequence " )
249 def test_findRespectingScope( self ):
250 owner = findOwningSequence( self.top, "deep_nest1")
251 self.assertEqual( owner.getName(), "nest2", "Wrong owner %s" % owner.getName() )
253 owner = findOwningSequence( self.top, "deep_nest2")
254 self.assertEqual( owner.getName(), "nest2", "Wrong owner %s" % owner.getName() )
256 owner = findOwningSequence( self.top, "SomeAlg1")
257 self.assertEqual( owner.getName(), "nest2", "Wrong owner %s" % owner.getName() )
259 owner = findOwningSequence( self.top, "SomeAlg0")
260 self.assertEqual( owner.getName() , "top", "Wrong owner %s" % owner.getName() )
262 def test_iterSequences( self ):
264 result = [seq.getName() for seq in iterSequences( self.top )]
265 self.assertEqual( result, ['top', 'nest1', 'nest2', 'deep_nest1', 'deep_nest2',
266 'SomeAlg1', 'SomeAlg2', 'SomeAlg3', 'SomeAlg0'] )
268 # Traverse from nested sequence
269 nest2 = findSubSequence( self.top, "nest2" )
270 result = [seq.getName() for seq in iterSequences( nest2 )]
271 self.assertEqual( result, ['nest2', 'deep_nest1', 'deep_nest2',
272 'SomeAlg1', 'SomeAlg2', 'SomeAlg3'] )
274 # Traverse empty sequence
275 deep_nest2 = findSubSequence( self.top, "deep_nest2" )
276 result = [seq.getName() for seq in iterSequences( deep_nest2 )]
277 self.assertEqual( result, ['deep_nest2'] )
279 # Traverse from algorithm
280 alg1 = findAlgorithm( self.top, "SomeAlg1" )
281 result = [seq.getName() for seq in iterSequences( alg1 )]
282 self.assertEqual( result, ['SomeAlg1'] )
284 def test_findAlgorithms( self ):
285 a1 = findAlgorithm( self.top, "SomeAlg0" )
286 self.assertIsNotNone( a1, "Can't find algorithm present in sequence" )
288 a1 = findAlgorithm( self.top, "SomeAlg1" )
289 self.assertIsNotNone( a1, "Can't find nested algorithm " )
291 nest2 = findSubSequence( self.top, "nest2" )
293 a1 = findAlgorithm( nest2, "SomeAlg0" )
294 self.assertIsNone( a1, "Finding algorithm that is in the upper sequence" )
296 a1 = findAlgorithm( nest2, "NonexistentAlg" )
297 self.assertIsNone( a1, "Finding algorithm that is does not exist" )
299 a1 = findAlgorithm( self.top, "SomeAlg0", 1)
300 self.assertIsNotNone( a1, "Could not find algorithm within the required nesting depth == 1" )
302 a1 = findAlgorithm( self.top, "SomeAlg1", 1)
303 self.assertIsNone( a1, "Could find algorithm even if it is deep in sequences structure" )
305 a1 = findAlgorithm( self.top, "SomeAlg1", 2)
306 self.assertIsNotNone( a1, "Could not find algorithm within the required nesting depth == 2" )
308 a1 = findAlgorithm( self.top, "SomeAlg3", 2)
309 self.assertIsNotNone( a1 is None, "Could find algorithm even if it is deep in sequences structure" )