@@ -229,44 +229,47 @@ export async function startRunResultNamedPipe(
229229 dataReceivedCallback : ( payload : ExecutionTestPayload ) => void ,
230230 deferredTillServerClose : Deferred < void > ,
231231 cancellationToken ?: CancellationToken ,
232- ) : Promise < { name : string } & Disposable > {
232+ ) : Promise < string > {
233233 traceVerbose ( 'Starting Test Result named pipe' ) ;
234- const pipeName : string = '/Users/eleanorboyd/testingFiles/inc_dec_example/temp.txt' ; // generateRandomPipeName('python-test-results');
234+ const pipeName : string = generateRandomPipeName ( 'python-test-results' ) ;
235235
236- let disposeOfServer : ( ) => void = ( ) => {
237- deferredTillServerClose . resolve ( ) ;
238- /* noop */
239- } ;
240236 const reader = await createReaderPipe ( pipeName , cancellationToken ) ;
241- traceVerbose ( `Test Discovery named pipe ${ pipeName } connected` ) ;
242- let perConnectionDisposables : ( Disposable | undefined ) [ ] = [ reader ] ;
243-
244- // create a function to dispose of the server
245- disposeOfServer = ( ) => {
246- // dispose of all data listeners and cancelation listeners
247- perConnectionDisposables . forEach ( ( d ) => d ?. dispose ( ) ) ;
248- perConnectionDisposables = [ ] ;
237+ traceVerbose ( `Test Results named pipe ${ pipeName } connected` ) ;
238+ let disposables : Disposable [ ] = [ ] ;
239+ const disposable = new Disposable ( ( ) => {
240+ traceVerbose ( `Test Results named pipe ${ pipeName } disposed` ) ;
241+ disposables . forEach ( ( d ) => d . dispose ( ) ) ;
242+ disposables = [ ] ;
249243 deferredTillServerClose . resolve ( ) ;
250- } ;
251- perConnectionDisposables . push (
252- cancellationToken ?. onCancellationRequested ( ( ) => {
253- console . log ( `Test Result named pipe ${ pipeName } cancelled` ) ;
254- // if cancel is called on one connection, dispose of all connections
255- disposeOfServer ( ) ;
256- } ) ,
244+ } ) ;
245+
246+ if ( cancellationToken ) {
247+ disposables . push (
248+ cancellationToken ?. onCancellationRequested ( ( ) => {
249+ console . log ( `Test Result named pipe ${ pipeName } cancelled` ) ;
250+ disposable . dispose ( ) ;
251+ } ) ,
252+ ) ;
253+ }
254+ disposables . push (
255+ reader ,
257256 reader . listen ( ( data : Message ) => {
258257 traceVerbose ( `Test Result named pipe ${ pipeName } received data` ) ;
259258 // if EOT, call decrement connection count (callback)
260259 dataReceivedCallback ( ( data as ExecutionResultMessage ) . params as ExecutionTestPayload | EOTTestPayload ) ;
261260 } ) ,
261+ reader . onClose ( ( ) => {
262+ // this is called once the server close, once per run instance
263+ traceVerbose ( `Test Result named pipe ${ pipeName } closed. Disposing of listener/s.` ) ;
264+ // dispose of all data listeners and cancelation listeners
265+ disposable . dispose ( ) ;
266+ } ) ,
267+ reader . onError ( ( error ) => {
268+ traceError ( `Test Results named pipe ${ pipeName } error:` , error ) ;
269+ } ) ,
262270 ) ;
263- reader . onClose ( ( ) => {
264- // this is called once the server close, once per run instance
265- traceVerbose ( `Test Result named pipe ${ pipeName } closed. Disposing of listener/s.` ) ;
266- // dispose of all data listeners and cancelation listeners
267- disposeOfServer ( ) ;
268- } ) ;
269- return { name : pipeName , dispose : disposeOfServer } ;
271+
272+ return pipeName ;
270273}
271274
272275interface DiscoveryResultMessage extends Message {
@@ -276,46 +279,45 @@ interface DiscoveryResultMessage extends Message {
276279export async function startDiscoveryNamedPipe (
277280 callback : ( payload : DiscoveredTestPayload ) => void ,
278281 cancellationToken ?: CancellationToken ,
279- ) : Promise < { name : string } & Disposable > {
282+ ) : Promise < string > {
280283 traceVerbose ( 'Starting Test Discovery named pipe' ) ;
281284 // const pipeName: string = '/Users/eleanorboyd/testingFiles/inc_dec_example/temp33.txt';
282285 const pipeName : string = generateRandomPipeName ( 'python-test-discovery' ) ;
283- let dispose : ( ) => void = ( ) => {
284- /* noop */
285- } ;
286286 const reader = await createReaderPipe ( pipeName , cancellationToken ) ;
287287
288- reader . listen ( ( data : Message ) => {
289- traceVerbose ( `Test Discovery named pipe ${ pipeName } received data` ) ;
290- callback ( ( data as DiscoveryResultMessage ) . params as DiscoveredTestPayload | EOTTestPayload ) ;
291- } ) ;
292288 traceVerbose ( `Test Discovery named pipe ${ pipeName } connected` ) ;
293- let disposables : ( Disposable | undefined ) [ ] = [ reader ] ;
294- dispose = ( ) => {
289+ let disposables : Disposable [ ] = [ ] ;
290+ const disposable = new Disposable ( ( ) => {
295291 traceVerbose ( `Test Discovery named pipe ${ pipeName } disposed` ) ;
296- disposables . forEach ( ( d ) => d ? .dispose ( ) ) ;
292+ disposables . forEach ( ( d ) => d . dispose ( ) ) ;
297293 disposables = [ ] ;
298- } ;
294+ } ) ;
295+
296+ if ( cancellationToken ) {
297+ disposables . push (
298+ cancellationToken . onCancellationRequested ( ( ) => {
299+ traceVerbose ( `Test Discovery named pipe ${ pipeName } cancelled` ) ;
300+ disposable . dispose ( ) ;
301+ } ) ,
302+ ) ;
303+ }
304+
299305 disposables . push (
300- cancellationToken ?. onCancellationRequested ( ( ) => {
301- traceVerbose ( `Test Discovery named pipe ${ pipeName } cancelled` ) ;
302- dispose ( ) ;
303- } ) ,
306+ reader ,
304307 reader . listen ( ( data : Message ) => {
305308 traceVerbose ( `Test Discovery named pipe ${ pipeName } received data` ) ;
306309 callback ( ( data as DiscoveryResultMessage ) . params as DiscoveredTestPayload | EOTTestPayload ) ;
307310 } ) ,
308311 reader . onClose ( ( ) => {
309312 callback ( createEOTPayload ( false ) ) ;
310313 traceVerbose ( `Test Discovery named pipe ${ pipeName } closed` ) ;
311- dispose ( ) ;
314+ disposable . dispose ( ) ;
312315 } ) ,
313316 reader . onError ( ( error ) => {
314317 traceError ( `Test Discovery named pipe ${ pipeName } error:` , error ) ;
315- dispose ( ) ;
316318 } ) ,
317319 ) ;
318- return { name : pipeName , dispose } ;
320+ return pipeName ;
319321}
320322
321323export async function startTestIdServer ( testIds : string [ ] ) : Promise < number > {
0 commit comments