25
25
import org .eclipse .lsp4j .InitializeParams ;
26
26
import org .eclipse .lsp4j .services .LanguageServer ;
27
27
import org .junit .jupiter .api .Test ;
28
- import org .mockito .InjectMocks ;
29
- import org .mockito .Mock ;
30
- import org .springframework .boot .test .context .SpringBootTest ;
31
28
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 ;
32
34
import static org .mockito .Mockito .never ;
33
35
import static org .mockito .Mockito .times ;
34
36
import static org .mockito .Mockito .verify ;
35
37
36
- @ SpringBootTest
37
38
class ParentProcessWatcherTest {
38
39
39
- @ InjectMocks
40
- private ParentProcessWatcher parentProcessWatcher ;
41
-
42
- @ Mock
43
- private LanguageServer languageServer ;
44
-
45
40
@ Test
46
- void testParentProcessIsDead () {
41
+ void testParentProcessIsDead () throws IOException , InterruptedException {
47
42
// given
43
+ var languageServer = mock (LanguageServer .class );
44
+ var parentProcessWatcher = new ParentProcessWatcher (languageServer );
45
+
48
46
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 );
50
50
51
51
var event = new LanguageServerInitializeRequestReceivedEvent (languageServer , params );
52
52
parentProcessWatcher .handleEvent (event );
53
53
54
54
// when
55
- parentProcessWatcher . watch ();
55
+ process . waitFor ();
56
56
57
57
// then
58
- verify (languageServer , times (1 )).exit ();
58
+ await ()
59
+ .atMost (Duration .ofSeconds (1 ))
60
+ .untilAsserted (
61
+ () -> verify (languageServer , times (1 )).exit ()
62
+ );
59
63
}
60
64
61
65
@ Test
62
66
void testParentProcessIsAlive () {
63
67
// given
68
+ var languageServer = mock (LanguageServer .class );
69
+ var parentProcessWatcher = new ParentProcessWatcher (languageServer );
70
+
64
71
var params = new InitializeParams ();
65
72
params .setProcessId ((int ) ProcessHandle .current ().pid ());
66
73
67
74
var event = new LanguageServerInitializeRequestReceivedEvent (languageServer , params );
68
- parentProcessWatcher .handleEvent (event );
69
75
70
76
// when
71
- parentProcessWatcher .watch ( );
77
+ parentProcessWatcher .handleEvent ( event );
72
78
73
79
// then
74
- verify (languageServer , never ()).exit ();
80
+ await ()
81
+ .atLeast (Duration .ofSeconds (1 ))
82
+ .untilAsserted (
83
+ () -> verify (languageServer , never ()).exit ()
84
+ );
75
85
}
76
86
77
87
}
0 commit comments