diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index b39fadd10..85564600b 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -49,6 +49,10 @@ Other versions, such as intermediate releases, are intended solely for testing p
A default implementation is given with _org.eclipse.syson.sysml.helper.ImplicitSpecializationSwitch_.
This new object offers a way to register immutable `LibraryPackage`.
Any `Namespace` stored in those libraries are now cached for quick access.
+- https://github.com/eclipse-syson/syson/issues/1355[#1355] [tests] Add coding rules tests on all modules.
+As a consequence, some coding rules violations have been fixed.
+The `org.eclipse.syson.services.grammars` package in `syson-direct-edit-grammar` has been renamed into `org.eclipse.syson.direct.edit.grammars`.
+`AbtractItemUsageBorderNodeDescriptionProvider` has been renamed to `AbstractItemUsageBorderNodeDescriptionProvider`.
=== Dependency update
@@ -77,6 +81,7 @@ Consumers may override this by providing an implementation of `org.eclipse.syson
- https://github.com/eclipse-syson/syson/issues/1497[#1497] [database] Update the PostgreSQL version used in the docker image (used for tests purposes) to 15.
- https://github.com/eclipse-syson/syson/issues/1502[#1502] [libraries] Update standard libraries to SysMLv2 2025-07 specification.
- https://github.com/eclipse-syson/syson/issues/1432[#1432] [metamodel] Add implicit `Subclassification` or `Subsetting` when using semantic `MetadataUsage`.
+- https://github.com/eclipse-syson/syson/issues/1355[#1355] [tests] Add coding rules tests on all modules.
=== New features
diff --git a/backend/application/syson-application-configuration/pom.xml b/backend/application/syson-application-configuration/pom.xml
index 206aece8d..aa260d377 100644
--- a/backend/application/syson-application-configuration/pom.xml
+++ b/backend/application/syson-application-configuration/pom.xml
@@ -91,6 +91,7 @@
syson-siriusweb-customnodes-metamodel-edit
2025.8.5
+
org.springframework.boot
spring-boot-starter-test
@@ -101,6 +102,12 @@
junit-jupiter
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
diff --git a/backend/application/syson-application-configuration/src/test/java/org/eclipse/syson/application/configuration/ArchitectureConstants.java b/backend/application/syson-application-configuration/src/test/java/org/eclipse/syson/application/configuration/ArchitectureConstants.java
new file mode 100644
index 000000000..fe57664f1
--- /dev/null
+++ b/backend/application/syson-application-configuration/src/test/java/org/eclipse/syson/application/configuration/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.application.configuration;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_APPLICATION_CONFIGURATION_ROOT_PACKAGE = "org.eclipse.syson.application.configuration..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_APPLICATION_CONFIGURATION_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/application/syson-application-configuration/src/test/java/org/eclipse/syson/application/configuration/CodingRulesTests.java b/backend/application/syson-application-configuration/src/test/java/org/eclipse/syson/application/configuration/CodingRulesTests.java
new file mode 100644
index 000000000..642e91144
--- /dev/null
+++ b/backend/application/syson-application-configuration/src/test/java/org/eclipse/syson/application/configuration/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.application.configuration;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_APPLICATION_CONFIGURATION_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/application/syson-sysml-export/pom.xml b/backend/application/syson-sysml-export/pom.xml
index 57cf2fa1b..fdd1eeedb 100644
--- a/backend/application/syson-sysml-export/pom.xml
+++ b/backend/application/syson-sysml-export/pom.xml
@@ -71,6 +71,7 @@
syson-sysml-metamodel
2025.8.5
+
org.springframework.boot
spring-boot-starter-test
@@ -81,6 +82,12 @@
junit-jupiter
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
org.eclipse.syson
diff --git a/backend/application/syson-sysml-export/src/test/java/org/eclipse/syson/sysml/export/ArchitectureConstants.java b/backend/application/syson-sysml-export/src/test/java/org/eclipse/syson/sysml/export/ArchitectureConstants.java
new file mode 100644
index 000000000..ec6ae80b3
--- /dev/null
+++ b/backend/application/syson-sysml-export/src/test/java/org/eclipse/syson/sysml/export/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml.export;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_SYSML_EXPORT_ROOT_PACKAGE = "org.eclipse.syson.sysml.export..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_SYSML_EXPORT_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/application/syson-sysml-export/src/test/java/org/eclipse/syson/sysml/export/CodingRulesTests.java b/backend/application/syson-sysml-export/src/test/java/org/eclipse/syson/sysml/export/CodingRulesTests.java
new file mode 100644
index 000000000..6e5872633
--- /dev/null
+++ b/backend/application/syson-sysml-export/src/test/java/org/eclipse/syson/sysml/export/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml.export;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_SYSML_EXPORT_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/application/syson-sysml-import/pom.xml b/backend/application/syson-sysml-import/pom.xml
index ababbeec0..def82258a 100644
--- a/backend/application/syson-sysml-import/pom.xml
+++ b/backend/application/syson-sysml-import/pom.xml
@@ -72,6 +72,7 @@
syson-services
2025.8.5
+
org.springframework.boot
spring-boot-starter-test
@@ -82,6 +83,12 @@
junit-jupiter
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
org.eclipse.syson
diff --git a/backend/application/syson-sysml-import/src/test/java/org/eclipse/syson/sysml/ArchitectureConstants.java b/backend/application/syson-sysml-import/src/test/java/org/eclipse/syson/sysml/ArchitectureConstants.java
new file mode 100644
index 000000000..f94115d9c
--- /dev/null
+++ b/backend/application/syson-sysml-import/src/test/java/org/eclipse/syson/sysml/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_SYSML_IMPORT_ROOT_PACKAGE = "org.eclipse.syson.sysml.import..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_SYSML_IMPORT_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/application/syson-sysml-import/src/test/java/org/eclipse/syson/sysml/CodingRulesTests.java b/backend/application/syson-sysml-import/src/test/java/org/eclipse/syson/sysml/CodingRulesTests.java
new file mode 100644
index 000000000..6ab56caf9
--- /dev/null
+++ b/backend/application/syson-sysml-import/src/test/java/org/eclipse/syson/sysml/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_SYSML_IMPORT_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/application/syson-sysml-validation/pom.xml b/backend/application/syson-sysml-validation/pom.xml
index 8bb446871..c7f5c598d 100644
--- a/backend/application/syson-sysml-validation/pom.xml
+++ b/backend/application/syson-sysml-validation/pom.xml
@@ -81,6 +81,7 @@
syson-services
2025.8.5
+
org.springframework.boot
spring-boot-starter-test
@@ -91,6 +92,12 @@
junit-jupiter
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
diff --git a/backend/application/syson-sysml-validation/src/test/java/.gitkeep b/backend/application/syson-sysml-validation/src/test/java/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/backend/application/syson-sysml-validation/src/test/java/org/eclipse/syson/sysml/validation/ArchitectureConstants.java b/backend/application/syson-sysml-validation/src/test/java/org/eclipse/syson/sysml/validation/ArchitectureConstants.java
new file mode 100644
index 000000000..fbbad849d
--- /dev/null
+++ b/backend/application/syson-sysml-validation/src/test/java/org/eclipse/syson/sysml/validation/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml.validation;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_SYSML_VALIDATION_ROOT_PACKAGE = "org.eclipse.syson.sysml.validation..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_SYSML_VALIDATION_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/application/syson-sysml-validation/src/test/java/org/eclipse/syson/sysml/validation/CodingRulesTests.java b/backend/application/syson-sysml-validation/src/test/java/org/eclipse/syson/sysml/validation/CodingRulesTests.java
new file mode 100644
index 000000000..f5e3940dd
--- /dev/null
+++ b/backend/application/syson-sysml-validation/src/test/java/org/eclipse/syson/sysml/validation/CodingRulesTests.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml.validation;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_SYSML_VALIDATION_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+
+ @Test
+ @Override
+ public void noMethodsShouldBeStatic() {
+ // SysMLv2ValidationRules contains static methods
+ }
+}
diff --git a/backend/services/syson-direct-edit-grammar/.settings/org.eclipse.core.resources.prefs b/backend/services/syson-direct-edit-grammar/.settings/org.eclipse.core.resources.prefs
index 1827d38c2..cad660489 100644
--- a/backend/services/syson-direct-edit-grammar/.settings/org.eclipse.core.resources.prefs
+++ b/backend/services/syson-direct-edit-grammar/.settings/org.eclipse.core.resources.prefs
@@ -1,7 +1,7 @@
eclipse.preferences.version=1
encoding//src/main/generated/org/eclipse/syson/services/grammars=UTF-8
encoding//src/main/java=UTF-8
-encoding//src/main/java/org/eclipse/syson/services/grammars=UTF-8
+encoding//src/main/java/org/eclipse/syson/direct/edit/grammars=UTF-8
encoding//src/main/resources=UTF-8
encoding//src/test/java=UTF-8
encoding//src/test/resources=UTF-8
diff --git a/backend/services/syson-direct-edit-grammar/pom.xml b/backend/services/syson-direct-edit-grammar/pom.xml
index 917e536f8..308728b16 100644
--- a/backend/services/syson-direct-edit-grammar/pom.xml
+++ b/backend/services/syson-direct-edit-grammar/pom.xml
@@ -68,7 +68,7 @@
${antlr.version}
${basedir}/src/main/resources
- ${basedir}/src/main/java/org/eclipse/syson/services/grammars
+ ${basedir}/src/main/java/org/eclipse/syson/direct/edit/grammars
UTF-8
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEdit.interp b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEdit.interp
similarity index 100%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEdit.interp
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEdit.interp
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEdit.tokens b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEdit.tokens
similarity index 100%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEdit.tokens
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEdit.tokens
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditBaseListener.java b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditBaseListener.java
similarity index 99%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditBaseListener.java
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditBaseListener.java
index a577fe308..855d604e9 100644
--- a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditBaseListener.java
+++ b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditBaseListener.java
@@ -12,7 +12,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.services.grammars;
+package org.eclipse.syson.direct.edit.grammars;
import org.antlr.v4.runtime.ParserRuleContext;
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.interp b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.interp
similarity index 100%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.interp
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.interp
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.java b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.java
similarity index 99%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.java
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.java
index 8bee01b91..abda3a735 100644
--- a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.java
+++ b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.java
@@ -12,7 +12,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.services.grammars;
+package org.eclipse.syson.direct.edit.grammars;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.tokens b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.tokens
similarity index 100%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditLexer.tokens
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditLexer.tokens
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditListener.java b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditListener.java
similarity index 99%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditListener.java
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditListener.java
index 87dd53b61..17fa4a85d 100644
--- a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditListener.java
+++ b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditListener.java
@@ -12,7 +12,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.services.grammars;
+package org.eclipse.syson.direct.edit.grammars;
import org.antlr.v4.runtime.tree.ParseTreeListener;
diff --git a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditParser.java b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditParser.java
similarity index 99%
rename from backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditParser.java
rename to backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditParser.java
index 89616465b..072d791a4 100644
--- a/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/services/grammars/DirectEditParser.java
+++ b/backend/services/syson-direct-edit-grammar/src/main/java/org/eclipse/syson/direct/edit/grammars/DirectEditParser.java
@@ -12,7 +12,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.services.grammars;
+package org.eclipse.syson.direct.edit.grammars;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
diff --git a/backend/services/syson-direct-edit-grammar/src/main/resources/DirectEdit.g4 b/backend/services/syson-direct-edit-grammar/src/main/resources/DirectEdit.g4
index 1585e5328..5f0733860 100644
--- a/backend/services/syson-direct-edit-grammar/src/main/resources/DirectEdit.g4
+++ b/backend/services/syson-direct-edit-grammar/src/main/resources/DirectEdit.g4
@@ -25,7 +25,7 @@ grammar DirectEdit;
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.syson.services.grammars;
+package org.eclipse.syson.direct.edit.grammars;
}
// This rule is used as a top-level rule to parse expressions on graphical nodes.
diff --git a/backend/services/syson-services/pom.xml b/backend/services/syson-services/pom.xml
index 5a68078b2..8bd9f3e8c 100644
--- a/backend/services/syson-services/pom.xml
+++ b/backend/services/syson-services/pom.xml
@@ -99,6 +99,12 @@
spring-boot-starter-test
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
org.eclipse.syson
diff --git a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/DiagramDirectEditListener.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/DiagramDirectEditListener.java
index 6d9e8b7e2..e4142983e 100644
--- a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/DiagramDirectEditListener.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/DiagramDirectEditListener.java
@@ -36,36 +36,36 @@
import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
import org.eclipse.sirius.components.representations.Message;
import org.eclipse.sirius.components.representations.MessageLevel;
-import org.eclipse.syson.services.grammars.DirectEditBaseListener;
-import org.eclipse.syson.services.grammars.DirectEditParser.AbstractPrefixExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.BinaryOperationExprContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.BracketAccessExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.ConstantPrefixExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.ConstraintExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.DerivedPrefixExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.DirectionPrefixExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.EffectExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.EndPrefixExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.FeatureChainExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.FeatureExpressionsContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.FeatureValueExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.ListItemExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.LiteralExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.MeasurementExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.MultiplicityExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.MultiplicityExpressionMemberContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.NodeExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.NonuniqueMultiplicityExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.OrderedMultiplicityExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.RedefinitionExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.ReferenceExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.ShortNameContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.SubsettingExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.TriggerExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.TriggerExpressionNameContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.TypingExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.ValueExpressionContext;
-import org.eclipse.syson.services.grammars.DirectEditParser.VariationPrefixExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditBaseListener;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.AbstractPrefixExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.BinaryOperationExprContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.BracketAccessExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.ConstantPrefixExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.ConstraintExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.DerivedPrefixExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.DirectionPrefixExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.EffectExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.EndPrefixExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.FeatureChainExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.FeatureExpressionsContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.FeatureValueExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.ListItemExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.LiteralExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.MeasurementExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.MultiplicityExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.MultiplicityExpressionMemberContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.NodeExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.NonuniqueMultiplicityExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.OrderedMultiplicityExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.RedefinitionExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.ReferenceExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.ShortNameContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.SubsettingExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.TriggerExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.TriggerExpressionNameContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.TypingExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.ValueExpressionContext;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser.VariationPrefixExpressionContext;
import org.eclipse.syson.sysml.AcceptActionUsage;
import org.eclipse.syson.sysml.ActionUsage;
import org.eclipse.syson.sysml.AttributeDefinition;
diff --git a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/LabelService.java b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/LabelService.java
index 3a98183fd..5f3bcf42d 100644
--- a/backend/services/syson-services/src/main/java/org/eclipse/syson/services/LabelService.java
+++ b/backend/services/syson-services/src/main/java/org/eclipse/syson/services/LabelService.java
@@ -23,8 +23,8 @@
import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
import org.eclipse.sirius.components.representations.Message;
import org.eclipse.sirius.components.representations.MessageLevel;
-import org.eclipse.syson.services.grammars.DirectEditLexer;
-import org.eclipse.syson.services.grammars.DirectEditParser;
+import org.eclipse.syson.direct.edit.grammars.DirectEditLexer;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser;
import org.eclipse.syson.sysml.ActionUsage;
import org.eclipse.syson.sysml.AttributeUsage;
import org.eclipse.syson.sysml.Comment;
diff --git a/backend/services/syson-services/src/test/java/org/eclipse/syson/services/ArchitectureConstants.java b/backend/services/syson-services/src/test/java/org/eclipse/syson/services/ArchitectureConstants.java
new file mode 100644
index 000000000..deb477069
--- /dev/null
+++ b/backend/services/syson-services/src/test/java/org/eclipse/syson/services/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.services;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_SERVICES_ROOT_PACKAGE = "org.eclipse.syson.services..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_SERVICES_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/services/syson-services/src/test/java/org/eclipse/syson/services/CodingRulesTests.java b/backend/services/syson-services/src/test/java/org/eclipse/syson/services/CodingRulesTests.java
new file mode 100644
index 000000000..3e0857a6e
--- /dev/null
+++ b/backend/services/syson-services/src/test/java/org/eclipse/syson/services/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.services;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_SERVICES_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/services/syson-services/src/test/java/org/eclipse/syson/services/DiagramDirectEditListenerTest.java b/backend/services/syson-services/src/test/java/org/eclipse/syson/services/DiagramDirectEditListenerTest.java
index d7a88c38d..26985ef06 100644
--- a/backend/services/syson-services/src/test/java/org/eclipse/syson/services/DiagramDirectEditListenerTest.java
+++ b/backend/services/syson-services/src/test/java/org/eclipse/syson/services/DiagramDirectEditListenerTest.java
@@ -25,10 +25,10 @@
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import org.eclipse.sirius.components.core.api.IFeedbackMessageService;
+import org.eclipse.syson.direct.edit.grammars.DirectEditLexer;
+import org.eclipse.syson.direct.edit.grammars.DirectEditParser;
import org.eclipse.syson.services.data.ItemAndAttributesModelTest;
import org.eclipse.syson.services.data.SmallFlashlightExample;
-import org.eclipse.syson.services.grammars.DirectEditLexer;
-import org.eclipse.syson.services.grammars.DirectEditParser;
import org.eclipse.syson.sysml.AttributeDefinition;
import org.eclipse.syson.sysml.AttributeUsage;
import org.eclipse.syson.sysml.ConstraintUsage;
diff --git a/backend/services/syson-sysml-rest-api-services/pom.xml b/backend/services/syson-sysml-rest-api-services/pom.xml
index 2cd6ccbb5..63dfad1c7 100644
--- a/backend/services/syson-sysml-rest-api-services/pom.xml
+++ b/backend/services/syson-sysml-rest-api-services/pom.xml
@@ -75,6 +75,7 @@
syson-services
2025.8.5
+
org.springframework.boot
spring-boot-starter-test
@@ -85,6 +86,12 @@
junit-jupiter
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
diff --git a/backend/services/syson-sysml-rest-api-services/src/test/java/.gitkeep b/backend/services/syson-sysml-rest-api-services/src/test/java/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/backend/services/syson-sysml-rest-api-services/src/test/java/org/eclipse/syson/sysml/rest/api/ArchitectureConstants.java b/backend/services/syson-sysml-rest-api-services/src/test/java/org/eclipse/syson/sysml/rest/api/ArchitectureConstants.java
new file mode 100644
index 000000000..93dce6965
--- /dev/null
+++ b/backend/services/syson-sysml-rest-api-services/src/test/java/org/eclipse/syson/sysml/rest/api/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml.rest.api;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_SYSML_REST_API_ROOT_PACKAGE = "org.eclipse.syson.sysml.rest.api..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_SYSML_REST_API_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/services/syson-sysml-rest-api-services/src/test/java/org/eclipse/syson/sysml/rest/api/CodingRulesTests.java b/backend/services/syson-sysml-rest-api-services/src/test/java/org/eclipse/syson/sysml/rest/api/CodingRulesTests.java
new file mode 100644
index 000000000..21e1f8abd
--- /dev/null
+++ b/backend/services/syson-sysml-rest-api-services/src/test/java/org/eclipse/syson/sysml/rest/api/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.sysml.rest.api;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_SYSML_REST_API_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/tests/syson-tests/src/main/java/org/eclipse/syson/tests/architecture/AbstractCodingRulesTests.java b/backend/tests/syson-tests/src/main/java/org/eclipse/syson/tests/architecture/AbstractCodingRulesTests.java
index 6c26540fb..4b021cec4 100644
--- a/backend/tests/syson-tests/src/main/java/org/eclipse/syson/tests/architecture/AbstractCodingRulesTests.java
+++ b/backend/tests/syson-tests/src/main/java/org/eclipse/syson/tests/architecture/AbstractCodingRulesTests.java
@@ -172,6 +172,7 @@ public void noClassesShouldUseEMF() {
rule.check(this.getClasses());
}
+ @Test
public void noClassesShouldUseEcoreUtilDelete() {
ArchRule rule = ArchRuleDefinition.noClasses()
.that()
diff --git a/backend/tests/syson-tests/src/test/java/org/eclipse/syson/tests/GeneralPurposeTests.java b/backend/tests/syson-tests/src/test/java/org/eclipse/syson/tests/GeneralPurposeTests.java
index fe1b2bd33..fccafdebf 100644
--- a/backend/tests/syson-tests/src/test/java/org/eclipse/syson/tests/GeneralPurposeTests.java
+++ b/backend/tests/syson-tests/src/test/java/org/eclipse/syson/tests/GeneralPurposeTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2024 Obeo.
+ * Copyright (c) 2024, 2025 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
@@ -112,7 +112,7 @@ public class GeneralPurposeTests {
private static final List GENERATED_MODULE_PATHS = List.of(
"/syson-siriusweb-customnodes-metamodel",
"/syson-sysml-metamodel",
- "/org/eclipse/syson/services/grammars"
+ "/org/eclipse/syson/direct/edit/grammars"
);
/**
diff --git a/backend/views/syson-diagram-common-view/pom.xml b/backend/views/syson-diagram-common-view/pom.xml
index 2e47fccc6..08be3a4d2 100644
--- a/backend/views/syson-diagram-common-view/pom.xml
+++ b/backend/views/syson-diagram-common-view/pom.xml
@@ -90,6 +90,7 @@
syson-services
2025.8.5
+
org.testcontainers
junit-jupiter
@@ -100,6 +101,12 @@
spring-boot-starter-test
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
diff --git a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbtractItemUsageBorderNodeDescriptionProvider.java b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractItemUsageBorderNodeDescriptionProvider.java
similarity index 97%
rename from backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbtractItemUsageBorderNodeDescriptionProvider.java
rename to backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractItemUsageBorderNodeDescriptionProvider.java
index f6caddef6..d6396b169 100644
--- a/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbtractItemUsageBorderNodeDescriptionProvider.java
+++ b/backend/views/syson-diagram-common-view/src/main/java/org/eclipse/syson/diagram/common/view/nodes/AbstractItemUsageBorderNodeDescriptionProvider.java
@@ -40,11 +40,11 @@
*
* @author arthur daussy
*/
-public abstract class AbtractItemUsageBorderNodeDescriptionProvider extends AbstractNodeDescriptionProvider {
+public abstract class AbstractItemUsageBorderNodeDescriptionProvider extends AbstractNodeDescriptionProvider {
private final IDescriptionNameGenerator descriptionNameGenerator;
- public AbtractItemUsageBorderNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
+ public AbstractItemUsageBorderNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
super(colorProvider);
this.descriptionNameGenerator = Objects.requireNonNull(descriptionNameGenerator);
}
diff --git a/backend/views/syson-diagram-common-view/src/test/java/org/eclipse/syson/diagram/common/view/ArchitectureConstants.java b/backend/views/syson-diagram-common-view/src/test/java/org/eclipse/syson/diagram/common/view/ArchitectureConstants.java
new file mode 100644
index 000000000..e8a4dcf02
--- /dev/null
+++ b/backend/views/syson-diagram-common-view/src/test/java/org/eclipse/syson/diagram/common/view/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.diagram.common.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_DIAGRAM_COMMON_VIEW_ROOT_PACKAGE = "org.eclipse.syson.diagram.common.view..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_DIAGRAM_COMMON_VIEW_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/views/syson-diagram-common-view/src/test/java/org/eclipse/syson/diagram/common/view/CodingRulesTests.java b/backend/views/syson-diagram-common-view/src/test/java/org/eclipse/syson/diagram/common/view/CodingRulesTests.java
new file mode 100644
index 000000000..5ad458e67
--- /dev/null
+++ b/backend/views/syson-diagram-common-view/src/test/java/org/eclipse/syson/diagram/common/view/CodingRulesTests.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.diagram.common.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_DIAGRAM_COMMON_VIEW_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+
+ @Test
+ @Override
+ public void abstractClassesShouldNotContainBusinessCode() {
+ // We should get rid of business code in abstract classes
+ }
+}
diff --git a/backend/views/syson-standard-diagrams-view/pom.xml b/backend/views/syson-standard-diagrams-view/pom.xml
index 0c420455d..f2be1647c 100644
--- a/backend/views/syson-standard-diagrams-view/pom.xml
+++ b/backend/views/syson-standard-diagrams-view/pom.xml
@@ -115,6 +115,7 @@
syson-diagram-common-view
2025.8.5
+
org.testcontainers
junit-jupiter
@@ -131,6 +132,12 @@
2025.8.5
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
diff --git a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ItemUsageBorderNodeDescriptionProvider.java b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ItemUsageBorderNodeDescriptionProvider.java
index e91a311cb..9199ab28b 100644
--- a/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ItemUsageBorderNodeDescriptionProvider.java
+++ b/backend/views/syson-standard-diagrams-view/src/main/java/org/eclipse/syson/standard/diagrams/view/nodes/ItemUsageBorderNodeDescriptionProvider.java
@@ -17,7 +17,7 @@
import org.eclipse.sirius.components.view.builder.IViewDiagramElementFinder;
import org.eclipse.sirius.components.view.builder.providers.IColorProvider;
import org.eclipse.sirius.components.view.diagram.NodeDescription;
-import org.eclipse.syson.diagram.common.view.nodes.AbtractItemUsageBorderNodeDescriptionProvider;
+import org.eclipse.syson.diagram.common.view.nodes.AbstractItemUsageBorderNodeDescriptionProvider;
import org.eclipse.syson.sysml.SysmlPackage;
import org.eclipse.syson.util.IDescriptionNameGenerator;
@@ -26,7 +26,7 @@
*
* @author Arthur Daussy
*/
-public class ItemUsageBorderNodeDescriptionProvider extends AbtractItemUsageBorderNodeDescriptionProvider {
+public class ItemUsageBorderNodeDescriptionProvider extends AbstractItemUsageBorderNodeDescriptionProvider {
public ItemUsageBorderNodeDescriptionProvider(IColorProvider colorProvider, IDescriptionNameGenerator descriptionNameGenerator) {
super(colorProvider, descriptionNameGenerator);
diff --git a/backend/views/syson-standard-diagrams-view/src/test/java/org/eclipse/syson/standard/diagrams/view/ArchitectureConstants.java b/backend/views/syson-standard-diagrams-view/src/test/java/org/eclipse/syson/standard/diagrams/view/ArchitectureConstants.java
new file mode 100644
index 000000000..e0adba99d
--- /dev/null
+++ b/backend/views/syson-standard-diagrams-view/src/test/java/org/eclipse/syson/standard/diagrams/view/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.standard.diagrams.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_STANDARD_DIAGRAMS_VIEW_ROOT_PACKAGE = "org.eclipse.syson.standard.diagrams.view..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_STANDARD_DIAGRAMS_VIEW_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/views/syson-standard-diagrams-view/src/test/java/org/eclipse/syson/standard/diagrams/view/CodingRulesTests.java b/backend/views/syson-standard-diagrams-view/src/test/java/org/eclipse/syson/standard/diagrams/view/CodingRulesTests.java
new file mode 100644
index 000000000..438bda281
--- /dev/null
+++ b/backend/views/syson-standard-diagrams-view/src/test/java/org/eclipse/syson/standard/diagrams/view/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.standard.diagrams.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_STANDARD_DIAGRAMS_VIEW_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/backend/views/syson-tree-explorer-view/pom.xml b/backend/views/syson-tree-explorer-view/pom.xml
index 320e57bbf..b39c4b286 100644
--- a/backend/views/syson-tree-explorer-view/pom.xml
+++ b/backend/views/syson-tree-explorer-view/pom.xml
@@ -80,6 +80,7 @@
syson-services
2025.8.5
+
org.testcontainers
junit-jupiter
@@ -90,6 +91,12 @@
spring-boot-starter-test
test
+
+ org.eclipse.syson
+ syson-tests
+ 2025.8.5
+ test
+
diff --git a/backend/views/syson-tree-explorer-view/src/test/java/org/eclipse/syson/tree/explorer/view/ArchitectureConstants.java b/backend/views/syson-tree-explorer-view/src/test/java/org/eclipse/syson/tree/explorer/view/ArchitectureConstants.java
new file mode 100644
index 000000000..389d022ff
--- /dev/null
+++ b/backend/views/syson-tree-explorer-view/src/test/java/org/eclipse/syson/tree/explorer/view/ArchitectureConstants.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.tree.explorer.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+
+/**
+ * Constants shared across multiple tests.
+ *
+ * @author arichard
+ */
+public final class ArchitectureConstants {
+ public static final String SYSON_TREE_EXPLORER_VIEW_ROOT_PACKAGE = "org.eclipse.syson.tree.explorer.view..";
+
+ public static final JavaClasses CLASSES = new ClassFileImporter()
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS)
+ .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
+ .importPackages(SYSON_TREE_EXPLORER_VIEW_ROOT_PACKAGE);
+
+ private ArchitectureConstants() {
+ // Prevent instantiation
+ }
+}
diff --git a/backend/views/syson-tree-explorer-view/src/test/java/org/eclipse/syson/tree/explorer/view/CodingRulesTests.java b/backend/views/syson-tree-explorer-view/src/test/java/org/eclipse/syson/tree/explorer/view/CodingRulesTests.java
new file mode 100644
index 000000000..2e4e0e7cd
--- /dev/null
+++ b/backend/views/syson-tree-explorer-view/src/test/java/org/eclipse/syson/tree/explorer/view/CodingRulesTests.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.tree.explorer.view;
+
+import com.tngtech.archunit.core.domain.JavaClasses;
+
+import org.eclipse.syson.tests.architecture.AbstractCodingRulesTests;
+
+/**
+ * Coding rules tests.
+ *
+ * @author arichard
+ */
+public class CodingRulesTests extends AbstractCodingRulesTests {
+
+ @Override
+ protected String getProjectRootPackage() {
+ return ArchitectureConstants.SYSON_TREE_EXPLORER_VIEW_ROOT_PACKAGE;
+ }
+
+ @Override
+ protected JavaClasses getClasses() {
+ return ArchitectureConstants.CLASSES;
+ }
+}
diff --git a/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc b/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc
index c6ca91efc..dd98ecd48 100644
--- a/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc
+++ b/doc/content/modules/user-manual/pages/release-notes/2025.10.0.adoc
@@ -99,6 +99,7 @@ metadata def Function :> SemanticMetadata {
#Function action a0; // a0 subset functions
#Function action def A0; // A0 subclassify Functions
```
+- Add coding rules tests on all modules.
== Dependency update