Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
/* (c) https://github.com/MontiCore/monticore */
package cocos;

import de.monticore.lang.sysmlparts._cocos.SysMLPartsASTConnectionUsageCoCo;
import de.monticore.lang.sysmlv2.SysMLv2Mill;
import de.monticore.lang.sysmlv2.SysMLv2Tool;
import de.monticore.lang.sysmlv2._ast.ASTSysMLModel;
import de.monticore.lang.sysmlv2._cocos.SysMLv2CoCoChecker;
import de.monticore.lang.sysmlv2._parser.SysMLv2Parser;
import de.monticore.lang.sysmlv2._symboltable.ISysMLv2ArtifactScope;
import de.monticore.lang.sysmlv2.cocos.ParentComponentInputConnectionDirectionCoCo;
import de.se_rwth.commons.logging.Finding;
import de.se_rwth.commons.logging.Log;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.assertj.core.api.Assertions.assertThat;

public class ParentComponentInputConnectionDirectionCoCoTest {

Expand All @@ -33,8 +37,9 @@ public static void init() {
@BeforeEach
public void reset() {
SysMLv2Mill.globalScope().clear();
Log.getFindings().clear();
Log.enableFailQuick(true);
SysMLv2Mill.initializePrimitives();
SysMLv2Mill.addCollectionTypes();
Log.clearFindings();
}

@Nested
Expand All @@ -56,12 +61,10 @@ public void testValid() throws IOException {
+ "connect sysInAnother to sysOut;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(validModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var checker = new SysMLv2CoCoChecker();
checker.addCoCo((SysMLPartsASTConnectionUsageCoCo) new ParentComponentInputConnectionDirectionCoCo());
checker.checkAll(ast);
assertTrue(Log.getFindings().isEmpty());
var ast = parse(validModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(0);
}

@Test
Expand All @@ -80,12 +83,10 @@ public void testValidConjugatedModel() throws IOException {
+ "connect sysInAnother to sysOut;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(validModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var checker = new SysMLv2CoCoChecker();
checker.addCoCo((SysMLPartsASTConnectionUsageCoCo) new ParentComponentInputConnectionDirectionCoCo());
checker.checkAll(ast);
assertTrue(Log.getFindings().isEmpty());
var ast = parse(validModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(0);
}

@Test
Expand All @@ -100,14 +101,11 @@ public void testInvalid() throws IOException {
+ "connect sysIn to a.output;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(invalidModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var checker = new SysMLv2CoCoChecker();
checker.addCoCo((SysMLPartsASTConnectionUsageCoCo) new ParentComponentInputConnectionDirectionCoCo());
Log.enableFailQuick(false);
checker.checkAll(ast);
assertTrue(Log.getFindings().stream()
.anyMatch(f -> f.getMsg().contains("0x10AA6")));
var ast = parse(invalidModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(1);
assertThat(errors.get(0).getMsg()).contains("0x10AA6");
}

@Test
Expand All @@ -121,14 +119,39 @@ public void testInvalidConjugatedModel() throws IOException {
+ "connect sysIn to a.output;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(invalidModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var ast = parse(invalidModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(1);
assertThat(errors.get(0).getMsg()).contains("0x10AA6");
}

private ASTSysMLModel parse(String model) throws IOException {
var optAst = SysMLv2Mill.parser().parse_String(model);
assertThat(optAst).isPresent();
return optAst.get();
}

private ISysMLv2ArtifactScope createSt(ASTSysMLModel ast) {
var tool = new SysMLv2Tool();
var scope = tool.createSymbolTable(ast);
tool.completeSymbolTable(ast);
return scope;
}

private List<Finding> check(ASTSysMLModel ast) {
var checker = new SysMLv2CoCoChecker();
checker.addCoCo((SysMLPartsASTConnectionUsageCoCo) new ParentComponentInputConnectionDirectionCoCo());
checker.addCoCo(new ParentComponentInputConnectionDirectionCoCo());
Log.enableFailQuick(false);
checker.checkAll(ast);
assertTrue(Log.getFindings().stream()
.anyMatch(f -> f.getMsg().contains("0x10AA6")));
return Log.getFindings().stream().filter(Finding::isError).collect(
Collectors.toList());
}

@AfterEach
void clearLog() {
Log.clearFindings();
Log.enableFailQuick(true);
}
}
}
61 changes: 44 additions & 17 deletions language/src/test/java/cocos/PartTypeDefinitionExistsCoCoTest.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
/* (c) https://github.com/MontiCore/monticore */
package cocos;

import de.monticore.lang.sysmlparts._cocos.SysMLPartsASTPartUsageCoCo;
import de.monticore.lang.sysmlv2.SysMLv2Mill;
import de.monticore.lang.sysmlv2.SysMLv2Tool;
import de.monticore.lang.sysmlv2._ast.ASTSysMLModel;
import de.monticore.lang.sysmlv2._cocos.SysMLv2CoCoChecker;
import de.monticore.lang.sysmlv2._parser.SysMLv2Parser;
import de.monticore.lang.sysmlv2._symboltable.ISysMLv2ArtifactScope;
import de.monticore.lang.sysmlv2.cocos.PartTypeDefinitionExistsCoCo;
import de.se_rwth.commons.logging.Finding;
import de.se_rwth.commons.logging.Log;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.assertj.core.api.Assertions.assertThat;

public class PartTypeDefinitionExistsCoCoTest {

Expand All @@ -33,8 +37,9 @@ public static void init() {
@BeforeEach
public void reset() {
SysMLv2Mill.globalScope().clear();
Log.getFindings().clear();
Log.enableFailQuick(true);
SysMLv2Mill.initializePrimitives();
SysMLv2Mill.addCollectionTypes();
Log.clearFindings();
}

@Nested
Expand All @@ -49,12 +54,10 @@ public void testValid() throws IOException {
+ "part subcomp2: SubComponent2;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(validModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var checker = new SysMLv2CoCoChecker();
checker.addCoCo((SysMLPartsASTPartUsageCoCo) new PartTypeDefinitionExistsCoCo());
checker.checkAll(ast);
assertTrue(Log.getFindings().isEmpty());
var ast = parse(validModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(0);
}

@Test
Expand All @@ -66,15 +69,39 @@ public void testInvalid() throws IOException {
+ "part subcomp2: UndefinedComponent;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(invalidModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var ast = parse(invalidModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(1);
assertThat(errors.get(0).getMsg()).contains("0x10AA1");
}

private ASTSysMLModel parse(String model) throws IOException {
var optAst = SysMLv2Mill.parser().parse_String(model);
assertThat(optAst).isPresent();
return optAst.get();
}

private ISysMLv2ArtifactScope createSt(ASTSysMLModel ast) {
var tool = new SysMLv2Tool();
var scope = tool.createSymbolTable(ast);
tool.completeSymbolTable(ast);
return scope;
}

private List<Finding> check(ASTSysMLModel ast) {
var checker = new SysMLv2CoCoChecker();
checker.addCoCo((SysMLPartsASTPartUsageCoCo) new PartTypeDefinitionExistsCoCo());
checker.addCoCo(new PartTypeDefinitionExistsCoCo());
Log.enableFailQuick(false);
checker.checkAll(ast);
assertTrue(Log.getFindings().stream()
.anyMatch(f -> f.getMsg().contains("0x10AA1")));
return Log.getFindings().stream().filter(Finding::isError).collect(
Collectors.toList());
}
}

@AfterEach
void clearLog() {
Log.clearFindings();
Log.enableFailQuick(true);
}
}
}
60 changes: 43 additions & 17 deletions language/src/test/java/cocos/QualifiedPortNameExistsCoCoTest.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
/* (c) https://github.com/MontiCore/monticore */
package cocos;

import de.monticore.lang.sysmlparts._cocos.SysMLPartsASTConnectionUsageCoCo;
import de.monticore.lang.sysmlparts._cocos.SysMLPartsASTPartDefCoCo;
import de.monticore.lang.sysmlparts._cocos.SysMLPartsASTPartUsageCoCo;
import de.monticore.lang.sysmlv2.SysMLv2Mill;
import de.monticore.lang.sysmlv2.SysMLv2Tool;
import de.monticore.lang.sysmlv2._ast.ASTSysMLModel;
import de.monticore.lang.sysmlv2._cocos.SysMLv2CoCoChecker;
import de.monticore.lang.sysmlv2._parser.SysMLv2Parser;
import de.monticore.lang.sysmlv2._symboltable.ISysMLv2ArtifactScope;
import de.monticore.lang.sysmlv2.cocos.QualifiedPortNameExistsCoCo;
import de.se_rwth.commons.logging.Finding;
import de.se_rwth.commons.logging.Log;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.assertj.core.api.Assertions.assertThat;

public class QualifiedPortNameExistsCoCoTest {

Expand All @@ -35,8 +37,9 @@ public static void init() {
@BeforeEach
public void reset() {
SysMLv2Mill.globalScope().clear();
Log.getFindings().clear();
Log.enableFailQuick(true);
SysMLv2Mill.initializePrimitives();
SysMLv2Mill.addCollectionTypes();
Log.clearFindings();
}

@Nested
Expand All @@ -52,12 +55,10 @@ public void testValid() throws IOException {
+ "connect a.p to b.q;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(validModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var checker = new SysMLv2CoCoChecker();
checker.addCoCo(new QualifiedPortNameExistsCoCo());
checker.checkAll(ast);
assertTrue(Log.getFindings().isEmpty());
var ast = parse(validModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(0);
}

@Test
Expand All @@ -71,14 +72,39 @@ public void testInvalid() throws IOException {
+ "connect a.wrongName to b.q;"
+ "}";

ASTSysMLModel ast = SysMLv2Mill.parser().parse_String(invalidModel).get();
SysMLv2Mill.scopesGenitorDelegator().createFromAST(ast);
var ast = parse(invalidModel);
createSt(ast);
var errors = check(ast);
assertThat(errors).hasSize(1);
assertThat(errors.get(0).getMsg()).contains("0x10AA4");
}

private ASTSysMLModel parse(String model) throws IOException {
var optAst = SysMLv2Mill.parser().parse_String(model);
assertThat(optAst).isPresent();
return optAst.get();
}

private ISysMLv2ArtifactScope createSt(ASTSysMLModel ast) {
var tool = new SysMLv2Tool();
var scope = tool.createSymbolTable(ast);
tool.completeSymbolTable(ast);
return scope;
}

private List<Finding> check(ASTSysMLModel ast) {
var checker = new SysMLv2CoCoChecker();
checker.addCoCo(new QualifiedPortNameExistsCoCo());
Log.enableFailQuick(false);
checker.checkAll(ast);
assertTrue(Log.getFindings().stream()
.anyMatch(f -> f.getMsg().contains("0x10AA4")));
return Log.getFindings().stream().filter(Finding::isError).collect(
Collectors.toList());
}

@AfterEach
void clearLog() {
Log.clearFindings();
Log.enableFailQuick(true);
}
}
}
Loading
Loading