Skip to content

Commit

Permalink
Add a failing test + start to rework some things
Browse files Browse the repository at this point in the history
  • Loading branch information
jecisc committed Jun 5, 2024
1 parent f4e18cb commit 7b7fb20
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 7 deletions.
100 changes: 100 additions & 0 deletions src/Famix-Diff-Core-Tests/FamixDiffTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,89 @@ FamixDiffTest >> createModelWith: somePackages [
^ model
]

{ #category : #tests }
FamixDiffTest >> createTestDiffForAdditionsAndRemovalsEdgeCases [

| baseModel targetModel |
self generateModel1.
baseModel := self importModelNamed: 'base' fromPackages: {
self packageName1.
self packageName2 }.
self packageOrganizer
packageNamed: self packageName1 ifPresent: [ :package | package removeFromSystem ];
packageNamed: self packageName2 ifPresent: [ :package | package removeFromSystem ].

self generateModel2.
targetModel := self importModelNamed: 'target' fromPackages: {
self packageName2.
self packageName3 }.
self packageOrganizer
packageNamed: self packageName2 ifPresent: [ :package | package removeFromSystem ];
packageNamed: self packageName3 ifPresent: [ :package | package removeFromSystem ].

snapshot
baseModel: baseModel;
targetModel: targetModel.
self runDiff
]

{ #category : #tests }
FamixDiffTest >> generateModel1 [

| c1 c2 |
c1 := self class classInstaller make: [ :builder |
builder
name: #C1;
package: self packageName1 ].
c1 compile: 'm1 ^ true'.
c1 compile: 'm2 | temp | temp := false. ^ temp'.

c2 := self class classInstaller make: [ :builder |
builder
name: #C2;
package: self packageName2 ].

c2 compile: 'm3 ^ 1'.
c2 compile: 'm4 | temp2 | temp2 := 3. ^ temp2'
]

{ #category : #tests }
FamixDiffTest >> generateModel2 [

| c2 c3 |
c2 := self class classInstaller make: [ :builder |
builder
name: #C2;
package: self packageName2 ].
c2 compile: 'm2 | temp | temp := false. ^ temp'.
c2 compile: 'm3 ^ 1'.

c3 := self class classInstaller make: [ :builder |
builder
name: #C3;
package: self packageName3 ].
c3 compile: 'm4 |temp2 | temp2 := 3. ^ temp2'.
c3 compile: 'm5 |temp3 | temp3 := 5. ^ temp3'
]

{ #category : #accessing }
FamixDiffTest >> packageName1 [

^ 'Famix-Diff-TestResource2-P1'
]

{ #category : #accessing }
FamixDiffTest >> packageName2 [

^ 'Famix-Diff-TestResource2-P2'
]

{ #category : #accessing }
FamixDiffTest >> packageName3 [

^ 'Famix-Diff-TestResource2-P3'
]

{ #category : #tests }
FamixDiffTest >> runDiff [
^ result := snapshot run result
Expand All @@ -34,6 +117,23 @@ FamixDiffTest >> setUp [
snapshot := FXDiff new
]

{ #category : #tests }
FamixDiffTest >> testAddedEntities [

| addition |
self createTestDiffForAdditionsAndRemovalsEdgeCases.
addition := result additions.

self assert: (result select: [ :change | change baseEntity isKindOf: FamixStPackage ]) size equals: 1.
self assert: (result detect: [ :change | change baseEntity isKindOf: FamixStPackage ]) name equals: self packageName3.
self assert: (result select: [ :change | change baseEntity isKindOf: FamixStClass ]) size equals: 1.
self assert: (result detect: [ :change | change baseEntity isKindOf: FamixStClass ]) name equals: #C3.
self assert: (result select: [ :change | change baseEntity isKindOf: FamixStMethod ]) size equals: 1.
self assert: (result detect: [ :change | change baseEntity isKindOf: FamixStMethod ]) name equals: #m5.
self assert: (result select: [ :change | change baseEntity isKindOf: FamixStLocalVariable ]) size equals: 1.
self assert: (result detect: [ :change | change baseEntity isKindOf: FamixStLocalVariable ]) name equals: #temp3
]

{ #category : #tests }
FamixDiffTest >> testDiffAssociations [
snapshot
Expand Down
32 changes: 25 additions & 7 deletions src/Famix-Diff-Core/FamixDiffResolver.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,17 @@ FamixDiffResolver >> addAssociations: asociations [
yourself) ]
]

{ #category : #'run-entities' }
FamixDiffResolver >> addedEntitiesFrom: targetEntities [
"Each entities in target model that couldn't be matched with entity in base model is considered as added."

targetEntities ifEmpty: [ ^ false ].

targetEntities do: [ :entity | self changesDico at: entity put: (FamixAddChange entity: entity) ].

^ true
]

{ #category : #accessing }
FamixDiffResolver >> assocChanges: aCollection [
^ assocChanges := aCollection
Expand Down Expand Up @@ -138,13 +149,9 @@ FamixDiffResolver >> diffEntities [

"as soon as one return true, go to next loop iteration"
(self identityMatchesFrom: baseTodo to: targetTodo) or: [
(self renameMatchesFrom: baseTodo to: targetTodo) or: [ self moveMatchesFrom: baseTodo to: targetTodo ] ] ] whileTrue.

"Each entities in base model that couldn't be matched with entity in target model is considered as removed."
(self entitiesToMatchIn: self baseModel) do: [ :e | self changesDico at: e put: (FamixRemovalChange entity: e) ].

"Each entities in target model that couldn't be matched with entity in base model is considered as added."
(self entitiesToMatchIn: self targetModel) do: [ :e | self changesDico at: e put: (FamixAddChange entity: e) ] ] asJob run
(self renameMatchesFrom: baseTodo to: targetTodo) or: [
(self moveMatchesFrom: baseTodo to: targetTodo) or: [ (self removedEntitiesFrom: baseTodo) or: [ self addedEntitiesFrom: targetTodo ] ] ] ] ] whileTrue ]
asJob run
]

{ #category : #'run-entities' }
Expand Down Expand Up @@ -262,6 +269,17 @@ FamixDiffResolver >> removeFamixDiffCaches [
self packageOrganizer packageNamed: self class generatedPackageName ifPresent: [ :package | package removeFromSystem ]
]

{ #category : #'run-entities' }
FamixDiffResolver >> removedEntitiesFrom: baseEntities [
"Each entities in base model that couldn't be matched with entity in target model is considered as removed."

baseEntities ifEmpty: [ ^ false ].

baseEntities do: [ :entity | self changesDico at: entity put: (FamixRemovalChange entity: entity) ].

^ true
]

{ #category : #'run-entities' }
FamixDiffResolver >> renameMatchesFrom: baseEntities to: targetEntities [
"Find the entities that have been renamed between base version and target version (using #renameMatch:resolver: message).
Expand Down
14 changes: 14 additions & 0 deletions src/Famix-Diff-Core/FamixDiffResult.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ Class {
{ #category : #accessing }
FamixDiffResult >> additionChanges [

self deprecated: 'Use #additions instead' transformWith: '`@rcv additionChanges' -> '`@rcv additions'.
^ self additions
]

{ #category : #accessing }
FamixDiffResult >> additions [

^ self select: [ :change | change isAddition ]
]

Expand Down Expand Up @@ -50,6 +57,13 @@ FamixDiffResult >> realChanges [
{ #category : #accessing }
FamixDiffResult >> removalChanges [

self deprecated: 'Use #removals instead' transformWith: '`@rcv removalChanges' -> '`@rcv removals'.
^ self removals
]

{ #category : #accessing }
FamixDiffResult >> removals [

^ self select: [ :change | change isRemoval ]
]

Expand Down

0 comments on commit 7b7fb20

Please sign in to comment.