From a2e0f6881c543c4e39f296a61805dcfb940254c5 Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Tue, 14 Feb 2023 11:02:22 +0100 Subject: [PATCH] added archunit tests for no xbase/xtend/guava dep Signed-off-by: Christian Dietrich --- gradle/versions.gradle | 3 +- org.eclipse.lsp4j.debug/build.gradle | 1 + .../test/Lsp4jDebugArchitectureTest.java | 69 ++++++++++++++++ org.eclipse.lsp4j/build.gradle | 1 + .../lsp4j/test/Lsp4jArchitectureTest.java | 80 +++++++++++++++++++ 5 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 org.eclipse.lsp4j.debug/src/test/java/org/eclipse/lsp4j/debug/test/Lsp4jDebugArchitectureTest.java create mode 100644 org.eclipse.lsp4j/src/test/java/org/eclipse/lsp4j/test/Lsp4jArchitectureTest.java diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 76830d37..5cb72add 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -18,5 +18,6 @@ ext.versions = [ 'gson': '[2.9.1,2.11)', 'websocket_jakarta': '2.0.0', 'websocket': '1.0', - 'junit': '4.13.2' + 'junit': '4.13.2', + 'archunit': '1.0.1' ] diff --git a/org.eclipse.lsp4j.debug/build.gradle b/org.eclipse.lsp4j.debug/build.gradle index 49d7344a..561561a6 100644 --- a/org.eclipse.lsp4j.debug/build.gradle +++ b/org.eclipse.lsp4j.debug/build.gradle @@ -19,6 +19,7 @@ dependencies { testImplementation "junit:junit:$versions.junit" testImplementation "org.eclipse.xtend:org.eclipse.xtend.lib:$versions.xtend_lib" testImplementation project(":org.eclipse.lsp4j.generator") + testImplementation "com.tngtech.archunit:archunit:$versions.archunit" } jar { diff --git a/org.eclipse.lsp4j.debug/src/test/java/org/eclipse/lsp4j/debug/test/Lsp4jDebugArchitectureTest.java b/org.eclipse.lsp4j.debug/src/test/java/org/eclipse/lsp4j/debug/test/Lsp4jDebugArchitectureTest.java new file mode 100644 index 00000000..f5e17d30 --- /dev/null +++ b/org.eclipse.lsp4j.debug/src/test/java/org/eclipse/lsp4j/debug/test/Lsp4jDebugArchitectureTest.java @@ -0,0 +1,69 @@ +package org.eclipse.lsp4j.debug.test; + +import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; +import static com.tngtech.archunit.base.DescribedPredicate.not; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.lang.ArchRule; + +/** + * Test to make sure we don't depend to xbase.lib, xtend.lib and guava at + * runtime + * + * @author Christian Dietrich + */ +public class Lsp4jDebugArchitectureTest { + + private static JavaClasses importedClasses; + + @BeforeClass + public static void scan() { + importedClasses = new ClassFileImporter().importPackages("org.eclipse.lsp4j.debug"); + } + + @AfterClass + public static void cleanup() { + importedClasses = null; + } + + @Test + public void testNoDependenyToXbaseLib() { + assertNoDependencyToPackage("org.eclipse.xtext.."); + } + + @Test + public void testNoDependenyToXtendLib() { + assertNoDependencyToPackage("org.eclipse.xtend.."); + } + + @Test + public void testNoDependenyToXtend2Lib() { + assertNoDependencyToPackage("org.eclipse.xtend2.."); + } + + @Test + public void testNoDependenyToGuava() { + assertNoDependencyToPackage("com.google.common.."); + } + + @Test + public void testNoDependenyToGenerator() { + assertNoDependencyToPackage("org.eclipse.lsp4j.generator.."); + } + + private void assertNoDependencyToPackage(String badPackage) { + ArchRule rule = noClasses() + .that(resideInAPackage("org.eclipse.lsp4j.debug..") + .and(not(resideInAPackage("org.eclipse.lsp4j.generator..")))) + .and(not(resideInAPackage("org.eclipse.lsp4j.debug.test.."))).should().dependOnClassesThat() + .resideInAPackage(badPackage); + rule.check(importedClasses); + } + +} diff --git a/org.eclipse.lsp4j/build.gradle b/org.eclipse.lsp4j/build.gradle index 6b6aca6d..fadb0481 100644 --- a/org.eclipse.lsp4j/build.gradle +++ b/org.eclipse.lsp4j/build.gradle @@ -21,6 +21,7 @@ dependencies { api project(":org.eclipse.lsp4j.jsonrpc") testImplementation "junit:junit:$versions.junit" testImplementation project(":org.eclipse.lsp4j.generator") + testImplementation "com.tngtech.archunit:archunit:$versions.archunit" } jar { diff --git a/org.eclipse.lsp4j/src/test/java/org/eclipse/lsp4j/test/Lsp4jArchitectureTest.java b/org.eclipse.lsp4j/src/test/java/org/eclipse/lsp4j/test/Lsp4jArchitectureTest.java new file mode 100644 index 00000000..18257562 --- /dev/null +++ b/org.eclipse.lsp4j/src/test/java/org/eclipse/lsp4j/test/Lsp4jArchitectureTest.java @@ -0,0 +1,80 @@ +/****************************************************************************** + * Copyright (c) 2023 itemis AG and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, + * or the Eclipse Distribution License v. 1.0 which is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause + ******************************************************************************/ +package org.eclipse.lsp4j.test; + +import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage; +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; +import static com.tngtech.archunit.base.DescribedPredicate.not; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.lang.ArchRule; + +/** + * Test to make sure we don't depend to xbase.lib, xtend.lib and guava at + * runtime + * + * @author Christian Dietrich + */ +public class Lsp4jArchitectureTest { + + private static JavaClasses importedClasses; + + @BeforeClass + public static void scan() { + importedClasses = new ClassFileImporter().importPackages("org.eclipse.lsp4j"); + } + + @AfterClass + public static void cleanup() { + importedClasses = null; + } + + @Test + public void testNoDependenyToXbaseLib() { + assertNoDependencyToPackage("org.eclipse.xtext.."); + } + + @Test + public void testNoDependenyToXtendLib() { + assertNoDependencyToPackage("org.eclipse.xtend.."); + } + + @Test + public void testNoDependenyToXtend2Lib() { + assertNoDependencyToPackage("org.eclipse.xtend2.."); + } + + @Test + public void testNoDependenyToGuava() { + assertNoDependencyToPackage("com.google.common.."); + } + + @Test + public void testNoDependenyToGenerator() { + assertNoDependencyToPackage("org.eclipse.lsp4j.generator.."); + } + + private void assertNoDependencyToPackage(String badPackage) { + ArchRule rule = noClasses() + .that(resideInAPackage("org.eclipse.lsp4j..") + .and(not(resideInAPackage("org.eclipse.lsp4j.generator..")))) + .and(not(resideInAPackage("org.eclipse.lsp4j.test.."))).should().dependOnClassesThat() + .resideInAPackage(badPackage); + rule.check(importedClasses); + } + +}