Replace BootJava test harness constructors with builder api.
And fix failing tests in the process
This commit is contained in:
@@ -14,12 +14,21 @@ import java.util.Collection;
|
||||
|
||||
import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp;
|
||||
|
||||
public class RunningAppProvider {
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public static final RunningAppProvider DEFAULT = new RunningAppProvider();
|
||||
public interface RunningAppProvider {
|
||||
|
||||
public Collection<SpringBootApp> getAllRunningSpringApps() throws Exception {
|
||||
return SpringBootApp.getAllRunningSpringApps().values();
|
||||
}
|
||||
public static final RunningAppProvider DEFAULT = new RunningAppProvider() {
|
||||
@Override public Collection<SpringBootApp> getAllRunningSpringApps() throws Exception {
|
||||
return SpringBootApp.getAllRunningSpringApps().values();
|
||||
}
|
||||
};
|
||||
|
||||
public static final RunningAppProvider NULL = new RunningAppProvider() {
|
||||
@Override public Collection<SpringBootApp> getAllRunningSpringApps() throws Exception {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
};
|
||||
|
||||
Collection<SpringBootApp> getAllRunningSpringApps() throws Exception;
|
||||
}
|
||||
|
||||
@@ -103,7 +103,6 @@ public class SpringLiveHoverWatchdog {
|
||||
}
|
||||
|
||||
private void publishLiveHints(String docURI, Range[] ranges) {
|
||||
System.out.println(" PUBLISH LIVE HOVER HINTS !!! " + ranges.length);
|
||||
server.getClient().highlight(new HighlightParams(new TextDocumentIdentifier(docURI), Arrays.asList(ranges)));
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ public class AutowiredHoverProviderTest {
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
harness = new BootLanguageServerHarness();
|
||||
harness = BootLanguageServerHarness.builder().build();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@ import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
/**
|
||||
* @author Martin Lippert
|
||||
@@ -62,8 +61,8 @@ public class ComponentHoverProviderTest {
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
harness = new BootLanguageServerHarness();
|
||||
projectFinder = (d) -> harness.getProjectFinder().find(d);
|
||||
harness = BootLanguageServerHarness.builder().build();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -51,7 +51,7 @@ public class SpringIndexerBeansTest {
|
||||
symbolProviders.put(Constants.SPRING_BEAN, new BeansSymbolProvider());
|
||||
symbolProviders.put(Constants.SPRING_COMPONENT, new ComponentSymbolProvider());
|
||||
|
||||
harness = new BootLanguageServerHarness();
|
||||
harness = BootLanguageServerHarness.builder().build();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI()));
|
||||
}
|
||||
|
||||
@@ -17,14 +17,12 @@ import java.io.File;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.Editor;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
import org.springframework.ide.vscode.project.harness.MockRunningAppProvider;
|
||||
import org.springframework.ide.vscode.project.harness.ProjectsHarness;
|
||||
import org.springframework.ide.vscode.project.harness.PropertyIndexHarness;
|
||||
|
||||
public class RequestMappingLiveHoverTest {
|
||||
|
||||
@@ -35,7 +33,9 @@ public class RequestMappingLiveHoverTest {
|
||||
public void setup() throws Exception {
|
||||
|
||||
mockAppProvider = new MockRunningAppProvider();
|
||||
harness = BootLanguageServerHarness.createMocked(mockAppProvider.provider);
|
||||
harness = BootLanguageServerHarness.builder()
|
||||
.runningAppProvider(mockAppProvider.provider)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -58,7 +58,7 @@ public class RequestMappingLiveHoverTest {
|
||||
// mock app to return realistic results if possible
|
||||
.getRequestMappings(
|
||||
"{\"/webjars/**\":{\"bean\":\"resourceHandlerMapping\"},\"/**\":{\"bean\":\"resourceHandlerMapping\"},\"/**/favicon.ico\":{\"bean\":\"faviconHandlerMapping\"},\"{[/hello-world],methods=[GET]}\":{\"bean\":\"requestMappingHandlerMapping\",\"method\":\"public example.Greeting example.HelloWorldController.sayHello(java.lang.String)\"},\"{[/goodbye]}\":{\"bean\":\"requestMappingHandlerMapping\",\"method\":\"public java.lang.String example.RestApi.goodbye()\"},\"{[/hello]}\":{\"bean\":\"requestMappingHandlerMapping\",\"method\":\"public java.lang.String example.RestApi.hello()\"},\"{[/error]}\":{\"bean\":\"requestMappingHandlerMapping\",\"method\":\"public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)\"},\"{[/error],produces=[text/html]}\":{\"bean\":\"requestMappingHandlerMapping\",\"method\":\"public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)\"}}")
|
||||
. build();
|
||||
.build();
|
||||
|
||||
harness.intialize(directory);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public class RequestMappingSymbolProviderTest {
|
||||
symbolProviders = new HashMap<>();
|
||||
symbolProviders.put(Constants.SPRING_REQUEST_MAPPING, new RequestMappingSymbolProvider());
|
||||
|
||||
harness = new BootLanguageServerHarness();
|
||||
harness = BootLanguageServerHarness.builder().build();
|
||||
projectFinder = harness.getProjectFinder();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.eclipse.lsp4j.CompletionItem;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.Editor;
|
||||
import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness;
|
||||
@@ -38,7 +37,7 @@ public class ScopeCompletionTest {
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
IJavaProject testProject = ProjectsHarness.INSTANCE.mavenProject("test-annotations");
|
||||
harness = BootLanguageServerHarness.createMocked();
|
||||
harness = BootLanguageServerHarness.builder().mockDefaults().build();
|
||||
harness.useProject(testProject);
|
||||
harness.intialize(null);
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class SpringIndexerTest {
|
||||
public void setup() throws Exception {
|
||||
symbolProviders = new HashMap<>();
|
||||
symbolProviders.put(Constants.SPRING_REQUEST_MAPPING, new RequestMappingSymbolProvider());
|
||||
harness = new BootLanguageServerHarness();
|
||||
harness = BootLanguageServerHarness.builder().build();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -45,17 +45,16 @@ public class ValueCompletionTest {
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
//Somewhat strange test setup, test provides a specific test project.
|
||||
// The context finder finds this test project,
|
||||
// But it is not used in the indexProvider.
|
||||
//This is a bit odd... but we preserved the strangeness how it was.
|
||||
testProject = ProjectsHarness.INSTANCE.mavenProject("test-annotations");
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
//Somewhat strange test setup, with a project context finder that finds the test project,
|
||||
// but doesn't use it in the indexProvider.
|
||||
BootJavaLanguageServerParams params = new BootJavaLanguageServerParams(
|
||||
d -> getTestProject(),
|
||||
ProjectObserver.NULL,
|
||||
indexHarness.getIndexProvider(),
|
||||
RunningAppProvider.DEFAULT
|
||||
);
|
||||
harness = new BootLanguageServerHarness(params);
|
||||
harness = BootLanguageServerHarness.builder()
|
||||
.mockDefaults()
|
||||
.projectFinder(d -> getTestProject())
|
||||
.build();
|
||||
indexHarness = harness.getPropertyIndexHarness();
|
||||
harness.intialize(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,49 +10,90 @@
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.project.harness;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer;
|
||||
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerParams;
|
||||
import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LSFactory;
|
||||
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
|
||||
|
||||
public class BootLanguageServerHarness extends LanguageServerHarness<BootJavaLanguageServer> {
|
||||
|
||||
private PropertyIndexHarness indexHarness;
|
||||
private JavaProjectFinder projectFinder = (doc) -> getServer().getProjectFinder().find(doc);
|
||||
private final JavaProjectFinder projectFinder = (doc) -> getServer().getProjectFinder().find(doc);
|
||||
|
||||
/**
|
||||
* Creates a harness with a 'realistic' language server. I.e. no fake or mocked components.
|
||||
* Creates a builder and initializes it so that it sets up a test harness with
|
||||
* the 'real stuff'. I.e project finder and other injected components are like
|
||||
* they would be in 'production' environment.
|
||||
* <p>
|
||||
* Builder methods can still be called to replace some of the components with
|
||||
* mocks selectively.
|
||||
*/
|
||||
public BootLanguageServerHarness() throws Exception {
|
||||
super(() -> new BootJavaLanguageServer(BootJavaLanguageServerParams.createDefault()));
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
LSFactory<BootJavaLanguageServerParams> defaultsFactory = BootJavaLanguageServerParams.createDefault();
|
||||
private JavaProjectFinder projectFinder = null;
|
||||
private ProjectObserver projectObserver = null;
|
||||
private SpringPropertyIndexProvider indexProvider = null;
|
||||
private RunningAppProvider runningAppProvider = null;
|
||||
private PropertyIndexHarness indexHarness = null;
|
||||
|
||||
public BootLanguageServerHarness build() throws Exception {
|
||||
BootLanguageServerHarness harness = new BootLanguageServerHarness(this);
|
||||
return harness;
|
||||
}
|
||||
|
||||
public Builder mockDefaults() {
|
||||
indexHarness = new PropertyIndexHarness();
|
||||
projectFinder = indexHarness.getProjectFinder();
|
||||
indexProvider = indexHarness.getIndexProvider();
|
||||
projectObserver = ProjectObserver.NULL;
|
||||
runningAppProvider = RunningAppProvider.NULL;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder runningAppProvider(RunningAppProvider provider) {
|
||||
this.runningAppProvider = provider;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder projectFinder(JavaProjectFinder projectFinder) {
|
||||
this.projectFinder = projectFinder;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a harness with custom (potentially mocked) params.
|
||||
* This constructor is private. Use the builder api instead.
|
||||
*/
|
||||
public BootLanguageServerHarness(BootJavaLanguageServerParams params) throws Exception {
|
||||
private BootLanguageServerHarness(Builder builder) throws Exception {
|
||||
super(() -> {
|
||||
return new BootJavaLanguageServer((server) -> params);
|
||||
LSFactory<BootJavaLanguageServerParams> params = (server) -> {
|
||||
BootJavaLanguageServerParams defaults = BootJavaLanguageServerParams.createDefault().create(server);
|
||||
return new BootJavaLanguageServerParams(
|
||||
builder.projectFinder==null?defaults.projectFinder:builder.projectFinder,
|
||||
builder.projectObserver==null?defaults.projectObserver:builder.projectObserver,
|
||||
builder.indexProvider==null?defaults.indexProvider:builder.indexProvider,
|
||||
builder.runningAppProvider==null?defaults.runningAppProvider:builder.runningAppProvider
|
||||
);
|
||||
};
|
||||
return new BootJavaLanguageServer(params);
|
||||
});
|
||||
this.projectFinder = params.projectFinder;
|
||||
this.indexHarness = builder.indexHarness;
|
||||
}
|
||||
|
||||
|
||||
public static BootLanguageServerHarness createMocked() throws Exception {
|
||||
return createMocked(RunningAppProvider.DEFAULT);
|
||||
}
|
||||
|
||||
public static BootLanguageServerHarness createMocked(RunningAppProvider provider) throws Exception {
|
||||
PropertyIndexHarness indexHarness = new PropertyIndexHarness();
|
||||
BootLanguageServerHarness harness = new BootLanguageServerHarness(new BootJavaLanguageServerParams(indexHarness.getProjectFinder(), ProjectObserver.NULL, indexHarness.getIndexProvider(), provider));
|
||||
harness.indexHarness = indexHarness;
|
||||
return harness;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getFileExtension() {
|
||||
return ".java";
|
||||
|
||||
Reference in New Issue
Block a user