From c6aa4a2b98091bd8ac1902b8c7522a912a9283ef Mon Sep 17 00:00:00 2001 From: nsingh Date: Mon, 16 Oct 2017 16:13:01 -0700 Subject: [PATCH] Add basic harness for testing running boot apps Used mockito to mock list of running apps. --- .../boot-java-language-server/pom.xml | 6 + .../test/RequestMappingLiveHoverTest.java | 46 ++++++++ .../harness/MockRunningAppProvider.java | 108 ++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingLiveHoverTest.java create mode 100644 headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/MockRunningAppProvider.java diff --git a/headless-services/boot-java-language-server/pom.xml b/headless-services/boot-java-language-server/pom.xml index 6b5b5e5db..d1c813b6c 100644 --- a/headless-services/boot-java-language-server/pom.xml +++ b/headless-services/boot-java-language-server/pom.xml @@ -67,6 +67,12 @@ commons-boot-app-cli ${dependencies.version} + + org.mockito + mockito-all + ${mockito-version} + test + diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingLiveHoverTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingLiveHoverTest.java new file mode 100644 index 000000000..a2a3c02ad --- /dev/null +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingLiveHoverTest.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2017 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.boot.java.requestmapping.test; + +import org.junit.Before; +import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; +import org.springframework.ide.vscode.commons.languageserver.java.CompositeJavaProjectFinder; +import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; +import org.springframework.ide.vscode.project.harness.MockRunningAppProvider; +import org.springframework.ide.vscode.project.harness.PropertyIndexHarness; + + +public class RequestMappingLiveHoverTest { + + private CompositeJavaProjectFinder projectManager; + private LanguageServerHarness harness; + private PropertyIndexHarness indexHarness; + private MockRunningAppProvider mockAppProvider; + + @Before + public void setup() throws Exception { + + projectManager = new CompositeJavaProjectFinder(); + mockAppProvider = new MockRunningAppProvider(); + indexHarness = new PropertyIndexHarness(); + harness = new LanguageServerHarness(() -> { + BootJavaLanguageServer server = new BootJavaLanguageServer(projectManager, indexHarness.getIndexProvider(), mockAppProvider.provider); + return server; + }) { + @Override + protected String getFileExtension() { + return ".java"; + } + }; + } + + +} diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/MockRunningAppProvider.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/MockRunningAppProvider.java new file mode 100644 index 000000000..1b9d25175 --- /dev/null +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/project/harness/MockRunningAppProvider.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (c) 2017 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.project.harness; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Collection; + +import org.mockito.Mockito; +import org.springframework.ide.vscode.boot.java.BootJavaLanguageServer; +import org.springframework.ide.vscode.boot.java.handlers.RunningAppProvider; +import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp; +import org.springframework.ide.vscode.commons.util.ExceptionUtil; + +public class MockRunningAppProvider { + + public final RunningAppProvider provider = mock(RunningAppProvider.class); + public final Collection mockedApps = new ArrayList<>(); + + public MockRunningAppProvider() { + try { + when(provider.getAllRunningSpringApps()).thenReturn(mockedApps); + } catch (Exception e) { + throw ExceptionUtil.unchecked(e); + } + } + + /** + * Reset the mocks. Use this if the default's programmed into the mocks don't + * suite your test case. + *

+ * Note: you may also choose to call {@link Mockito}.mock directly if you do not + * want to reset all of the mocks. + */ + public void reset() throws Exception { + mockedApps.clear(); + Mockito.reset(provider); + } + + public MockAppBuilder builder() { + return new MockAppBuilder(this); + } + + public static class MockAppBuilder { + public final SpringBootApp app = mock(SpringBootApp.class); + private MockRunningAppProvider runningAppProvider; + + public MockAppBuilder(MockRunningAppProvider runningAppProvider) { + this.runningAppProvider = runningAppProvider; + } + + public MockAppBuilder enviroment(String env) throws Exception { + when(app.getEnvironment()).thenReturn(env); + return this; + } + + public MockAppBuilder beans(String beans) throws Exception { + when(app.getBeans()).thenReturn(beans); + return this; + } + + public MockAppBuilder processId(String processId) { + when(app.getProcessID()).thenReturn(processId); + return this; + } + + public MockAppBuilder processName(String name) { + when(app.getProcessName()).thenReturn(name); + return this; + } + + public MockAppBuilder port(String port) throws Exception { + when(app.getPort()).thenReturn(port); + return this; + } + + public MockAppBuilder isSpringBootApp(boolean isBoot) throws Exception { + when(app.isSpringBootApp()).thenReturn(isBoot); + return this; + } + + public MockAppBuilder containsLanguageServerProcessPropery(boolean hasProperty) { + when(app.containsSystemProperty(BootJavaLanguageServer.LANGUAGE_SERVER_PROCESS_PROPERTY)) + .thenReturn(hasProperty); + return this; + } + + public MockAppBuilder getRequestMappings(String mappings) throws Exception { + when(app.getRequestMappings()).thenReturn(mappings); + return this; + } + + public void build() { + runningAppProvider.mockedApps.add(app); + } + + } +}