From 83839804bee5caa0e8d4006ecb7f320fd85da5cf Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes <jon.michael.aanes@secata.com> Date: Thu, 27 Feb 2025 15:44:01 +0100 Subject: [PATCH] CLI --- standardize_test_format/__init__.py | 26 +++++++++++--------------- standardize_test_format/__main__.py | 27 +++++++++++++++++++-------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/standardize_test_format/__init__.py b/standardize_test_format/__init__.py index 74cd26f..f3e1d5f 100644 --- a/standardize_test_format/__init__.py +++ b/standardize_test_format/__init__.py @@ -11,18 +11,16 @@ TEST_PATTERN: re.Pattern = re.compile( + r'(?:@DisplayName\("(?P<display>.*)"\)\s*)?' + r'(?P<visibility>public\s+|private\s+)?void\s+(?P<name>\w+)\(', re.IGNORECASE) -OUTPUT_JAVADOC = False -OUTPUT_DISPLAY_NAME = True - END_SYMBOLS = '.?!' def format_test_prefix(name: str, description: str, annotation: - str,visibility:str) -> str: + str,visibility:str, with_javadoc: bool, + with_display_name: bool) -> str: str_builder = [] - if OUTPUT_JAVADOC: + if with_javadoc: str_builder += ['/** ',description,' */','\n'] str_builder += ['@', annotation] - if OUTPUT_DISPLAY_NAME: + if with_display_name: str_builder += ['\n', '@DisplayName("'] str_builder.append(description.rstrip(END_SYMBOLS)) str_builder += ['")'] @@ -45,7 +43,7 @@ def to_camel_case(description: str) -> str: def from_camel_case(name: str) -> str: return re.sub(r'(^|[A-Z])[a-z]*', lambda x: ' '+x.group(0).capitalize(), name).strip() -def replace_test_pattern(match: re.Match) -> str: +def replace_test_pattern(match: re.Match, with_javadoc: bool, with_display_name: bool) -> str: comment = (match.group('comment') or '').strip() annotation = match.group('annotation').strip() visibility = (match.group('visibility') or '').strip() @@ -55,13 +53,11 @@ def replace_test_pattern(match: re.Match) -> str: description = display or comment or from_camel_case(name) + return format_test_prefix(to_camel_case(description), + description, annotation, visibility, + with_javadoc=with_javadoc, + with_display_name=with_display_name) - formatted = format_test_prefix(to_camel_case(description), - description, annotation, visibility) - print(formatted) - return formatted - - -def standardize_java_text(text: str): - return TEST_PATTERN.sub(replace_test_pattern, text) +def standardize_java_text(text: str, with_javadoc: bool, with_display_name: bool): + return TEST_PATTERN.sub(lambda m: replace_test_pattern(m, with_javadoc, with_display_name), text) diff --git a/standardize_test_format/__main__.py b/standardize_test_format/__main__.py index b5f2e62..e80f233 100644 --- a/standardize_test_format/__main__.py +++ b/standardize_test_format/__main__.py @@ -6,23 +6,34 @@ from . import standardize_java_text def test_files(repo: pathlib.Path) -> list[pathlib.Path]: return list(repo.rglob('*.java')) -def standardize_in_file(path: pathlib.Path): +def standardize_in_file(path: pathlib.Path, inline: bool, with_javadoc: bool, + with_display_name: bool): with open(path) as f: text = f.read() - text = standardize_java_text(text) + text_updated = standardize_java_text(text, with_javadoc, with_display_name) + if text_updated == text: + return - if False: + if inline: with open(path, 'w') as f: - f.write(text) + f.write(text_updated) + else: + print(text_updated) + +def argument_parser(): + argparser = argparse.ArgumentParser() + argparser.add_argument('repo', type=pathlib.Path) + argparser.add_argument('-i', action='store_true') + argparser.add_argument('--javadoc', action='store_true') + argparser.add_argument('--displayname', action='store_true') + return argparser def main(): - argparser = argparse.ArgumentParser() - argparser .add_argument('repo', type=pathlib.Path) - args = argparser.parse_args() + args = argument_parser().parse_args() for path in test_files(args.repo): - standardize_in_file(path) + standardize_in_file(path, inline=args.i, with_javadoc=args.javadoc, with_display_name=args.displayname) if __name__ == '__main__': main()