|
43 | 43 | import org.omg.sysml.lang.sysml.EnumerationUsage; |
44 | 44 | import org.omg.sysml.lang.sysml.Expression; |
45 | 45 | import org.omg.sysml.lang.sysml.Feature; |
| 46 | +import org.omg.sysml.lang.sysml.FeatureMembership; |
46 | 47 | import org.omg.sysml.lang.sysml.ItemUsage; |
47 | 48 | import org.omg.sysml.lang.sysml.Membership; |
48 | 49 | import org.omg.sysml.lang.sysml.Namespace; |
49 | 50 | import org.omg.sysml.lang.sysml.Relationship; |
50 | 51 | import org.omg.sysml.lang.sysml.TriggerInvocationExpression; |
| 52 | +import org.omg.sysml.lang.sysml.Type; |
51 | 53 | import org.omg.sysml.lang.sysml.Usage; |
52 | 54 | import org.omg.sysml.lang.sysml.ViewUsage; |
53 | 55 |
|
@@ -351,4 +353,35 @@ public void testLocale() throws Exception { |
351 | 353 | assertEquals("comment.locale", "en_US", comment.getLocale()); |
352 | 354 | assertEquals("doc.locale", "en_US", doc.getLocale()); |
353 | 355 | } |
| 356 | + |
| 357 | + public final String featureMembershipTest = |
| 358 | + "package Test {\n" |
| 359 | + + " part def A {\n" |
| 360 | + + " attribute f;\n" |
| 361 | + + " }\n" |
| 362 | + + " part def B {\n" |
| 363 | + + " public import A::*;\n" |
| 364 | + + " feature g;\n" |
| 365 | + + " }\n" |
| 366 | + + " part def C :> B;" |
| 367 | + + "}"; |
| 368 | + |
| 369 | + @Test |
| 370 | + public void testFeatureMembership() throws Exception { |
| 371 | + SysMLInteractive instance = getSysMLInteractiveInstance(); |
| 372 | + SysMLInteractiveResult result = instance.process(featureMembershipTest); |
| 373 | + Element root = result.getRootElement(); |
| 374 | + List<Element> elements = ((Namespace)root).getOwnedMember(); |
| 375 | + List<Element> ownedMembers = ((Namespace)elements.get(0)).getOwnedMember(); |
| 376 | + Definition A = (Definition)ownedMembers.get(0); |
| 377 | + Definition B = (Definition)ownedMembers.get(1); |
| 378 | + Definition C = (Definition)ownedMembers.get(2); |
| 379 | + assertTrue("A", testFeatureOwningTypes(A)); |
| 380 | + assertTrue("B", testFeatureOwningTypes(B)); |
| 381 | + assertTrue("C", testFeatureOwningTypes(C)); |
| 382 | + } |
| 383 | + |
| 384 | + private boolean testFeatureOwningTypes(Type type) { |
| 385 | + return type.getFeatureMembership().stream().map(FeatureMembership::getOwningType).allMatch(t->type.specializes(t)); |
| 386 | + } |
354 | 387 | } |
0 commit comments