Skip to content

Commit 624d308

Browse files
committed
add folding tests
1 parent ec5ffa6 commit 624d308

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import { createContextMapperDslServices } from '../../src/language/ContextMapperDslModule.js'
2+
import { FoldingRangeProvider } from 'langium/lsp'
3+
import { clearDocuments, parseHelper } from 'langium/test'
4+
import { ContextMappingModel } from '../../src/language/generated/ast.js'
5+
import { EmptyFileSystem, LangiumDocument } from 'langium'
6+
import { afterEach, beforeAll, describe, expect, test } from 'vitest'
7+
import { parseValidInput } from '../ParsingTestHelper.js'
8+
import { FoldingRangeParams } from 'vscode-languageserver'
9+
10+
let services: ReturnType<typeof createContextMapperDslServices>
11+
let foldingRangeProvider: FoldingRangeProvider
12+
let parse: ReturnType<typeof parseHelper<ContextMappingModel>>
13+
let document: LangiumDocument<ContextMappingModel> | undefined
14+
15+
beforeAll(async () => {
16+
services = createContextMapperDslServices(EmptyFileSystem)
17+
foldingRangeProvider = services.ContextMapperDsl.lsp.FoldingRangeProvider!
18+
parse = parseHelper<ContextMappingModel>(services.ContextMapperDsl)
19+
})
20+
21+
afterEach(async () => {
22+
document && await clearDocuments(services.shared, [document])
23+
})
24+
25+
describe('Comment block folding tests', () => {
26+
test('check folding range of comment block', async () => {
27+
document = await parseValidInput(parse, `
28+
/*
29+
This is a comment block
30+
*/
31+
BoundedContext TestContext
32+
`)
33+
34+
const params = createFoldingRangeParams(document)
35+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
36+
expect(foldingRanges).toHaveLength(1)
37+
expect(foldingRanges[0].startLine).toEqual(1)
38+
expect(foldingRanges[0].startCharacter).toEqual(8)
39+
expect(foldingRanges[0].endLine).toEqual(3)
40+
expect(foldingRanges[0].endCharacter).toEqual(0)
41+
})
42+
43+
test('check folding range of multiline comment', async () => {
44+
document = await parseValidInput(parse, `
45+
BoundedContext TestContext {
46+
/* This is a
47+
looooonger
48+
multiline comment
49+
*/
50+
Aggregate TestAggregate
51+
}
52+
`)
53+
54+
const params = createFoldingRangeParams(document)
55+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
56+
expect(foldingRanges).toHaveLength(2)
57+
expect(foldingRanges[1].startLine).toEqual(2)
58+
expect(foldingRanges[1].startCharacter).toEqual(20)
59+
expect(foldingRanges[1].endLine).toEqual(5)
60+
expect(foldingRanges[1].endCharacter).toEqual(0)
61+
})
62+
63+
test('check folding range of single-line comment', async () => {
64+
document = await parseValidInput(parse, `
65+
// This is a single-line comment
66+
BoundedContext TestContext
67+
`)
68+
69+
const params = createFoldingRangeParams(document)
70+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
71+
expect(foldingRanges).toHaveLength(0)
72+
})
73+
74+
test('check folding range of single line comment block', async () => {
75+
document = await parseValidInput(parse, `
76+
/* This is a single-line comment */
77+
BoundedContext TestContext
78+
`)
79+
80+
const params = createFoldingRangeParams(document)
81+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
82+
expect(foldingRanges).toHaveLength(0)
83+
})
84+
})
85+
86+
function createFoldingRangeParams (document: LangiumDocument<ContextMappingModel>): FoldingRangeParams {
87+
return {
88+
textDocument: {
89+
uri: document.uri.path
90+
}
91+
}
92+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { afterEach, beforeAll, describe, expect, test } from 'vitest'
2+
import { createContextMapperDslServices } from '../../src/language/ContextMapperDslModule.js'
3+
import { EmptyFileSystem, LangiumDocument } from 'langium'
4+
import { FoldingRangeProvider } from 'langium/lsp'
5+
import { clearDocuments, parseHelper } from 'langium/test'
6+
import { ContextMappingModel } from '../../src/language/generated/ast.js'
7+
import { parseValidInput } from '../ParsingTestHelper.js'
8+
import { FoldingRangeParams } from 'vscode-languageserver'
9+
10+
let services: ReturnType<typeof createContextMapperDslServices>
11+
let foldingRangeProvider: FoldingRangeProvider
12+
let parse: ReturnType<typeof parseHelper<ContextMappingModel>>
13+
let document: LangiumDocument<ContextMappingModel> | undefined
14+
15+
beforeAll(async () => {
16+
services = createContextMapperDslServices(EmptyFileSystem)
17+
foldingRangeProvider = services.ContextMapperDsl.lsp.FoldingRangeProvider!
18+
parse = parseHelper<ContextMappingModel>(services.ContextMapperDsl)
19+
})
20+
21+
afterEach(async () => {
22+
document && await clearDocuments(services.shared, [document])
23+
})
24+
25+
describe('Definition block folding tests', () => {
26+
test('check folding range of definition without body', async () => {
27+
document = await parseValidInput(parse, `
28+
BoundedContext TestContext
29+
`)
30+
31+
const params = createFoldingRangeParams(document)
32+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
33+
expect(foldingRanges).toHaveLength(0)
34+
})
35+
36+
test('check folding range of definition with one line body', async () => {
37+
document = await parseValidInput(parse, `
38+
BoundedContext TestContext {
39+
}
40+
`)
41+
42+
const params = createFoldingRangeParams(document)
43+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
44+
expect(foldingRanges).toHaveLength(0)
45+
})
46+
47+
test('check folding range of definition with two line body', async () => {
48+
document = await parseValidInput(parse, `
49+
BoundedContext TestContext {
50+
type TEAM
51+
}
52+
`)
53+
54+
const params = createFoldingRangeParams(document)
55+
const foldingRanges = await foldingRangeProvider.getFoldingRanges(document, params)
56+
expect(foldingRanges).toHaveLength(1)
57+
expect(foldingRanges[0].startLine).toEqual(1)
58+
expect(foldingRanges[0].startCharacter).toEqual(34)
59+
expect(foldingRanges[0].endLine).toEqual(2)
60+
expect(foldingRanges[0].endCharacter).toEqual(17)
61+
})
62+
})
63+
64+
function createFoldingRangeParams (document: LangiumDocument<ContextMappingModel>): FoldingRangeParams {
65+
return {
66+
textDocument: {
67+
uri: document.uri.path
68+
}
69+
}
70+
}

0 commit comments

Comments
 (0)