From d620e4c31028d1deaeac02a85efe7f46a7241c88 Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Tue, 12 Nov 2024 17:25:09 +0100 Subject: [PATCH] Fixed shapes moving after project save/load --- ... => OPAbstractDiagramElementTest.class.st} | 36 ++++++++++--- .../OpenPonk-Core/OPAbstractEdgeTest.class.st | 2 +- .../OPAbstractLabelTest.class.st | 2 +- .../OpenPonk-Core/OPAbstractNodeTest.class.st | 51 +++++++++++++++++++ repository/OpenPonk-Core/OPBoundNode.class.st | 2 +- repository/OpenPonk-Core/OPDiagram.class.st | 3 +- .../OpenPonk-Core/OPDiagramInfo.class.st | 4 +- .../OpenPonk-Core/OPDiagramView.class.st | 4 +- .../OPDiagramViewCamera.class.st | 4 +- .../OpenPonk-Core/OPDiagramViewInfo.class.st | 4 +- repository/OpenPonk-Core/OPLabelTest.class.st | 6 +++ .../OpenPonk-Core/OPLegacyDiagram.class.st | 10 +++- .../OPLegacyDiagramCamera.class.st | 4 +- .../OPLegacyDiagramTest.class.st | 4 +- .../OPLegacyElementLayout.class.st | 4 +- .../OPLegacyRelationshipPath.class.st | 4 +- .../OPModelObjectReference.class.st | 10 +++- .../OpenPonk-Core/OPNodeBounds.class.st | 6 +-- repository/OpenPonk-Core/OPNoteTest.class.st | 24 +++++++++ 19 files changed, 149 insertions(+), 35 deletions(-) rename repository/OpenPonk-Core/{OPAbstractShapeTest.class.st => OPAbstractDiagramElementTest.class.st} (50%) create mode 100644 repository/OpenPonk-Core/OPAbstractNodeTest.class.st create mode 100644 repository/OpenPonk-Core/OPNoteTest.class.st diff --git a/repository/OpenPonk-Core/OPAbstractShapeTest.class.st b/repository/OpenPonk-Core/OPAbstractDiagramElementTest.class.st similarity index 50% rename from repository/OpenPonk-Core/OPAbstractShapeTest.class.st rename to repository/OpenPonk-Core/OPAbstractDiagramElementTest.class.st index 6fde1102..aa183dd0 100644 --- a/repository/OpenPonk-Core/OPAbstractShapeTest.class.st +++ b/repository/OpenPonk-Core/OPAbstractDiagramElementTest.class.st @@ -1,9 +1,10 @@ Class { - #name : 'OPAbstractShapeTest', + #name : 'OPAbstractDiagramElementTest', #superclass : 'TestCase', #instVars : [ 'canvas', - 'shape' + 'shape', + 'model' ], #category : 'OpenPonk-Core-Tests', #package : 'OpenPonk-Core', @@ -11,30 +12,51 @@ Class { } { #category : 'testing' } -OPAbstractShapeTest class >> isAbstract [ +OPAbstractDiagramElementTest class >> isAbstract [ ^ self name includesSubstring: 'Abstract' ] { #category : 'instance creation' } -OPAbstractShapeTest >> newShapeInstance [ +OPAbstractDiagramElementTest >> modelClass [ + + ^ self subclassResponsibility +] + +{ #category : 'instance creation' } +OPAbstractDiagramElementTest >> newModelInstance [ + + ^ self modelClass new +] + +{ #category : 'instance creation' } +OPAbstractDiagramElementTest >> newShapeInstance [ ^ self shapeClass new ] { #category : 'running' } -OPAbstractShapeTest >> setUp [ +OPAbstractDiagramElementTest >> setUp [ super setUp. shape := self newShapeInstance. + model := self newModelInstance. + shape modelElement: model. canvas := RSCanvas new ] { #category : 'hooks' } -OPAbstractShapeTest >> shapeClass [ +OPAbstractDiagramElementTest >> shapeClass [ ^ self subclassResponsibility ] +{ #category : 'running' } +OPAbstractDiagramElementTest >> testEmpty [ + + self assert: shape modelElement equals: model. + self assertCollection: shape modelElements hasSameElements: { model } +] + { #category : 'tests' } -OPAbstractShapeTest >> testRenderSimplifiedForController [ +OPAbstractDiagramElementTest >> testRenderSimplifiedForController [ | diagramController controller | canvas := RSCanvas new. diff --git a/repository/OpenPonk-Core/OPAbstractEdgeTest.class.st b/repository/OpenPonk-Core/OPAbstractEdgeTest.class.st index 7635f228..9d8facc8 100644 --- a/repository/OpenPonk-Core/OPAbstractEdgeTest.class.st +++ b/repository/OpenPonk-Core/OPAbstractEdgeTest.class.st @@ -1,6 +1,6 @@ Class { #name : 'OPAbstractEdgeTest', - #superclass : 'OPAbstractShapeTest', + #superclass : 'OPAbstractDiagramElementTest', #category : 'OpenPonk-Core-Tests', #package : 'OpenPonk-Core', #tag : 'Tests' diff --git a/repository/OpenPonk-Core/OPAbstractLabelTest.class.st b/repository/OpenPonk-Core/OPAbstractLabelTest.class.st index 75efe3a2..633aa0c6 100644 --- a/repository/OpenPonk-Core/OPAbstractLabelTest.class.st +++ b/repository/OpenPonk-Core/OPAbstractLabelTest.class.st @@ -1,6 +1,6 @@ Class { #name : 'OPAbstractLabelTest', - #superclass : 'OPAbstractShapeTest', + #superclass : 'OPAbstractNodeTest', #category : 'OpenPonk-Core-Tests', #package : 'OpenPonk-Core', #tag : 'Tests' diff --git a/repository/OpenPonk-Core/OPAbstractNodeTest.class.st b/repository/OpenPonk-Core/OPAbstractNodeTest.class.st new file mode 100644 index 00000000..0cbf1a5c --- /dev/null +++ b/repository/OpenPonk-Core/OPAbstractNodeTest.class.st @@ -0,0 +1,51 @@ +Class { + #name : 'OPAbstractNodeTest', + #superclass : 'OPAbstractDiagramElementTest', + #category : 'OpenPonk-Core-Tests', + #package : 'OpenPonk-Core', + #tag : 'Tests' +} + +{ #category : 'tests' } +OPAbstractNodeTest >> testDoesNotMoveOnShapeCreation [ + + | diagram originalRoassalPosition movedRoassalPosition newShape | + diagram := OPDiagram new. + diagram renderIn: canvas. + shape owningElement: diagram. + shape modelElement: model. + shape renderIn: canvas. + shape isPositionableByUser ifFalse: [ ^ self ]. + originalRoassalPosition := shape roassalShape position. + shape updateFromRender. + self assert: shape bounds position equals: originalRoassalPosition. + shape roassalShape translateBy: 100 @ 50. + movedRoassalPosition := shape roassalShape position. + self + assert: movedRoassalPosition + equals: originalRoassalPosition + (100 @ 50). + self assert: shape bounds position equals: originalRoassalPosition. + newShape := OPTestLabel in: diagram. + newShape renderIn: canvas. + self assert: shape bounds position equals: originalRoassalPosition. + self assert: shape roassalShape position equals: movedRoassalPosition +] + +{ #category : 'tests' } +OPAbstractNodeTest >> testUpdateFromRender [ + + | originalBounds movedBounds | + self assert: shape bounds equals: nil. + shape modelElement: model. + shape renderIn: canvas. + shape updateFromRender. + shape isPositionableByUser ifFalse: [ ^ self ]. + originalBounds := shape bounds veryDeepCopy. + shape roassalShape translateBy: 100 @ 50. + self assert: shape bounds position equals: originalBounds position. + shape updateFromRender. + movedBounds := shape bounds veryDeepCopy. + self deny: movedBounds position equals: originalBounds position. + self assert: movedBounds position equals: originalBounds position + (100 @ 50). + +] diff --git a/repository/OpenPonk-Core/OPBoundNode.class.st b/repository/OpenPonk-Core/OPBoundNode.class.st index 9d109951..8903dd6c 100644 --- a/repository/OpenPonk-Core/OPBoundNode.class.st +++ b/repository/OpenPonk-Core/OPBoundNode.class.st @@ -103,7 +103,7 @@ OPBoundNode >> renderIn: aCanvas [ { #category : 'as yet unclassified' } OPBoundNode >> updateFromRender [ - self isResizableByUser | self isPositionableByUser ifTrue: [ + (self isResizableByUser or: [ self isPositionableByUser ]) ifTrue: [ self bounds: (OPNodeBounds new position: roassalShape position extent: roassalShape extent) ]. diff --git a/repository/OpenPonk-Core/OPDiagram.class.st b/repository/OpenPonk-Core/OPDiagram.class.st index 2be1c0f8..9738c73d 100644 --- a/repository/OpenPonk-Core/OPDiagram.class.st +++ b/repository/OpenPonk-Core/OPDiagram.class.st @@ -26,7 +26,8 @@ OPDiagram >> canvas: aCanvas [ self assert: roassalShape canvas = aCanvas description: - 'Reusing same diagram element for 2 canvases not allowed' ]. + 'Reusing same diagram element for 2 canvases not allowed'. + ^ self ]. roassalShape := aCanvas. self updateRenderFromSelf ] diff --git a/repository/OpenPonk-Core/OPDiagramInfo.class.st b/repository/OpenPonk-Core/OPDiagramInfo.class.st index a5ecd8c6..c96b0ee9 100644 --- a/repository/OpenPonk-Core/OPDiagramInfo.class.st +++ b/repository/OpenPonk-Core/OPDiagramInfo.class.st @@ -12,9 +12,9 @@ Class { 'order', 'diagramName' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'testing' } diff --git a/repository/OpenPonk-Core/OPDiagramView.class.st b/repository/OpenPonk-Core/OPDiagramView.class.st index ba23bf6a..bf7cfbae 100644 --- a/repository/OpenPonk-Core/OPDiagramView.class.st +++ b/repository/OpenPonk-Core/OPDiagramView.class.st @@ -1,7 +1,7 @@ Class { #name : 'OPDiagramView', #superclass : 'OPLegacyDiagram', - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } diff --git a/repository/OpenPonk-Core/OPDiagramViewCamera.class.st b/repository/OpenPonk-Core/OPDiagramViewCamera.class.st index c48c5d69..c63dbd25 100644 --- a/repository/OpenPonk-Core/OPDiagramViewCamera.class.st +++ b/repository/OpenPonk-Core/OPDiagramViewCamera.class.st @@ -1,9 +1,9 @@ Class { #name : 'OPDiagramViewCamera', #superclass : 'OPLegacyDiagramCamera', - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'testing' } diff --git a/repository/OpenPonk-Core/OPDiagramViewInfo.class.st b/repository/OpenPonk-Core/OPDiagramViewInfo.class.st index 4e298fc2..f3d92dd3 100644 --- a/repository/OpenPonk-Core/OPDiagramViewInfo.class.st +++ b/repository/OpenPonk-Core/OPDiagramViewInfo.class.st @@ -1,7 +1,7 @@ Class { #name : 'OPDiagramViewInfo', #superclass : 'OPDiagramInfo', - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } diff --git a/repository/OpenPonk-Core/OPLabelTest.class.st b/repository/OpenPonk-Core/OPLabelTest.class.st index dee6e364..f49f13f0 100644 --- a/repository/OpenPonk-Core/OPLabelTest.class.st +++ b/repository/OpenPonk-Core/OPLabelTest.class.st @@ -5,3 +5,9 @@ Class { #package : 'OpenPonk-Core', #tag : 'Tests' } + +{ #category : 'instance creation' } +OPLabelTest >> modelClass [ + + ^ Mock +] diff --git a/repository/OpenPonk-Core/OPLegacyDiagram.class.st b/repository/OpenPonk-Core/OPLegacyDiagram.class.st index 5ec9b1e0..713211b5 100644 --- a/repository/OpenPonk-Core/OPLegacyDiagram.class.st +++ b/repository/OpenPonk-Core/OPLegacyDiagram.class.st @@ -16,9 +16,9 @@ Class { 'model', 'commonElements' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'instance creation' } @@ -231,6 +231,12 @@ OPLegacyDiagram >> commonElements: anObject [ commonElements := anObject ] +{ #category : 'comparing' } +OPLegacyDiagram >> hash [ + + ^ self asJson hash +] + { #category : 'initialization' } OPLegacyDiagram >> initialize [ super initialize. diff --git a/repository/OpenPonk-Core/OPLegacyDiagramCamera.class.st b/repository/OpenPonk-Core/OPLegacyDiagramCamera.class.st index 7fed053e..c7968ddc 100644 --- a/repository/OpenPonk-Core/OPLegacyDiagramCamera.class.st +++ b/repository/OpenPonk-Core/OPLegacyDiagramCamera.class.st @@ -8,9 +8,9 @@ Class { 'offset', 'zoom' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'testing' } diff --git a/repository/OpenPonk-Core/OPLegacyDiagramTest.class.st b/repository/OpenPonk-Core/OPLegacyDiagramTest.class.st index 7054a56d..2ee1e713 100644 --- a/repository/OpenPonk-Core/OPLegacyDiagramTest.class.st +++ b/repository/OpenPonk-Core/OPLegacyDiagramTest.class.st @@ -4,9 +4,9 @@ Class { #instVars : [ 'view' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'tests' } diff --git a/repository/OpenPonk-Core/OPLegacyElementLayout.class.st b/repository/OpenPonk-Core/OPLegacyElementLayout.class.st index e0fc083b..a512da16 100644 --- a/repository/OpenPonk-Core/OPLegacyElementLayout.class.st +++ b/repository/OpenPonk-Core/OPLegacyElementLayout.class.st @@ -11,9 +11,9 @@ Class { #classInstVars : [ 'none' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'testing' } diff --git a/repository/OpenPonk-Core/OPLegacyRelationshipPath.class.st b/repository/OpenPonk-Core/OPLegacyRelationshipPath.class.st index 9ebdf8e1..7be358de 100644 --- a/repository/OpenPonk-Core/OPLegacyRelationshipPath.class.st +++ b/repository/OpenPonk-Core/OPLegacyRelationshipPath.class.st @@ -7,9 +7,9 @@ Class { 'source', 'points' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'instance creation' } diff --git a/repository/OpenPonk-Core/OPModelObjectReference.class.st b/repository/OpenPonk-Core/OPModelObjectReference.class.st index 6974af0f..0a13782f 100644 --- a/repository/OpenPonk-Core/OPModelObjectReference.class.st +++ b/repository/OpenPonk-Core/OPModelObjectReference.class.st @@ -4,9 +4,9 @@ Class { #instVars : [ 'uuid' ], - #category : 'OpenPonk-Core-Diagrams', + #category : 'OpenPonk-Core-LegacySupport-Diagrams', #package : 'OpenPonk-Core', - #tag : 'Diagrams' + #tag : 'LegacySupport-Diagrams' } { #category : 'as yet unclassified' } @@ -21,6 +21,12 @@ OPModelObjectReference >> = otherModelObject [ ^ self references: otherModelObject ] +{ #category : 'comparing' } +OPModelObjectReference >> hash [ + + ^ self uuid hash +] + { #category : 'comparing' } OPModelObjectReference >> modelObjectFrom: aCollection [ diff --git a/repository/OpenPonk-Core/OPNodeBounds.class.st b/repository/OpenPonk-Core/OPNodeBounds.class.st index 2199e0f8..463636dd 100644 --- a/repository/OpenPonk-Core/OPNodeBounds.class.st +++ b/repository/OpenPonk-Core/OPNodeBounds.class.st @@ -71,22 +71,20 @@ OPNodeBounds >> origin: aPoint [ { #category : 'accessing' } OPNodeBounds >> position [ - "center point" - ^ self origin + (self extent / 2) + ^ self origin + (self extent / 2) rounded ] { #category : 'accessing' } OPNodeBounds >> position: aPoint [ - "center point" self assert: self extent isNotNil description: 'Extent (width and height) must be set before setting position (origin x and y)'. - self origin: aPoint - (self extent / 2) + self origin: aPoint - (self extent / 2) rounded ] { #category : 'accessing' } diff --git a/repository/OpenPonk-Core/OPNoteTest.class.st b/repository/OpenPonk-Core/OPNoteTest.class.st new file mode 100644 index 00000000..4da19b41 --- /dev/null +++ b/repository/OpenPonk-Core/OPNoteTest.class.st @@ -0,0 +1,24 @@ +Class { + #name : 'OPNoteTest', + #superclass : 'OPAbstractNodeTest', + #category : 'OpenPonk-Core-Tests', + #package : 'OpenPonk-Core', + #tag : 'Tests' +} + +{ #category : 'instance creation' } +OPNoteTest >> newModelInstance [ + + ^ nil +] + +{ #category : 'hooks' } +OPNoteTest >> shapeClass [ + ^ OPNote +] + +{ #category : 'instance creation' } +OPNoteTest >> testEmpty [ + + self skip +]