From 5bfc9593ef113abcf3eebdd2233d65511932cba9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 19 Jan 2025 14:06:05 +0100 Subject: [PATCH 01/18] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B0=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлен параметр конфигурации для расчета списка тестов силами BSL Language Server. По умолчанию ищутся все методы с аннотацией "Тест". Механизм включен по умолчанию. Добавлен параметр конфигурации для задания списка каталогов, в которых располагаются тесты. --- .../AbstractRunTestsCodeLensSupplier.java | 30 ++++++++++++++++++- .../RunAllTestsCodeLensSupplier.java | 12 ++++++-- .../codelenses/RunTestCodeLensSupplier.java | 14 +++++++-- .../testrunner/TestRunnerAdapter.java | 25 ++++++++++++++-- .../codelens/TestRunnerAdapterOptions.java | 12 ++++++++ .../languageserver/context/ServerContext.java | 2 ++ 6 files changed, 87 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index c96fc5d9690..541dfc0fb08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -21,18 +21,29 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.configuration.codelens.TestRunnerAdapterOptions; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.FileType; import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import com.github._1c_syntax.utils.Absolute; +import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.ClientInfo; import org.eclipse.lsp4j.InitializeParams; import org.springframework.context.event.EventListener; +import java.net.URI; +import java.nio.file.Path; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +@RequiredArgsConstructor public abstract class AbstractRunTestsCodeLensSupplier implements CodeLensSupplier { + protected final LanguageServerConfiguration configuration; + private boolean clientIsSupported; /** @@ -57,6 +68,23 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { */ @Override public boolean isApplicable(DocumentContext documentContext) { - return documentContext.getFileType() == FileType.OS && clientIsSupported; + var configurationRoot = Optional.ofNullable(documentContext.getServerContext().getConfigurationRoot()) + .map(Path::toString) + .orElse(""); + var uri = documentContext.getUri(); + + var testSources = configuration.getCodeLensOptions().getTestRunnerAdapterOptions().getTestSources() + .stream() + .map(testDir -> Path.of(configurationRoot, testDir)) + .map(path -> Absolute.path(path).toUri()) + .collect(Collectors.toSet()); + + return documentContext.getFileType() == FileType.OS + && testSources.stream().anyMatch(testSource -> isInside(uri, testSource)) + && clientIsSupported; + } + + private static boolean isInside(URI childURI, URI parentURI) { + return !parentURI.relativize(childURI).isAbsolute(); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 12e0a2b5d00..71321672d88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -41,7 +41,6 @@ * Поставщик линзы для запуска всех тестов в текущем файле. */ @Component -@RequiredArgsConstructor @Slf4j public class RunAllTestsCodeLensSupplier extends AbstractRunTestsCodeLensSupplier { @@ -49,9 +48,18 @@ public class RunAllTestsCodeLensSupplier private static final String COMMAND_ID = "language-1c-bsl.languageServer.runAllTests"; private final TestRunnerAdapter testRunnerAdapter; - private final LanguageServerConfiguration configuration; private final Resources resources; + public RunAllTestsCodeLensSupplier( + LanguageServerConfiguration configuration, + TestRunnerAdapter testRunnerAdapter, + Resources resources + ) { + super(configuration); + this.testRunnerAdapter = testRunnerAdapter; + this.resources = resources; + } + /** * {@inheritDoc} */ diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index ab17cce09a8..c433f825f99 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -49,7 +49,6 @@ * Поставщик линз для запуска теста по конкретному тестовому методу. */ @Component -@RequiredArgsConstructor @Slf4j public class RunTestCodeLensSupplier extends AbstractRunTestsCodeLensSupplier { @@ -57,9 +56,18 @@ public class RunTestCodeLensSupplier private static final String COMMAND_ID = "language-1c-bsl.languageServer.runTest"; private final TestRunnerAdapter testRunnerAdapter; - private final LanguageServerConfiguration configuration; private final Resources resources; + public RunTestCodeLensSupplier( + LanguageServerConfiguration configuration, + TestRunnerAdapter testRunnerAdapter, + Resources resources + ) { + super(configuration); + this.testRunnerAdapter = testRunnerAdapter; + this.resources = resources; + } + /** * {@inheritDoc} */ @@ -77,7 +85,7 @@ public List getCodeLenses(DocumentContext documentContext) { .map(symbolTree::getMethodSymbol) .flatMap(Optional::stream) .map(methodSymbol -> toCodeLens(methodSymbol, documentContext)) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index aa4a22b5deb..3fe86abfbed 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -23,6 +23,8 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.Annotation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.exec.CommandLine; @@ -46,7 +48,6 @@ import java.util.WeakHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; /** * Расчетчик списка тестов в документе. @@ -77,6 +78,16 @@ public List getTestIds(DocumentContext documentContext) { private List computeTestIds(DocumentContext documentContext) { var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); + if (options.isGetTestsByTestRunner()) { + return computeTestIdsByTestRunner(documentContext); + } + + return computeTestIdsByLanguageServer(documentContext); + } + + private List computeTestIdsByTestRunner(DocumentContext documentContext) { + var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); + var executable = SystemUtils.IS_OS_WINDOWS ? options.getExecutableWin() : options.getExecutable(); var path = Paths.get(documentContext.getUri()).toString(); var arguments = String.format(options.getGetTestsArguments(), path); @@ -123,7 +134,17 @@ private List computeTestIds(DocumentContext documentContext) { .map(getTestsRegex::matcher) .filter(Matcher::matches) .map(matcher -> matcher.group(1)) - .collect(Collectors.toList()); + .toList(); } + private List computeTestIdsByLanguageServer(DocumentContext documentContext) { + return documentContext.getSymbolTree() + .getMethods() + .stream() + .filter(methodSymbol -> methodSymbol.getAnnotations().stream() + .map(Annotation::getName) + .anyMatch("Тест"::equalsIgnoreCase)) + .map(MethodSymbol::getName) + .toList(); + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index d9374af6130..b125bd0fc08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -28,6 +28,9 @@ import lombok.NoArgsConstructor; import org.apache.commons.lang3.SystemUtils; +import java.util.List; +import java.util.Set; + /** * Параметры запускателя тестового фреймворка. */ @@ -37,6 +40,11 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class TestRunnerAdapterOptions { + /** + * Каталоги с исходными файлами тестов. + */ + private Set testSources = Set.of("tests"); + /** * Имя исполняемого файла тестового фреймворка (linux и macOS). */ @@ -45,6 +53,10 @@ public class TestRunnerAdapterOptions { * Имя исполняемого файла тестового фреймворка (windows). */ private String executableWin = "1testrunner.bat"; + /** + * Флаг, указывающий на необходимость получения списка тестов через исполняемый файл тестового фреймворка. + */ + private boolean getTestsByTestRunner; /** * Аргументы для получения списка тестов. */ diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index 0910a3c454a..1473e115340 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -32,6 +32,7 @@ import com.github._1c_syntax.utils.Absolute; import com.github._1c_syntax.utils.Lazy; import edu.umd.cs.findbugs.annotations.Nullable; +import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -67,6 +68,7 @@ public class ServerContext { private final Lazy configurationMetadata = new Lazy<>(this::computeConfigurationMetadata); @Nullable @Setter + @Getter private Path configurationRoot; private final Map mdoRefs = Collections.synchronizedMap(new HashMap<>()); private final Map> documentsByMDORef From 5df4864f851101d08282318588cd115251b2093f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 19 Jan 2025 16:36:03 +0100 Subject: [PATCH 02/18] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=20spring=20cache.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BA=D1=8D=D1=88=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B7=D1=83?= =?UTF-8?q?=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D0=BE=D0=B2=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=BB?= =?UTF-8?q?=D0=B8=D0=BD=D0=B7=20=D0=BD=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 1 + .../AbstractRunTestsCodeLensSupplier.java | 29 +++++++++++++----- .../RunAllTestsCodeLensSupplier.java | 1 - .../codelenses/RunTestCodeLensSupplier.java | 2 -- .../infrastructure/CacheConfiguration.java | 30 +++++++++++++++++++ 5 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java diff --git a/build.gradle.kts b/build.gradle.kts index 2eac90c0765..851be1ca3df 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,6 +74,7 @@ dependencies { // spring api("org.springframework.boot:spring-boot-starter") api("org.springframework.boot:spring-boot-starter-websocket") + api("org.springframework.boot:spring-boot-starter-cache") api("info.picocli:picocli-spring-boot-starter:4.7.6") // lsp4j core diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 541dfc0fb08..1f72dbdba09 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -22,7 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.codelenses; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; -import com.github._1c_syntax.bsl.languageserver.configuration.codelens.TestRunnerAdapterOptions; +import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.FileType; import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; @@ -30,6 +30,9 @@ import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.ClientInfo; import org.eclipse.lsp4j.InitializeParams; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.context.event.EventListener; import java.net.URI; @@ -39,6 +42,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor +@CacheConfig(cacheNames = "testIds") public abstract class AbstractRunTestsCodeLensSupplier implements CodeLensSupplier { @@ -54,6 +58,7 @@ public abstract class AbstractRunTestsCodeLensSupplier * @param event Событие */ @EventListener + @CacheEvict(allEntries = true) public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { var clientName = Optional.of(event) .map(LanguageServerInitializeRequestReceivedEvent::getParams) @@ -63,25 +68,35 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { clientIsSupported = "Visual Studio Code".equals(clientName); } + @EventListener + @CacheEvict(allEntries = true) + public void handleLanguageServerConfigurationChange(LanguageServerConfigurationChangedEvent event) { + } + /** * {@inheritDoc} */ @Override + @Cacheable public boolean isApplicable(DocumentContext documentContext) { + var uri = documentContext.getUri(); + var testSources = getTestSources(documentContext); + + return documentContext.getFileType() == FileType.OS + && testSources.stream().anyMatch(testSource -> isInside(uri, testSource)) + && clientIsSupported; + } + + public Set getTestSources(DocumentContext documentContext) { var configurationRoot = Optional.ofNullable(documentContext.getServerContext().getConfigurationRoot()) .map(Path::toString) .orElse(""); - var uri = documentContext.getUri(); - var testSources = configuration.getCodeLensOptions().getTestRunnerAdapterOptions().getTestSources() + return configuration.getCodeLensOptions().getTestRunnerAdapterOptions().getTestSources() .stream() .map(testDir -> Path.of(configurationRoot, testDir)) .map(path -> Absolute.path(path).toUri()) .collect(Collectors.toSet()); - - return documentContext.getFileType() == FileType.OS - && testSources.stream().anyMatch(testSource -> isInside(uri, testSource)) - && clientIsSupported; } private static boolean isInside(URI childURI, URI parentURI) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 71321672d88..47545cc54b7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -26,7 +26,6 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.utils.Resources; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.Command; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index c433f825f99..de8833cac96 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -28,7 +28,6 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; import lombok.ToString; import lombok.Value; import lombok.extern.slf4j.Slf4j; @@ -43,7 +42,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; /** * Поставщик линз для запуска теста по конкретному тестовому методу. diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java new file mode 100644 index 00000000000..360cdd8b65f --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2025 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.infrastructure; + +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableCaching +public class CacheConfiguration { +} From db12e51b7370e2859ba8c18d774b39c77c33c07d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 19 Jan 2025 20:22:08 +0100 Subject: [PATCH 03/18] =?UTF-8?q?=D0=9A=D1=8D=D1=88=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20testSources=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D0=B5=20=D1=81=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractRunTestsCodeLensSupplier.java | 17 +++++++++++------ .../codelenses/RunAllTestsCodeLensSupplier.java | 8 ++++++++ .../codelenses/RunTestCodeLensSupplier.java | 8 ++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 1f72dbdba09..9ee157c4e87 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -27,9 +27,12 @@ import com.github._1c_syntax.bsl.languageserver.context.FileType; import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; import com.github._1c_syntax.utils.Absolute; +import jakarta.annotation.Nullable; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.ClientInfo; import org.eclipse.lsp4j.InitializeParams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -42,7 +45,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor -@CacheConfig(cacheNames = "testIds") +@CacheConfig(cacheNames = "testSource") public abstract class AbstractRunTestsCodeLensSupplier implements CodeLensSupplier { @@ -77,24 +80,26 @@ public void handleLanguageServerConfigurationChange(LanguageServerConfigurationC * {@inheritDoc} */ @Override - @Cacheable public boolean isApplicable(DocumentContext documentContext) { var uri = documentContext.getUri(); - var testSources = getTestSources(documentContext); + var testSources = getSelf().getTestSources(documentContext.getServerContext().getConfigurationRoot()); return documentContext.getFileType() == FileType.OS && testSources.stream().anyMatch(testSource -> isInside(uri, testSource)) && clientIsSupported; } - public Set getTestSources(DocumentContext documentContext) { - var configurationRoot = Optional.ofNullable(documentContext.getServerContext().getConfigurationRoot()) + protected abstract AbstractRunTestsCodeLensSupplier getSelf(); + + @Cacheable + public Set getTestSources(@Nullable Path configurationRoot) { + var configurationRootString = Optional.ofNullable(configurationRoot) .map(Path::toString) .orElse(""); return configuration.getCodeLensOptions().getTestRunnerAdapterOptions().getTestSources() .stream() - .map(testDir -> Path.of(configurationRoot, testDir)) + .map(testDir -> Path.of(configurationRootString, testDir)) .map(path -> Absolute.path(path).toUri()) .collect(Collectors.toSet()); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 47545cc54b7..aab5da71983 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -26,9 +26,12 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.Command; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import java.nio.file.Paths; @@ -49,6 +52,11 @@ public class RunAllTestsCodeLensSupplier private final TestRunnerAdapter testRunnerAdapter; private final Resources resources; + @Autowired + @Lazy + @Getter + private RunAllTestsCodeLensSupplier self; + public RunAllTestsCodeLensSupplier( LanguageServerConfiguration configuration, TestRunnerAdapter testRunnerAdapter, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index de8833cac96..ab723a1a3d3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -28,11 +28,14 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.ToString; import lombok.Value; import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.Command; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import java.beans.ConstructorProperties; @@ -56,6 +59,11 @@ public class RunTestCodeLensSupplier private final TestRunnerAdapter testRunnerAdapter; private final Resources resources; + @Autowired + @Lazy + @Getter + private RunTestCodeLensSupplier self; + public RunTestCodeLensSupplier( LanguageServerConfiguration configuration, TestRunnerAdapter testRunnerAdapter, From c05d94c445d5767d389b08c7b0be76c43aa85715 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 19 Jan 2025 21:42:53 +0100 Subject: [PATCH 04/18] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=20=D1=81?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=BF=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BA=D1=8D=D1=88.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BA=D1=8D=D1=88=D0=B0=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testrunner/TestRunnerAdapter.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index 3fe86abfbed..b37da556fd8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.codelenses.testrunner; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.Annotation; @@ -34,7 +35,10 @@ import org.apache.commons.exec.PumpStreamHandler; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.commons.lang3.SystemUtils; -import org.apache.commons.lang3.tuple.Pair; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import java.io.IOException; @@ -44,8 +48,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -56,26 +58,26 @@ @Component @RequiredArgsConstructor @Slf4j +@CacheConfig(cacheNames = "testIds") public class TestRunnerAdapter { private static final Pattern NEW_LINE_PATTERN = Pattern.compile("\r?\n"); - private static final Map, List> CACHE = new WeakHashMap<>(); private final LanguageServerConfiguration configuration; + @EventListener + @CacheEvict(allEntries = true) + public void handleEvent(LanguageServerConfigurationChangedEvent event) { + } + /** * Получить идентификаторы тестов, содержащихся в файле. * * @param documentContext Контекст документа с тестами. * @return Список идентификаторов тестов. */ + @Cacheable public List getTestIds(DocumentContext documentContext) { - var cacheKey = Pair.of(documentContext, documentContext.getVersion()); - - return CACHE.computeIfAbsent(cacheKey, pair -> computeTestIds(documentContext)); - } - - private List computeTestIds(DocumentContext documentContext) { var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); if (options.isGetTestsByTestRunner()) { @@ -137,7 +139,7 @@ private List computeTestIdsByTestRunner(DocumentContext documentContext) .toList(); } - private List computeTestIdsByLanguageServer(DocumentContext documentContext) { + private static List computeTestIdsByLanguageServer(DocumentContext documentContext) { return documentContext.getSymbolTree() .getMethods() .stream() From e1d0cb62327eeed31a3f6355c1253b5c647bcc2b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 20 Jan 2025 19:21:52 +0100 Subject: [PATCH 05/18] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20isApplicable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractRunTestsCodeLensSupplierTest.java | 116 ++++++++++++++++++ .../RunAllTestsCodeLensSupplierTest.java | 16 +-- .../RunTestCodeLensSupplierTest.java | 16 +-- .../AbstractRunTestCodeLensSupplier.os | 7 ++ .../tests/AbstractRunTestCodeLensSupplier.os | 7 ++ 5 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplierTest.java create mode 100644 src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os create mode 100644 src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplierTest.java new file mode 100644 index 00000000000..bef79329e0f --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplierTest.java @@ -0,0 +1,116 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2025 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses; + +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.AbstractServerContextAwareTest; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.CodeLens; +import org.eclipse.lsp4j.InitializeParams; +import org.eclipse.lsp4j.services.LanguageServer; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; + +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class AbstractRunTestsCodeLensSupplierTest extends AbstractServerContextAwareTest { + + @Autowired + private AbstractRunTestsCodeLensSupplier supplier; + + @Autowired + private ApplicationEventPublisher eventPublisher; + + @ParameterizedTest + @CsvSource({ + "./src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os, unknown, false", + "./src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os, unknown, false", + "./src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os, Visual Studio Code, false", + "./src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os, Visual Studio Code, true" + }) + void testIsApplicable(String filePath, String clientName, boolean expected) { + // given + var documentContext = TestUtils.getDocumentContextFromFile(filePath); + initializeServer("./src/test/resources/codelenses", clientName); + + // when + var result = supplier.isApplicable(documentContext); + + // then + assertThat(result).isEqualTo(expected); + } + + private void initializeServer(String path, String clientName) { + initServerContext(path); + + var initializeParams = new InitializeParams(); + initializeParams.setClientInfo( + new ClientInfo(clientName, "1.0.0") + ); + + var event = new LanguageServerInitializeRequestReceivedEvent( + mock(LanguageServer.class), + initializeParams + ); + eventPublisher.publishEvent(event); + } + + @TestConfiguration + static class TestConfig { + @Bean + public AbstractRunTestsCodeLensSupplier supplier(LanguageServerConfiguration configuration) { + return new AbstractRunTestsCodeLensSupplier<>(configuration) { + + @Override + public List getCodeLenses(DocumentContext documentContext) { + return Collections.emptyList(); + } + + @Override + public Class getCodeLensDataClass() { + return DefaultCodeLensData.class; + } + + @Override + protected AbstractRunTestsCodeLensSupplier getSelf() { + return this; + } + }; + } + } + +} \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java index 805075b271b..44afd6bd973 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java @@ -34,8 +34,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import java.util.List; @@ -53,7 +53,7 @@ class RunAllTestsCodeLensSupplierTest { @Autowired private ApplicationEventPublisher eventPublisher; - @SpyBean + @MockitoSpyBean private TestRunnerAdapter testRunnerAdapter; private DocumentContext documentContext; @@ -64,18 +64,6 @@ void init() { documentContext = TestUtils.getDocumentContextFromFile(filePath); } - @Test - void noLensesIfClientIsNotSupported() { - // given - initializeServer("Unknown client"); - - // when - var codeLenses = supplier.getCodeLenses(documentContext); - - // then - assertThat(codeLenses).isEmpty(); - } - @Test void testDryRun() { // given diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java index 4c0a56500f2..160ddef03a5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -34,8 +34,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import java.util.List; @@ -53,7 +53,7 @@ class RunTestCodeLensSupplierTest { @Autowired private ApplicationEventPublisher eventPublisher; - @SpyBean + @MockitoSpyBean private TestRunnerAdapter testRunnerAdapter; private DocumentContext documentContext; @@ -64,18 +64,6 @@ void init() { documentContext = TestUtils.getDocumentContextFromFile(filePath); } - @Test - void noLensesIfClientIsNotSupported() { - // given - initializeServer("Unknown client"); - - // when - var codeLenses = supplier.getCodeLenses(documentContext); - - // then - assertThat(codeLenses).isEmpty(); - } - @Test void testDryRun() { // given diff --git a/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os b/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os new file mode 100644 index 00000000000..efc31ca2715 --- /dev/null +++ b/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os @@ -0,0 +1,7 @@ +&Тест +Процедура Тест1() Экспорт +КонецПроцедуры + + +Процедура НеТест1 Экспорт +КонецПроцедуры \ No newline at end of file diff --git a/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os b/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os new file mode 100644 index 00000000000..efc31ca2715 --- /dev/null +++ b/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os @@ -0,0 +1,7 @@ +&Тест +Процедура Тест1() Экспорт +КонецПроцедуры + + +Процедура НеТест1 Экспорт +КонецПроцедуры \ No newline at end of file From 0c51300e19b2a235d3da91ac2b06804ced53029d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 20 Jan 2025 20:16:32 +0100 Subject: [PATCH 06/18] cache-names --- .../codelenses/AbstractRunTestsCodeLensSupplier.java | 2 +- src/main/resources/application.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 9ee157c4e87..9f2c74e6fe5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -45,7 +45,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor -@CacheConfig(cacheNames = "testSource") +@CacheConfig(cacheNames = "testSources") public abstract class AbstractRunTestsCodeLensSupplier implements CodeLensSupplier { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8c52d83e32d..c9941c18934 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,7 @@ server.port=8025 spring.main.banner-mode=off spring.main.log-startup-info=false +spring.cache.cache-names=testIds,testSources logging.level.org.springframework.boot.autoconfigure.logging=INFO logging.level.org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler=warn logging.level.com.zaxxer.hikari=warn From 393ae5fa38b66f1ba7656904e8762430697288f5 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 20 Jan 2025 20:18:51 +0100 Subject: [PATCH 07/18] json-schema --- .../languageserver/configuration/schema.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index f117154cae3..bc07d5ab27a 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -675,6 +675,17 @@ "type": "object", "title": "Test runner configuration to use for 'Run test' code lenses.", "properties": { + "testSources": { + "$id": "#/properties/codeLens/testRunner/testSources", + "type": "array", + "title": "List of directories with test sources.", + "items": { + "type": "string" + }, + "default": [ + "tests" + ] + }, "executable": { "$id": "#/properties/codeLens/testRunner/executable", "type": "string", @@ -687,6 +698,12 @@ "title": "Path to test runner executable on Windows systems.", "default": "1testrunner.bat" }, + "getTestsByTestRunner": { + "$id": "#/properties/codeLens/testRunner/getTestsByTestRunner", + "type": "boolean", + "title": "Use testrunner to get test method names. By default, use internal parser to find methods annotated with &Тест.", + "default": false + }, "getTestsArguments": { "$id": "#/properties/codeLens/testRunner/getTestsArguments", "type": "string", From 11377b27264cc5a93e27fc43c38fc623f212e510 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 20 Jan 2025 20:27:36 +0100 Subject: [PATCH 08/18] javadoc --- .../AbstractRunTestsCodeLensSupplier.java | 21 +++++++++++++++++++ .../RunAllTestsCodeLensSupplier.java | 1 + .../codelenses/RunTestCodeLensSupplier.java | 1 + .../testrunner/TestRunnerAdapter.java | 7 +++++++ .../infrastructure/CacheConfiguration.java | 3 +++ 5 files changed, 33 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 9f2c74e6fe5..3ffefd9bb83 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -71,9 +71,17 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { clientIsSupported = "Visual Studio Code".equals(clientName); } + /** + * Обработчик события {@link LanguageServerConfigurationChangedEvent}. + *

+ * Сбрасывает кеш при изменении конфигурации. + * + * @param event Событие + */ @EventListener @CacheEvict(allEntries = true) public void handleLanguageServerConfigurationChange(LanguageServerConfigurationChangedEvent event) { + // No-op. Служит для сброса кеша при изменении конфигурации } /** @@ -89,8 +97,21 @@ public boolean isApplicable(DocumentContext documentContext) { && clientIsSupported; } + /** + * Получить self-injected экземпляр себя для работы механизмов кэширования. + * + * @return Управляемый Spring'ом экземпляр себя + */ protected abstract AbstractRunTestsCodeLensSupplier getSelf(); + /** + * Получить список каталогов с тестами с учетом корня рабочей области. + *

+ * public для работы @Cachable. + * + * @param configurationRoot Корень конфигурации + * @return Список исходных файлов тестов + */ @Cacheable public Set getTestSources(@Nullable Path configurationRoot) { var configurationRootString = Optional.ofNullable(configurationRoot) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index aab5da71983..4ddf257847b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -52,6 +52,7 @@ public class RunAllTestsCodeLensSupplier private final TestRunnerAdapter testRunnerAdapter; private final Resources resources; + // Self-injection для работы кэша в базовом классе. @Autowired @Lazy @Getter diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index ab723a1a3d3..e084375c203 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -59,6 +59,7 @@ public class RunTestCodeLensSupplier private final TestRunnerAdapter testRunnerAdapter; private final Resources resources; + // Self-injection для работы кэша в базовом классе. @Autowired @Lazy @Getter diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index b37da556fd8..b71af6b7dbf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -65,6 +65,13 @@ public class TestRunnerAdapter { private final LanguageServerConfiguration configuration; + /** + * Обработчик события {@link LanguageServerConfigurationChangedEvent}. + *

+ * Очищает кэш при изменении конфигурации. + * + * @param event Событие + */ @EventListener @CacheEvict(allEntries = true) public void handleEvent(LanguageServerConfigurationChangedEvent event) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java index 360cdd8b65f..fe4340dae3d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/CacheConfiguration.java @@ -24,6 +24,9 @@ import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; +/** + * Spring-конфигурация кэширования. + */ @Configuration @EnableCaching public class CacheConfiguration { From 30ff5fea7bd25bd00c73e2c5bbecc3e16f403462 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 20 Jan 2025 21:42:24 +0100 Subject: [PATCH 09/18] Apply suggestions --- .../codelenses/AbstractRunTestsCodeLensSupplier.java | 6 +++--- .../codelenses/testrunner/TestRunnerAdapter.java | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 3ffefd9bb83..983efcea4ec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -92,9 +92,9 @@ public boolean isApplicable(DocumentContext documentContext) { var uri = documentContext.getUri(); var testSources = getSelf().getTestSources(documentContext.getServerContext().getConfigurationRoot()); - return documentContext.getFileType() == FileType.OS - && testSources.stream().anyMatch(testSource -> isInside(uri, testSource)) - && clientIsSupported; + return clientIsSupported + && documentContext.getFileType() == FileType.OS + && testSources.stream().anyMatch(testSource -> isInside(uri, testSource)); } /** diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index b71af6b7dbf..c36839acb88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -75,6 +75,7 @@ public class TestRunnerAdapter { @EventListener @CacheEvict(allEntries = true) public void handleEvent(LanguageServerConfigurationChangedEvent event) { + // No-op. Служит для сброса кеша при изменении конфигурации } /** From 35a9dd5c9c320396769000a13db40497dfd1f445 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 21 Jan 2025 08:09:26 +0100 Subject: [PATCH 10/18] Fix QF --- .../resources/codelenses/AbstractRunTestCodeLensSupplier.os | 3 +-- .../codelenses/tests/AbstractRunTestCodeLensSupplier.os | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os b/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os index efc31ca2715..36cbb010e60 100644 --- a/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os +++ b/src/test/resources/codelenses/AbstractRunTestCodeLensSupplier.os @@ -2,6 +2,5 @@ Процедура Тест1() Экспорт КонецПроцедуры - -Процедура НеТест1 Экспорт +Процедура НеТест1() Экспорт КонецПроцедуры \ No newline at end of file diff --git a/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os b/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os index efc31ca2715..36cbb010e60 100644 --- a/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os +++ b/src/test/resources/codelenses/tests/AbstractRunTestCodeLensSupplier.os @@ -2,6 +2,5 @@ Процедура Тест1() Экспорт КонецПроцедуры - -Процедура НеТест1 Экспорт +Процедура НеТест1() Экспорт КонецПроцедуры \ No newline at end of file From 45bd658ffdc2e911c34f1c96f2f91cb044612dbc Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 21 Jan 2025 08:21:11 +0100 Subject: [PATCH 11/18] =?UTF-8?q?=D0=9D=D0=B0=D0=B1=D0=BE=D1=80=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D1=8B=D1=85=20=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B2=D1=8B=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=D0=B5=D0=BD=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testrunner/TestRunnerAdapter.java | 5 +- .../codelens/TestRunnerAdapterOptions.java | 23 ++++++- .../databind/AnnotationsDeserializer.java | 62 +++++++++++++++++++ .../languageserver/configuration/schema.json | 12 ++++ 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index c36839acb88..1e5d2b6c592 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -147,13 +147,14 @@ private List computeTestIdsByTestRunner(DocumentContext documentContext) .toList(); } - private static List computeTestIdsByLanguageServer(DocumentContext documentContext) { + private List computeTestIdsByLanguageServer(DocumentContext documentContext) { + var annotations = configuration.getCodeLensOptions().getTestRunnerAdapterOptions().getAnnotations(); return documentContext.getSymbolTree() .getMethods() .stream() .filter(methodSymbol -> methodSymbol.getAnnotations().stream() .map(Annotation::getName) - .anyMatch("Тест"::equalsIgnoreCase)) + .anyMatch(annotations::contains)) .map(MethodSymbol::getName) .toList(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index b125bd0fc08..abb275f6567 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -23,13 +23,16 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.github._1c_syntax.bsl.languageserver.configuration.databind.AnnotationsDeserializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.lang3.SystemUtils; -import java.util.List; +import java.util.Collections; import java.util.Set; +import java.util.TreeSet; /** * Параметры запускателя тестового фреймворка. @@ -40,11 +43,21 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class TestRunnerAdapterOptions { + public static final Set DEFAULT_ANNOTATIONS = getDefaultAnnotations(); + /** * Каталоги с исходными файлами тестов. */ private Set testSources = Set.of("tests"); + /** + * Имена аннотаций, маркирующих тесты. + *

+ * Используется при получении списка тестов средствами сервера. + */ + @JsonDeserialize(using = AnnotationsDeserializer.class) + private Set annotations = DEFAULT_ANNOTATIONS; + /** * Имя исполняемого файла тестового фреймворка (linux и macOS). */ @@ -82,4 +95,12 @@ public class TestRunnerAdapterOptions { public String getExecutableForCurrentOS() { return SystemUtils.IS_OS_WINDOWS ? executableWin : executable; } + + private static Set getDefaultAnnotations() { + Set annotations = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + annotations.add("Test"); + annotations.add("Тест"); + + return Collections.unmodifiableSet(annotations); + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java new file mode 100644 index 00000000000..2325f3bbfa1 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java @@ -0,0 +1,62 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2025 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.configuration.databind; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.Set; +import java.util.TreeSet; + +import static com.github._1c_syntax.bsl.languageserver.configuration.codelens.TestRunnerAdapterOptions.DEFAULT_ANNOTATIONS; + +/** + * Служебный класс-десериализатор для регистронезависимого списка имен аннотаций. + */ +@Slf4j +public class AnnotationsDeserializer extends JsonDeserializer> { + + @Override + public Set deserialize( + JsonParser p, + DeserializationContext context + ) throws IOException { + + JsonNode annotations = p.getCodec().readTree(p); + + if (annotations == null) { + return DEFAULT_ANNOTATIONS; + } + + Set annotationsSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + var objectMapper = (ObjectMapper) p.getCodec(); + objectMapper.readerForUpdating(annotationsSet).readValue(p); + + return annotationsSet; + } + +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index bc07d5ab27a..c2f60a1fafb 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -686,6 +686,18 @@ "tests" ] }, + "annotations": { + "$id": "#/properties/codeLens/testRunner/annotations", + "type": "array", + "title": "List of annotations to find test methods.", + "items": { + "type": "string" + }, + "default": [ + "Тест", + "Test" + ] + }, "executable": { "$id": "#/properties/codeLens/testRunner/executable", "type": "string", From c0cdba941c86b87f6606761d72228437cb95bb67 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 21 Jan 2025 08:45:13 +0100 Subject: [PATCH 12/18] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20TestRunnerAdapter=20=D0=B8=20=D1=80=D0=B0=D1=81=D1=87=D0=B5?= =?UTF-8?q?=D1=82=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D1=81=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B0=D0=BC=D0=B8=20bsl=20ls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testrunner/TestRunnerAdapterTest.java | 33 +++++++++++++++++++ .../testrunner/TestRunnerAdapter.os | 6 ++++ 2 files changed, 39 insertions(+) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java create mode 100644 src/test/resources/codelenses/testrunner/TestRunnerAdapter.os diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java new file mode 100644 index 00000000000..b6a54811d2d --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java @@ -0,0 +1,33 @@ +package com.github._1c_syntax.bsl.languageserver.codelenses.testrunner; + +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +class TestRunnerAdapterTest { + + @Autowired + private TestRunnerAdapter testRunnerAdapter; + + @Autowired + private LanguageServerConfiguration configuration; + + @Test + void whenComputeTestsByLanguageServer_thenContainsTests() { + // given + var documentContext = TestUtils.getDocumentContextFromFile("src/test/resources/codelenses/testrunner/TestRunnerAdapter.os"); + configuration.getCodeLensOptions().getTestRunnerAdapterOptions().setGetTestsByTestRunner(false); + + // when + var testIds = testRunnerAdapter.getTestIds(documentContext); + + // then + assertThat(testIds).hasSize(1); + assertThat(testIds.get(0)).isEqualTo("Тест1"); + } +} \ No newline at end of file diff --git a/src/test/resources/codelenses/testrunner/TestRunnerAdapter.os b/src/test/resources/codelenses/testrunner/TestRunnerAdapter.os new file mode 100644 index 00000000000..4c60847796f --- /dev/null +++ b/src/test/resources/codelenses/testrunner/TestRunnerAdapter.os @@ -0,0 +1,6 @@ +&Тест +Процедура Тест1() Экспорт +КонецПроцедуры + +Процедура НеТест1() Экспорт +КонецПроцедуры From c515628e6ea4379c5f1e299dd6bc345a0a4eec85 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 21 Jan 2025 08:49:53 +0100 Subject: [PATCH 13/18] =?UTF-8?q?=D0=9B=D0=B8=D1=86=D0=B5=D0=BD=D0=B7?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testrunner/TestRunnerAdapterTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java index b6a54811d2d..1d8a06003aa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2025 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.codelenses.testrunner; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; From 054d27aeb27a3d65aec61dfba21a634bd188222d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 9 Feb 2025 17:00:13 +0100 Subject: [PATCH 14/18] =?UTF-8?q?=D0=9F=D0=BE=D0=B8=D1=81=D0=BA=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=20=D0=B1=D1=81=D0=BB=20=D0=BB=D1=81=20=D0=B2=D1=8B=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE?= =?UTF-8?q?=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/codelens/TestRunnerAdapterOptions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index abb275f6567..2b346f8ae71 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -69,7 +69,7 @@ public class TestRunnerAdapterOptions { /** * Флаг, указывающий на необходимость получения списка тестов через исполняемый файл тестового фреймворка. */ - private boolean getTestsByTestRunner; + private boolean getTestsByTestRunner = false; /** * Аргументы для получения списка тестов. */ From 74d4c4654447eb8b84b12c4ad5dd1bce02857d8d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 9 Feb 2025 17:00:31 +0100 Subject: [PATCH 15/18] Fix qf --- .../codelenses/testrunner/TestRunnerAdapterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java index 1d8a06003aa..1e6a1187381 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java @@ -49,6 +49,6 @@ void whenComputeTestsByLanguageServer_thenContainsTests() { // then assertThat(testIds).hasSize(1); - assertThat(testIds.get(0)).isEqualTo("Тест1"); + assertThat(testIds.getFirst()).isEqualTo("Тест1"); } } \ No newline at end of file From 8bfa4bd4cde625f1e7e53df97207ce7567e14b4e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 9 Feb 2025 17:00:50 +0100 Subject: [PATCH 16/18] =?UTF-8?q?=D0=9F=D0=B0=D0=B4=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20=D1=87?= =?UTF-8?q?=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20=D1=80=D0=B0=D0=BD=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/LanguageServerConfigurationTest.java | 4 ++++ src/test/resources/.bsl-language-server.json | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java index c5326e6adcb..5eda351131c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java @@ -109,6 +109,10 @@ void createFromFile() { assertThat(configuration.isUseDevSite()).isTrue(); assertThat(configuration.getDiagnosticsOptions().isOrdinaryAppSupport()).isFalse(); + var annotations = configuration.getCodeLensOptions().getTestRunnerAdapterOptions().getAnnotations(); + assertThat(annotations) + .hasSize(2) + .contains("Test", "Test2"); } @Test diff --git a/src/test/resources/.bsl-language-server.json b/src/test/resources/.bsl-language-server.json index 2e404350461..04de080aa5c 100644 --- a/src/test/resources/.bsl-language-server.json +++ b/src/test/resources/.bsl-language-server.json @@ -4,6 +4,12 @@ "parameters": { "cognitiveComplexity": true, "cyclomaticComplexity": true + }, + "testRunner": { + "annotations": [ + "Test", + "Test2" + ] } }, "diagnostics": { From 9492c133cad96d056b7ba1353f3b70cbdc7f87a8 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 9 Feb 2025 17:11:50 +0100 Subject: [PATCH 17/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3,=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=BE=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9=20Fleet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codelenses/testrunner/TestRunnerAdapterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java index 1e6a1187381..1d8a06003aa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapterTest.java @@ -49,6 +49,6 @@ void whenComputeTestsByLanguageServer_thenContainsTests() { // then assertThat(testIds).hasSize(1); - assertThat(testIds.getFirst()).isEqualTo("Тест1"); + assertThat(testIds.get(0)).isEqualTo("Тест1"); } } \ No newline at end of file From 143865c6cd606f6bb7727e48266bcdb7d372e740 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 9 Feb 2025 17:21:45 +0100 Subject: [PATCH 18/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=B5=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/databind/AnnotationsDeserializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java index 2325f3bbfa1..2788f534829 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/AnnotationsDeserializer.java @@ -54,7 +54,7 @@ public Set deserialize( Set annotationsSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); var objectMapper = (ObjectMapper) p.getCodec(); - objectMapper.readerForUpdating(annotationsSet).readValue(p); + objectMapper.readerForUpdating(annotationsSet).readValue(annotations); return annotationsSet; }