|
45 | 45 | import org.omg.sysml.lang.sysml.EnumerationUsage; |
46 | 46 | import org.omg.sysml.lang.sysml.Expression; |
47 | 47 | import org.omg.sysml.lang.sysml.Feature; |
| 48 | +import org.omg.sysml.lang.sysml.FeatureMembership; |
48 | 49 | import org.omg.sysml.lang.sysml.ItemUsage; |
49 | 50 | import org.omg.sysml.lang.sysml.Membership; |
50 | 51 | import org.omg.sysml.lang.sysml.Namespace; |
51 | 52 | import org.omg.sysml.lang.sysml.Relationship; |
52 | 53 | import org.omg.sysml.lang.sysml.TriggerInvocationExpression; |
| 54 | +import org.omg.sysml.lang.sysml.Type; |
53 | 55 | import org.omg.sysml.lang.sysml.Usage; |
54 | 56 | import org.omg.sysml.lang.sysml.ViewUsage; |
55 | 57 |
|
@@ -384,4 +386,35 @@ public void testCrossFeature() throws Exception { |
384 | 386 | assertEquals("end1 cross feature", end1.ownedCrossFeature(), end1.getCrossFeature()); |
385 | 387 | assertEquals("end2 cross feature", a_b, end2.getCrossFeature().getFeatureTarget()); |
386 | 388 | } |
| 389 | + |
| 390 | + public final String featureMembershipTest = |
| 391 | + "package Test {\n" |
| 392 | + + " part def A {\n" |
| 393 | + + " attribute f;\n" |
| 394 | + + " }\n" |
| 395 | + + " part def B {\n" |
| 396 | + + " public import A::*;\n" |
| 397 | + + " feature g;\n" |
| 398 | + + " }\n" |
| 399 | + + " part def C :> B;" |
| 400 | + + "}"; |
| 401 | + |
| 402 | + @Test |
| 403 | + public void testFeatureMembership() throws Exception { |
| 404 | + SysMLInteractive instance = getSysMLInteractiveInstance(); |
| 405 | + SysMLInteractiveResult result = instance.process(featureMembershipTest); |
| 406 | + Element root = result.getRootElement(); |
| 407 | + List<Element> elements = ((Namespace)root).getOwnedMember(); |
| 408 | + List<Element> ownedMembers = ((Namespace)elements.get(0)).getOwnedMember(); |
| 409 | + Definition A = (Definition)ownedMembers.get(0); |
| 410 | + Definition B = (Definition)ownedMembers.get(1); |
| 411 | + Definition C = (Definition)ownedMembers.get(2); |
| 412 | + assertTrue("A", testFeatureOwningTypes(A)); |
| 413 | + assertTrue("B", testFeatureOwningTypes(B)); |
| 414 | + assertTrue("C", testFeatureOwningTypes(C)); |
| 415 | + } |
| 416 | + |
| 417 | + private boolean testFeatureOwningTypes(Type type) { |
| 418 | + return type.getFeatureMembership().stream().map(FeatureMembership::getOwningType).allMatch(t->type.specializes(t)); |
| 419 | + } |
387 | 420 | } |
0 commit comments