Files
2026-07-13 13:00:08 +08:00

67 lines
1.5 KiB
Go

//go:build treesitter && cgo
package builtin
import (
"path/filepath"
"strings"
"testing"
)
func TestCodeIndexTreeSitterTypeScriptMethods(t *testing.T) {
if !codeIndexTreeSitterEnabled() {
t.Fatal("tree-sitter code_index is not enabled")
}
root := t.TempDir()
mkfile(t, filepath.Join(root, "src", "client.ts"), `export abstract class Client {
async loadUser(id: string) {
return id
}
}
export const makeClient = () => new Client()
`)
out := runTool(t, codeIndex{workDir: root}, map[string]any{
"action": "outline",
"path": ".",
})
for _, want := range []string{
"src/client.ts:1: class Client",
"src/client.ts:2: method Client.loadUser",
"src/client.ts:7: func makeClient",
} {
if !strings.Contains(out, want) {
t.Fatalf("tree-sitter code_index missing %q; got:\n%s", want, out)
}
}
}
func TestCodeIndexTreeSitterPythonAndRust(t *testing.T) {
root := t.TempDir()
mkfile(t, filepath.Join(root, "pkg", "worker.py"), `class Worker:
async def run(self):
pass
`)
mkfile(t, filepath.Join(root, "src", "lib.rs"), `pub struct Store {}
pub trait Repository {}
pub fn load_store() {}
`)
out := runTool(t, codeIndex{workDir: root}, map[string]any{
"action": "outline",
"path": ".",
})
for _, want := range []string{
"pkg/worker.py:1: class Worker",
"pkg/worker.py:2: func run",
"src/lib.rs:1: struct Store",
"src/lib.rs:2: trait Repository",
"src/lib.rs:3: fn load_store",
} {
if !strings.Contains(out, want) {
t.Fatalf("tree-sitter code_index missing %q; got:\n%s", want, out)
}
}
}