blob: 5db16e41f40d0d83fa81b80adde8b60015a624e6 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2016 TypeFox and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
******************************************************************************/
package org.eclipse.lsp4j.test.services;
import org.eclipse.lsp4j.CodeLens;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.eclipse.lsp4j.TextDocumentPositionParams;
import org.eclipse.lsp4j.jsonrpc.MessageIssueException;
import org.eclipse.lsp4j.jsonrpc.messages.Message;
import org.eclipse.lsp4j.jsonrpc.messages.RequestMessage;
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage;
import org.eclipse.lsp4j.jsonrpc.validation.ReflectiveMessageValidator;
import org.junit.Assert;
import org.junit.Test;
public class ValidationTest {
ReflectiveMessageValidator validator = new ReflectiveMessageValidator();
@Test
public void testInvalidCompletion() {
RequestMessage message = new RequestMessage();
message.setJsonrpc("2.0");
message.setId("1");
message.setMethod(MessageMethods.DOC_COMPLETION);
TextDocumentPositionParams params = new TextDocumentPositionParams();
params.setTextDocument(new TextDocumentIdentifier("file:///tmp/foo"));
message.setParams(params);
assertIssues(message, "The accessor 'TextDocumentPositionParams.getPosition()' must return a non-null value.");
}
@Test
public void testInvalidCodeLens() {
ResponseMessage message = new ResponseMessage();
message.setId("1");
CodeLens codeLens = new CodeLens(new Range(new Position(3, 32), new Position(3, 35)), null, null);
// forbidden self reference!
codeLens.setData(codeLens);
message.setResult(codeLens);
assertIssues(message, "An element of the message has a direct or indirect reference to itself.");
}
private void assertIssues(Message message, CharSequence expectedIssues) {
try {
validator.consume(message);
Assert.fail("Expected InvalidMessageException: " + expectedIssues + ".");
} catch (MessageIssueException e) {
String expected = expectedIssues.toString();
String actual = LineEndings.toSystemLineEndings(e.getMessage());
// The expectation may be a prefix of the actual exception message
if (!actual.startsWith(expected))
Assert.assertEquals(expected, actual);
}
}
}