From c71cdca1024fbecd73bdb02332db75a1b29c8ee6 Mon Sep 17 00:00:00 2001 From: ling guo dei Date: Fri, 19 Jun 2026 17:50:12 +0200 Subject: [PATCH 1/2] test Appollo models with additional CoCos and fix the CoCo error --- .../cocos/NameCompatible4Isabelle.java | 5 +++- .../java/{parser => cocos}/ApolloTest.java | 25 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) rename language/src/test/java/{parser => cocos}/ApolloTest.java (61%) diff --git a/language/src/main/java/de/monticore/lang/sysmlv2/cocos/NameCompatible4Isabelle.java b/language/src/main/java/de/monticore/lang/sysmlv2/cocos/NameCompatible4Isabelle.java index d01ef935..b8f727f4 100644 --- a/language/src/main/java/de/monticore/lang/sysmlv2/cocos/NameCompatible4Isabelle.java +++ b/language/src/main/java/de/monticore/lang/sysmlv2/cocos/NameCompatible4Isabelle.java @@ -27,7 +27,10 @@ public class NameCompatible4Isabelle implements SysMLStatesASTStateDefCoCo, SysMLPartsASTSysMLPackageCoCo { //check for name private void LogsCompatible4Isabelle(String name, SourcePosition start, SourcePosition end) { - if(!name.matches("^(?!0-9)[a-zA-Z0-9_]+$") && !name.isEmpty()) { + // Names must start with a letter or underscore. + // Subsequent characters may also include digits, spaces, dots, and hyphens. + // Names like 'Roger B. Chaffee' , 'F-1', 'SA-500F' can be accepted. + if (!name.isEmpty() && !name.matches("^[a-zA-Z_][a-zA-Z0-9_ .-]*$")) { Log.error("0xFF005 This name is not Isabelle compatible", start, end); } } diff --git a/language/src/test/java/parser/ApolloTest.java b/language/src/test/java/cocos/ApolloTest.java similarity index 61% rename from language/src/test/java/parser/ApolloTest.java rename to language/src/test/java/cocos/ApolloTest.java index e3154f84..1933066e 100644 --- a/language/src/test/java/parser/ApolloTest.java +++ b/language/src/test/java/cocos/ApolloTest.java @@ -1,15 +1,20 @@ -package parser; +package cocos; +import de.monticore.lang.sysmlv2.SysMLv2Mill; import de.monticore.lang.sysmlv2.SysMLv2Tool; +import de.monticore.lang.sysmlv2._ast.ASTSysMLModel; import de.se_rwth.commons.logging.Log; +import de.se_rwth.commons.logging.LogStub; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; +import de.se_rwth.commons.logging.Finding; /** * Checks that the Apollo_11 can be parsed @@ -28,7 +33,7 @@ public static void setup() { @BeforeEach public void init() { tool.init(); - Log.init(); + LogStub.init(); } @Test @@ -42,9 +47,13 @@ public void testParseApollo11Models() throws IOException { var lines = 0; Log.enableFailQuick(false); + var asts = new ArrayList(); + for(var model: models) { try { - var ast = tool.parse(model.toString()); + var ast = SysMLv2Mill.parser().parse(model.toString()); + assertThat(ast).as("Could not parse " + model).isPresent(); + asts.add(ast.get()); if(Log.getFindings().isEmpty()) { successful++; } @@ -56,9 +65,17 @@ public void testParseApollo11Models() throws IOException { Log.clearFindings(); } } + asts.forEach(ast -> tool.createSymbolTable(ast)); + asts.forEach(ast -> tool.completeSymbolTable(ast)); + asts.forEach(ast -> tool.finalizeSymbolTable(ast)); + + //asts.forEach(ast -> tool.runDefaultCoCos(ast)); + asts.forEach(ast -> tool.runAdditionalCoCos(ast)); assertThat(successful).isEqualTo(27); - assertThat(Log.getFindings()).isEmpty(); + var errors = Log.getFindings().stream().filter(Finding::isError).collect(Collectors.toList()); + + assertThat(errors).as(errors::toString).isEmpty(); } } From d13cfa876fbbeb399bba3e0d4f61378b6ecf5122 Mon Sep 17 00:00:00 2001 From: ling guo dei Date: Fri, 19 Jun 2026 17:53:08 +0200 Subject: [PATCH 2/2] format code --- language/src/test/java/cocos/ApolloTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language/src/test/java/cocos/ApolloTest.java b/language/src/test/java/cocos/ApolloTest.java index 1933066e..5ad7c72f 100644 --- a/language/src/test/java/cocos/ApolloTest.java +++ b/language/src/test/java/cocos/ApolloTest.java @@ -17,7 +17,7 @@ import de.se_rwth.commons.logging.Finding; /** - * Checks that the Apollo_11 can be parsed + * Checks that the Apollo 11 models can be parsed and pass all CoCo checks. * https://github.com/airbus/apollo-11-sysml-v2/tree/main */ public class ApolloTest { @@ -69,12 +69,12 @@ public void testParseApollo11Models() throws IOException { asts.forEach(ast -> tool.completeSymbolTable(ast)); asts.forEach(ast -> tool.finalizeSymbolTable(ast)); - //asts.forEach(ast -> tool.runDefaultCoCos(ast)); + //casts.forEach(ast -> tool.runDefaultCoCos(ast)); asts.forEach(ast -> tool.runAdditionalCoCos(ast)); assertThat(successful).isEqualTo(27); - var errors = Log.getFindings().stream().filter(Finding::isError).collect(Collectors.toList()); + var errors = Log.getFindings().stream().filter(Finding::isError).collect(Collectors.toList()); assertThat(errors).as(errors::toString).isEmpty(); }