Skip to content

Commit dbe7577

Browse files
committed
ST6RI-805 Added Parameterized tests for SysML semantic constraints
1 parent 945483c commit dbe7577

3 files changed

Lines changed: 294 additions & 1 deletion

File tree

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
checkLifeClassLifeSpecialization,LifeClass,Occurrences::Life,Package,OwningMembership
2+
checkItemDefinitionSpecialization,ItemDefinition,Items::Item,Package,OwningMembership
3+
checkPartDefinitionSpecialization,PartDefinition,Parts::Part,Package,OwningMembership
4+
checkPortDefinitionSpecialization,PortDefinition,Ports::Port,Package,OwningMembership
5+
checkConnectionDefinitionSpecialization,ConnectionDefinition,Connections::Connection,Package,OwningMembership
6+
checkFlowConnectionDefinitionSpecialization,FlowConnectionDefinition,Connections::MessageConnection,Package,OwningMembership
7+
checkInterfaceDefinitionSpecialization,InterfaceDefinition,Interfaces::Interface,Package,OwningMembership
8+
checkAllocationDefinitionSpecialization,AllocationDefinition,Allocations::Allocation,Package,OwningMembership
9+
checkActionDefinitionSpecialization,ActionDefinition,Actions::Action,Package,OwningMembership
10+
checkStateDefinitionSpecialization,StateDefinition,States::StateAction,Package,OwningMembership
11+
checkCalculationDefinitionSpecialization,CalculationDefinition,Calculations::Calculation,Package,OwningMembership
12+
checkConstraintDefinitionSpecialization,ConstraintDefinition,Constraints::ConstraintCheck,Package,OwningMembership
13+
checkRequirementDefinitionSpecialization,RequirementDefinition,Requirements::RequirementCheck,Package,OwningMembership
14+
checkConcernDefinitionSpecialization,ConcernDefinition,Requirements::ConcernCheck,Package,OwningMembership
15+
checkCaseDefinitionSpecialization,CaseDefinition,Cases::Case,Package,OwningMembership
16+
checkAnalysisCaseDefinitionSpecialization,AnalysisCaseDefinition,AnalysisCases::AnalysisCase,Package,OwningMembership
17+
checkVerificationCaseDefinitionSpecialization,VerificationCaseDefinition,VerificationCases::VerificationCase,Package,OwningMembership
18+
checkUseCaseDefinitionSpecialization,UseCaseDefinition,UseCases::UseCase,Package,OwningMembership
19+
checkViewDefinitionSpecialization,ViewDefinition,Views::View,Package,OwningMembership
20+
checkViewpointDefinitionSpecialization,ViewpointDefinition,Views::ViewpointCheck,Package,OwningMembership
21+
checkRenderingDefinitionSpecialization,RenderingDefinition,Views::Rendering,Package,OwningMembership
22+
checkMetadataDefinitionSpecialization,MetadataDefinition,Metadata::MetadataItem,Package,OwningMembership
23+
checkAttributeUsageSpecialization,AttributeUsage,Base::dataValues,Package,OwningMembership
24+
checkEventOccurrenceSpecialization,EventOccurrenceUsage,Occurrences::Occurrence::timeEnclosedOccurrences,OccurrenceDefinition,FeatureMembership
25+
checkEventOccurrenceSpecialization,EventOccurrenceUsage,Occurrences::Occurrence::timeEnclosedOccurrences,OccurrenceUsage,FeatureMembership
26+
checkOccurrenceUsageSpecialization,OccurrenceUsage,Occurrences::occurrences,Package,OwningMembership
27+
checkOccurrenceUsageSuboccurrencesSpecialization,OccurrenceUsage,Occurrences::Occurrence::suboccurrences,OccurrenceUsage,FeatureMembership
28+
checkOccurrenceUsageSuboccurrencesSpecialization,OccurrenceUsage,Occurrences::Occurrence::suboccurrences,Class,FeatureMembership
29+
checkItemUsageSpecialization,ItemUsage,Items::items,Package,OwningMembership
30+
checkItemUsageSubitemSpecialization,ItemUsage,Items::Item::subitems,ItemUsage,FeatureMembership
31+
checkItemUsageSubitemSpecialization,ItemUsage,Items::Item::subitems,ItemDefinition,FeatureMembership
32+
checkPartUsageSpecialization,PartUsage,Parts::parts,Package,OwningMembership
33+
checkPartUsageSubpartSpecialization,PartUsage,Items::Item::subparts,ItemUsage,FeatureMembership
34+
checkPartUsageSubpartSpecialization,PartUsage,Items::Item::subparts,ItemDefinition,FeatureMembership
35+
checkPortUsageSpecialization,PortUsage,Ports::ports,Package,OwningMembership
36+
checkPortSubportSpecialization,PortUsage,Ports::Port::subports,PortUsage,FeatureMembership
37+
checkPortSubportSpecialization,PortUsage,Ports::Port::subports,PortDefinition,FeatureMembership
38+
checkConnectionUsageSpecialization,ConnectionUsage,Connections::connections,Package,OwningMembership
39+
checkSuccessionFlowConnectionUsageSpecialization,SuccessionFlowConnectionUsage,Connections::successionFlowConnections,Package,OwningMembership
40+
checkInterfaceUsageSpecialization,InterfaceUsage,Interfaces::interfaces,Package,OwningMembership
41+
checkAllocationUsageSpecialization,AllocationUsage,Allocations::allocations,Package,OwningMembership
42+
checkActionUsageSpecialization,ActionUsage,Actions::actions,Package,OwningMembership
43+
checkActionUsageSubactionSpecialization,ActionUsage,Actions::Action::subactions,ActionDefinition,FeatureMembership
44+
checkActionUsageSubactionSpecialization,ActionUsage,Actions::Action::subactions,ActionUsage,FeatureMembership
45+
checkActionUsageOwnedActionSpecialization,ActionUsage,Parts::Part::ownedActions,PartUsage,FeatureMembership
46+
checkActionUsageOwnedActionSpecialization,ActionUsage,Parts::Part::ownedActions,PartDefinition,FeatureMembership
47+
checkJoinNodeSpecialization,JoinNode,Actions::Action::joins,ActionDefinition,FeatureMembership
48+
checkForkNodeSpecialization,ForkNode,Actions::Action::forks,ActionDefinition,FeatureMembership
49+
checkMergeNodeSpecialization,MergeNode,Actions::Action::merges,ActionDefinition,FeatureMembership
50+
checkDecisionNodeSpecialization,DecisionNode,Actions::Action::decisions,ActionDefinition,FeatureMembership
51+
checkSendActionUsageSubactionSpecialization,SendActionUsage,Actions::Action::sendSubactions,ActionUsage,FeatureMembership
52+
checkAcceptActionUsageSubactionSpecialization,AcceptActionUsage,Actions::Action::acceptSubactions,ActionUsage,FeatureMembership
53+
checkIfActionUsageSubactionSpecialization,IfActionUsage,Actions::Action::ifSubactions,ActionUsage,FeatureMembership
54+
checkWhileLoopActionUsageSubactionSpecialization,WhileLoopActionUsage,Actions::Action::whileLoops,ActionUsage,FeatureMembership
55+
checkForLoopActionUsageSubactionSpecialization,ForLoopActionUsage,Actions::Action::forLoops,ActionUsage,FeatureMembership
56+
checkStateUsageSpecialization,StateUsage,States::stateActions,Package,OwningMembership
57+
checkStateUsageExclusiveStateSpecialization,StateUsage,States::StateAction::exclusiveStates,StateUsage,FeatureMembership
58+
checkTransitionUsageSpecialization,TransitionUsage,Actions::transitionActions,Package,OwningMembership
59+
checkCalculationUsageSpecialization,CalculationUsage,Calculations::calculations,Package,OwningMembership
60+
checkCalculationUsageSubcalculationSpecialization,CalculationUsage,Calculations::Calculation::subcalculations,CalculationUsage,FeatureMembership
61+
checkCalculationUsageSubcalculationSpecialization,CalculationUsage,Calculations::Calculation::subcalculations,CalculationDefinition,FeatureMembership
62+
checkConstraintUsageSpecialization,ConstraintUsage,Constraints::constraintChecks,Package,OwningMembership
63+
checkConstraintUsageCheckedConstraintSpecialization,ConstraintUsage,Items::Item::checkedConstraints,ItemUsage,FeatureMembership
64+
checkConstraintUsageCheckedConstraintSpecialization,ConstraintUsage,Items::Item::checkedConstraints,ItemDefinition,FeatureMembership
65+
checkRequirementUsageSpecialization,RequirementUsage,Requirements::requirementChecks,Package,OwningMembership
66+
checkRequirementUsageSubrequirementSpecialization,RequirementUsage,Requirements::RequirementCheck::subrequirements,RequirementDefinition,FeatureMembership
67+
checkRequirementUsageSubrequirementSpecialization,RequirementUsage,Requirements::RequirementCheck::subrequirements,RequirementUsage,FeatureMembership
68+
checkConcernUsageSpecialization,ConcernUsage,Requirements::concernChecks,Package,OwningMembership
69+
checkConcernUsageFramedConcernSpecialization,ConcernUsage,Requirements::RequirementCheck::concerns,PartUsage,FramedConcernMembership
70+
checkCaseUsageSpecialization,CaseUsage,Cases::cases,Package,OwningMembership
71+
checkCaseUsageSubcaseSpecialization,CaseUsage,Cases::Case::subcases,CaseUsage,FeatureMembership
72+
checkAnalysisCaseUsageSpecialization,AnalysisCaseUsage,AnalysisCases::analysisCases,Package,OwningMembership
73+
checkAnalysisCaseUsageSubAnalysisCaseSpecialization,AnalysisCaseUsage,AnalysisCases::AnalysisCase::subAnalysisCases,AnalysisCaseUsage,FeatureMembership
74+
checkAnalysisCaseUsageSubAnalysisCaseSpecialization,AnalysisCaseUsage,AnalysisCases::AnalysisCase::subAnalysisCases,AnalysisCaseDefinition,FeatureMembership
75+
checkVerificationCaseUsageSpecialization,VerificationCaseUsage,VerificationCases::verificationCases,Package,OwningMembership
76+
checkVerificationCaseUsageSubVerificationCaseSpecialization,VerificationCaseUsage,VerificationCases::VerificationCase::subVerificationCases,VerificationCaseUsage,FeatureMembership
77+
checkVerificationCaseUsageSubVerificationCaseSpecialization,VerificationCaseUsage,VerificationCases::VerificationCase::subVerificationCases,VerificationCaseDefinition,FeatureMembership
78+
checkUseCaseUsageSpecialization,UseCaseUsage,UseCases::useCases,Package,OwningMembership
79+
checkUseCaseUsageSubUseCaseSpecialization,UseCaseUsage,UseCases::UseCase::subUseCases,UseCaseUsage,FeatureMembership
80+
checkUseCaseUsageSubUseCaseSpecialization,UseCaseUsage,UseCases::UseCase::subUseCases,UseCaseDefinition,FeatureMembership
81+
checkIncludeUseCaseUsageSpecialization,IncludeUseCaseUsage,UseCases::UseCase::includedUseCases,UseCaseUsage,FeatureMembership
82+
checkIncludeUseCaseUsageSpecialization,IncludeUseCaseUsage,UseCases::UseCase::includedUseCases,UseCaseDefinition,FeatureMembership
83+
checkViewUsageSpecialization,ViewUsage,Views::views,Package,OwningMembership
84+
checkViewUsageSubviewSpecialization,ViewUsage,Views::View::subviews,ViewUsage,FeatureMembership
85+
checkViewUsageSubviewSpecialization,ViewUsage,Views::View::subviews,ViewDefinition,FeatureMembership
86+
checkViewpointUsageSpecialization,ViewpointUsage,Views::viewpoints,Package,OwningMembership
87+
checkViewpointUsageViewpointSatisfactionSpecialization,ViewpointUsage,Views::View::viewpointSatisfactions,ViewDefinition,FeatureMembership
88+
checkViewpointUsageViewpointSatisfactionSpecialization,ViewpointUsage,Views::View::viewpointSatisfactions,ViewUsage,FeatureMembership
89+
checkRenderingUsageSpecialization,RenderingUsage,Views::renderings,Package,OwningMembership
90+
checkRenderingUsageSubrenderingSpecialization,RenderingUsage,Views::Rendering::subrenderings,RenderingUsage,FeatureMembership
91+
checkRenderingUsageSubrenderingSpecialization,RenderingUsage,Views::Rendering::subrenderings,RenderingDefinition,FeatureMembership
92+
checkMetadataUsageSpecialization,MetadataUsage,Metadata::metadataItems,Package,OwningMembership
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
package org.omg.sysml.semantics.tests;
2+
3+
import static org.junit.Assert.assertNotNull;
4+
import static org.junit.Assert.assertTrue;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.io.InputStream;
9+
import java.util.Collection;
10+
import java.util.Collections;
11+
import java.util.LinkedList;
12+
import java.util.List;
13+
import java.util.Scanner;
14+
import java.util.stream.Collectors;
15+
16+
import org.eclipse.emf.ecore.EClass;
17+
import org.eclipse.emf.ecore.EClassifier;
18+
import org.eclipse.emf.ecore.resource.Resource;
19+
import org.junit.After;
20+
import org.junit.Before;
21+
import org.junit.BeforeClass;
22+
import org.junit.Test;
23+
import org.junit.runner.RunWith;
24+
import org.junit.runners.Parameterized;
25+
import org.junit.runners.Parameterized.Parameter;
26+
import org.junit.runners.Parameterized.Parameters;
27+
import org.omg.sysml.interactive.SysMLInteractive;
28+
import org.omg.sysml.lang.sysml.Element;
29+
import org.omg.sysml.lang.sysml.Membership;
30+
import org.omg.sysml.lang.sysml.Namespace;
31+
import org.omg.sysml.lang.sysml.Specialization;
32+
import org.omg.sysml.lang.sysml.SysMLFactory;
33+
import org.omg.sysml.lang.sysml.SysMLPackage;
34+
import org.omg.sysml.lang.sysml.Type;
35+
import org.omg.sysml.lang.sysml.Usage;
36+
import org.omg.sysml.lang.sysml.util.SysMLLibraryUtil;
37+
import org.omg.sysml.util.ElementUtil;
38+
import org.omg.sysml.util.NamespaceUtil;
39+
40+
@RunWith(Parameterized.class)
41+
public class SysMLSpecializationTest {
42+
/**
43+
* Test cases for the Parameterized tests<br>
44+
* Columns in order:
45+
* <ol>
46+
* <li>Semantic constraint name: (for debugging purposes)</li>
47+
* <li>EClass of the element: test creates the element of this type, element is tested for specializations</li>
48+
* <li>Library type: expected specialized library type after the transformation</li>
49+
* <li>EClass of owning namespace: type of the owning namespace for the element which is tested</li>
50+
* <li>EClass of membership: controls which membership type to use when adding the element to the owning namespace</li>
51+
* </ol>
52+
*
53+
*/
54+
private static final String TEST_CASES_CSV = "sysml-simple-specializations.csv";
55+
56+
/**
57+
* System property for the library path. Required for Maven build.
58+
*/
59+
private final static String SYSML_LIBRARY_PATH_KEY = "libraryPath";
60+
61+
62+
/**
63+
* Library path relative to this eclipse project. Direct JUnit runs.
64+
*/
65+
private static final String PROJECT_RELATIVE_LIBRARY_PARHT = "../sysml.library";
66+
67+
public static String getLibraryPath() {
68+
var sysprop = System.getProperty(SYSML_LIBRARY_PATH_KEY);
69+
return sysprop == null? getAbsoluteLibraryPath() : sysprop;
70+
}
71+
72+
private static String getAbsoluteLibraryPath() {
73+
//convert relative path to absolute path
74+
return new File(PROJECT_RELATIVE_LIBRARY_PARHT).getAbsolutePath();
75+
}
76+
77+
//parameters for the parameterized test
78+
79+
@Parameter(0)
80+
public String semanticConstraint;
81+
82+
@Parameter(1)
83+
public String eClassName;
84+
85+
@Parameter(2)
86+
public String libraryType;
87+
88+
@Parameter(3)
89+
public String owningNamespaceType;
90+
91+
@Parameter(4)
92+
public String membershipType;
93+
94+
//reading the parameters from the .csv and binding them to Parameter fields
95+
96+
@Parameters(name = "Semantic constraint: {0}, Owner: {3}, EClass: {1}, Expected library type: {2}")
97+
public static Collection<Object[]> getParameters() throws IOException{
98+
List<Object[]> parametersForTestCases = new LinkedList<>();
99+
100+
InputStream csvStream = SysMLSpecializationTest.class.getResourceAsStream(TEST_CASES_CSV);
101+
102+
try (Scanner scanner = new Scanner(csvStream)){
103+
scanner.forEachRemaining(line -> {
104+
Object[] parameters = line.split(",");
105+
parametersForTestCases.add(parameters);
106+
});
107+
}
108+
109+
return parametersForTestCases;
110+
}
111+
112+
//test setup
113+
114+
private static SysMLInteractive interactive;
115+
private Resource resource;
116+
117+
@BeforeClass
118+
public static void setupLibrary() {
119+
//setup infrastructure and read library
120+
if (interactive == null) {
121+
interactive = SysMLInteractive.getInstance();
122+
interactive.loadLibrary(getLibraryPath());
123+
}
124+
}
125+
126+
@Before
127+
public void createResource() {
128+
//create empty Resource for each test case
129+
resource = interactive.createResource("test.sysml");
130+
}
131+
132+
@After
133+
public void removeResource() throws IOException {
134+
//remove Resource after test case
135+
try {
136+
resource.delete(Collections.EMPTY_MAP);
137+
} finally {
138+
resource = null;
139+
}
140+
}
141+
142+
@Test
143+
public void checkSpecialization() {
144+
//create and add root package
145+
org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage();
146+
resource.getContents().add(root);
147+
148+
//check if library element exists
149+
Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, libraryType);
150+
assertNotNull(libraryElement);
151+
152+
//create owning namespace
153+
EClassifier ownerEClass = SysMLPackage.eINSTANCE.getEClassifier(owningNamespaceType);
154+
Namespace owner = (Namespace) SysMLFactory.eINSTANCE.create((EClass) ownerEClass);
155+
NamespaceUtil.addOwnedMemberTo(root, owner);
156+
157+
//create element
158+
EClassifier eClass = SysMLPackage.eINSTANCE.getEClassifier(eClassName);
159+
Type element = (Type) SysMLFactory.eINSTANCE.create((EClass) eClass);
160+
161+
//set usages to non-referential
162+
if (element instanceof Usage usage) {
163+
usage.setIsReference(false);
164+
usage.isComposite();
165+
}
166+
167+
//use a specific membership to add the element to the owning namespace
168+
EClassifier memberhipEClass = SysMLPackage.eINSTANCE.getEClassifier(membershipType);
169+
Membership membership = (Membership) SysMLFactory.eINSTANCE.create((EClass) memberhipEClass);
170+
owner.getOwnedRelationship().add(membership);
171+
membership.setMemberElement(element);
172+
173+
//run transformation, add implicit elements
174+
ElementUtil.transformAll(root, true);
175+
176+
assertTrue("Speacializes instead: " + getSpecifics(element), specializes(element, libraryType));
177+
}
178+
179+
//utility methods
180+
181+
public static boolean specializes(Type element, String general) {
182+
assert element != null;
183+
assert general != null;
184+
185+
return element.getOwnedSpecialization().stream()
186+
.map(Specialization::getGeneral)
187+
.map(Type::getQualifiedName)
188+
.anyMatch(general::equals);
189+
}
190+
191+
public static String getSpecifics(Type element) {
192+
193+
assert element != null;
194+
195+
return element.getOwnedSpecialization().stream()
196+
.map(Specialization::getGeneral)
197+
.map(Type::getQualifiedName)
198+
.collect(Collectors.joining(", "));
199+
}
200+
}

pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
<module>org.omg.sysml.plantuml.feature</module>
6262
<module>org.omg.sysml.site</module>
6363
<module>org.omg.sysml.target</module>
64-
</modules>
64+
<module>org.omg.sysml.semantics.tests</module>
65+
</modules>
6566

6667
<build>
6768
<plugins>

0 commit comments

Comments
 (0)