64 lines
2.2 KiB
Python
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
|