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'
                                     ]
Beispiel #13
0
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)
Beispiel #15
0
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)
Beispiel #17
0
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)