Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions Source/BDDLibrary.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def update_feature_doc(self):
def __is_a_feature__(self, test):
if( not str(test.name).startswith("Feature:") ):
return False
elif( len(test.keywords) != 0 ):
elif( len(test.body) != 0 ):
return False
return True

Expand All @@ -125,38 +125,39 @@ def contains_background(self, tests=None):
return number_of_background_test==1 and background_placed_in_second_place

def parse(self, test):
self.__background_steps__ = test.keywords
self.__background_steps__ = test.body

def add_background_step(self, test):
insert_background_index = 0
if(self.__contain_setup__(test)):
insert_background_index = 1
for background_keyword in self.__background_steps__ :
test.keywords.insert(insert_background_index, background_keyword)
test.body.insert(insert_background_index, background_keyword)
insert_background_index += 1
return test

def __is_a_background_test__(self, test):
if( not str(test.name).startswith("Background:") ):
return False
elif( len(test.keywords) == 0 ):
elif( len(test.body) == 0 ):
return False
return True

def __contain_setup__(self, test):
return test.keywords.setup!=None
return test.body.setup!=None


class ScenarioParser:


def __init__(self, execute_target_suite):
self.__execute_target_suite__ = execute_target_suite
self.__test__ = None

def is_scenario(self, test):
if( not str(test.name).startswith("Scenario:") ):
return False
elif( len(test.keywords) == 0 ):
elif( len(test.body) == 0 ):
return False
return True

Expand All @@ -178,7 +179,7 @@ def is_scenario_outline(self, scenario):
if( not str(scenario.name).startswith("Scenario Outline:") ):
return False

for keyword in scenario.keywords:
for keyword in scenario.body:
if(keyword.name.lower() == "examples:"):
return True

Expand All @@ -187,14 +188,14 @@ def is_scenario_outline(self, scenario):
def parse(self, test):
self.__example_data_table__ = list()
self.__test__ = test
for keyword in test.keywords:
for keyword in test.body:
if(keyword.name.lower() == "examples:"):
self.__create_example_data_table__(keyword.args)
break

def addExamples(self):
for serial_number, example_data in enumerate(self.__example_data_table__):
self.__add_an_example_test_case__(self.__test__.name, self.__test__.tags, self.__test__.keywords, serial_number, example_data)
self.__add_an_example_test_case__(self.__test__.name, self.__test__.tags, self.__test__.body, serial_number, example_data)

def __create_example_data_table__(self, embedding_table):
headers = list(map(lambda x: x.strip(),embedding_table[0].split('|')))
Expand Down Expand Up @@ -225,7 +226,7 @@ def __add_an_example_test_case__(self, test_name, test_tag, test_keywords, seria
if(self.__keyword_argument_contain_embedding_key__(script_keyword.args)): # embedding table case
script_keyword.args = self.__replace_keyword_argument_with_example_data__(script_keyword.args, example_data)

example_test_case.keywords.append(script_keyword)
example_test_case.body.append(script_keyword)

def __keyword_name_contain_embedding_key__(self, keyword_name):
return True if ("<" in keyword_name and ">" in keyword_name) else False
Expand Down Expand Up @@ -266,23 +267,23 @@ def init(self):
self.__embedding_data_dictionay__ = None

def contains_embedding_table(self, test):
for keyword in test.keywords:
for keyword in test.body:
if(self.__keyword_contains_embedding_table__(keyword)):
return True

return False

def parse(self, test):
self.__embedding_data_dictionay__ = dict()
for keyword in test.keywords:
for keyword in test.body:
if(self.__keyword_contains_embedding_table__(keyword)):
self.__add_embedding_data_pairing__(keyword.name, keyword.args) # use keyword name as key to prevent duplicate key in different keyword

def add_embedding_step(self, test):
result = copy.deepcopy(test)
for repeat_index, script_keyword in enumerate(result.keywords):
for repeat_index, script_keyword in enumerate(result.body):
if script_keyword.name in self.__embedding_data_dictionay__.keys(): # remove the origin one
del result.keywords[repeat_index]
del result.body[repeat_index]

while script_keyword.name in self.__embedding_data_dictionay__.keys():
embedding_argument = dict()
Expand All @@ -296,7 +297,7 @@ def add_embedding_step(self, test):

repeat_script_keyword = copy.deepcopy(script_keyword)
repeat_script_keyword.args = [copy.deepcopy(embedding_argument), None]
result.keywords.insert(repeat_index, repeat_script_keyword)
result.body.insert(repeat_index, repeat_script_keyword)
if not any(self.__embedding_data_dictionay__[script_keyword.name]): # remove if no key in a keyword
del self.__embedding_data_dictionay__[script_keyword.name]

Expand Down