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 {
@@ -137,6 +137,19 @@ namespace ts.projectSystem {
137
137
return map ( fileNames , toExternalFile ) ;
138
138
}
139
139
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
+
140
153
export interface TestServerHostCreationParameters {
141
154
useCaseSensitiveFileNames ?: boolean ;
142
155
executingFilePath ?: string ;
@@ -160,11 +173,11 @@ namespace ts.projectSystem {
160
173
return host ;
161
174
}
162
175
163
- export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller ) {
176
+ export function createSession ( host : server . ServerHost , typingsInstaller ?: server . ITypingsInstaller , projectServiceEventHandler ?: server . ProjectServiceEventHandler ) {
164
177
if ( typingsInstaller === undefined ) {
165
178
typingsInstaller = new TestTypingsInstaller ( "/a/data/" , /*throttleLimit*/ 5 , host ) ;
166
179
}
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 ) ;
168
181
}
169
182
170
183
export interface CreateProjectServiceParameters {
@@ -2065,4 +2078,92 @@ namespace ts.projectSystem {
2065
2078
assert . equal ( snap . getLength ( ) , expectedLength , "Incorrect snapshot size" ) ;
2066
2079
}
2067
2080
} ) ;
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
+ } ) ;
2068
2169
}
0 commit comments