@@ -4,6 +4,7 @@ import { EventEmitter } from "events";
4
4
5
5
import { afterEach , beforeEach } from "mocha" ;
6
6
import assert = require( "assert" ) ;
7
+ import { RequestVersionDaemonRequest } from "../../../daemon" ;
7
8
8
9
suite ( "DartFrogDaemon" , ( ) => {
9
10
let childProcessStub : any ;
@@ -292,4 +293,124 @@ suite("DartFrogDaemon", () => {
292
293
sinon . assert . notCalled ( callback ) ;
293
294
} ) ;
294
295
} ) ;
296
+
297
+ suite ( "send" , ( ) => {
298
+ test ( "throws a DartFrogDaemonNotInvokedError when not invoked" , async ( ) => {
299
+ const daemon = new dartFrogDaemon . DartFrogDaemon ( ) ;
300
+
301
+ const request = new RequestVersionDaemonRequest ( "1" ) ;
302
+
303
+ assert . throws (
304
+ ( ) => daemon . send ( request ) ,
305
+ new dartFrogDaemon . DartFrogDaemonNotInvokedError ( )
306
+ ) ;
307
+ } ) ;
308
+
309
+ test ( "throws a DartFrogDaemonReadyError when invoked but not ready" , async ( ) => {
310
+ const daemon = new dartFrogDaemon . DartFrogDaemon ( ) ;
311
+
312
+ const daemonProcess = sinon . stub ( ) ;
313
+ const daemonStdoutEventEmitter = new EventEmitter ( ) ;
314
+
315
+ daemonProcess . stdout = daemonStdoutEventEmitter ;
316
+ const workingDirectory = "workingDirectory" ;
317
+
318
+ childProcessStub . spawn
319
+ . withArgs ( "dart_frog" , [ "daemon" ] , {
320
+ cwd : workingDirectory ,
321
+ } )
322
+ . returns ( daemonProcess ) ;
323
+
324
+ daemon . invoke ( workingDirectory ) ;
325
+
326
+ const request = new RequestVersionDaemonRequest ( "1" ) ;
327
+
328
+ assert . throws (
329
+ ( ) => daemon . send ( request ) ,
330
+ new dartFrogDaemon . DartFrogDaemonReadyError ( )
331
+ ) ;
332
+ } ) ;
333
+
334
+ suite ( "when ready" , ( ) => {
335
+ let daemon : any ;
336
+ let stdout : any ;
337
+ let stdin : any ;
338
+
339
+ beforeEach ( ( ) => {
340
+ const workingDirectory = "workingDirectory" ;
341
+
342
+ const daemonProcess = sinon . stub ( ) ;
343
+
344
+ const daemonStdoutEventEmitter = new EventEmitter ( ) ;
345
+ daemonProcess . stdout = stdout = daemonStdoutEventEmitter ;
346
+
347
+ daemonProcess . stdin = stdin = {
348
+ write : sinon . stub ( ) ,
349
+ } ;
350
+
351
+ childProcessStub . spawn
352
+ . withArgs ( "dart_frog" , [ "daemon" ] , {
353
+ cwd : workingDirectory ,
354
+ } )
355
+ . returns ( daemonProcess ) ;
356
+
357
+ daemon = new dartFrogDaemon . DartFrogDaemon ( ) ;
358
+
359
+ const invokePromise = daemon . invoke ( workingDirectory ) ;
360
+
361
+ const readyMessage = `[{"event":"daemon.ready","params":{"version":"0.0.1","processId":94799}}]` ;
362
+ daemonStdoutEventEmitter . emit ( "data" , readyMessage ) ;
363
+
364
+ return invokePromise ;
365
+ } ) ;
366
+
367
+ test ( "writes request in stdin" , async ( ) => {
368
+ const request = new RequestVersionDaemonRequest ( "1" ) ;
369
+
370
+ daemon . send ( request ) ;
371
+
372
+ sinon . assert . calledOnceWithExactly (
373
+ stdin . write ,
374
+ `${ JSON . stringify ( [ request ] ) } \n`
375
+ ) ;
376
+ } ) ;
377
+
378
+ test ( "emits request event" , async ( ) => {
379
+ const request = new RequestVersionDaemonRequest ( "1" ) ;
380
+
381
+ const callback = sinon . stub ( ) ;
382
+ daemon . on (
383
+ dartFrogDaemon . DartFrogDaemonEventEmitterTypes . request ,
384
+ callback
385
+ ) ;
386
+
387
+ daemon . send ( request ) ;
388
+
389
+ sinon . assert . calledOnceWithExactly ( callback , request ) ;
390
+ } ) ;
391
+
392
+ test ( "resolves correct response" , async ( ) => {
393
+ const request = new RequestVersionDaemonRequest ( "1" ) ;
394
+
395
+ const responsePromise = daemon . send ( request ) ;
396
+
397
+ const anotherResponse = `[{"id":"2","result":{"version":"0.0.1"}}]` ;
398
+ stdout . emit ( "data" , anotherResponse ) ;
399
+
400
+ const response = `[{"id":"1","result":{"version":"0.0.1"}}]` ;
401
+ stdout . emit ( "data" , response ) ;
402
+
403
+ const actualResponse = await responsePromise ;
404
+
405
+ const expectedResponse = {
406
+ id : "1" ,
407
+ result : {
408
+ version : "0.0.1" ,
409
+ } ,
410
+ } ;
411
+
412
+ assert . deepEqual ( actualResponse , expectedResponse ) ;
413
+ } ) ;
414
+ } ) ;
415
+ } ) ;
295
416
} ) ;
0 commit comments