1- /// <reference path="..\harness.ts" />
1+ /// <reference path="..\harness.ts" />
22/// <reference path="../../server/typingsInstaller/typingsInstaller.ts" />
33
44namespace ts . projectSystem {
@@ -136,6 +136,19 @@ namespace ts.projectSystem {
136136 return map ( fileNames , toExternalFile ) ;
137137 }
138138
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+
139152 export interface TestServerHostCreationParameters {
140153 useCaseSensitiveFileNames ?: boolean ;
141154 executingFilePath ?: string ;
@@ -159,11 +172,11 @@ namespace ts.projectSystem {
159172 return host ;
160173 }
161174
162- export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller ) {
175+ export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller , projectServiceEventHandler ?: server . ProjectServiceEventHandler ) {
163176 if ( typingsInstaller === undefined ) {
164177 typingsInstaller = new TestTypingsInstaller ( "/a/data/" , /*throttleLimit*/ 5 , host ) ;
165178 }
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 ) ;
167180 }
168181
169182 export interface CreateProjectServiceParameters {
@@ -2121,4 +2134,48 @@ namespace ts.projectSystem {
21212134 projectService . inferredProjects [ 0 ] . getLanguageService ( ) . getProgram ( ) ;
21222135 } ) ;
21232136 } ) ;
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+ } ) ;
21242181}
0 commit comments