优化测试用例以提高后端模块的测试覆盖率,调整测试断言和异常处理。 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
90 lines
3.3 KiB
Python
90 lines
3.3 KiB
Python
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
BACKEND_DIR = Path(__file__).resolve().parents[1]
|
|
if str(BACKEND_DIR) not in sys.path:
|
|
sys.path.insert(0, str(BACKEND_DIR))
|
|
|
|
import prompt # noqa: E402
|
|
|
|
|
|
def test_prompt_builds_system_and_user():
|
|
system_prompt, user_prompt = prompt.build_completion_prompts(
|
|
prefix="The result is ",
|
|
suffix="for this dataset.",
|
|
language_id="markdown",
|
|
)
|
|
|
|
assert "inline completion engine" in system_prompt
|
|
assert "$...$" in system_prompt
|
|
assert "$$...$$" in system_prompt
|
|
assert "```{language}" in system_prompt
|
|
assert "Mermaid" in system_prompt
|
|
assert "CURSOR_FENCE_LANGUAGE" in system_prompt
|
|
assert "MERMAID_CONTEXT" in system_prompt
|
|
assert "CURSOR_IN_FENCED_CODE_BLOCK" in user_prompt
|
|
assert "CURSOR_FENCE_LANGUAGE" in user_prompt
|
|
assert "MERMAID_CONTEXT" in user_prompt
|
|
assert "PREFIX_ENDS_WITH_NEWLINE" in user_prompt
|
|
assert "SUFFIX_STARTS_WITH_NEWLINE" in user_prompt
|
|
|
|
|
|
def test_cursor_in_fence_detection():
|
|
assert prompt._cursor_in_fenced_code_block("") is False
|
|
assert prompt._cursor_in_fenced_code_block("```python\nprint('x')\n") is True
|
|
assert prompt._cursor_in_fenced_code_block("```python\nprint('x')\n```\n") is False
|
|
assert prompt._cursor_in_fenced_code_block("text ```not-a-fence``` tail") is False
|
|
|
|
|
|
def test_active_fence_language_detection():
|
|
assert prompt._active_fence_language("") == "none"
|
|
assert prompt._active_fence_language("```mermaid\nflowchart TD\nA-->B\n") == "mermaid"
|
|
assert prompt._active_fence_language("```python\nprint('x')\n") == "python"
|
|
assert prompt._active_fence_language("```\nline\n") == "unknown"
|
|
assert prompt._active_fence_language("```mermaid\nA-->B\n```\n") == "none"
|
|
|
|
|
|
def test_newline_flags():
|
|
_, user_prompt_a = prompt.build_completion_prompts(
|
|
prefix="Hello",
|
|
suffix="World",
|
|
)
|
|
assert "CURSOR_IN_FENCED_CODE_BLOCK: false" in user_prompt_a
|
|
assert "CURSOR_FENCE_LANGUAGE: none" in user_prompt_a
|
|
assert "MERMAID_CONTEXT: false" in user_prompt_a
|
|
assert "PREFIX_ENDS_WITH_NEWLINE: false" in user_prompt_a
|
|
assert "SUFFIX_STARTS_WITH_NEWLINE: false" in user_prompt_a
|
|
|
|
_, user_prompt_b = prompt.build_completion_prompts(
|
|
prefix="Hello\n",
|
|
suffix="\nWorld",
|
|
)
|
|
assert "CURSOR_FENCE_LANGUAGE: none" in user_prompt_b
|
|
assert "PREFIX_ENDS_WITH_NEWLINE: true" in user_prompt_b
|
|
assert "SUFFIX_STARTS_WITH_NEWLINE: true" in user_prompt_b
|
|
|
|
|
|
def test_mermaid_context_flags():
|
|
_, prompt_in_mermaid = prompt.build_completion_prompts(
|
|
prefix="```mermaid\nflowchart TD\nA --> ",
|
|
suffix="\n```",
|
|
)
|
|
assert "CURSOR_IN_FENCED_CODE_BLOCK: true" in prompt_in_mermaid
|
|
assert "CURSOR_FENCE_LANGUAGE: mermaid" in prompt_in_mermaid
|
|
assert "MERMAID_CONTEXT: true" in prompt_in_mermaid
|
|
|
|
_, prompt_mermaid_keyword = prompt.build_completion_prompts(
|
|
prefix="Please draw a mermaid flowchart for deploy pipeline.",
|
|
suffix="",
|
|
)
|
|
assert "CURSOR_IN_FENCED_CODE_BLOCK: false" in prompt_mermaid_keyword
|
|
assert "CURSOR_FENCE_LANGUAGE: none" in prompt_mermaid_keyword
|
|
assert "MERMAID_CONTEXT: true" in prompt_mermaid_keyword
|
|
|
|
|
|
def test_examples_coverage():
|
|
_, user_prompt = prompt.build_completion_prompts(prefix="", suffix="")
|
|
for ex in range(1, 15):
|
|
assert f"[EX{ex:02d}]" in user_prompt
|