Files
xinmi/internal/agent/tools/python_syntax_test.go
T
yawan f7fc992f57
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
2026-09-22 16:19:06 +08:00

63 lines
2.1 KiB
Go

package tools
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFirstBrokenPythonQuoteCatchesNestedASCIIQuotes(t *testing.T) {
src := "slides = [\n" +
" (\"这不是一个\"大干快上\"的夜晚,而是一个适合整理、沉淀、\", False),\n" +
"]\n"
line, ok := firstBrokenPythonQuote(src)
require.True(t, ok)
assert.Equal(t, 2, line)
}
func TestFirstBrokenPythonQuoteAllowsKeywordAfterString(t *testing.T) {
_, ok := firstBrokenPythonQuote(`x = "hello" if cond else "bye"`)
assert.False(t, ok)
}
func TestFirstBrokenPythonQuoteAllowsImplicitConcat(t *testing.T) {
_, ok := firstBrokenPythonQuote("x = \"hello\" \"world\"\n")
assert.False(t, ok)
}
func TestFirstBrokenPythonQuoteAllowsSingleQuotedChinese(t *testing.T) {
_, ok := firstBrokenPythonQuote("x = '这不是一个\"大干快上\"的夜晚'\n")
assert.False(t, ok)
}
func TestFirstBrokenPythonQuoteAllowsCornerQuotes(t *testing.T) {
_, ok := firstBrokenPythonQuote("x = \"这不是一个「大干快上」的夜晚\"\n")
assert.False(t, ok)
}
func TestFirstBrokenPythonQuoteAllowsFString(t *testing.T) {
_, ok := firstBrokenPythonQuote("x = f\"hello {name}\"\n")
assert.False(t, ok)
}
func TestFirstBrokenPythonQuoteReportsUnclosed(t *testing.T) {
line, ok := firstBrokenPythonQuote("x = \"hello\n")
require.True(t, ok)
assert.Equal(t, 1, line)
}
func TestPythonScriptSyntaxHintOnlyForPy(t *testing.T) {
src := "(\"这不是一个\"大干快上\"的夜晚\")\n"
assert.Contains(t, pythonScriptSyntaxHint("/workspace/output/x.py", src, ToolEditSandboxFile),
ToolEditSandboxFile, "the hint must name the tool that can repair this file")
assert.Contains(t, pythonScriptSyntaxHint(testSkillDir+"/run.py", src, ToolEditSkillFile),
ToolEditSkillFile, "a skill-tree file is not repairable with edit_sandbox_file")
assert.Empty(t, pythonScriptSyntaxHint("/workspace/output/x.md", src, ToolEditSandboxFile))
}
func TestPythonSyntaxErrorHint(t *testing.T) {
assert.Empty(t, pythonSyntaxErrorHint("ModuleNotFoundError: docx"))
assert.Contains(t, pythonSyntaxErrorHint("SyntaxError: invalid syntax"), "edit_sandbox_file")
}