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+ .atMost (Duration .ofSeconds (1 ))
82+ .untilAsserted (
83+ () -> verify (languageServer , never ()).exit ()
84+ );
7585 }
7686
7787}
0 commit comments