d2/d2lsp/d2lsp_test.go

122 lines
2.8 KiB
Go
Raw Normal View History

2024-09-19 14:32:48 +00:00
package d2lsp_test
import (
"testing"
"oss.terrastruct.com/d2/d2lsp"
"oss.terrastruct.com/util-go/assert"
)
2024-10-12 19:35:32 +00:00
func TestGetFieldRefs(t *testing.T) {
2024-09-19 14:32:48 +00:00
script := `x
x.a
a.x
x -> y`
fs := map[string]string{
2024-10-11 20:09:51 +00:00
"index.d2": script,
2024-09-19 14:32:48 +00:00
}
2024-10-12 19:35:32 +00:00
refs, err := d2lsp.GetRefs("index.d2", fs, "x", nil)
2024-09-19 14:32:48 +00:00
assert.Success(t, err)
assert.Equal(t, 3, len(refs))
assert.Equal(t, 0, refs[0].AST().GetRange().Start.Line)
assert.Equal(t, 1, refs[1].AST().GetRange().Start.Line)
assert.Equal(t, 3, refs[2].AST().GetRange().Start.Line)
2024-10-12 19:35:32 +00:00
refs, err = d2lsp.GetRefs("index.d2", fs, "a.x", nil)
2024-09-19 14:32:48 +00:00
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 2, refs[0].AST().GetRange().Start.Line)
}
2024-10-11 20:09:51 +00:00
2024-10-12 19:35:32 +00:00
func TestGetEdgeRefs(t *testing.T) {
script := `x
x.a
a.x
x -> y
y -> z
x -> z
b: {
x -> y
}
`
fs := map[string]string{
"index.d2": script,
}
refs, err := d2lsp.GetRefs("index.d2", fs, "x -> y", nil)
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 3, refs[0].AST().GetRange().Start.Line)
refs, err = d2lsp.GetRefs("index.d2", fs, "y -> z", nil)
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 4, refs[0].AST().GetRange().Start.Line)
refs, err = d2lsp.GetRefs("index.d2", fs, "x -> z", nil)
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 5, refs[0].AST().GetRange().Start.Line)
refs, err = d2lsp.GetRefs("index.d2", fs, "a -> b", nil)
assert.Success(t, err)
assert.Equal(t, 0, len(refs))
refs, err = d2lsp.GetRefs("index.d2", fs, "b.(x -> y)", nil)
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 7, refs[0].AST().GetRange().Start.Line)
}
2024-10-11 20:09:51 +00:00
func TestGetRefsImported(t *testing.T) {
fs := map[string]string{
"index.d2": `
...@ok
hi
`,
"ok.d2": `
okay
`,
}
2024-10-12 19:35:32 +00:00
refs, err := d2lsp.GetRefs("index.d2", fs, "hi", nil)
2024-10-11 20:09:51 +00:00
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 2, refs[0].AST().GetRange().Start.Line)
2024-10-12 19:35:32 +00:00
refs, err = d2lsp.GetRefs("index.d2", fs, "okay", nil)
2024-10-11 20:09:51 +00:00
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, "ok.d2", refs[0].AST().GetRange().Path)
2024-10-12 19:35:32 +00:00
refs, err = d2lsp.GetRefs("ok.d2", fs, "hi", nil)
2024-10-11 20:09:51 +00:00
assert.Success(t, err)
assert.Equal(t, 0, len(refs))
2024-10-12 19:35:32 +00:00
refs, err = d2lsp.GetRefs("ok.d2", fs, "okay", nil)
2024-10-11 20:09:51 +00:00
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
}
2024-10-12 00:42:23 +00:00
func TestGetRefsBoards(t *testing.T) {
fs := map[string]string{
"index.d2": `
hi
layers: {
x: {
hello
}
}
`,
}
2024-10-12 19:35:32 +00:00
refs, err := d2lsp.GetRefs("index.d2", fs, "hello", []string{"x"})
2024-10-12 00:42:23 +00:00
assert.Success(t, err)
assert.Equal(t, 1, len(refs))
assert.Equal(t, 4, refs[0].AST().GetRange().Start.Line)
2024-10-12 19:35:32 +00:00
refs, err = d2lsp.GetRefs("index.d2", fs, "hi", []string{"x"})
2024-10-12 00:42:23 +00:00
assert.Success(t, err)
assert.Equal(t, 0, len(refs))
2024-10-12 19:35:32 +00:00
_, err = d2lsp.GetRefs("index.d2", fs, "hello", []string{"y"})
2024-10-12 00:42:23 +00:00
assert.Equal(t, `board "[y]" not found`, err.Error())
}