1
- /// <reference path="..\harness.ts" />
1
+ /// <reference path="..\harness.ts" />
2
2
/// <reference path="../../server/typingsInstaller/typingsInstaller.ts" />
3
3
4
4
namespace ts . projectSystem {
@@ -136,6 +136,19 @@ namespace ts.projectSystem {
136
136
return map ( fileNames , toExternalFile ) ;
137
137
}
138
138
139
+ export class TestServerEventManager {
140
+ private events : server . ProjectServiceEvent [ ] = [ ] ;
141
+
142
+ handler : server . ProjectServiceEventHandler = ( event : server . ProjectServiceEvent ) => {
143
+ this . events . push ( event ) ;
144
+ }
145
+
146
+ checkEventCountOfType ( eventType : "context" | "configFileDiag" , expectedCount : number ) {
147
+ const eventsOfType = filter ( this . events , e => e . eventName === eventType ) ;
148
+ assert . equal ( eventsOfType . length , expectedCount , `The actual event counts of type ${ eventType } is ${ eventsOfType . length } , while expected ${ expectedCount } ` ) ;
149
+ }
150
+ }
151
+
139
152
export interface TestServerHostCreationParameters {
140
153
useCaseSensitiveFileNames ?: boolean ;
141
154
executingFilePath ?: string ;
@@ -159,11 +172,11 @@ namespace ts.projectSystem {
159
172
return host ;
160
173
}
161
174
162
- export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller ) {
175
+ export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller , projectServiceEventHandler ?: server . ProjectServiceEventHandler ) {
163
176
if ( typingsInstaller === undefined ) {
164
177
typingsInstaller = new TestTypingsInstaller ( "/a/data/" , /*throttleLimit*/ 5 , host ) ;
165
178
}
166
- return new server . Session ( host , nullCancellationToken , /*useSingleInferredProject*/ false , typingsInstaller , Utils . byteLength , process . hrtime , nullLogger , /*canUseEvents*/ false ) ;
179
+ return new server . Session ( host , nullCancellationToken , /*useSingleInferredProject*/ false , typingsInstaller , Utils . byteLength , process . hrtime , nullLogger , /*canUseEvents*/ projectServiceEventHandler !== undefined , projectServiceEventHandler ) ;
167
180
}
168
181
169
182
export interface CreateProjectServiceParameters {
@@ -2121,4 +2134,48 @@ namespace ts.projectSystem {
2121
2134
projectService . inferredProjects [ 0 ] . getLanguageService ( ) . getProgram ( ) ;
2122
2135
} ) ;
2123
2136
} ) ;
2137
+
2138
+ describe ( "Configure file diagnostics events" , ( ) => {
2139
+
2140
+ it ( "are generated when the config file has errors" , ( ) => {
2141
+ const serverEventManager = new TestServerEventManager ( ) ;
2142
+ const file = {
2143
+ path : "/a/b/app.ts" ,
2144
+ content : "let x = 10"
2145
+ } ;
2146
+ const configFile = {
2147
+ path : "/a/b/tsconfig.json" ,
2148
+ content : `{
2149
+ "compilerOptions": {
2150
+ "foo": "bar",
2151
+ "allowJS": true
2152
+ }
2153
+ }`
2154
+ } ;
2155
+
2156
+ const host = createServerHost ( [ file , configFile ] ) ;
2157
+ const session = createSession ( host , /*typingsInstaller*/ undefined , serverEventManager . handler ) ;
2158
+ openFilesForSession ( [ file ] , session ) ;
2159
+ serverEventManager . checkEventCountOfType ( "configFileDiag" , 1 ) ;
2160
+ } ) ;
2161
+
2162
+ it ( "are generated when the config file doesn't have errors" , ( ) => {
2163
+ const serverEventManager = new TestServerEventManager ( ) ;
2164
+ const file = {
2165
+ path : "/a/b/app.ts" ,
2166
+ content : "let x = 10"
2167
+ } ;
2168
+ const configFile = {
2169
+ path : "/a/b/tsconfig.json" ,
2170
+ content : `{
2171
+ "compilerOptions": {}
2172
+ }`
2173
+ } ;
2174
+
2175
+ const host = createServerHost ( [ file , configFile ] ) ;
2176
+ const session = createSession ( host , /*typingsInstaller*/ undefined , serverEventManager . handler ) ;
2177
+ openFilesForSession ( [ file ] , session ) ;
2178
+ serverEventManager . checkEventCountOfType ( "configFileDiag" , 1 ) ;
2179
+ } ) ;
2180
+ } ) ;
2124
2181
}
0 commit comments