@@ -330,19 +330,46 @@ namespace ts.projectSystem {
330
330
return new TestSession({ ...sessionOptions, ...opts });
331
331
}
332
332
333
- function createSessionWithEventTracking<T extends server.ProjectServiceEvent, U extends server.ProjectServiceEvent = T >(host: server.ServerHost, eventName: T["eventName"], eventName2?: U ["eventName"]) {
334
- const events: (T | U) [] = [];
333
+ function createSessionWithEventTracking<T extends server.ProjectServiceEvent>(host: server.ServerHost, eventName: T["eventName"], ...eventNames: T ["eventName"][ ]) {
334
+ const events: T [] = [];
335
335
const session = createSession(host, {
336
336
eventHandler: e => {
337
- if (e.eventName === eventName || (eventName2 && e.eventName === eventName2 )) {
338
- events.push(e as T | U );
337
+ if (e.eventName === eventName || eventNames.some(eventName => e.eventName === eventName )) {
338
+ events.push(e as T);
339
339
}
340
340
}
341
341
});
342
342
343
343
return { session, events };
344
344
}
345
345
346
+ function createSessionWithDefaultEventHandler<T extends protocol.AnyEvent>(host: TestServerHost, eventName: T["event"], opts: Partial<server.SessionOptions> = {}, ...eventNames: T["event"][]) {
347
+ const session = createSession(host, { canUseEvents: true, ...opts });
348
+
349
+ return {
350
+ session,
351
+ getEvents,
352
+ clearEvents
353
+ };
354
+
355
+ function getEvents() {
356
+ const outputEventRegex = /Content\-Length: [\d]+\r\n\r\n/;
357
+ return filter(
358
+ map(
359
+ host.getOutput(), s => convertToObject(
360
+ parseJsonText("json.json", s.replace(outputEventRegex, "")),
361
+ []
362
+ )
363
+ ),
364
+ e => e.event === eventName || eventNames.some(eventName => e.event === eventName)
365
+ ) as T[];
366
+ }
367
+
368
+ function clearEvents() {
369
+ session.clearMessages();
370
+ }
371
+ }
372
+
346
373
interface CreateProjectServiceParameters {
347
374
cancellationToken?: HostCancellationToken;
348
375
logger?: server.Logger;
@@ -8062,15 +8089,7 @@ namespace ts.projectSystem {
8062
8089
verifyProjectsUpdatedInBackgroundEvent(createSessionWithProjectChangedEventHandler);
8063
8090
8064
8091
function createSessionWithProjectChangedEventHandler(host: TestServerHost): ProjectsUpdatedInBackgroundEventVerifier {
8065
- const projectChangedEvents: server.ProjectsUpdatedInBackgroundEvent[] = [];
8066
- const session = createSession(host, {
8067
- eventHandler: e => {
8068
- if (e.eventName === server.ProjectsUpdatedInBackgroundEvent) {
8069
- projectChangedEvents.push(e);
8070
- }
8071
- }
8072
- });
8073
-
8092
+ const { session, events: projectChangedEvents } = createSessionWithEventTracking<server.ProjectsUpdatedInBackgroundEvent>(host, server.ProjectsUpdatedInBackgroundEvent);
8074
8093
return {
8075
8094
session,
8076
8095
verifyProjectsUpdatedInBackgroundEventHandler,
@@ -8110,7 +8129,7 @@ namespace ts.projectSystem {
8110
8129
8111
8130
8112
8131
function createSessionThatUsesEvents(host: TestServerHost, noGetErrOnBackgroundUpdate?: boolean): ProjectsUpdatedInBackgroundEventVerifier {
8113
- const session = createSession (host, { canUseEvents: true, noGetErrOnBackgroundUpdate });
8132
+ const { session, getEvents, clearEvents } = createSessionWithDefaultEventHandler<protocol.ProjectsUpdatedInBackgroundEvent> (host, server.ProjectsUpdatedInBackgroundEvent, { noGetErrOnBackgroundUpdate });
8114
8133
8115
8134
return {
8116
8135
session,
@@ -8124,24 +8143,15 @@ namespace ts.projectSystem {
8124
8143
openFiles: e.data.openFiles
8125
8144
};
8126
8145
});
8127
- const outputEventRegex = /Content\-Length: [\d]+\r\n\r\n/;
8128
- const events: protocol.ProjectsUpdatedInBackgroundEvent[] = filter(
8129
- map(
8130
- host.getOutput(), s => convertToObject(
8131
- parseJsonText("json.json", s.replace(outputEventRegex, "")),
8132
- []
8133
- )
8134
- ),
8135
- e => e.event === server.ProjectsUpdatedInBackgroundEvent
8136
- );
8146
+ const events = getEvents();
8137
8147
assert.equal(events.length, expectedEvents.length, `Incorrect number of events Actual: ${map(events, e => e.body)} Expected: ${expectedEvents}`);
8138
8148
forEach(events, (actualEvent, i) => {
8139
8149
const expectedEvent = expectedEvents[i];
8140
8150
verifyFiles("openFiles", actualEvent.body.openFiles, expectedEvent.openFiles);
8141
8151
});
8142
8152
8143
8153
// Verified the events, reset them
8144
- session.clearMessages ();
8154
+ clearEvents ();
8145
8155
8146
8156
if (events.length) {
8147
8157
host.checkTimeoutQueueLength(noGetErrOnBackgroundUpdate ? 0 : 1); // Error checking queued only if not noGetErrOnBackgroundUpdate
@@ -9467,7 +9477,7 @@ export const x = 10;`
9467
9477
}
9468
9478
return originalReadFile.call(host, file);
9469
9479
};
9470
- const { session, events } = createSessionWithEventTracking<server.ProjectLoadingStartEvent, server.ProjectLoadingFinishEvent>(host, server.ProjectLoadingStartEvent, server.ProjectLoadingFinishEvent);
9480
+ const { session, events } = createSessionWithEventTracking<server.ProjectLoadingStartEvent | server.ProjectLoadingFinishEvent>(host, server.ProjectLoadingStartEvent, server.ProjectLoadingFinishEvent);
9471
9481
const service = session.getProjectService();
9472
9482
return { host, session, verifyEvent, verifyEventWithOpenTs, service, events };
9473
9483
0 commit comments