def update_func(function): """ Update the info for a function Args: f (function): The function to update Returns: dict: function information test_id: id of the function encountered """ parsed = Parsed(function) parsed.parse() info_dict = parsed.test_info if not parsed.requires_update: return info_dict filename = inspect.getfile(function) with open(filename, 'r+') as location: for index, line in enumerate(location.readlines()): # We have not reached the function yet if index < function.__code__.co_firstlineno: continue if 'TEST INFO' in line: test_info_index = index break new_json = create_json_info() append_json_info(filename, test_info_index, new_json) return new_json
def test_parsed_string_repr(self): from mock_functions.test_module_stuff import FirstClass p = Parsed(FirstClass) p.parse() assert (str(p) == '<Parsed: FirstClass>')
def test_parsed_string_repr(self): from mock_functions.test_module_stuff import FirstClass p = Parsed(FirstClass) p.parse() assert(str(p) == '<Parsed: FirstClass>')
def update_class(cls): """ Update the info for a class Returns: None """ parsed = Parsed(cls) parsed.parse() if not parsed.requires_update: return filename = inspect.getfile(cls) with open(filename, 'r+') as location: lines = location.readlines() first_line, last_line = get_source_lines(lines, cls) with open(filename, 'r+') as location: for index, line in enumerate(location.readlines()[first_line:last_line]): if config['requirement_info'] in line: test_info_index = index + first_line break append_json_info(filename, test_info_index, create_json_info())
def test_nested_parse_attributes(self): from mock_functions.test_module_stuff import FirstClass p = Parsed(FirstClass) p.parse() assert(p.children != {}) assert('function_that_should_not_change' in p.children.keys()) assert(p.children['function_that_should_not_change'].obj_type == 'function')
def test_nested_parse_attributes(self): from mock_functions.test_module_stuff import FirstClass p = Parsed(FirstClass) p.parse() assert (p.children != {}) assert ('function_that_should_not_change' in p.children.keys()) assert (p.children['function_that_should_not_change'].obj_type == 'function')
def test_basic_parse_attributes(self): from mock_functions.test_module_stuff import FirstClass p = Parsed(FirstClass) p.parse() assert(p.obj_type == 'class') assert(p.test_info.time_stamp == '2016-07-02T10:45:57.539011') assert(p.test_info.test_id == 4) assert(p.description == '\n'.join(["This is a class description", "It is multiple lines", "It should all be nicely formatted"]))
def test_basic_parse_attributes(self): from mock_functions.test_module_stuff import FirstClass p = Parsed(FirstClass) p.parse() assert (p.obj_type == 'class') assert (p.test_info.time_stamp == '2016-07-02T10:45:57.539011') assert (p.test_info.test_id == 4) assert (p.description == '\n'.join([ "This is a class description", "It is multiple lines", "It should all be nicely formatted" ]))
def __init__(self, obj: object): self.name = obj.__name__ self.type = get_type(obj) p = Parsed(obj) p.parse() self.description = p.description self.test_info = p.test_info self.file_info = p.file_info self.function = OrderedDict() self.important_attributes = [ 'description', 'test_info', 'file_info', 'type', 'name', 'function' ]
def explore(self): """ Explore the file and update any internal attributes required Returns: None """ for _, c_member in self.classes: current = OrderedDict() Parsed(c_member).parse() for f_name, f_member in get_functions(c_member): current[f_name] = f_member Parsed(f_member).parse() self.module[c_member] = current for f_name, f_member in get_functions(self.imported_module): self.function[f_name] = f_member
def test_mock_function_with_multiple_modules(): with FileCleaner('./mock_functions/test_example_3.py'): from mock_functions.test_example_3 import SecondClassExample p = Parsed(SecondClassExample.this_doc_string_should_change) p.parse() desc = p.description assert(desc == 'This is the only info that should be read or changed') assert(p.requires_update is True) update_func(SecondClassExample.this_doc_string_should_change) with open('./mock_functions/test_example_3.py') as f: f_list = f.read().split('\n') for line in f_list[SecondClassExample.this_doc_string_should_change.__code__.co_firstlineno:]: if 'TEST INFO' in line: assert('test_id' in line) break
def __init__(self, obj: object): self.name = obj.__name__ self.type = get_type(obj) p = Parsed(obj) p.parse() self.description = p.description self.test_info = p.test_info self.file_info = p.file_info self.function = OrderedDict() self.important_attributes = ['description', 'test_info', 'file_info', 'type', 'name', 'function' ]
def test_mock_function_with_multiple_modules(): with FileCleaner('./mock_functions/test_example_3.py'): from mock_functions.test_example_3 import SecondClassExample p = Parsed(SecondClassExample.this_doc_string_should_change) p.parse() desc = p.description assert (desc == 'This is the only info that should be read or changed') assert (p.requires_update is True) update_func(SecondClassExample.this_doc_string_should_change) with open('./mock_functions/test_example_3.py') as f: f_list = f.read().split('\n') for line in f_list[SecondClassExample.this_doc_string_should_change. __code__.co_firstlineno:]: if 'TEST INFO' in line: assert ('test_id' in line) break
def test_mock_test_example_1(): with FileCleaner('./mock_functions/test_example_1.py'): from mock_functions.test_example_1 import test_feature_example_1 p = Parsed(test_feature_example_1) p.parse() desc = p.description assert(desc == 'This **shall** be caught') assert(p.requires_update is True) update_func(test_feature_example_1) with open('./mock_functions/test_example_1.py') as f: f_list = f.read().split('\n') info_line = '' for line in f_list: if 'TEST INFO' in line: info_line = line break assert('test_id' in info_line)
def test_mock_test_example_1(): with FileCleaner('./mock_functions/test_example_1.py'): from mock_functions.test_example_1 import test_feature_example_1 p = Parsed(test_feature_example_1) p.parse() desc = p.description assert (desc == 'This **shall** be caught') assert (p.requires_update is True) update_func(test_feature_example_1) with open('./mock_functions/test_example_1.py') as f: f_list = f.read().split('\n') info_line = '' for line in f_list: if 'TEST INFO' in line: info_line = line break assert ('test_id' in info_line)
def test_mock_function_in_module_1(): with FileCleaner('./mock_functions/test_example_2.py'): from mock_functions.test_example_2 import ExampleClass p = Parsed(ExampleClass.function_2) p.parse() desc = p.description assert(desc == 'Requirement info') assert(p.requires_update is True) update_func(ExampleClass.function_2) with open('./mock_functions/test_example_2.py') as f: f_list = f.read().split('\n') info_line = '' for line in f_list: if 'TEST INFO' in line: info_line = line break assert('test_id' in info_line)
def test_mock_function_in_module_1(): with FileCleaner('./mock_functions/test_example_2.py'): from mock_functions.test_example_2 import ExampleClass p = Parsed(ExampleClass.function_2) p.parse() desc = p.description assert (desc == 'Requirement info') assert (p.requires_update is True) update_func(ExampleClass.function_2) with open('./mock_functions/test_example_2.py') as f: f_list = f.read().split('\n') info_line = '' for line in f_list: if 'TEST INFO' in line: info_line = line break assert ('test_id' in info_line)