Skip to content

Commit 5615657

Browse files
committed
Issue #136: Test demonstrating misbehaving Exception Handler
Signed-off-by: Jonah Graham <[email protected]>
1 parent b312c34 commit 5615657

File tree

1 file changed

+78
-1
lines changed

1 file changed

+78
-1
lines changed

org.eclipse.lsp4j.jsonrpc/src/test/java/org/eclipse/lsp4j/jsonrpc/test/RemoteEndpointTest.java

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,5 +150,82 @@ public CompletableFuture<Object> request(String method, Object parameter) {
150150
logMessages.unregister();
151151
}
152152
}
153-
153+
154+
@Test public void testExceptionHandlerMisbehaving01() {
155+
LogMessageAccumulator logMessages = new LogMessageAccumulator();
156+
try {
157+
// Don't show the exception in the test execution log
158+
logMessages.registerTo(RemoteEndpoint.class);
159+
160+
TestEndpoint endp = new TestEndpoint() {
161+
@Override
162+
public CompletableFuture<Object> request(String method, Object parameter) {
163+
throw new RuntimeException("BAAZ");
164+
}
165+
};
166+
TestMessageConsumer consumer = new TestMessageConsumer();
167+
// Misbehaving exception handler that returns null
168+
RemoteEndpoint endpoint = new RemoteEndpoint(consumer, endp, (e) -> null);
169+
170+
endpoint.consume(new RequestMessage() {{
171+
setId("1");
172+
setMethod("foo");
173+
setParams("myparam");
174+
}});
175+
176+
assertEquals("Check some response received", 1, consumer.messages.size());
177+
ResponseMessage response = (ResponseMessage) consumer.messages.get(0);
178+
assertEquals(ResponseErrorCode.InternalError.getValue(), response.getError().getCode());
179+
} finally {
180+
logMessages.unregister();
181+
}
182+
}
183+
184+
static class TestMessageConsumer2 implements MessageConsumer {
185+
186+
boolean sentException = false;
187+
List<Message> messages = new ArrayList<>();
188+
189+
@Override
190+
public void consume(Message message) {
191+
if (sentException) {
192+
messages.add(message);
193+
} else {
194+
// throw an exception only for the first message
195+
sentException = true;
196+
throw new RuntimeException("Exception in consumer");
197+
}
198+
}
199+
200+
}
201+
@Test public void testExceptionHandlerMisbehaving02() {
202+
LogMessageAccumulator logMessages = new LogMessageAccumulator();
203+
try {
204+
// Don't show the exception in the test execution log
205+
logMessages.registerTo(RemoteEndpoint.class);
206+
207+
TestEndpoint endp = new TestEndpoint() {
208+
@Override
209+
public CompletableFuture<Object> request(String method, Object parameter) {
210+
return CompletableFuture.supplyAsync(() -> "baz");
211+
}
212+
};
213+
TestMessageConsumer2 consumer = new TestMessageConsumer2();
214+
// Misbehaving exception handler that returns null
215+
RemoteEndpoint endpoint = new RemoteEndpoint(consumer, endp, (e) -> null);
216+
217+
endpoint.consume(new RequestMessage() {{
218+
setId("1");
219+
setMethod("foo");
220+
setParams("myparam");
221+
}});
222+
223+
assertEquals("Check some response received", 1, consumer.messages.size());
224+
ResponseMessage response = (ResponseMessage) consumer.messages.get(0);
225+
assertNotNull("Check response has error", response.getError());
226+
assertEquals(ResponseErrorCode.InternalError.getValue(), response.getError().getCode());
227+
} finally {
228+
logMessages.unregister();
229+
}
230+
}
154231
}

0 commit comments

Comments
 (0)