From 77edc22c3e73649420dc1ab7c83074dc64f42ce1 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 9 Oct 2018 16:33:58 -0700 Subject: [PATCH] Bosh LS no more subclass of SimpleLanguageServer --- .../bosh-language-server/pom.xml | 11 +-- .../ide/vscode/bosh/BoshDefintionFinder.java | 5 +- .../bosh/BoshLanguageServerBootApp.java | 21 ++++-- ...ava => BoshLanguageServerInitializer.java} | 46 +++++++++---- .../src/main/resources/application.yml | 2 + .../ide/vscode/bosh/BoshEditorTest.java | 67 ++++++++++--------- ...=> BoshLanguageServerInitializerTest.java} | 29 +++++--- .../bosh/bootiful/BoshLanguageServerTest.java | 33 +++++++++ .../BoshLanguageServerTestConfiguration.java | 35 ++++++++++ .../src/test/resources/application.properties | 1 + .../commons/commons-java/pom.xml | 2 - .../composable/ComposableLanguageServer.java | 2 - 12 files changed, 177 insertions(+), 77 deletions(-) rename headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/{BoshLanguageServer.java => BoshLanguageServerInitializer.java} (73%) create mode 100644 headless-services/bosh-language-server/src/main/resources/application.yml rename headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/{BoshLanguageServerTest.java => BoshLanguageServerInitializerTest.java} (66%) create mode 100644 headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTest.java create mode 100644 headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTestConfiguration.java create mode 100644 headless-services/bosh-language-server/src/test/resources/application.properties diff --git a/headless-services/bosh-language-server/pom.xml b/headless-services/bosh-language-server/pom.xml index ee0b9621e..69e7c7608 100644 --- a/headless-services/bosh-language-server/pom.xml +++ b/headless-services/bosh-language-server/pom.xml @@ -37,15 +37,8 @@ - org.springframework.ide.vscode - language-server-test-harness - ${dependencies.version} - test - - - org.mockito - mockito-all - ${mockito-version} + org.springframework.boot + spring-boot-starter-test test diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDefintionFinder.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDefintionFinder.java index 6e091ada7..457de4bfa 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDefintionFinder.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDefintionFinder.java @@ -20,6 +20,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.TextDocumentPositionParams; import org.springframework.ide.vscode.commons.languageserver.definition.SimpleDefinitionFinder; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; import org.springframework.ide.vscode.commons.util.BadLocationException; import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.text.TextDocument; @@ -35,7 +36,7 @@ import com.google.common.collect.ImmutableList.Builder; import reactor.core.publisher.Flux; -public class BoshDefintionFinder extends SimpleDefinitionFinder { +public class BoshDefintionFinder extends SimpleDefinitionFinder { //TODO: lots of common code between BoshDefintionFinder and ConcourseDefinitionFinder. // should be possible to pull up into a common super class. @@ -51,7 +52,7 @@ public class BoshDefintionFinder extends SimpleDefinitionFinder handle(Node refNode, TextDocument doc, YamlFileAST ast); } - public BoshDefintionFinder(BoshLanguageServer server, BoshSchemas schema, YamlAstCache asts, ASTTypeCache astTypes) { + public BoshDefintionFinder(SimpleLanguageServer server, BoshSchemas schema, YamlAstCache asts, ASTTypeCache astTypes) { super(server); this.schema = schema; this.asts = asts; diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerBootApp.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerBootApp.java index 7b1d88f47..61ca414ef 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerBootApp.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerBootApp.java @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.bosh; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.context.annotation.Bean; import org.springframework.ide.vscode.bosh.models.BoshCommandCloudConfigProvider; import org.springframework.ide.vscode.bosh.models.BoshCommandReleasesProvider; @@ -32,13 +33,19 @@ public class BoshLanguageServerBootApp { return SERVER_NAME; } - @Bean BoshLanguageServer languageServer(BoshCliConfig cliConfig) { - return new BoshLanguageServer( - cliConfig, - new BoshCommandCloudConfigProvider(cliConfig), - new BoshCommandStemcellsProvider(cliConfig), - new BoshCommandReleasesProvider(cliConfig) - ); + @ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness") + @Bean BoshCommandCloudConfigProvider cloudConfg(BoshCliConfig cliConfig) { + return new BoshCommandCloudConfigProvider(cliConfig); + } + + @ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness") + @Bean BoshCommandStemcellsProvider stemcels(BoshCliConfig cliConfig) { + return new BoshCommandStemcellsProvider(cliConfig); + } + + @ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness") + @Bean BoshCommandReleasesProvider releases(BoshCliConfig cliConfig) { + return new BoshCommandReleasesProvider(cliConfig); } } diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServer.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerInitializer.java similarity index 73% rename from headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServer.java rename to headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerInitializer.java index ce7c71263..de7ac8843 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServer.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshLanguageServerInitializer.java @@ -16,6 +16,7 @@ import org.springframework.ide.vscode.bosh.models.DynamicModelProvider; import org.springframework.ide.vscode.bosh.models.ReleasesModel; import org.springframework.ide.vscode.bosh.models.StemcellsModel; import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter; +import org.springframework.ide.vscode.commons.languageserver.config.LanguageServerInitializer; import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider; import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter; import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine; @@ -36,21 +37,38 @@ import org.springframework.ide.vscode.commons.yaml.reconcile.TypeBasedYamlSymbol import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaBasedReconcileEngine; import org.springframework.ide.vscode.commons.yaml.snippet.SchemaBasedSnippetGenerator; import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; -public class BoshLanguageServer extends SimpleLanguageServer { +@Component +public class BoshLanguageServerInitializer implements LanguageServerInitializer { - private final VscodeCompletionEngineAdapter completionEngine; + private BoshCliConfig cliConfig; + private DynamicModelProvider cloudConfigProvider; + private DynamicModelProvider stemcellsProvider; + private DynamicModelProvider releasesProvider; + + private SimpleLanguageServer server; private BoshSchemas schema; + private VscodeCompletionEngineAdapter completionEngine; - public BoshLanguageServer(BoshCliConfig cliConfig, + public BoshLanguageServerInitializer(BoshCliConfig cliConfig, DynamicModelProvider cloudConfigProvider, DynamicModelProvider stemcellsProvider, DynamicModelProvider releasesProvider ) { - super("vscode-bosh"); - BoshModels models = new BoshModels(cloudConfigProvider, stemcellsProvider, releasesProvider); - SimpleTextDocumentService documents = getTextDocumentService(); + this.cliConfig = cliConfig; + this.cloudConfigProvider= cloudConfigProvider; + this.stemcellsProvider = stemcellsProvider; + this.releasesProvider = releasesProvider; + } + @Override + public void initialize(SimpleLanguageServer server) throws Exception { + Assert.isNull(this.server, "This initializer should only be used once"); + this.server = server; + BoshModels models = new BoshModels(cloudConfigProvider, stemcellsProvider, releasesProvider); + SimpleTextDocumentService documents = server.getTextDocumentService(); schema = new BoshSchemas(models); YamlAstCache asts = models.asts; ASTTypeCache astTypeCache = models.astTypes; @@ -59,10 +77,10 @@ public class BoshLanguageServer extends SimpleLanguageServer { YamlAssistContextProvider contextProvider = new SchemaBasedYamlAssistContextProvider(schema); enableSnippets(true); YamlCompletionEngine yamlCompletionEngine = new YamlCompletionEngine(structureProvider, contextProvider, YamlCompletionEngineOptions.DEFAULT); - completionEngine = createCompletionEngineAdapter(this, yamlCompletionEngine); + completionEngine = server.createCompletionEngineAdapter(server, yamlCompletionEngine); HoverInfoProvider infoProvider = new YamlHoverInfoProvider(asts.getAstProvider(true), structureProvider, contextProvider); - VscodeHoverEngineAdapter hoverEngine = new VscodeHoverEngineAdapter(this, infoProvider); - YamlQuickfixes quickfixes = new YamlQuickfixes(getQuickfixRegistry(), getTextDocumentService(), structureProvider); + VscodeHoverEngineAdapter hoverEngine = new VscodeHoverEngineAdapter(server, infoProvider); + YamlQuickfixes quickfixes = new YamlQuickfixes(server.getQuickfixRegistry(), server.getTextDocumentService(), structureProvider); YamlSchemaBasedReconcileEngine engine = new YamlSchemaBasedReconcileEngine(asts.getAstProvider(false), schema, quickfixes); engine.setTypeCollector(astTypeCache); documents.onDocumentSymbol(new TypeBasedYamlSymbolHandler(documents, astTypeCache, schema.getDefinitionTypes())); @@ -73,27 +91,27 @@ public class BoshLanguageServer extends SimpleLanguageServer { documents.onCompletion(completionEngine::getCompletions); documents.onCompletionResolve(completionEngine::resolveCompletion); documents.onHover(hoverEngine); - documents.onDefinition(new BoshDefintionFinder(this, schema, asts, astTypeCache)); + documents.onDefinition(new BoshDefintionFinder(server, schema, asts, astTypeCache)); - SimpleWorkspaceService workspace = getWorkspaceService(); + SimpleWorkspaceService workspace = server.getWorkspaceService(); workspace.onDidChangeConfiguraton((Settings settings) -> { cliConfig.handleConfigurationChange(settings); }); } private void validateOnDocumentChange(IReconcileEngine engine, TextDocument doc) { - validateWith(doc.getId(), engine); + server.validateWith(doc.getId(), engine); } public void enableSnippets(boolean enable) { if (enable) { - schema.f.setSnippetProvider(new SchemaBasedSnippetGenerator(schema.getTypeUtil(), this::createSnippetBuilder)); + schema.f.setSnippetProvider(new SchemaBasedSnippetGenerator(schema.getTypeUtil(), server::createSnippetBuilder)); } else { schema.f.setSnippetProvider(null); } } - public BoshLanguageServer setMaxCompletions(int maxCompletions) { + public BoshLanguageServerInitializer setMaxCompletions(int maxCompletions) { completionEngine.setMaxCompletions(maxCompletions); return this; } diff --git a/headless-services/bosh-language-server/src/main/resources/application.yml b/headless-services/bosh-language-server/src/main/resources/application.yml new file mode 100644 index 000000000..7cdfa7e8d --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/application.yml @@ -0,0 +1,2 @@ +languageserver: + extension-id: vscode-bosh \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java index b8f83c528..3363f62a6 100644 --- a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java @@ -11,7 +11,7 @@ package org.springframework.ide.vscode.bosh; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.springframework.ide.vscode.languageserver.testharness.Editor.DEDENTED_COMPLETION; @@ -29,6 +29,10 @@ import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticSeverity; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.ide.vscode.bosh.bootiful.BoshLanguageServerTest; import org.springframework.ide.vscode.bosh.mocks.MockCloudConfigProvider; import org.springframework.ide.vscode.bosh.models.BoshCommandReleasesProvider; import org.springframework.ide.vscode.bosh.models.BoshCommandStemcellsProvider; @@ -37,35 +41,32 @@ import org.springframework.ide.vscode.bosh.models.ReleaseData; import org.springframework.ide.vscode.bosh.models.ReleasesModel; import org.springframework.ide.vscode.bosh.models.StemcellData; import org.springframework.ide.vscode.bosh.models.StemcellsModel; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; import org.springframework.ide.vscode.commons.util.ExternalCommand; import org.springframework.ide.vscode.commons.util.text.LanguageId; import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems; import org.springframework.ide.vscode.languageserver.testharness.CodeAction; import org.springframework.ide.vscode.languageserver.testharness.Editor; import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; +import org.springframework.test.context.junit4.SpringRunner; import com.google.common.collect.ImmutableMultiset; import com.google.common.collect.ImmutableSet; +@RunWith(SpringRunner.class) +@BoshLanguageServerTest public class BoshEditorTest { - LanguageServerHarness harness; + @Autowired LanguageServerHarness harness; - private BoshCliConfig cliConfig = new BoshCliConfig(); - private MockCloudConfigProvider cloudConfigProvider = new MockCloudConfigProvider(cliConfig); - private DynamicModelProvider stemcellsProvider = mock(DynamicModelProvider.class); - private DynamicModelProvider releasesProvider = mock(DynamicModelProvider.class); + @Autowired BoshLanguageServerInitializer serverInitializer; + @Autowired BoshCliConfig cliConfig; + @Autowired MockCloudConfigProvider cloudConfigProvider; + + @MockBean DynamicModelProvider stemcellsProvider; + @MockBean DynamicModelProvider releasesProvider; @Before public void setup() throws Exception { - harness = new LanguageServerHarness(() -> { - return new BoshLanguageServer(cliConfig, cloudConfigProvider, - (dc) -> stemcellsProvider.getModel(dc), - (dc) -> releasesProvider.getModel(dc) - ) - .setMaxCompletions(100); - }, - LanguageId.BOSH_DEPLOYMENT - ); harness.intialize(null); System.setProperty("lsp.yaml.completions.errors.disable", "false"); } @@ -277,7 +278,7 @@ public class BoshEditorTest { } @Test public void releasesBlockCompletions() throws Exception { - harness.getServerWrapper().enableSnippets(false); + serverInitializer.enableSnippets(false); Editor editor = harness.newEditor( "releases:\n" + "- <*>" @@ -360,7 +361,7 @@ public class BoshEditorTest { } @Test public void instanceGroupsCompletions() throws Exception { - harness.getServerWrapper().enableSnippets(false); + serverInitializer.enableSnippets(false); Editor editor = harness.newEditor( "instance_groups:\n" + "- <*>" @@ -544,7 +545,7 @@ public class BoshEditorTest { } @Test public void updateBlockCompletions() throws Exception { - harness.getServerWrapper().enableSnippets(false); + serverInitializer.enableSnippets(false); Editor editor = harness.newEditor( "update:\n" + " <*>" @@ -584,7 +585,7 @@ public class BoshEditorTest { } @Test public void variablesBlockCompletions() throws Exception { - harness.getServerWrapper().enableSnippets(false); + serverInitializer.enableSnippets(false); Editor editor = harness.newEditor( "variables:\n" + "- <*>" @@ -991,7 +992,6 @@ public class BoshEditorTest { @Test public void contentAssistStemcellNameNoDirector() throws Exception { Editor editor; - stemcellsProvider = mock(DynamicModelProvider.class); when(stemcellsProvider.getModel(any())).thenThrow(new IOException("Couldn't connect to bosh")); editor = harness.newEditor( "stemcells:\n" + @@ -1008,7 +1008,6 @@ public class BoshEditorTest { @SuppressWarnings("unchecked") @Test public void contentAssistStemcellVersionNoDirector() throws Exception { Editor editor; - stemcellsProvider = mock(DynamicModelProvider.class); when(stemcellsProvider.getModel(any())).thenThrow(new IOException("Couldn't connect to bosh")); editor = harness.newEditor( "stemcells:\n" + @@ -1023,7 +1022,7 @@ public class BoshEditorTest { @Test public void contentAssistStemcellVersionFromDirector() throws Exception { Editor editor; - stemcellsProvider = provideStemcellsFrom( + provideStemcellsFrom( new StemcellData("ubuntu-agent", "123.4", "ubuntu"), new StemcellData("ubuntu-agent", "222.2", "ubuntu"), new StemcellData("centos-agent", "222.2", "centos"), @@ -1121,7 +1120,7 @@ public class BoshEditorTest { @Test public void reconcileStemcellVersionFromDirector() throws Exception { Editor editor; - stemcellsProvider = provideStemcellsFrom( + provideStemcellsFrom( new StemcellData("ubuntu-agent", "123.4", "ubuntu"), new StemcellData("ubuntu-agent", "222.2", "ubuntu"), new StemcellData("centos-agent", "222.2", "centos"), @@ -1150,8 +1149,8 @@ public class BoshEditorTest { ); } - private DynamicModelProvider provideStemcellsFrom(StemcellData... stemcellData) { - return new BoshCommandStemcellsProvider(cliConfig) { + private void provideStemcellsFrom(StemcellData... stemcellData) throws Exception { + BoshCommandStemcellsProvider stemcells = new BoshCommandStemcellsProvider(cliConfig) { @Override protected String executeCommand(ExternalCommand command) throws Exception { String rows = gson.toJson(stemcellData); @@ -1164,10 +1163,13 @@ public class BoshEditorTest { "}"; } }; + when(stemcellsProvider.getModel(any())).then(inv -> { + return stemcells.getModel(null); + }); } @Test public void contentAssistReleaseNameDef() throws Exception { - releasesProvider = provideReleasesFrom( + provideReleasesFrom( new ReleaseData("foo", "123.4"), new ReleaseData("foo", "222.2"), new ReleaseData("bar", "222.2"), @@ -1185,7 +1187,7 @@ public class BoshEditorTest { } @Test public void reconcileReleaseNameDef() throws Exception { - releasesProvider = provideReleasesFrom( + provideReleasesFrom( new ReleaseData("foo", "123.4"), new ReleaseData("foo", "222.2"), new ReleaseData("bar", "222.2"), @@ -1205,7 +1207,7 @@ public class BoshEditorTest { } @Test public void contentAssistReleaseVersion() throws Exception { - releasesProvider = provideReleasesFrom( + provideReleasesFrom( new ReleaseData("foo", "123.4"), new ReleaseData("foo", "222.2"), new ReleaseData("bar", "222.2"), @@ -1264,7 +1266,7 @@ public class BoshEditorTest { @Test public void reconcileReleaseVersion() throws Exception { Editor editor; - releasesProvider = provideReleasesFrom( + provideReleasesFrom( new ReleaseData("foo", "123.4"), new ReleaseData("foo", "222.2"), new ReleaseData("bar", "222.2"), @@ -1319,8 +1321,8 @@ public class BoshEditorTest { } - private DynamicModelProvider provideReleasesFrom(ReleaseData... stemcellData) { - return new BoshCommandReleasesProvider(cliConfig) { + private void provideReleasesFrom(ReleaseData... stemcellData) throws Exception { + BoshCommandReleasesProvider releases = new BoshCommandReleasesProvider(cliConfig) { @Override protected String executeCommand(ExternalCommand command) throws Exception { String rows = gson.toJson(stemcellData); @@ -1333,6 +1335,9 @@ public class BoshEditorTest { "}"; } }; + when(releasesProvider.getModel(any())).then(in -> { + return releases.getModel(null); + }); } @Test public void contentAssistVMtype() throws Exception { diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshLanguageServerTest.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshLanguageServerInitializerTest.java similarity index 66% rename from headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshLanguageServerTest.java rename to headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshLanguageServerInitializerTest.java index e5870fe86..57110a7a5 100644 --- a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshLanguageServerTest.java +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshLanguageServerInitializerTest.java @@ -20,24 +20,36 @@ import java.nio.file.Paths; import org.eclipse.lsp4j.InitializeResult; import org.eclipse.lsp4j.TextDocumentSyncKind; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.ide.vscode.bosh.bootiful.BoshLanguageServerTest; import org.springframework.ide.vscode.bosh.mocks.MockCloudConfigProvider; +import org.springframework.ide.vscode.bosh.models.CloudConfigModel; import org.springframework.ide.vscode.bosh.models.DynamicModelProvider; +import org.springframework.ide.vscode.bosh.models.ReleasesModel; +import org.springframework.ide.vscode.bosh.models.StemcellsModel; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; +import org.springframework.test.context.junit4.SpringRunner; -@SuppressWarnings("unchecked") -public class BoshLanguageServerTest { +@RunWith(SpringRunner.class) +@BoshLanguageServerTest +public class BoshLanguageServerInitializerTest { public static File getTestResource(String name) throws URISyntaxException { - return Paths.get(BoshLanguageServerTest.class.getResource(name).toURI()).toFile(); + return Paths.get(BoshLanguageServerInitializerTest.class.getResource(name).toURI()).toFile(); } - private BoshCliConfig cliConfig = new BoshCliConfig(); + @MockBean DynamicModelProvider cloudConfigProvider; + @MockBean DynamicModelProvider stemcellsProvider; + @MockBean DynamicModelProvider releasesProvider; + + @Autowired + LanguageServerHarness harness; @Test public void createAndInitializeServerWithWorkspace() throws Exception { - LanguageServerHarness harness = new LanguageServerHarness(() -> - new BoshLanguageServer(cliConfig, new MockCloudConfigProvider(cliConfig), mock(DynamicModelProvider.class), mock(DynamicModelProvider.class)) - ); File workspaceRoot = getTestResource("/workspace/"); assertExpectedInitResult(harness.intialize(workspaceRoot)); } @@ -45,9 +57,6 @@ public class BoshLanguageServerTest { @Test public void createAndInitializeServerWithoutWorkspace() throws Exception { File workspaceRoot = null; - LanguageServerHarness harness = new LanguageServerHarness(() -> - new BoshLanguageServer(cliConfig, new MockCloudConfigProvider(cliConfig), mock(DynamicModelProvider.class), mock(DynamicModelProvider.class)) - ); assertExpectedInitResult(harness.intialize(workspaceRoot)); } diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTest.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTest.java new file mode 100644 index 000000000..49d87d8f3 --- /dev/null +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTest.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.bosh.bootiful; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.ide.vscode.bosh.BoshLanguageServerBootApp; +import org.springframework.ide.vscode.languageserver.starter.LanguageServerAutoConf; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; + +@Retention(RetentionPolicy.RUNTIME) +@OverrideAutoConfiguration(enabled=false) +@ImportAutoConfiguration(classes=LanguageServerAutoConf.class) +@SpringBootTest(classes={ + BoshLanguageServerBootApp.class, + BoshLanguageServerTestConfiguration.class +}) +@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD) +public @interface BoshLanguageServerTest { +} diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTestConfiguration.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTestConfiguration.java new file mode 100644 index 000000000..c06b18303 --- /dev/null +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/bootiful/BoshLanguageServerTestConfiguration.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.bosh.bootiful; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.ide.vscode.bosh.BoshCliConfig; +import org.springframework.ide.vscode.bosh.mocks.MockCloudConfigProvider; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; +import org.springframework.ide.vscode.commons.util.text.LanguageId; +import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; + +@Configuration +public class BoshLanguageServerTestConfiguration { + + @Bean MockCloudConfigProvider cloudConfig(BoshCliConfig cliConfig) { + return new MockCloudConfigProvider(cliConfig); + } + + @Bean public LanguageServerHarness harness(SimpleLanguageServer server) throws Exception { + LanguageServerHarness harness = new LanguageServerHarness<>( + ()-> server, + LanguageId.BOSH_DEPLOYMENT + ); + return harness; + } +} \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/test/resources/application.properties b/headless-services/bosh-language-server/src/test/resources/application.properties new file mode 100644 index 000000000..b6b497cfb --- /dev/null +++ b/headless-services/bosh-language-server/src/test/resources/application.properties @@ -0,0 +1 @@ +spring.main.banner-mode=off \ No newline at end of file diff --git a/headless-services/commons/commons-java/pom.xml b/headless-services/commons/commons-java/pom.xml index b4dee535b..c0b40604a 100644 --- a/headless-services/commons/commons-java/pom.xml +++ b/headless-services/commons/commons-java/pom.xml @@ -12,8 +12,6 @@ ../pom.xml - - org.springframework.ide.vscode diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/ComposableLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/ComposableLanguageServer.java index d4a340129..480c29e1b 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/ComposableLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/ComposableLanguageServer.java @@ -10,8 +10,6 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.languageserver.composable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine; import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter; import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;