From a762d1fb02361118eee9dd81ff309731f46a5ce4 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 10 Jan 2024 14:48:01 +0100 Subject: [PATCH] GH-1163: added test case and regrouped xml-related tests into the same package --- .../test/XMLBeansHyperlinkTest.java} | 7 +- .../boot/xml/test/XMLContentAssistTest.java | 136 ++++++++++++++++++ .../test/XMLSpelExpressionValidationTest.java | 2 +- 3 files changed, 141 insertions(+), 4 deletions(-) rename headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/{java/utils/test/XmlBeansHyperlinkTest.java => xml/test/XMLBeansHyperlinkTest.java} (98%) create mode 100644 headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLContentAssistTest.java rename headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/{java/value => xml}/test/XMLSpelExpressionValidationTest.java (99%) diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/XmlBeansHyperlinkTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLBeansHyperlinkTest.java similarity index 98% rename from headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/XmlBeansHyperlinkTest.java rename to headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLBeansHyperlinkTest.java index 2f2399033..3b83192b4 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/XmlBeansHyperlinkTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLBeansHyperlinkTest.java @@ -8,7 +8,7 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.boot.java.utils.test; +package org.springframework.ide.vscode.boot.xml.test; import java.nio.file.Path; import java.nio.file.Paths; @@ -34,6 +34,7 @@ import org.springframework.context.annotation.Import; import org.springframework.ide.vscode.boot.app.BootLanguageServerBootApp; import org.springframework.ide.vscode.boot.app.SpringSymbolIndex; import org.springframework.ide.vscode.boot.bootiful.XmlBeansTestConf; +import org.springframework.ide.vscode.boot.java.utils.test.MockProjectObserver; import org.springframework.ide.vscode.boot.test.DefinitionLinkAsserts; import org.springframework.ide.vscode.commons.languageserver.util.Settings; import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject; @@ -60,10 +61,10 @@ import ch.qos.logback.classic.Logger; BootLanguageServerBootApp.class }) @DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD) -public class XmlBeansHyperlinkTest { +public class XMLBeansHyperlinkTest { - private static final org.slf4j.Logger log = LoggerFactory.getLogger(XmlBeansHyperlinkTest.class); + private static final org.slf4j.Logger log = LoggerFactory.getLogger(XMLBeansHyperlinkTest.class); private static final int DEFAULT_INDEX_WAIT_TIME = 5; @Autowired private BootLanguageServerHarness harness; diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLContentAssistTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLContentAssistTest.java new file mode 100644 index 000000000..ffa78e78d --- /dev/null +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLContentAssistTest.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2024 Broadcom, 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 + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.xml.test; + +import static org.junit.Assert.assertEquals; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +import org.eclipse.lsp4j.CompletionItem; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.ide.vscode.boot.app.BootLanguageServerBootApp; +import org.springframework.ide.vscode.boot.app.SpringSymbolIndex; +import org.springframework.ide.vscode.boot.bootiful.XmlBeansTestConf; +import org.springframework.ide.vscode.boot.java.utils.test.MockProjectObserver; +import org.springframework.ide.vscode.commons.languageserver.util.Settings; +import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject; +import org.springframework.ide.vscode.commons.util.UriUtil; +import org.springframework.ide.vscode.commons.util.text.LanguageId; +import org.springframework.ide.vscode.languageserver.starter.LanguageServerAutoConf; +import org.springframework.ide.vscode.languageserver.testharness.Editor; +import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness; +import org.springframework.ide.vscode.project.harness.ProjectsHarness; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; + +import com.google.gson.Gson; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; + +/** + * @author Martin Lippert + */ +@OverrideAutoConfiguration(enabled=false) +@Import({LanguageServerAutoConf.class, XmlBeansTestConf.class}) +@SpringBootTest(classes={ + BootLanguageServerBootApp.class +}) +@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD) +public class XMLContentAssistTest { + + + private static final org.slf4j.Logger log = LoggerFactory.getLogger(XMLContentAssistTest.class); + + @Autowired private BootLanguageServerHarness harness; + @Autowired private SpringSymbolIndex indexer; + @Autowired private MockProjectObserver projectObserver; + + private ProjectsHarness projects = ProjectsHarness.INSTANCE; + private MavenJavaProject project; + + private Level originalLevel; + + @BeforeEach + public void setup() throws Exception { + final Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + originalLevel = logger.getLevel(); + logger.setLevel(Level.INFO); + + log.info("-------------------------------------------------"); + harness.intialize(null); + + Map supportXML = new HashMap<>(); + supportXML.put("on", true); + supportXML.put("hyperlinks", true); + supportXML.put("content-assist", true); + supportXML.put("scan-folders", "/src/main/"); + Map bootJavaObj = new HashMap<>(); + bootJavaObj.put("support-spring-xml-config", supportXML); + Map settings = new HashMap<>(); + settings.put("boot-java", bootJavaObj); + + harness.changeConfiguration(new Settings(new Gson().toJsonTree(settings))); + + project = projects.mavenProject("test-xml-hyperlinks"); + + harness.useProject(project); + + projectObserver.doWithListeners(l -> l.created(project)); + + CompletableFuture initProject = indexer.waitOperation(); + initProject.get(1500, TimeUnit.SECONDS); + } + + @AfterEach + public void tearDown() { + log.debug("-------------------------------------------------"); + final Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + logger.setLevel(originalLevel); + } + + @Test + void testEmptyXMLFileCompletions() throws Exception { + Path xmlFilePath = Paths.get(project.getLocationUri()).resolve("beans.xml"); + Editor editor = harness.newEditor(LanguageId.XML, "", + UriUtil.toUri(xmlFilePath.toFile()).toString() + ); + + List completions = editor.getCompletions(); + assertEquals(1, completions.size()); + assertEquals("Spring XML config file skeleton", completions.get(0).getLabel()); + } + + @Test + void testNoSkeletonSnippetForNonEmptyXMLFile() throws Exception { + Path xmlFilePath = Paths.get(project.getLocationUri()).resolve("beans.xml"); + Editor editor = harness.newEditor(LanguageId.XML, "\\n", + UriUtil.toUri(xmlFilePath.toFile()).toString() + ); + + List completions = editor.getCompletions(); + assertEquals(0, completions.size()); + } + +} diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/XMLSpelExpressionValidationTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLSpelExpressionValidationTest.java similarity index 99% rename from headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/XMLSpelExpressionValidationTest.java rename to headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLSpelExpressionValidationTest.java index 9f9b65021..6ae27c699 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/value/test/XMLSpelExpressionValidationTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLSpelExpressionValidationTest.java @@ -8,7 +8,7 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.boot.java.value.test; +package org.springframework.ide.vscode.boot.xml.test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull;