Coverage for manyworlds/scenario.py: 94%

36 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-08-06 10:33 -0400

1"""Defines the ScenarioForest Class""" 

2import re 

3from igraph import Graph 

4import pdb 

5 

6from .step import Step, Prerequisite, Action, Assertion 

7 

8class Scenario: 

9 """A BDD Scenario 

10 

11 :param name: The name of the scenario 

12 :type name: string 

13 :param vertex: The iGraph vertex associated with the scenario 

14 :type name: class: igraph.Vertex 

15 """ 

16 

17 def __init__(self, name, vertex): 

18 """Constructor method 

19 """ 

20 self.name = name.strip() 

21 self.vertex = vertex 

22 self.graph = vertex.graph 

23 self.steps = [] 

24 

25 def prerequisites(self): 

26 return self.steps_of_class(Prerequisite) 

27 

28 def actions(self): 

29 return self.steps_of_class(Action) 

30 

31 def assertions(self): 

32 return self.steps_of_class(Assertion) 

33 

34 def steps_of_class(self, step_class): 

35 return [st for st in self.steps if type(st) is step_class] 

36 

37 def __str__(self): 

38 return "<Scenario: {} ({} prerequisites, {} actions, {} assertions)>".format(self.name, len(self.prerequisites()), len(self.actions()), len(self.assertions())) 

39 

40 def __repr__(self): 

41 return self.__str__() 

42 

43 def ancestors(self): 

44 ancestors = self.graph.neighborhood(self.vertex, mode='IN', order=1000, mindist=1) 

45 ancestors.reverse() 

46 return [vx['scenario'] for vx in self.graph.vs(ancestors)] 

47 

48 def level(self): 

49 return self.graph.neighborhood_size(self.vertex, mode="IN", order=1000) 

50 

51 def is_breadcrumb(self): 

52 return len(self.assertions()) == 0 

53 

54 def format(self): 

55 breadcrumbs = [sc.name for sc in self.ancestors() if sc.is_breadcrumb()] 

56 breadcrumbs_string = '' 

57 if breadcrumbs: 

58 breadcrumbs_string = ' > '.join(breadcrumbs) + ' > ' 

59 return "Scenario: " + breadcrumbs_string + self.name