From ba21265b4b37ed1925fb766e6bda0d1484681297 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Fri, 5 Oct 2018 16:09:19 -0700 Subject: [PATCH] Bootified CF Editor tests --- .../commons/commons-java/pom.xml | 5 -- .../util/SimpleTextDocumentService.java | 2 +- ...oconf.java => LanguageServerAutoConf.java} | 12 +--- .../starter/LanguageServerRunnerAutoConf.java | 31 ++++++++++ .../main/resources/META-INF/spring.factories | 3 +- headless-services/commons/pom.xml | 2 +- .../manifest-yaml-language-server/pom.xml | 5 +- .../yaml/DefaultCloudfoundryConfig.java | 22 +++++++ ...ManifestYamlLanguageServerInitializer.java | 8 ++- .../src/main/resources/application.yml | 3 + .../manifest/yaml/ManifestYamlEditorTest.java | 61 +++++++++++++++---- .../ManifestLanguageServerTest.java | 30 +++++++++ 12 files changed, 146 insertions(+), 38 deletions(-) rename headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/{LanguageServerAutoconf.java => LanguageServerAutoConf.java} (76%) create mode 100644 headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerRunnerAutoConf.java create mode 100644 headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/DefaultCloudfoundryConfig.java create mode 100644 headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/annotations/ManifestLanguageServerTest.java diff --git a/headless-services/commons/commons-java/pom.xml b/headless-services/commons/commons-java/pom.xml index 68bb95131..b4dee535b 100644 --- a/headless-services/commons/commons-java/pom.xml +++ b/headless-services/commons/commons-java/pom.xml @@ -42,10 +42,5 @@ reactor-core ${reactor-version} - - org.json - json - 20160810 - \ No newline at end of file diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index e814373f9..8f38442d6 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -178,7 +178,7 @@ public class SimpleTextDocumentService implements TextDocumentService { if (url!=null) { String text = params.getTextDocument().getText(); TrackedDocument td = createDocument(url, languageId, version, text).open(); - Log.info("Opened "+td.getOpenCount()+" times: "+url); + Log.debug("Opened "+td.getOpenCount()+" times: "+url); TextDocument doc = td.getDocument(); TextDocumentContentChangeEvent change = new TextDocumentContentChangeEvent() { @Override diff --git a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java similarity index 76% rename from headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java rename to headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java index e56acd0b7..cc1b42fef 100644 --- a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java +++ b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java @@ -10,27 +10,17 @@ *******************************************************************************/ package org.springframework.ide.vscode.languageserver.starter; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.ide.vscode.commons.languageserver.LanguageServerRunner; import org.springframework.ide.vscode.commons.languageserver.config.LanguageServerInitializer; import org.springframework.ide.vscode.commons.languageserver.config.LanguageServerProperties; import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; @Configuration @EnableConfigurationProperties(LanguageServerProperties.class) -public class LanguageServerAutoconf { - - @Bean public LanguageServerRunner serverApp( - @Qualifier("serverName") String serverName, - LanguageServerProperties properties, - SimpleLanguageServer languageServerFactory - ) { - return new LanguageServerRunner(serverName, properties, languageServerFactory); - } +public class LanguageServerAutoConf { @ConditionalOnMissingBean @Bean public SimpleLanguageServer languageServer(LanguageServerProperties props, LanguageServerInitializer initializer) throws Exception { diff --git a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerRunnerAutoConf.java b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerRunnerAutoConf.java new file mode 100644 index 000000000..8188d5af0 --- /dev/null +++ b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerRunnerAutoConf.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * 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.languageserver.starter; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.ide.vscode.commons.languageserver.LanguageServerRunner; +import org.springframework.ide.vscode.commons.languageserver.config.LanguageServerProperties; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; + +@Configuration +public class LanguageServerRunnerAutoConf { + + @Bean public LanguageServerRunner serverApp( + @Qualifier("serverName") String serverName, + LanguageServerProperties properties, + SimpleLanguageServer languageServerFactory + ) { + return new LanguageServerRunner(serverName, properties, languageServerFactory); + } + +} diff --git a/headless-services/commons/language-server-starter/src/main/resources/META-INF/spring.factories b/headless-services/commons/language-server-starter/src/main/resources/META-INF/spring.factories index f53335bf4..0c8e65669 100644 --- a/headless-services/commons/language-server-starter/src/main/resources/META-INF/spring.factories +++ b/headless-services/commons/language-server-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.ide.vscode.languageserver.starter.LanguageServerAutoconf \ No newline at end of file +org.springframework.ide.vscode.languageserver.starter.LanguageServerAutoConf,\ +org.springframework.ide.vscode.languageserver.starter.LanguageServerRunnerAutoConf \ No newline at end of file diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml index ef8c8e2cf..377e29abf 100644 --- a/headless-services/commons/pom.xml +++ b/headless-services/commons/pom.xml @@ -80,7 +80,7 @@ UTF-8 1.17 - 4.11 + 4.12 3.5.2 1.7.25 19.0 diff --git a/headless-services/manifest-yaml-language-server/pom.xml b/headless-services/manifest-yaml-language-server/pom.xml index a8d1c6c34..528ed8cfa 100644 --- a/headless-services/manifest-yaml-language-server/pom.xml +++ b/headless-services/manifest-yaml-language-server/pom.xml @@ -71,9 +71,8 @@ - org.mockito - mockito-all - ${mockito-version} + org.springframework.boot + spring-boot-starter-test test diff --git a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/DefaultCloudfoundryConfig.java b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/DefaultCloudfoundryConfig.java new file mode 100644 index 000000000..0aede5f13 --- /dev/null +++ b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/DefaultCloudfoundryConfig.java @@ -0,0 +1,22 @@ +package org.springframework.ide.vscode.manifest.yaml; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.ide.vscode.commons.cloudfoundry.client.CloudFoundryClientFactory; +import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CfCliParamsProvider; +import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.ClientParamsProvider; +import org.springframework.ide.vscode.commons.cloudfoundry.client.v2.DefaultCloudFoundryClientFactoryV2; + +@Configuration +@ConditionalOnMissingClass("org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness") +public class DefaultCloudfoundryConfig { + + @Bean public CloudFoundryClientFactory cloudfoundryClientFactory() { + return DefaultCloudFoundryClientFactoryV2.INSTANCE; + } + + @Bean public ClientParamsProvider cloudfoundryClientParamsProvider() { + return CfCliParamsProvider.getInstance(); + } +} diff --git a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServerInitializer.java b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServerInitializer.java index 8d9538d33..d75fe7319 100644 --- a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServerInitializer.java +++ b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServerInitializer.java @@ -130,16 +130,19 @@ public class ManifestYamlLanguageServerInitializer implements LanguageServerInit applyCfLoginParameterSettings(info); } }); - } private final ImmutableSet FALLBACK_YML_IDS = ImmutableSet.of(LanguageId.of("yml"), LanguageId.of("yaml")); - @Autowired + /** + * Deprecated: should use the @Autowired constructor instead to inject CF client. + */ + @Deprecated public ManifestYamlLanguageServerInitializer() { this(DefaultCloudFoundryClientFactoryV2.INSTANCE, CfCliParamsProvider.getInstance()); } + @Autowired public ManifestYamlLanguageServerInitializer(CloudFoundryClientFactory cfClientFactory, ClientParamsProvider defaultClientParamsProvider) { this.cfClientFactory = cfClientFactory; this.defaultClientParamsProvider = defaultClientParamsProvider; @@ -219,5 +222,4 @@ public class ManifestYamlLanguageServerInitializer implements LanguageServerInit } return Collections.emptyList(); } - } diff --git a/headless-services/manifest-yaml-language-server/src/main/resources/application.yml b/headless-services/manifest-yaml-language-server/src/main/resources/application.yml index 0feee175b..4f1ba5414 100644 --- a/headless-services/manifest-yaml-language-server/src/main/resources/application.yml +++ b/headless-services/manifest-yaml-language-server/src/main/resources/application.yml @@ -1,2 +1,5 @@ +#logging: +# level: +# org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer: debug languageserver: extension-id: vscode-manifest-yaml \ No newline at end of file diff --git a/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlEditorTest.java b/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlEditorTest.java index 5607ef14e..1c8bb328d 100644 --- a/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlEditorTest.java +++ b/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlEditorTest.java @@ -12,7 +12,7 @@ package org.springframework.ide.vscode.manifest.yaml; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; @@ -24,38 +24,73 @@ import java.util.List; import org.eclipse.lsp4j.CompletionItem; 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.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; import org.springframework.ide.vscode.commons.cloudfoundry.client.CFBuildpack; import org.springframework.ide.vscode.commons.cloudfoundry.client.CFDomain; import org.springframework.ide.vscode.commons.cloudfoundry.client.CFServiceInstance; import org.springframework.ide.vscode.commons.cloudfoundry.client.CFStack; import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientRequests; +import org.springframework.ide.vscode.commons.cloudfoundry.client.CloudFoundryClientFactory; +import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.ClientParamsProvider; import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.NoTargetsException; +import org.springframework.ide.vscode.commons.languageserver.config.LanguageServerInitializer; import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; import org.springframework.ide.vscode.commons.util.Unicodes; import org.springframework.ide.vscode.commons.util.text.LanguageId; 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.ide.vscode.manifest.yaml.annotations.ManifestLanguageServerTest; +import org.springframework.test.context.junit4.SpringRunner; import com.google.common.collect.ImmutableList; +@RunWith(SpringRunner.class) +@ManifestLanguageServerTest public class ManifestYamlEditorTest { - LanguageServerHarness harness; - MockCloudfoundry cloudfoundry = new MockCloudfoundry(); + @Autowired + MockCloudfoundry cloudfoundry; - @Before public void setup() throws Exception { - SimpleLanguageServer server = new SimpleLanguageServer("vscode-manifest-yaml"); - new ManifestYamlLanguageServerInitializer(cloudfoundry.factory, cloudfoundry.defaultParamsProvider).initialize(server); - harness = new LanguageServerHarness<>( - ()-> server, - LanguageId.CF_MANIFEST - ); - harness.intialize(null); - System.setProperty("lsp.yaml.completions.errors.disable", "false"); + @Autowired + SimpleLanguageServer server; + + @Autowired + LanguageServerInitializer serverInit; + + @Autowired + LanguageServerHarness harness; + + + @TestConfiguration + public static class MockCloudfoundryConfiguration { + + @Bean public MockCloudfoundry cloudfoundry() { + return new MockCloudfoundry(); + } + + @Bean public CloudFoundryClientFactory cloudfoundryClientFactory(MockCloudfoundry cf) { + return cf.factory; + } + + @Bean public ClientParamsProvider cloudfoundryParams(MockCloudfoundry cf) { + return cf.defaultParamsProvider; + } + + @Bean public LanguageServerHarness harness(SimpleLanguageServer server) throws Exception { + LanguageServerHarness harness = new LanguageServerHarness<>( + ()-> server, + LanguageId.CF_MANIFEST + ); + harness.intialize(null); + System.setProperty("lsp.yaml.completions.errors.disable", "false"); + return harness; + } } @Test public void testReconcileCatchesParseError() throws Exception { diff --git a/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/annotations/ManifestLanguageServerTest.java b/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/annotations/ManifestLanguageServerTest.java new file mode 100644 index 000000000..591d36e51 --- /dev/null +++ b/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/annotations/ManifestLanguageServerTest.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * 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.manifest.yaml.annotations; + +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.languageserver.starter.LanguageServerAutoConf; +import org.springframework.ide.vscode.manifest.yaml.ManifestYamlLanguageServerBootApp; +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=ManifestYamlLanguageServerBootApp.class) +@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD) +public @interface ManifestLanguageServerTest { +}