11/*******************************************************************************
22 * SysML 2 Pilot Implementation
3- * Copyright (c) 2021-2022 Model Driven Solutions, Inc.
3+ * Copyright (c) 2021-2022, 2025 Model Driven Solutions, Inc.
44 *
55 * This program is free software: you can redistribute it and/or modify
66 * it under the terms of the GNU Lesser General Public License as published by
3636import org .omg .sysml .lang .sysml .AttributeUsage ;
3737import org .omg .sysml .lang .sysml .Definition ;
3838import org .omg .sysml .lang .sysml .Element ;
39+ import org .omg .sysml .lang .sysml .EnumerationDefinition ;
40+ import org .omg .sysml .lang .sysml .EnumerationUsage ;
3941import org .omg .sysml .lang .sysml .Expression ;
4042import org .omg .sysml .lang .sysml .Feature ;
4143import org .omg .sysml .lang .sysml .ItemUsage ;
@@ -173,7 +175,7 @@ public void testPathOperation() throws Exception {
173175 assertEquals ("TopLevel/3/1/1/1" , TopLevel_3_1_1 .getOwnedRelatedElement ().get (0 ).path ());
174176 }
175177
176- public final String directedUsageTest =
178+ public final String directedUsageTest1 =
177179 "package Test {\n "
178180 + " item def I {\n "
179181 + " in x;\n "
@@ -190,9 +192,9 @@ public void testPathOperation() throws Exception {
190192 + "}" ;
191193
192194 @ Test
193- public void testDirectedUsage () throws Exception {
195+ public void testDirectedUsage1 () throws Exception {
194196 SysMLInteractive instance = getSysMLInteractiveInstance ();
195- SysMLInteractiveResult result = instance .process (directedUsageTest );
197+ SysMLInteractiveResult result = instance .process (directedUsageTest1 );
196198 Element root = result .getRootElement ();
197199 List <Element > elements = ((Namespace )root ).getOwnedMember ();
198200 List <Element > ownedMembers = ((Namespace )elements .get (0 )).getOwnedMember ();
@@ -220,5 +222,83 @@ public void testDirectedUsage() throws Exception {
220222 assertEquals ("constraint def (directedUsages.size)" , 2 , directedUsages .size ());
221223 assertEquals ("constraint def (directedUsages)" , directedFeatures .subList (0 , 2 ), directedUsages );
222224 }
225+ public final String directedUsageTest2 =
226+ "package Test {\n "
227+ + " item I {\n "
228+ + " in x;\n "
229+ + " in y;\n "
230+ + " }"
231+ + " action A {\n "
232+ + " in x;\n "
233+ + " in y;\n "
234+ + " }"
235+ + " constraint C {\n "
236+ + " in x;\n "
237+ + " in y;\n "
238+ + " }"
239+ + "}" ;
240+
241+ @ Test
242+ public void testDirectedUsage2 () throws Exception {
243+ SysMLInteractive instance = getSysMLInteractiveInstance ();
244+ SysMLInteractiveResult result = instance .process (directedUsageTest2 );
245+ Element root = result .getRootElement ();
246+ List <Element > elements = ((Namespace )root ).getOwnedMember ();
247+ List <Element > ownedMembers = ((Namespace )elements .get (0 )).getOwnedMember ();
248+ List <Feature > directedFeatures = ((Usage )ownedMembers .get (0 )).getDirectedFeature ();
249+ List <Usage > directedUsages = ((Usage )ownedMembers .get (0 )).getDirectedUsage ();
250+ assertEquals ("item (directedFeatures.size)" , 2 , directedFeatures .size ());
251+ assertEquals ("item (directedUsages.size)" , 2 , directedUsages .size ());
252+ assertEquals ("item (directedUsages)" , directedFeatures , directedUsages );
253+
254+ // Check that getting directedFeatures and directedUsages work for ActionUsages and
255+ // ConstraintUsages, even though they are kinds of Steps, and Step redefines
256+ // directedFeature as parameter.
257+
258+ directedFeatures = ((Usage )ownedMembers .get (1 )).getDirectedFeature ();
259+ directedUsages = ((Usage )ownedMembers .get (1 )).getDirectedUsage ();
260+ assertEquals ("action (directedFeatures.size)" , 2 , directedFeatures .size ());
261+ assertEquals ("action (directedUsages.size)" , 2 , directedUsages .size ());
262+ assertEquals ("action (directedUsages)" , directedFeatures , directedUsages );
263+
264+ // The ConstraintUsage "C" has three directedFeatures, including its return parameter,
265+ // but only the first two are Usages.
266+ directedFeatures = ((Usage )ownedMembers .get (2 )).getDirectedFeature ();
267+ directedUsages = ((Usage )ownedMembers .get (2 )).getDirectedUsage ();
268+ assertEquals ("constraint (directedFeatures.size)" , 3 , directedFeatures .size ());
269+ assertEquals ("constraint (directedUsages.size)" , 2 , directedUsages .size ());
270+ assertEquals ("constraint (directedUsages)" , directedFeatures .subList (0 , 2 ), directedUsages );
271+ }
272+
273+ public final String enumeratedValueTest =
274+ "package Test {\n "
275+ + " variation item def I {\n "
276+ + " variant item i1;\n "
277+ + " variant item i2;\n "
278+ + " }"
279+ + " enum def A {\n "
280+ + " enum a1;\n "
281+ + " enum a2;\n "
282+ + " }"
283+ + "}" ;
223284
285+ @ Test
286+ public void testEnumeratedValue () throws Exception {
287+ SysMLInteractive instance = getSysMLInteractiveInstance ();
288+ SysMLInteractiveResult result = instance .process (enumeratedValueTest );
289+ Element root = result .getRootElement ();
290+ List <Element > elements = ((Namespace )root ).getOwnedMember ();
291+ List <Element > ownedMembers = ((Namespace )elements .get (0 )).getOwnedMember ();
292+ List <Usage > variants = ((Definition )ownedMembers .get (0 )).getVariant ();
293+ assertEquals ("item def (variants.size)" , 2 , variants .size ());
294+
295+ // Check that getting variant and enumeratedValue work for EnumerationDefinitions,
296+ // even though EnumerationDefinition::enumeratedValue redefines Definition::variant.
297+
298+ variants = ((Definition )ownedMembers .get (1 )).getVariant ();
299+ List <EnumerationUsage > enumeratedValues = ((EnumerationDefinition )ownedMembers .get (1 )).getEnumeratedValue ();
300+ assertEquals ("enum def (variants.size)" , 2 , variants .size ());
301+ assertEquals ("enuim def (enumeratedValues.size)" , 2 , enumeratedValues .size ());
302+ assertEquals ("enum def (enumeratedValues)" , variants , enumeratedValues );
303+ }
224304}
0 commit comments