diff --git a/test/conftest.py b/test/conftest.py index 8fe64c38..6700cc55 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -76,9 +76,11 @@ def pytest_generate_tests(metafunc): if 'refactor_case' in metafunc.fixturenames: base_dir = metafunc.config.option.refactor_case_dir + cases = list(refactor.collect_dir_tests(base_dir, test_files)) metafunc.parametrize( - 'refactor_case', - refactor.collect_dir_tests(base_dir, test_files)) + 'refactor_case', cases, + ids=[c.refactor_type + '-' + c.name for c in cases] + ) if 'static_analysis_case' in metafunc.fixturenames: base_dir = os.path.join(os.path.dirname(__file__), 'static_analysis') diff --git a/test/refactor.py b/test/refactor.py index 9cc10fda..6d26020b 100755 --- a/test/refactor.py +++ b/test/refactor.py @@ -11,15 +11,14 @@ import re from functools import reduce import jedi -from jedi import refactoring class RefactoringCase(object): - def __init__(self, name, source, line_nr, index, path, + def __init__(self, name, code, line_nr, index, path, new_name, start_line_test, desired): self.name = name - self.source = source + self.code = code self.line_nr = line_nr self.index = index self.path = path @@ -27,10 +26,14 @@ class RefactoringCase(object): self.start_line_test = start_line_test self.desired = desired - def refactor(self): - script = jedi.Script(self.source, self.line_nr, self.index, self.path) + @property + def refactor_type(self): f_name = os.path.basename(self.path) - refactor_func = getattr(refactoring, f_name.replace('.py', '')) + return f_name.replace('.py', '') + + def refactor(self): + script = jedi.Script(self.code, self.line_nr, self.index, self.path) + refactor_func = getattr(script, self.refactor_type) args = (self.new_name,) if self.new_name else () return refactor_func(script, *args) @@ -61,14 +64,14 @@ class RefactoringCase(object): self.name, self.line_nr - 1) -def collect_file_tests(source, path, lines_to_execute): +def collect_file_tests(code, path, lines_to_execute): r = r'^# --- ?([^\n]*)\n((?:(?!\n# \+\+\+).)*)' \ r'\n# \+\+\+((?:(?!\n# ---).)*)' - for match in re.finditer(r, source, re.DOTALL | re.MULTILINE): + for match in re.finditer(r, code, re.DOTALL | re.MULTILINE): name = match.group(1).strip() first = match.group(2).strip() second = match.group(3).strip() - start_line_test = source[:match.start()].count('\n') + 1 + start_line_test = code[:match.start()].count('\n') + 1 # get the line with the position of the operation p = re.match(r'((?:(?!#\?).)*)#\? (\d*) ?([^\n]*)', first, re.DOTALL) @@ -83,7 +86,7 @@ def collect_file_tests(source, path, lines_to_execute): if lines_to_execute and line_nr - 1 not in lines_to_execute: continue - yield RefactoringCase(name, source, line_nr, index, path, + yield RefactoringCase(name, code, line_nr, index, path, new_name, start_line_test, second) @@ -94,6 +97,6 @@ def collect_dir_tests(base_dir, test_files): if f_name.endswith(".py") and (not test_files or files_to_execute): path = os.path.join(base_dir, f_name) with open(path) as f: - source = f.read() - for case in collect_file_tests(source, path, lines_to_execute): + code = f.read() + for case in collect_file_tests(code, path, lines_to_execute): yield case diff --git a/test/test_integration.py b/test/test_integration.py index 64239048..6652ef2f 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -58,9 +58,5 @@ def test_refactor(refactor_case): :type refactor_case: :class:`.refactor.RefactoringCase` """ - if 0: - # TODO Refactoring is not relevant at the moment, it will be changed - # significantly in the future, but maybe we can use these tests: - refactor_case.run() - assert_case_equal(refactor_case, - refactor_case.result, refactor_case.desired) + refactor_case.run() + assert_case_equal(refactor_case, refactor_case.result, refactor_case.desired)