Files
kjol/tools/tsgo/internal/fourslash/tests/jsdocSnippetCompletion_test.go
2026-07-09 16:50:43 -04:00

152 lines
5.1 KiB
Go

package fourslash_test
import (
"testing"
"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/fourslash"
"github.com/microsoft/typescript-go/internal/ls/lsutil"
"github.com/microsoft/typescript-go/internal/lsp/lsproto"
"github.com/microsoft/typescript-go/internal/testutil"
"gotest.tools/v3/assert"
)
func TestJSDocSnippetCompletionForFunction(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `/*completion*/ */
function abcdef(x, y) { }
`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.GoToMarker(t, "completion")
f.Insert(t, "/**")
list := f.GetCompletions(t, nil /*userPreferences*/)
assert.Assert(t, list != nil)
assert.Equal(t, len(list.Items), 1)
item := list.Items[0]
assert.Equal(t, item.Label, "/** */")
assert.DeepEqual(t, item.Kind, new(lsproto.CompletionItemKindText))
assert.DeepEqual(t, item.Detail, new("JSDoc comment"))
assert.DeepEqual(t, item.SortText, new("\x00"))
assert.DeepEqual(t, item.CommitCharacters, &[]string{})
assert.DeepEqual(t, item.InsertTextFormat, new(lsproto.InsertTextFormatSnippet))
assert.Assert(t, item.TextEdit != nil)
assert.Assert(t, item.TextEdit.InsertReplaceEdit != nil)
assert.Equal(t, item.TextEdit.InsertReplaceEdit.NewText, "/**\n * $0\n * @param x ${1}\n * @param y ${2}\n */")
assert.DeepEqual(t, item.TextEdit.InsertReplaceEdit.Insert, lsproto.Range{
Start: lsproto.Position{Line: 0, Character: 0},
End: lsproto.Position{Line: 0, Character: 6},
})
assert.DeepEqual(t, item.TextEdit.InsertReplaceEdit.Replace, lsproto.Range{
Start: lsproto.Position{Line: 0, Character: 0},
End: lsproto.Position{Line: 0, Character: 6},
})
}
func TestJSDocSnippetCompletionForReturn(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `/*completion*/ */
function abcdef(x) { return x; }
`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.GoToMarker(t, "completion")
f.Insert(t, "/**")
list := f.GetCompletions(t, nil /*userPreferences*/)
assert.Assert(t, list != nil)
assert.Equal(t, len(list.Items), 1)
assert.Equal(t, list.Items[0].TextEdit.InsertReplaceEdit.NewText, "/**\n * $0\n * @param x ${1}\n * @returns ${2}\n */")
}
func TestJSDocSnippetCompletionPreservesCRLF(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = "/*completion*/ */\r\nfunction abcdef(x) { return x; }\r\n"
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.GoToMarker(t, "completion")
f.Insert(t, "/**")
userPreferences := lsutil.NewDefaultUserPreferences()
userPreferences.FormatCodeSettings.NewLineCharacter = "\r\n"
list := f.GetCompletions(t, &userPreferences)
assert.Assert(t, list != nil)
assert.Equal(t, len(list.Items), 1)
assert.Equal(t, list.Items[0].TextEdit.InsertReplaceEdit.NewText, "/**\r\n * $0\r\n * @param x ${1}\r\n * @returns ${2}\r\n */")
}
func TestJSDocSnippetCompletionRespectsGenerateReturnPreference(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `/*completion*/ */
function abcdef(x) { return x; }
`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.GoToMarker(t, "completion")
f.Insert(t, "/**")
userPreferences := lsutil.NewDefaultUserPreferences()
userPreferences.GenerateReturnInDocTemplate = core.TSFalse
list := f.GetCompletions(t, &userPreferences)
assert.Assert(t, list != nil)
assert.Equal(t, len(list.Items), 1)
assert.Equal(t, list.Items[0].TextEdit.InsertReplaceEdit.NewText, "/**\n * $0\n * @param x ${1}\n */")
}
func TestJSDocSnippetCompletionRespectsEnabledPreference(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `/*completion*/ */
function abcdef(x) { }
`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.GoToMarker(t, "completion")
f.Insert(t, "/**")
userPreferences := lsutil.NewDefaultUserPreferences()
userPreferences.EnableJSDocCompletions = core.TSFalse
list := f.GetCompletions(t, &userPreferences)
if list != nil {
for _, item := range list.Items {
assert.Assert(t, item.Label != "/** */")
}
}
}
func TestJSDocSnippetCompletionForClass(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `/*completion*/
class C {
}
`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.GoToMarker(t, "completion")
f.Insert(t, "/**")
list := f.GetCompletions(t, nil /*userPreferences*/)
assert.Assert(t, list != nil)
assert.Equal(t, len(list.Items), 1)
assert.Equal(t, list.Items[0].TextEdit.InsertReplaceEdit.NewText, "/**\n * $0\n */")
}
func TestJSDocSnippetCompletionNotInNonEmptyComment(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `/** text /*completion*/ */
function abcdef(x) { }
`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyCompletions(t, "completion", nil)
}