Skip to content
Draft
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
130 changes: 130 additions & 0 deletions language/src/test/java/cocos/ReproduceTC3FindingsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package cocos;

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.cocos.AssignActionTypeCheck3;
import de.monticore.lang.sysmlv2.cocos.ConstraintIsBooleanTC3;
import de.monticore.lang.sysmlv2.cocos.SendActionTypeCheck3;
import de.monticore.lang.sysmlv2.cocos.SpecializationExistsTC3;
import de.monticore.lang.sysmlv2.cocos.TypeCheck3TransitionGuards;
import de.monticore.lang.sysmlv2.types3.SysMLTypeCheck3;
import de.se_rwth.commons.logging.Finding;
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.Disabled;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;
import java.util.stream.Collectors;

import static org.assertj.core.api.Assertions.assertThat;

public class ReproduceTC3FindingsTest {

private static final String MODEL_PATH = "src/test/resources/cocos/repro";

private SysMLv2Tool tool;

@BeforeAll public static void init() {
LogStub.init();
}

@BeforeEach public void reset() {
Log.getFindings().clear();
SysMLv2Mill.reset();
SysMLv2Mill.init();
SysMLv2Mill.prepareGlobalScope();

tool = new SysMLv2Tool();
tool.init();
//SysMLTypeCheck3.init();
}

@Disabled
@ParameterizedTest
@ValueSource(strings = {
"model1.sysml",
"model2.sysml",
"model3.sysml",
"model4.sysml",
"model5.sysml",
"model6.sysml",
"model7.sysml",
"model8.sysml",
"model9.sysml",
})
public void reproducingErrors(String modelName) throws IOException {
Path file = Paths.get(MODEL_PATH, modelName);
System.out.println("Testing reproducing model: " + modelName);

Optional<ASTSysMLModel> optAst = SysMLv2Mill.parser().parse(file.toString());
assertThat(optAst).isPresent();
ASTSysMLModel model = optAst.get();

tool.createSymbolTable(model);
tool.completeSymbolTable(model);
tool.finalizeSymbolTable(model);


var constraintIsBooleanChecker = new SysMLv2CoCoChecker();
constraintIsBooleanChecker.addCoCo(new ConstraintIsBooleanTC3());

var specializationExistsTC3Checker = new SysMLv2CoCoChecker();
specializationExistsTC3Checker.addCoCo(new SpecializationExistsTC3());

var typeCheck3TransitionGuardsChecker = new SysMLv2CoCoChecker();
typeCheck3TransitionGuardsChecker.addCoCo(new TypeCheck3TransitionGuards());

var sendActionTypeCheck3Checker = new SysMLv2CoCoChecker();
sendActionTypeCheck3Checker.addCoCo(new SendActionTypeCheck3());

var assignActionTypeCheck3Checker = new SysMLv2CoCoChecker();
assignActionTypeCheck3Checker.addCoCo(new AssignActionTypeCheck3());

var checker = new SysMLv2CoCoChecker();
checker.addCoCo(new ConstraintIsBooleanTC3());
checker.addCoCo(new SpecializationExistsTC3());
checker.addCoCo(new TypeCheck3TransitionGuards());
checker.addCoCo(new SendActionTypeCheck3());
checker.addCoCo(new AssignActionTypeCheck3());


// checkCoCo(model, typeCheck3TransitionGuardsChecker, "TypeCheck3TransitionGuards", modelName);
// checkCoCo(model, sendActionTypeCheck3Checker, "SendActionTypeCheck3", modelName);
// checkCoCo(model, assignActionTypeCheck3Checker, "AssignActionTypeCheck3", modelName);
// checkCoCo(model, constraintIsBooleanChecker, "ConstraintIsBooleanTC3",modelName);
// checkCoCo(model, specializationExistsTC3Checker, "SpecializationExistsTC3", modelName);

checkCoCo(model, checker, "All TC3 CoCos", modelName);
}

private void checkCoCo(ASTSysMLModel model, SysMLv2CoCoChecker coCoChecker, String cocoName, String modelName) {

Log.clearFindings();
try {
coCoChecker.checkAll(model);
} catch (Exception e) {
System.out.println("[Error] CoCo " + cocoName +
" error caused by " + modelName +
": " + e.getMessage());
return;
}
//new findings
if (!Log.getFindings().isEmpty()) {
System.out.println("[FAIL] CoCo " + cocoName +
" found " + Log.getFindings().size() +
" issues in " + modelName);
Log.getFindings().forEach(f -> System.out.println("[LOG] " + f));
} else {
System.out.println("[PASS] CoCo " + cocoName);
}
}
}
1 change: 1 addition & 0 deletions language/src/test/resources/cocos/repro/model1.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
part def Repro0xA0324 :> MissingSymbol;
11 changes: 11 additions & 0 deletions language/src/test/resources/cocos/repro/model2.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
part def Repro0xF737F {
attribute data : Packet;
require constraint {
forall v in data.values():
v.size == 0
}
}

attribute def Packet {
attribute size : int;
}
6 changes: 6 additions & 0 deletions language/src/test/resources/cocos/repro/model3.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
requirement Repro0xF737F {
attribute input : boolean;
require constraint {
input.values == true
}
}
12 changes: 12 additions & 0 deletions language/src/test/resources/cocos/repro/model4.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
requirement Repro0xF737F {
subject c : SomePart;
require constraint {
c.behavior.something == true
}
}

part def SomePart {
#delayed exhibit state behavior {
state S;
}
}
6 changes: 6 additions & 0 deletions language/src/test/resources/cocos/repro/model5.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
requirement Repro0x7C001 {
attribute input : boolean;
require constraint {
input = true
}
}
24 changes: 24 additions & 0 deletions language/src/test/resources/cocos/repro/model6.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
requirement Repro0xB0166 {
subject p : PartWithPort;
require constraint {
p.port1.val == true
}
}

part def PartWithPort {
port port1 : PortDef;
}

port def PortDef {
attribute val : boolean;
}

part myPart {
port myPort : PortDef;
satisfy Repro0xB0166 {
subject p = myPort;
}
require constraint {
myPort.val == true
}
}
19 changes: 19 additions & 0 deletions language/src/test/resources/cocos/repro/model7.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package Repro0xB0166{
port def Booleans {
in attribute val: boolean;
}

part def model2 {
port input: Booleans;
port output: ~Booleans;
}

requirement 'Requirement' {
subject m2: model2;
attribute a: boolean;

assert constraint {
m2.input.val == <a, Tick> implies true
}
}
}
18 changes: 18 additions & 0 deletions language/src/test/resources/cocos/repro/model8.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Repro0xFD118{
port def Booleans {
in attribute val: boolean;
}

part def model1 {
port input: Booleans;
port output: ~Booleans;
}

requirement 'Requirement' {
subject model1;

assert constraint {
input.val == <a, Tick> implies true
}
}
}
10 changes: 10 additions & 0 deletions language/src/test/resources/cocos/repro/model9.sysml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
requirement Repro0xFD226 {
attribute input : boolean;
part def S {
attribute input : int;
}
subject s : S;
require constraint {
input = true
}
}
Loading