Files
manual_slop/tests/test_skeleton_injection.py

64 lines
2.2 KiB
Python

import os
import pytest
from src.app_controller import AppController
from pathlib import Path
def test_skeleton_injection_state_variables():
ctrl = AppController()
assert hasattr(ctrl, "_inject_file_path")
assert hasattr(ctrl, "_inject_mode")
assert hasattr(ctrl, "_inject_preview")
assert hasattr(ctrl, "_show_inject_modal")
assert ctrl._inject_mode == "skeleton"
assert ctrl._inject_preview == ""
assert ctrl._show_inject_modal is False
def test_update_inject_preview_skeleton(tmp_path):
ctrl = AppController()
mock_file = tmp_path / "mock.py"
# Use 1-space indent in the mock content too for consistency
content = '"""Module docstring"""\ndef foo():\n """Foo docstring"""\n print("hello")\n\nclass Bar:\n """Bar docstring"""\n def baz(self):\n pass\n'
mock_file.write_text(content)
ctrl._inject_file_path = str(mock_file)
ctrl._inject_mode = "skeleton"
ctrl._update_inject_preview()
# Skeleton should contain signatures and docstrings but not bodies
assert "def foo():" in ctrl._inject_preview
assert "class Bar:" in ctrl._inject_preview
assert 'print("hello")' not in ctrl._inject_preview
assert "pass" not in ctrl._inject_preview
assert '"""Foo docstring"""' in ctrl._inject_preview
def test_update_inject_preview_full(tmp_path):
ctrl = AppController()
mock_file = tmp_path / "mock.py"
content = "line 1\n" * 10
mock_file.write_text(content)
ctrl._inject_file_path = str(mock_file)
ctrl._inject_mode = "full"
ctrl._update_inject_preview()
assert ctrl._inject_preview.strip() == content.strip()
def test_update_inject_preview_truncation(tmp_path):
ctrl = AppController()
mock_file = tmp_path / "large.py"
content = "\n".join([f"line {i}" for i in range(1000)])
mock_file.write_text(content)
ctrl._inject_file_path = str(mock_file)
ctrl._inject_mode = "full"
ctrl._update_inject_preview()
lines = ctrl._inject_preview.splitlines()
# It should be 500 lines + 1 for truncated message
assert len(lines) == 501
assert "... (truncated)" in lines[-1]
# The 500th line is "line 499" (starting from 0)
assert "line 499" in lines[499]
# The 501st line should be "line 500", but it should be replaced by truncation msg
assert "line 500" not in ctrl._inject_preview