Skip to content

Commit 0c2154c

Browse files
authored
Merge pull request #130 from atom-community/simplify-autocomplete-path-test
test: simplify autocomplete-paths tests by removing createCompletionItem
2 parents c58d273 + c36c824 commit 0c2154c

File tree

1 file changed

+78
-102
lines changed

1 file changed

+78
-102
lines changed

test/adapters/autocomplete-adapter.test.ts

Lines changed: 78 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as ac from "atom/autocomplete-plus"
77
import { expect } from "chai"
88
import { createSpyConnection, createFakeEditor } from "../helpers.js"
99
import { TextSuggestion, SnippetSuggestion } from "../../lib/types/autocomplete-extended"
10-
import { CompletionItem, MarkupContent, InsertTextFormat, TextEdit, Command } from "../../lib/languageclient"
10+
import { CompletionItem } from "../../lib/languageclient"
1111

1212
function createRequest({
1313
prefix = "",
@@ -27,32 +27,6 @@ function createRequest({
2727
}
2828
}
2929

30-
// Required and optional properties as of LSP 3.14.0
31-
function createCompletionItem(
32-
label: string,
33-
optional: {
34-
kind?: number
35-
detail?: string
36-
documentation?: string | MarkupContent
37-
deprecated?: boolean
38-
preselect?: boolean
39-
sortText?: string
40-
filterText?: string
41-
insertText?: string
42-
insertTextFormat?: InsertTextFormat
43-
textEdit?: TextEdit
44-
additionalTextEdits?: TextEdit[]
45-
commitCharacters?: string[]
46-
command?: Command
47-
data?: any
48-
} = {}
49-
): CompletionItem {
50-
return {
51-
label,
52-
...optional,
53-
} as CompletionItem
54-
}
55-
5630
describe("AutoCompleteAdapter", () => {
5731
function createActiveServerSpy(): ActiveServer {
5832
return {
@@ -64,32 +38,36 @@ describe("AutoCompleteAdapter", () => {
6438
}
6539
}
6640

67-
const completionItems = [
68-
createCompletionItem("thisHasFiltertext", {
41+
const completionItems: CompletionItem[] = [
42+
{
43+
label: "thisHasFiltertext",
6944
kind: ls.CompletionItemKind.Keyword,
7045
detail: "description1",
7146
documentation: "a very exciting keyword",
7247
filterText: "labrador",
7348
sortText: "z",
74-
}),
75-
createCompletionItem("label2", {
49+
},
50+
{
51+
label: "label2",
7652
kind: ls.CompletionItemKind.Field,
7753
detail: "description2",
7854
documentation: "a very exciting field",
7955
filterText: "rabbit",
8056
sortText: "a",
81-
}),
82-
createCompletionItem("label3", {
57+
},
58+
{
59+
label: "label3",
8360
kind: ls.CompletionItemKind.Variable,
8461
detail: "description3",
8562
documentation: "a very exciting variable",
86-
}),
87-
createCompletionItem("filteredout", {
63+
},
64+
{
65+
label: "filteredout",
8866
kind: ls.CompletionItemKind.Snippet,
8967
detail: "description4",
9068
documentation: "should not appear",
9169
sortText: "zzz",
92-
}),
70+
},
9371
]
9472

9573
const request = createRequest({ prefix: "lab" })
@@ -124,10 +102,10 @@ describe("AutoCompleteAdapter", () => {
124102
})
125103

126104
it("uses the sortText property to arrange completions when there is no prefix", async () => {
127-
const sortedItems = [
128-
createCompletionItem("a", { sortText: "c" }),
129-
createCompletionItem("b"),
130-
createCompletionItem("c", { sortText: "a" }),
105+
const sortedItems: CompletionItem[] = [
106+
{ label: "a", sortText: "c" },
107+
{ label: "b" },
108+
{ label: "c", sortText: "a" },
131109
]
132110
const results = await getResults(sortedItems, { prefix: "" })
133111

@@ -146,17 +124,15 @@ describe("AutoCompleteAdapter", () => {
146124
})
147125

148126
describe("completeSuggestion", () => {
149-
const partialItems = [
150-
createCompletionItem("label1"),
151-
createCompletionItem("label2"),
152-
createCompletionItem("label3"),
153-
]
127+
const partialItems: CompletionItem[] = [{ label: "label1" }, { label: "label2" }, { label: "label3" }]
154128

155129
const server: ActiveServer = createActiveServerSpy()
156130
sinon.stub(server.connection, "completion").resolves(partialItems)
157-
sinon
158-
.stub(server.connection, "completionItemResolve")
159-
.resolves(createCompletionItem("label3", { detail: "description3", documentation: "a very exciting variable" }))
131+
sinon.stub(server.connection, "completionItemResolve").resolves({
132+
label: "label3",
133+
detail: "description3",
134+
documentation: "a very exciting variable",
135+
} as CompletionItem)
160136

161137
it("resolves suggestions via LSP given an AutoCompleteRequest", async () => {
162138
const autoCompleteAdapter = new AutoCompleteAdapter()
@@ -198,40 +174,42 @@ describe("AutoCompleteAdapter", () => {
198174
})
199175

200176
describe("conversion of LSP completion to autocomplete+ completion", () => {
201-
const items = [
202-
createCompletionItem("align", {
177+
const items: CompletionItem[] = [
178+
{
179+
label: "align",
203180
sortText: "a",
204181
kind: ls.CompletionItemKind.Snippet,
205182
textEdit: {
206183
range: { start: { line: 0, character: 4 }, end: { line: 0, character: 10 } },
207184
newText: "hello world",
208185
},
209-
}),
210-
createCompletionItem("list", {
186+
},
187+
{
188+
label: "list",
211189
sortText: "b",
212190
kind: ls.CompletionItemKind.Constant,
213191
textEdit: {
214192
range: { start: { line: 0, character: 8 }, end: { line: 0, character: 13 } },
215193
newText: "shifted",
216194
},
217-
}),
218-
createCompletionItem("minimal", {
219-
sortText: "c",
220-
}),
221-
createCompletionItem("old", {
195+
},
196+
{ label: "minimal", sortText: "c" },
197+
{
198+
label: "old",
222199
sortText: "d",
223200
documentation: "doc string",
224201
insertText: "inserted",
225202
insertTextFormat: ls.InsertTextFormat.Snippet,
226-
}),
227-
createCompletionItem("documented", {
203+
},
204+
{
205+
label: "documented",
228206
sortText: "e",
229207
detail: "details",
230208
documentation: {
231209
kind: "markdown",
232210
value: "documentation",
233211
},
234-
}),
212+
},
235213
]
236214

237215
let server: ActiveServer
@@ -275,7 +253,7 @@ describe("AutoCompleteAdapter", () => {
275253
})
276254

277255
it("respects onDidConvertCompletionItem", async () => {
278-
sinon.stub(server.connection, "completion").resolves([createCompletionItem("label")])
256+
sinon.stub(server.connection, "completion").resolves([{ label: "label" }] as CompletionItem[])
279257
const results = await autoCompleteAdapter.getSuggestions(server, createRequest({}), (c, a, r) => {
280258
;(a as ac.TextSuggestion).text = c.label + " ok"
281259
a.displayText = r.scopeDescriptor.getScopesArray()[0]
@@ -294,14 +272,15 @@ describe("AutoCompleteAdapter", () => {
294272

295273
it("converts LSP CompletionItem to AutoComplete Suggestion without textEdit", async () => {
296274
sinon.stub(server.connection, "completion").resolves([
297-
createCompletionItem("label", {
275+
{
276+
label: "label",
298277
insertText: "insert",
299278
filterText: "filter",
300279
kind: ls.CompletionItemKind.Keyword,
301280
detail: "keyword",
302281
documentation: "a truly useful keyword",
303-
}),
304-
])
282+
},
283+
] as CompletionItem[])
305284
const result = (await autoCompleteAdapter.getSuggestions(server, createRequest({})))[0]
306285
expect((result as TextSuggestion).text).equals("insert")
307286
expect(result.displayText).equals("label")
@@ -319,7 +298,8 @@ describe("AutoCompleteAdapter", () => {
319298
})
320299
customRequest.editor.setText("foo #label bar")
321300
sinon.stub(server.connection, "completion").resolves([
322-
createCompletionItem("label", {
301+
{
302+
label: "label",
323303
insertText: "insert",
324304
filterText: "filter",
325305
kind: ls.CompletionItemKind.Variable,
@@ -329,8 +309,8 @@ describe("AutoCompleteAdapter", () => {
329309
range: { start: { line: 0, character: 4 }, end: { line: 0, character: 10 } },
330310
newText: "newText",
331311
},
332-
}),
333-
])
312+
},
313+
] as CompletionItem[])
334314

335315
const result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]
336316
expect(result.displayText).equals("label")
@@ -344,17 +324,16 @@ describe("AutoCompleteAdapter", () => {
344324

345325
it("converts LSP CompletionItem with insertText and filterText to AutoComplete Suggestion", async () => {
346326
sinon.stub(server.connection, "completion").resolves([
347-
createCompletionItem("label", {
327+
{
328+
label: "label",
348329
insertText: "insert",
349330
filterText: "filter",
350331
kind: ls.CompletionItemKind.Keyword,
351332
detail: "detail",
352333
documentation: "a very exciting keyword",
353-
}),
354-
createCompletionItem("filteredOut", {
355-
filterText: "nop",
356-
}),
357-
])
334+
},
335+
{ label: "filteredOut", filterText: "nop" },
336+
] as CompletionItem[])
358337

359338
const results = await autoCompleteAdapter.getSuggestions(server, createRequest({ prefix: "fil" }))
360339
expect(results.length).equals(1)
@@ -369,11 +348,7 @@ describe("AutoCompleteAdapter", () => {
369348
})
370349

371350
it("converts LSP CompletionItem with missing documentation to AutoComplete Suggestion", async () => {
372-
sinon.stub(server.connection, "completion").resolves([
373-
createCompletionItem("label", {
374-
detail: "detail",
375-
}),
376-
])
351+
sinon.stub(server.connection, "completion").resolves([{ label: "label", detail: "detail" }] as CompletionItem[])
377352

378353
const result = (await autoCompleteAdapter.getSuggestions(server, createRequest({})))[0]
379354
expect(result.rightLabel).equals("detail")
@@ -382,12 +357,11 @@ describe("AutoCompleteAdapter", () => {
382357
})
383358

384359
it("converts LSP CompletionItem with markdown documentation to AutoComplete Suggestion", async () => {
385-
sinon.stub(server.connection, "completion").resolves([
386-
createCompletionItem("label", {
387-
detail: "detail",
388-
documentation: { value: "Some *markdown*", kind: "markdown" },
389-
}),
390-
])
360+
sinon
361+
.stub(server.connection, "completion")
362+
.resolves([
363+
{ label: "label", detail: "detail", documentation: { value: "Some *markdown*", kind: "markdown" } },
364+
] as CompletionItem[])
391365

392366
const result = (await autoCompleteAdapter.getSuggestions(server, createRequest({})))[0]
393367
expect(result.rightLabel).equals("detail")
@@ -396,12 +370,11 @@ describe("AutoCompleteAdapter", () => {
396370
})
397371

398372
it("converts LSP CompletionItem with plaintext documentation to AutoComplete Suggestion", async () => {
399-
sinon.stub(server.connection, "completion").resolves([
400-
createCompletionItem("label", {
401-
detail: "detail",
402-
documentation: { value: "Some plain text", kind: "plaintext" },
403-
}),
404-
])
373+
sinon
374+
.stub(server.connection, "completion")
375+
.resolves([
376+
{ label: "label", detail: "detail", documentation: { value: "Some plain text", kind: "plaintext" } },
377+
] as CompletionItem[])
405378

406379
const result = (await autoCompleteAdapter.getSuggestions(server, createRequest({})))[0]
407380
expect(result.rightLabel).equals("detail")
@@ -411,12 +384,13 @@ describe("AutoCompleteAdapter", () => {
411384

412385
it("converts LSP CompletionItem without insertText or filterText to AutoComplete Suggestion", async () => {
413386
sinon.stub(server.connection, "completion").resolves([
414-
createCompletionItem("label", {
387+
{
388+
label: "label",
415389
kind: ls.CompletionItemKind.Keyword,
416390
detail: "detail",
417391
documentation: "A very useful keyword",
418-
}),
419-
])
392+
},
393+
] as CompletionItem[])
420394

421395
const result = (await autoCompleteAdapter.getSuggestions(server, createRequest({})))[0]
422396
expect((result as TextSuggestion).text).equals("label")
@@ -428,7 +402,7 @@ describe("AutoCompleteAdapter", () => {
428402
})
429403

430404
it("does not do anything if there is no textEdit", async () => {
431-
sinon.stub(server.connection, "completion").resolves([createCompletionItem("", { filterText: "rep" })])
405+
sinon.stub(server.connection, "completion").resolves([{ label: "", filterText: "rep" }] as CompletionItem[])
432406

433407
const result = (await autoCompleteAdapter.getSuggestions(server, createRequest({ prefix: "rep" })))[0]
434408
expect((result as TextSuggestion).text).equals("")
@@ -440,14 +414,15 @@ describe("AutoCompleteAdapter", () => {
440414
const customRequest = createRequest({ prefix: "", position: new Point(0, 10) })
441415
customRequest.editor.setText("foo #align bar")
442416
sinon.stub(server.connection, "completion").resolves([
443-
createCompletionItem("align", {
417+
{
418+
label: "align",
444419
sortText: "a",
445420
textEdit: {
446421
range: { start: { line: 0, character: 4 }, end: { line: 0, character: 10 } },
447422
newText: "hello world",
448423
},
449-
}),
450-
])
424+
},
425+
] as CompletionItem[])
451426
const results = await autoCompleteAdapter.getSuggestions(server, customRequest)
452427

453428
expect(results[0].displayText).equals("align")
@@ -459,14 +434,15 @@ describe("AutoCompleteAdapter", () => {
459434
const customRequest = createRequest({ prefix: "", position: new Point(0, 8) })
460435
customRequest.editor.setText("foo #ali bar")
461436
sinon.stub(server.connection, "completion").resolves([
462-
createCompletionItem("align", {
437+
{
438+
label: "align",
463439
sortText: "a",
464440
textEdit: {
465441
range: { start: { line: 0, character: 4 }, end: { line: 0, character: 8 } },
466442
newText: "hello world",
467443
},
468-
}),
469-
])
444+
},
445+
] as CompletionItem[])
470446

471447
let result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]
472448
expect(result.replacementPrefix).equals("#ali")
@@ -509,7 +485,7 @@ describe("AutoCompleteAdapter", () => {
509485
const customRequest = createRequest({ prefix: ".", position: new Point(0, 4) })
510486
customRequest.editor.setText("foo.")
511487
server.capabilities.completionProvider!.triggerCharacters = ["."]
512-
sinon.stub(server.connection, "completion").resolves([createCompletionItem("bar")])
488+
sinon.stub(server.connection, "completion").resolves([{ label: "bar" }] as CompletionItem[])
513489
let result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]
514490
expect(result.replacementPrefix).equals("")
515491
customRequest.editor.setTextInBufferRange(
@@ -539,7 +515,7 @@ describe("AutoCompleteAdapter", () => {
539515
it("includes non trigger character prefix in replacementPrefix", async () => {
540516
const customRequest = createRequest({ prefix: "foo", position: new Point(0, 3) })
541517
customRequest.editor.setText("foo")
542-
sinon.stub(server.connection, "completion").resolves([createCompletionItem("foobar")])
518+
sinon.stub(server.connection, "completion").resolves([{ label: "foobar" }] as CompletionItem[])
543519
let result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]
544520

545521
expect(result.replacementPrefix).equals("foo")

0 commit comments

Comments
 (0)