5858import org .eclipse .syson .sysml .Element ;
5959import org .eclipse .syson .sysml .PartUsage ;
6060import org .eclipse .syson .sysml .ReferenceUsage ;
61+ import org .eclipse .syson .sysml .Specialization ;
6162import org .eclipse .syson .sysml .Subsetting ;
6263import org .eclipse .syson .sysml .SysmlPackage ;
6364import org .eclipse .syson .sysml .Type ;
@@ -525,6 +526,18 @@ public void createNewActorWithFeatureTypingInUseCaseUsage() {
525526 this .createActorWithFeatureTypingInCaseUsage (SysmlPackage .eINSTANCE .getUseCaseUsage (), GeneralViewWithTopNodesTestProjectData .SemanticIds .USE_CASE_USAGE_ID , USE_CASE );
526527 }
527528
529+ @ GivenSysONServer ({ GeneralViewWithTopNodesTestProjectData .SCRIPT_PATH })
530+ @ Test
531+ public void createNewActorWithoutSpecializationInCaseUsage () {
532+ this .createActorWithoutSpecializationInCaseUsage (SysmlPackage .eINSTANCE .getCaseUsage (), GeneralViewWithTopNodesTestProjectData .SemanticIds .CASE_USAGE_ID , CASE );
533+ }
534+
535+ @ GivenSysONServer ({ GeneralViewWithTopNodesTestProjectData .SCRIPT_PATH })
536+ @ Test
537+ public void createNewActorWithoutSpecializationInUseCaseUsage () {
538+ this .createActorWithoutSpecializationInCaseUsage (SysmlPackage .eINSTANCE .getUseCaseUsage (), GeneralViewWithTopNodesTestProjectData .SemanticIds .USE_CASE_USAGE_ID , USE_CASE );
539+ }
540+
528541 private void createSubjectWithSubsettingInCaseUsage (EClass caseUsageSubclass , String targetObjectId , String parentLabel ) {
529542 var flux = this .givenSubscriptionToDiagram ();
530543
@@ -539,7 +552,7 @@ private void createSubjectWithSubsettingInCaseUsage(EClass caseUsageSubclass, St
539552 String creationToolName = "New Subject" ;
540553 EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_SubjectParameter ();
541554 List <ToolVariable > variables = new ArrayList <>();
542- String existingPartId = "2c5fe5a5-18fe-40f4-ab66-a2d91ab7df6a" ;
555+ String existingPartId = GeneralViewWithTopNodesTestProjectData . SemanticIds . PART_USAGE_ID ;
543556 variables .add (new ToolVariable ("selectedObject" , existingPartId , ToolVariableType .OBJECT_ID ));
544557
545558 Runnable createNodeRunnable = this .creationTestsService .createNode (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , variables );
@@ -672,11 +685,9 @@ private void createActorWithSubsettingInCaseUsage(EClass caseUsageSubclass, Stri
672685 EClass childEClass = SysmlPackage .eINSTANCE .getPartUsage ();
673686 String creationToolName = "New Actor" ;
674687 EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_ActorParameter ();
675- List <ToolVariable > variables = new ArrayList <>();
676- String existingPartId = "2c5fe5a5-18fe-40f4-ab66-a2d91ab7df6a" ;
677- variables .add (new ToolVariable ("selectedObject" , existingPartId , ToolVariableType .OBJECT_ID ));
688+ String existingPartId = GeneralViewWithTopNodesTestProjectData .SemanticIds .PART_USAGE_ID ;
678689
679- Runnable createNodeRunnable = this .creationTestsService .createNode (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , variables );
690+ Runnable createNodeRunnable = this .creationTestsService .createNodeWithSelectionDialogWithSingleSelection (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , existingPartId );
680691
681692 Consumer <Object > diagramCheck = assertRefreshedDiagramThat (newDiagram -> {
682693 var initialDiagram = diagram .get ();
@@ -726,11 +737,9 @@ private void createActorWithFeatureTypingInCaseUsage(EClass caseUsageSubclass, S
726737 EClass childEClass = SysmlPackage .eINSTANCE .getPartUsage ();
727738 String creationToolName = "New Actor" ;
728739 EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_ActorParameter ();
729- List <ToolVariable > variables = new ArrayList <>();
730740 String existingPartDefId = GeneralViewWithTopNodesTestProjectData .SemanticIds .PART_DEFINITION_ID ;
731- variables .add (new ToolVariable ("selectedObject" , existingPartDefId , ToolVariableType .OBJECT_ID ));
732741
733- Runnable createNodeRunnable = this .creationTestsService .createNode (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , variables );
742+ Runnable createNodeRunnable = this .creationTestsService .createNodeWithSelectionDialogWithSingleSelection (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , existingPartDefId );
734743
735744 Consumer <Object > diagramCheck = assertRefreshedDiagramThat (newDiagram -> {
736745 var initialDiagram = diagram .get ();
@@ -766,4 +775,57 @@ private void createActorWithFeatureTypingInCaseUsage(EClass caseUsageSubclass, S
766775 .thenCancel ()
767776 .verify (Duration .ofSeconds (10 ));
768777 }
778+
779+ private void createActorWithoutSpecializationInCaseUsage (EClass caseUsageSubclass , String targetObjectId , String parentLabel ) {
780+ var flux = this .givenSubscriptionToDiagram ();
781+
782+ AtomicReference <Diagram > diagram = new AtomicReference <>();
783+ Consumer <Object > initialDiagramContentConsumer = assertRefreshedDiagramThat (diagram ::set );
784+
785+ var diagramDescription = this .givenDiagramDescription .getDiagramDescription (GeneralViewWithTopNodesTestProjectData .EDITING_CONTEXT_ID ,
786+ SysONRepresentationDescriptionIdentifiers .GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID );
787+ var diagramDescriptionIdProvider = new DiagramDescriptionIdProvider (diagramDescription , this .diagramIdProvider );
788+
789+ EClass childEClass = SysmlPackage .eINSTANCE .getPartUsage ();
790+ String creationToolName = "New Actor" ;
791+ EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_ActorParameter ();
792+
793+ Runnable createNodeRunnable = this .creationTestsService .createNodeWithSelectionDialogWithoutSelectionProvided (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName );
794+
795+ Consumer <Object > diagramCheck = assertRefreshedDiagramThat (newDiagram -> {
796+ var initialDiagram = diagram .get ();
797+ int createdNodesExpectedCount = 1 ;
798+ new CheckDiagramElementCount (this .diagramComparator )
799+ .hasNewNodeCount (createdNodesExpectedCount )
800+ .hasNewEdgeCount (1 )
801+ .check (initialDiagram , newDiagram , true );
802+ });
803+
804+ ISemanticChecker semanticChecker = (editingContext ) -> {
805+ Object semanticRootObject = this .objectSearchService .getObject (editingContext , GeneralViewWithTopNodesTestProjectData .SemanticIds .PACKAGE_1_ID ).orElse (null );
806+ assertThat (semanticRootObject ).isInstanceOf (Element .class );
807+ Element semanticRootElement = (Element ) semanticRootObject ;
808+ Optional <PartUsage > optActor = EMFUtils .allContainedObjectOfType (semanticRootElement , PartUsage .class )
809+ .filter (element -> Objects .equals (element .getName (), "actor1" ))
810+ .findFirst ();
811+ assertThat (optActor ).isPresent ();
812+ var actor = optActor .get ();
813+ assertThat (actor .getOwnedSpecialization ()).allMatch (Specialization ::isIsImplied );
814+ EList <Type > types = actor .getType ();
815+ assertThat (types )
816+ .isNotEmpty ()
817+ .allMatch (Element ::isIsLibraryElement );
818+ };
819+ Runnable semanticCheck = this .semanticCheckerService .checkEditingContext (this .semanticCheckerService .getElementInParentSemanticChecker (parentLabel , containmentReference , childEClass ));
820+ Runnable semanticCheck2 = this .semanticCheckerService .checkEditingContext (semanticChecker );
821+
822+ StepVerifier .create (flux )
823+ .consumeNextWith (initialDiagramContentConsumer )
824+ .then (createNodeRunnable )
825+ .consumeNextWith (diagramCheck )
826+ .then (semanticCheck )
827+ .then (semanticCheck2 )
828+ .thenCancel ()
829+ .verify (Duration .ofSeconds (10 ));
830+ }
769831}
0 commit comments