def test_can_handle_variables() -> None:
    assert maybe_rewrite_line("source=VAR") == "sources=[VAR]"
    assert maybe_rewrite_line("source = x_y_z") == "sources = [x_y_z]"
def test_can_handle_comments() -> None:
    assert maybe_rewrite_line(
        "source='foo.py'  # test") == "sources=['foo.py']  # test"
    assert maybe_rewrite_line(
        "source = 'foo.py' ####") == "sources = ['foo.py'] ####"
def test_can_handle_sharing_a_line() -> None:
    assert (maybe_rewrite_line("python_library(source='foo.py')") ==
            "python_library(sources=['foo.py'])")
    assert maybe_rewrite_line(
        "name='lib', source='foo.py'") == "name='lib', sources=['foo.py']"
def test_respects_original_formatting() -> None:
    # Preserve whitespace around the `=` operator
    assert maybe_rewrite_line("source ='foo.py'") == "sources =['foo.py']"
    assert maybe_rewrite_line("source= 'foo.py'") == "sources= ['foo.py']"
    assert maybe_rewrite_line("source =  'foo.py'") == "sources =  ['foo.py']"

    # Preserve trailing commas
    assert maybe_rewrite_line("source='foo.py'") == "sources=['foo.py']"
    assert maybe_rewrite_line("source='foo.py',") == "sources=['foo.py'],"

    # Preserve leading whitespace
    assert maybe_rewrite_line(
        "\t\tsource='foo.py'") == "\t\tsources=['foo.py']"
    assert maybe_rewrite_line("  source='foo.py'") == "  sources=['foo.py']"

    # Preserve trailing whitespace
    assert maybe_rewrite_line("source='foo.py'  ") == "sources=['foo.py']  "
    assert maybe_rewrite_line("source='foo.py',  ") == "sources=['foo.py'],  "

    # Preserve whether the original used single quotes or double quotes
    assert maybe_rewrite_line("source='foo.py'") == "sources=['foo.py']"
    assert maybe_rewrite_line('source="foo.py"') == 'sources=["foo.py"]'
def test_safe_with_unrelated_lines(line: str) -> None:
    assert maybe_rewrite_line(line) is None
def test_no_op_when_already_valid(line: str) -> None:
    assert maybe_rewrite_line(line) is None