1- /// <reference path="..\harness.ts" />
1+ /// <reference path="..\harness.ts" />
22/// <reference path="../../server/typingsInstaller/typingsInstaller.ts" />
33
44namespace ts . projectSystem {
@@ -137,6 +137,19 @@ namespace ts.projectSystem {
137137 return map ( fileNames , toExternalFile ) ;
138138 }
139139
140+ export class TestServerEventManager {
141+ private events : server . ProjectServiceEvent [ ] = [ ] ;
142+
143+ handler : server . ProjectServiceEventHandler = ( event : server . ProjectServiceEvent ) => {
144+ this . events . push ( event ) ;
145+ }
146+
147+ checkEventCountOfType ( eventType : "context" | "configFileDiag" , expectedCount : number ) {
148+ const eventsOfType = filter ( this . events , e => e . eventName === eventType ) ;
149+ assert . equal ( eventsOfType . length , expectedCount , `The actual event counts of type ${ eventType } is ${ eventsOfType . length } , while expected ${ expectedCount } ` ) ;
150+ }
151+ }
152+
140153 export interface TestServerHostCreationParameters {
141154 useCaseSensitiveFileNames ?: boolean ;
142155 executingFilePath ?: string ;
@@ -160,11 +173,11 @@ namespace ts.projectSystem {
160173 return host ;
161174 }
162175
163- export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller ) {
176+ export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller , projectServiceEventHandler ?: server . ProjectServiceEventHandler ) {
164177 if ( typingsInstaller === undefined ) {
165178 typingsInstaller = new TestTypingsInstaller ( "/a/data/" , /*throttleLimit*/ 5 , host ) ;
166179 }
167- return new server . Session ( host , nullCancellationToken , /*useSingleInferredProject*/ false , typingsInstaller , Utils . byteLength , process . hrtime , nullLogger , /*canUseEvents*/ false ) ;
180+ return new server . Session ( host , nullCancellationToken , /*useSingleInferredProject*/ false , typingsInstaller , Utils . byteLength , process . hrtime , nullLogger , /*canUseEvents*/ projectServiceEventHandler !== undefined , projectServiceEventHandler ) ;
168181 }
169182
170183 export interface CreateProjectServiceParameters {
@@ -2065,4 +2078,92 @@ namespace ts.projectSystem {
20652078 assert . equal ( snap . getLength ( ) , expectedLength , "Incorrect snapshot size" ) ;
20662079 }
20672080 } ) ;
2081+
2082+ describe ( "Configure file diagnostics events" , ( ) => {
2083+
2084+ it ( "are generated when the config file has errors" , ( ) => {
2085+ const serverEventManager = new TestServerEventManager ( ) ;
2086+ const file = {
2087+ path : "/a/b/app.ts" ,
2088+ content : "let x = 10"
2089+ } ;
2090+ const configFile = {
2091+ path : "/a/b/tsconfig.json" ,
2092+ content : `{
2093+ "compilerOptions": {
2094+ "foo": "bar",
2095+ "allowJS": true
2096+ }
2097+ }`
2098+ } ;
2099+
2100+ const host = createServerHost ( [ file , configFile ] ) ;
2101+ const session = createSession ( host , /*typingsInstaller*/ undefined , serverEventManager . handler ) ;
2102+ openFilesForSession ( [ file ] , session ) ;
2103+ serverEventManager . checkEventCountOfType ( "configFileDiag" , 1 ) ;
2104+ } ) ;
2105+
2106+ it ( "are generated when the config file doesn't have errors" , ( ) => {
2107+ const serverEventManager = new TestServerEventManager ( ) ;
2108+ const file = {
2109+ path : "/a/b/app.ts" ,
2110+ content : "let x = 10"
2111+ } ;
2112+ const configFile = {
2113+ path : "/a/b/tsconfig.json" ,
2114+ content : `{
2115+ "compilerOptions": {}
2116+ }`
2117+ } ;
2118+
2119+ const host = createServerHost ( [ file , configFile ] ) ;
2120+ const session = createSession ( host , /*typingsInstaller*/ undefined , serverEventManager . handler ) ;
2121+ openFilesForSession ( [ file ] , session ) ;
2122+ serverEventManager . checkEventCountOfType ( "configFileDiag" , 1 ) ;
2123+ } ) ;
2124+ } ) ;
2125+
2126+ describe ( "Configure file diagnostics events" , ( ) => {
2127+
2128+ it ( "are generated when the config file has errors" , ( ) => {
2129+ const serverEventManager = new TestServerEventManager ( ) ;
2130+ const file = {
2131+ path : "/a/b/app.ts" ,
2132+ content : "let x = 10"
2133+ } ;
2134+ const configFile = {
2135+ path : "/a/b/tsconfig.json" ,
2136+ content : `{
2137+ "compilerOptions": {
2138+ "foo": "bar",
2139+ "allowJS": true
2140+ }
2141+ }`
2142+ } ;
2143+
2144+ const host = createServerHost ( [ file , configFile ] ) ;
2145+ const session = createSession ( host , /*typingsInstaller*/ undefined , serverEventManager . handler ) ;
2146+ openFilesForSession ( [ file ] , session ) ;
2147+ serverEventManager . checkEventCountOfType ( "configFileDiag" , 1 ) ;
2148+ } ) ;
2149+
2150+ it ( "are generated when the config file doesn't have errors" , ( ) => {
2151+ const serverEventManager = new TestServerEventManager ( ) ;
2152+ const file = {
2153+ path : "/a/b/app.ts" ,
2154+ content : "let x = 10"
2155+ } ;
2156+ const configFile = {
2157+ path : "/a/b/tsconfig.json" ,
2158+ content : `{
2159+ "compilerOptions": {}
2160+ }`
2161+ } ;
2162+
2163+ const host = createServerHost ( [ file , configFile ] ) ;
2164+ const session = createSession ( host , /*typingsInstaller*/ undefined , serverEventManager . handler ) ;
2165+ openFilesForSession ( [ file ] , session ) ;
2166+ serverEventManager . checkEventCountOfType ( "configFileDiag" , 1 ) ;
2167+ } ) ;
2168+ } ) ;
20682169}
0 commit comments