@@ -10,7 +10,6 @@ import * as vscode from 'vscode';
10
10
import * as lsclient from 'vscode-languageclient/node' ;
11
11
import { MemoryFileSystemProvider } from './memoryFileSystemProvider' ;
12
12
import { vsdiag , DiagnosticProviderMiddleware } from 'vscode-languageclient/lib/common/diagnostic' ;
13
- import { LanguageClient } from 'vscode-languageclient/node' ;
14
13
15
14
namespace GotNotifiedRequest {
16
15
export const method : 'testing/gotNotified' = 'testing/gotNotified' ;
@@ -67,6 +66,102 @@ function isFullDocumentDiagnosticReport(value: vsdiag.DocumentDiagnosticReport):
67
66
assert . ok ( value . kind === vsdiag . DocumentDiagnosticReportKind . full ) ;
68
67
}
69
68
69
+ interface FoldingRangeTestFeature {
70
+ getRegistration ( documentSelector : lsclient . DocumentSelector | undefined , capability : undefined | lsclient . FoldingRangeOptions | ( lsclient . FoldingRangeRegistrationOptions & lsclient . StaticRegistrationOptions ) ) : [ string | undefined , ( lsclient . FoldingRangeRegistrationOptions & { documentSelector : lsclient . DocumentSelector } ) | undefined ] ;
71
+ getRegistrationOptions ( documentSelector : lsclient . DocumentSelector | undefined , capability : undefined | lsclient . FoldingRangeOptions ) : ( lsclient . FoldingRangeRegistrationOptions & { documentSelector : lsclient . DocumentSelector } ) | undefined ;
72
+ }
73
+
74
+ suite ( 'Client Features' , ( ) => {
75
+
76
+ const documentSelector : lsclient . DocumentSelector = [ { scheme : 'lsptests' , language : 'bat' } ] ;
77
+
78
+ function createClient ( selector : lsclient . DocumentSelector | undefined ) : lsclient . LanguageClient {
79
+ const serverModule = path . join ( __dirname , './servers/nullServer.js' ) ;
80
+ const serverOptions : lsclient . ServerOptions = {
81
+ run : { module : serverModule , transport : lsclient . TransportKind . ipc } ,
82
+ debug : { module : serverModule , transport : lsclient . TransportKind . ipc , options : { execArgv : [ '--nolazy' , '--inspect=6014' ] } }
83
+ } ;
84
+
85
+ const clientOptions : lsclient . LanguageClientOptions = {
86
+ documentSelector : selector ,
87
+ synchronize : { } ,
88
+ initializationOptions : { } ,
89
+ middleware : { } ,
90
+ } ;
91
+ ( clientOptions as ( { $testMode ?: boolean } ) ) . $testMode = true ;
92
+
93
+ const result = new lsclient . LanguageClient ( 'test svr' , 'Test Language Server' , serverOptions , clientOptions ) ;
94
+ result . registerProposedFeatures ( ) ;
95
+ return result ;
96
+ }
97
+
98
+ test ( 'Document Selector - Client only' , ( ) => {
99
+ const client = createClient ( documentSelector ) ;
100
+
101
+ const feature = client . getFeature ( lsclient . FoldingRangeRequest . method ) as unknown as FoldingRangeTestFeature ;
102
+ {
103
+ const [ , options ] = feature . getRegistration ( documentSelector , { } ) ;
104
+ isDefined ( options ) ;
105
+ const filter = options . documentSelector [ 0 ] as lsclient . TextDocumentFilter ;
106
+ assert . strictEqual ( filter . scheme , 'lsptests' ) ;
107
+ assert . strictEqual ( filter . language , 'bat' ) ;
108
+ }
109
+
110
+ {
111
+ const options = feature . getRegistrationOptions ( documentSelector , { } ) ;
112
+ isDefined ( options ) ;
113
+ const filter = options . documentSelector [ 0 ] as lsclient . TextDocumentFilter ;
114
+ assert . strictEqual ( filter . scheme , 'lsptests' ) ;
115
+ assert . strictEqual ( filter . language , 'bat' ) ;
116
+ }
117
+ } ) ;
118
+
119
+ test ( 'Document Selector - Server null' , ( ) => {
120
+ const client = createClient ( documentSelector ) ;
121
+
122
+ const feature = client . getFeature ( lsclient . FoldingRangeRequest . method ) as unknown as FoldingRangeTestFeature ;
123
+ const [ , options ] = feature . getRegistration ( documentSelector , { documentSelector : null } ) ;
124
+ isDefined ( options ) ;
125
+ const filter = options . documentSelector [ 0 ] as lsclient . TextDocumentFilter ;
126
+ assert . strictEqual ( filter . scheme , 'lsptests' ) ;
127
+ assert . strictEqual ( filter . language , 'bat' ) ;
128
+ } ) ;
129
+
130
+ test ( 'Document Selector - Client and server' , ( ) => {
131
+ const client = createClient ( documentSelector ) ;
132
+
133
+ const feature = client . getFeature ( lsclient . FoldingRangeRequest . method ) as unknown as FoldingRangeTestFeature ;
134
+ {
135
+ const [ , options ] = feature . getRegistration ( documentSelector , { documentSelector : [ { scheme : 'file' , language : 'test' } ] } ) ;
136
+ isDefined ( options ) ;
137
+ const filter = options . documentSelector [ 0 ] as lsclient . TextDocumentFilter ;
138
+ assert . strictEqual ( filter . scheme , 'file' ) ;
139
+ assert . strictEqual ( filter . language , 'test' ) ;
140
+ }
141
+
142
+ {
143
+ // Note that the old registration spec has no support for providing a document selector.
144
+ // So ensure that even if we pass one in we will not honor it.
145
+ const options = feature . getRegistrationOptions ( documentSelector , { documentSelector : [ { scheme : 'file' , language : 'test' } ] } as any ) ;
146
+ isDefined ( options ) ;
147
+ const filter = options . documentSelector [ 0 ] as lsclient . TextDocumentFilter ;
148
+ assert . strictEqual ( filter . scheme , 'lsptests' ) ;
149
+ assert . strictEqual ( filter . language , 'bat' ) ;
150
+ }
151
+ } ) ;
152
+
153
+ test ( 'Document Selector - Server only' , ( ) => {
154
+ const client = createClient ( undefined ) ;
155
+
156
+ const feature = client . getFeature ( lsclient . FoldingRangeRequest . method ) as unknown as FoldingRangeTestFeature ;
157
+ const [ , options ] = feature . getRegistration ( undefined , { documentSelector : [ { scheme : 'file' , language : 'test' } ] } ) ;
158
+ isDefined ( options ) ;
159
+ const filter = options . documentSelector [ 0 ] as lsclient . TextDocumentFilter ;
160
+ assert . strictEqual ( filter . scheme , 'file' ) ;
161
+ assert . strictEqual ( filter . language , 'test' ) ;
162
+ } ) ;
163
+ } ) ;
164
+
70
165
suite ( 'Client integration' , ( ) => {
71
166
72
167
let client ! : lsclient . LanguageClient ;
@@ -1800,7 +1895,7 @@ suite('Server activation', () => {
1800
1895
} , / C l i e n t g o t d i s p o s e d a n d c a n ' t b e r e s t a r t e d ./ ) ;
1801
1896
} ) ;
1802
1897
1803
- async function checkServerStart ( client : LanguageClient , disposable : vscode . Disposable ) : Promise < void > {
1898
+ async function checkServerStart ( client : lsclient . LanguageClient , disposable : vscode . Disposable ) : Promise < void > {
1804
1899
return new Promise ( ( resolve , reject ) => {
1805
1900
const timeout = setTimeout ( ( ) => {
1806
1901
reject ( new Error ( `Server didn't start in 1000 ms.` ) ) ;
0 commit comments