import pytest import textwrap from scripts.ai_style_formatter import format_code def test_basic_indentation() -> None: source = textwrap.dedent("""\ def hello(): print("world") if True: print("nested") """) expected = ( "def hello():\n" " print(\"world\")\n" " if True:\n" " print(\"nested\")\n" ) assert format_code(source) == expected def test_top_level_blank_lines() -> None: source = textwrap.dedent("""\ def a(): pass def b(): pass """) expected = ( "def a():\n" " pass\n" "\n" "def b():\n" " pass\n" ) assert format_code(source) == expected def test_inner_blank_lines() -> None: source = textwrap.dedent("""\ def a(): print("start") print("end") """) expected = ( "def a():\n" " print(\"start\")\n" " print(\"end\")\n" ) assert format_code(source) == expected def test_multiline_string_safety() -> None: source = textwrap.dedent("""\ def a(): ''' This is a multiline string that should not be reformatted inside. ''' pass """) # Note: the indentation of the ''' itself becomes 1 space. # The content inside remains exactly as in source. # textwrap.dedent will remove the common leading whitespace from the source. # The source's ''' is at 4 spaces. Content is at 4 spaces. # After dedent: # def a(): # ''' # This is a... result = format_code(source) assert " This is a multiline" in result assert result.startswith("def a():\n '''") def test_continuation_indentation() -> None: source = textwrap.dedent("""\ def long_func( a, b ): return ( a + b ) """) expected = ( "def long_func(\n" " a,\n" " b\n" "):\n" " return (\n" " a +\n" " b\n" " )\n" ) assert format_code(source) == expected def test_multiple_top_level_definitions(vlogger) -> None: source = textwrap.dedent("""\ class MyClass: def __init__(self): self.x = 1 def method(self): pass def top_level(): pass """) expected = ( "class MyClass:\n" " def __init__(self):\n" " self.x = 1\n" "\n" " def method(self):\n" " pass\n" "\n" "def top_level():\n" " pass\n" ) result = format_code(source) vlogger.log_state("Formatted Output", repr(source), repr(result)) assert result == expected vlogger.finalize("AI Style Formatter", "PASS", "Code states correctly match the 1-space ultra-compact style expectations.")