1313package org .eclipse .syson .application .controllers .diagrams .general .view ;
1414
1515import static org .assertj .core .api .Assertions .assertThat ;
16+ import static org .assertj .core .api .InstanceOfAssertFactories .type ;
1617import static org .eclipse .sirius .components .diagrams .tests .DiagramEventPayloadConsumer .assertRefreshedDiagramThat ;
1718import static org .junit .jupiter .api .Assertions .assertFalse ;
1819
5859import org .eclipse .syson .sysml .Element ;
5960import org .eclipse .syson .sysml .PartUsage ;
6061import org .eclipse .syson .sysml .ReferenceUsage ;
62+ import org .eclipse .syson .sysml .Specialization ;
6163import org .eclipse .syson .sysml .Subsetting ;
6264import org .eclipse .syson .sysml .SysmlPackage ;
6365import org .eclipse .syson .sysml .Type ;
@@ -525,6 +527,18 @@ public void createNewActorWithFeatureTypingInUseCaseUsage() {
525527 this .createActorWithFeatureTypingInCaseUsage (SysmlPackage .eINSTANCE .getUseCaseUsage (), GeneralViewWithTopNodesTestProjectData .SemanticIds .USE_CASE_USAGE_ID , USE_CASE );
526528 }
527529
530+ @ GivenSysONServer ({ GeneralViewWithTopNodesTestProjectData .SCRIPT_PATH })
531+ @ Test
532+ public void createNewActorWithoutSpecializationInCaseUsage () {
533+ this .createActorWithoutSpecializationInCaseUsage (SysmlPackage .eINSTANCE .getCaseUsage (), GeneralViewWithTopNodesTestProjectData .SemanticIds .CASE_USAGE_ID , CASE );
534+ }
535+
536+ @ GivenSysONServer ({ GeneralViewWithTopNodesTestProjectData .SCRIPT_PATH })
537+ @ Test
538+ public void createNewActorWithoutSpecializationInUseCaseUsage () {
539+ this .createActorWithoutSpecializationInCaseUsage (SysmlPackage .eINSTANCE .getUseCaseUsage (), GeneralViewWithTopNodesTestProjectData .SemanticIds .USE_CASE_USAGE_ID , USE_CASE );
540+ }
541+
528542 private void createSubjectWithSubsettingInCaseUsage (EClass caseUsageSubclass , String targetObjectId , String parentLabel ) {
529543 var flux = this .givenSubscriptionToDiagram ();
530544
@@ -539,7 +553,7 @@ private void createSubjectWithSubsettingInCaseUsage(EClass caseUsageSubclass, St
539553 String creationToolName = "New Subject" ;
540554 EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_SubjectParameter ();
541555 List <ToolVariable > variables = new ArrayList <>();
542- String existingPartId = "2c5fe5a5-18fe-40f4-ab66-a2d91ab7df6a" ;
556+ String existingPartId = GeneralViewWithTopNodesTestProjectData . SemanticIds . PART_USAGE_ID ;
543557 variables .add (new ToolVariable ("selectedObject" , existingPartId , ToolVariableType .OBJECT_ID ));
544558
545559 Runnable createNodeRunnable = this .creationTestsService .createNode (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , variables );
@@ -672,11 +686,9 @@ private void createActorWithSubsettingInCaseUsage(EClass caseUsageSubclass, Stri
672686 EClass childEClass = SysmlPackage .eINSTANCE .getPartUsage ();
673687 String creationToolName = "New Actor" ;
674688 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 ));
689+ String existingPartId = GeneralViewWithTopNodesTestProjectData .SemanticIds .PART_USAGE_ID ;
678690
679- Runnable createNodeRunnable = this .creationTestsService .createNode (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , variables );
691+ Runnable createNodeRunnable = this .creationTestsService .createNodeWithSelectionDialogWithSingleSelection (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , existingPartId );
680692
681693 Consumer <Object > diagramCheck = assertRefreshedDiagramThat (newDiagram -> {
682694 var initialDiagram = diagram .get ();
@@ -687,28 +699,29 @@ private void createActorWithSubsettingInCaseUsage(EClass caseUsageSubclass, Stri
687699 .check (initialDiagram , newDiagram , true );
688700 });
689701
690- ISemanticChecker semanticChecker = (editingContext ) -> {
691- Object semanticRootObject = this .objectSearchService .getObject (editingContext , GeneralViewWithTopNodesTestProjectData .SemanticIds .PACKAGE_1_ID ).orElse (null );
692- assertThat (semanticRootObject ).isInstanceOf (Element .class );
693- Element semanticRootElement = (Element ) semanticRootObject ;
694- Optional <PartUsage > optActor = EMFUtils .allContainedObjectOfType (semanticRootElement , PartUsage .class )
695- .filter (element -> Objects .equals (element .getName (), "actor1" ))
696- .findFirst ();
697- assertThat (optActor ).isPresent ();
698- var actor = optActor .get ();
699- EList <Subsetting > subjectSubsets = actor .getOwnedSubsetting ();
700- assertFalse (subjectSubsets .isEmpty ());
701- assertThat (subjectSubsets .get (0 ).getSubsettedFeature ().getName ()).isEqualTo ("part" );
702+ Consumer <Object > additionalCheck = referencedObject -> {
703+ assertThat (referencedObject ).isInstanceOf (List .class )
704+ .asInstanceOf (type (List .class ))
705+ .satisfies (actors -> {
706+ assertThat (actors ).size ().isEqualTo (1 );
707+ assertThat (actors .getFirst ())
708+ .isInstanceOf (PartUsage .class )
709+ .asInstanceOf (type (PartUsage .class ))
710+ .satisfies (actor -> {
711+ EList <Subsetting > subjectSubsets = actor .getOwnedSubsetting ();
712+ assertThat (subjectSubsets ).isNotEmpty ();
713+ assertThat (subjectSubsets .get (0 ).getSubsettedFeature ().getName ()).isEqualTo ("part" );
714+ });
715+ });
702716 };
703- Runnable semanticCheck = this . semanticCheckerService . checkEditingContext ( this . semanticCheckerService . getElementInParentSemanticChecker ( parentLabel , containmentReference , childEClass ));
704- Runnable semanticCheck2 = this .semanticCheckerService .checkEditingContext (semanticChecker );
717+
718+ Runnable semanticCheck = this .semanticCheckerService .checkEditingContext (this . semanticCheckerService . getElementInParentSemanticChecker ( parentLabel , containmentReference , childEClass , additionalCheck ) );
705719
706720 StepVerifier .create (flux )
707721 .consumeNextWith (initialDiagramContentConsumer )
708722 .then (createNodeRunnable )
709723 .consumeNextWith (diagramCheck )
710724 .then (semanticCheck )
711- .then (semanticCheck2 )
712725 .thenCancel ()
713726 .verify (Duration .ofSeconds (10 ));
714727 }
@@ -726,11 +739,9 @@ private void createActorWithFeatureTypingInCaseUsage(EClass caseUsageSubclass, S
726739 EClass childEClass = SysmlPackage .eINSTANCE .getPartUsage ();
727740 String creationToolName = "New Actor" ;
728741 EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_ActorParameter ();
729- List <ToolVariable > variables = new ArrayList <>();
730742 String existingPartDefId = GeneralViewWithTopNodesTestProjectData .SemanticIds .PART_DEFINITION_ID ;
731- variables .add (new ToolVariable ("selectedObject" , existingPartDefId , ToolVariableType .OBJECT_ID ));
732743
733- Runnable createNodeRunnable = this .creationTestsService .createNode (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , variables );
744+ Runnable createNodeRunnable = this .creationTestsService .createNodeWithSelectionDialogWithSingleSelection (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName , existingPartDefId );
734745
735746 Consumer <Object > diagramCheck = assertRefreshedDiagramThat (newDiagram -> {
736747 var initialDiagram = diagram .get ();
@@ -741,28 +752,83 @@ private void createActorWithFeatureTypingInCaseUsage(EClass caseUsageSubclass, S
741752 .check (initialDiagram , newDiagram , true );
742753 });
743754
744- ISemanticChecker semanticChecker = (editingContext ) -> {
745- Object semanticRootObject = this .objectSearchService .getObject (editingContext , GeneralViewWithTopNodesTestProjectData .SemanticIds .PACKAGE_1_ID ).orElse (null );
746- assertThat (semanticRootObject ).isInstanceOf (Element .class );
747- Element semanticRootElement = (Element ) semanticRootObject ;
748- Optional <PartUsage > optActor = EMFUtils .allContainedObjectOfType (semanticRootElement , PartUsage .class )
749- .filter (element -> Objects .equals (element .getName (), "actor1" ))
750- .findFirst ();
751- assertThat (optActor ).isPresent ();
752- var actor = optActor .get ();
753- EList <Type > types = actor .getType ();
754- assertFalse (types .isEmpty ());
755- assertThat (types .get (0 ).getName ()).isEqualTo ("PartDefinition" );
755+ Consumer <Object > additionalCheck = referencedObject -> {
756+ assertThat (referencedObject ).isInstanceOf (List .class )
757+ .asInstanceOf (type (List .class ))
758+ .satisfies (actors -> {
759+ assertThat (actors ).size ().isEqualTo (1 );
760+ assertThat (actors .getFirst ())
761+ .isInstanceOf (PartUsage .class )
762+ .asInstanceOf (type (PartUsage .class ))
763+ .satisfies (actor -> {
764+ EList <Type > types = actor .getType ();
765+ assertThat (types ).isNotEmpty ();
766+ assertThat (types .get (0 ).getName ()).isEqualTo ("PartDefinition" );
767+ });
768+ });
756769 };
757- Runnable semanticCheck = this .semanticCheckerService .checkEditingContext (this .semanticCheckerService .getElementInParentSemanticChecker (parentLabel , containmentReference , childEClass ));
758- Runnable semanticCheck2 = this .semanticCheckerService .checkEditingContext (semanticChecker );
770+
771+ Runnable semanticCheck = this .semanticCheckerService .checkEditingContext (this .semanticCheckerService .getElementInParentSemanticChecker (parentLabel , containmentReference , childEClass , additionalCheck ));
772+
773+ StepVerifier .create (flux )
774+ .consumeNextWith (initialDiagramContentConsumer )
775+ .then (createNodeRunnable )
776+ .consumeNextWith (diagramCheck )
777+ .then (semanticCheck )
778+ .thenCancel ()
779+ .verify (Duration .ofSeconds (10 ));
780+ }
781+
782+ private void createActorWithoutSpecializationInCaseUsage (EClass caseUsageSubclass , String targetObjectId , String parentLabel ) {
783+ var flux = this .givenSubscriptionToDiagram ();
784+
785+ AtomicReference <Diagram > diagram = new AtomicReference <>();
786+ Consumer <Object > initialDiagramContentConsumer = assertRefreshedDiagramThat (diagram ::set );
787+
788+ var diagramDescription = this .givenDiagramDescription .getDiagramDescription (GeneralViewWithTopNodesTestProjectData .EDITING_CONTEXT_ID ,
789+ SysONRepresentationDescriptionIdentifiers .GENERAL_VIEW_DIAGRAM_DESCRIPTION_ID );
790+ var diagramDescriptionIdProvider = new DiagramDescriptionIdProvider (diagramDescription , this .diagramIdProvider );
791+
792+ EClass childEClass = SysmlPackage .eINSTANCE .getPartUsage ();
793+ String creationToolName = "New Actor" ;
794+ EReference containmentReference = SysmlPackage .eINSTANCE .getCaseUsage_ActorParameter ();
795+
796+ Runnable createNodeRunnable = this .creationTestsService .createNodeWithSelectionDialogWithoutSelectionProvided (diagramDescriptionIdProvider , diagram , caseUsageSubclass , targetObjectId , creationToolName );
797+
798+ Consumer <Object > diagramCheck = assertRefreshedDiagramThat (newDiagram -> {
799+ var initialDiagram = diagram .get ();
800+ int createdNodesExpectedCount = 1 ;
801+ new CheckDiagramElementCount (this .diagramComparator )
802+ .hasNewNodeCount (createdNodesExpectedCount )
803+ .hasNewEdgeCount (1 )
804+ .check (initialDiagram , newDiagram , true );
805+ });
806+
807+ Consumer <Object > additionalCheck = referencedObject -> {
808+ assertThat (referencedObject ).isInstanceOf (List .class )
809+ .asInstanceOf (type (List .class ))
810+ .satisfies (actors -> {
811+ assertThat (actors ).size ().isEqualTo (1 );
812+ assertThat (actors .getFirst ())
813+ .isInstanceOf (PartUsage .class )
814+ .asInstanceOf (type (PartUsage .class ))
815+ .satisfies (actor -> {
816+ assertThat (actor .getOwnedSpecialization ()).allMatch (Specialization ::isIsImplied );
817+ EList <Type > types = actor .getType ();
818+ assertThat (types )
819+ .isNotEmpty ()
820+ .allMatch (Element ::isIsLibraryElement );
821+ });
822+ });
823+ };
824+
825+ Runnable semanticCheck = this .semanticCheckerService .checkEditingContext (this .semanticCheckerService .getElementInParentSemanticChecker (parentLabel , containmentReference , childEClass , additionalCheck ));
759826
760827 StepVerifier .create (flux )
761828 .consumeNextWith (initialDiagramContentConsumer )
762829 .then (createNodeRunnable )
763830 .consumeNextWith (diagramCheck )
764831 .then (semanticCheck )
765- .then (semanticCheck2 )
766832 .thenCancel ()
767833 .verify (Duration .ofSeconds (10 ));
768834 }
0 commit comments