2525import  org .eclipse .lsp4j .InitializeParams ;
2626import  org .eclipse .lsp4j .services .LanguageServer ;
2727import  org .junit .jupiter .api .Test ;
28- import  org .mockito .InjectMocks ;
29- import  org .mockito .Mock ;
30- import  org .springframework .boot .test .context .SpringBootTest ;
3128
29+ import  java .io .IOException ;
30+ import  java .time .Duration ;
31+ 
32+ import  static  org .awaitility .Awaitility .await ;
33+ import  static  org .mockito .Mockito .mock ;
3234import  static  org .mockito .Mockito .never ;
3335import  static  org .mockito .Mockito .times ;
3436import  static  org .mockito .Mockito .verify ;
3537
36- @ SpringBootTest 
3738class  ParentProcessWatcherTest  {
3839
39-   @ InjectMocks 
40-   private  ParentProcessWatcher  parentProcessWatcher ;
41- 
42-   @ Mock 
43-   private  LanguageServer  languageServer ;
44- 
4540  @ Test 
46-   void  testParentProcessIsDead () {
41+   void  testParentProcessIsDead () throws   IOException ,  InterruptedException   {
4742    // given 
43+     var  languageServer  = mock (LanguageServer .class );
44+     var  parentProcessWatcher  = new  ParentProcessWatcher (languageServer );
45+ 
4846    var  params  = new  InitializeParams ();
49-     params .setProcessId (-1 );
47+     var  process  = new  ProcessBuilder ("timeout" , "2" ).start ();
48+     var  pid  = process .pid ();
49+     params .setProcessId ((int ) pid );
5050
5151    var  event  = new  LanguageServerInitializeRequestReceivedEvent (languageServer , params );
5252    parentProcessWatcher .handleEvent (event );
5353
5454    // when 
55-     parentProcessWatcher . watch ();
55+     process . waitFor ();
5656
5757    // then 
58-     verify (languageServer , times (1 )).exit ();
58+     await ()
59+       .atMost (Duration .ofSeconds (1 ))
60+       .untilAsserted (
61+         () -> verify (languageServer , times (1 )).exit ()
62+       );
5963  }
6064
6165  @ Test 
6266  void  testParentProcessIsAlive () {
6367    // given 
68+     var  languageServer  = mock (LanguageServer .class );
69+     var  parentProcessWatcher  = new  ParentProcessWatcher (languageServer );
70+ 
6471    var  params  = new  InitializeParams ();
6572    params .setProcessId ((int ) ProcessHandle .current ().pid ());
6673
6774    var  event  = new  LanguageServerInitializeRequestReceivedEvent (languageServer , params );
68-     parentProcessWatcher .handleEvent (event );
6975
7076    // when 
71-     parentProcessWatcher .watch ( );
77+     parentProcessWatcher .handleEvent ( event );
7278
7379    // then 
74-     verify (languageServer , never ()).exit ();
80+     await ()
81+       .during (Duration .ofSeconds (1 ))
82+       .untilAsserted (
83+         () -> verify (languageServer , never ()).exit ()
84+       );
7585  }
7686
7787}
0 commit comments