Skip to content

Commit

Permalink
Adding tests, refactoring and fixing found issues
Browse files Browse the repository at this point in the history
  • Loading branch information
carolahp committed Dec 13, 2023
1 parent a026b65 commit 9881de9
Show file tree
Hide file tree
Showing 12 changed files with 262 additions and 47 deletions.
11 changes: 4 additions & 7 deletions src/NewTools-Scopes-Editor/ScopeScopeNode.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,10 @@ Class {
{ #category : 'accessing' }
ScopeScopeNode >> children [

| fullPackages orphanClasses packageChildren classChildren clss |
clss := self value classes.

fullPackages := ScopesManager fullPackagesFrom: clss.
orphanClasses := ScopesManager
orphanClassesIn: clss
havingFullPackages: fullPackages.
| fullPackages orphanClasses packageChildren classChildren |

fullPackages := self value fullPackages.
orphanClasses := self value orphanClasses.

packageChildren := fullPackages collect: [ :package |
ScopePackageNode on: package ].
Expand Down
6 changes: 6 additions & 0 deletions src/NewTools-Scopes-Resources-A-Tests/ScClassA3.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Class {
#name : 'ScClassA3',
#superclass : 'Object',
#category : 'NewTools-Scopes-Resources-A-Tests',
#package : 'NewTools-Scopes-Resources-A-Tests'
}
6 changes: 6 additions & 0 deletions src/NewTools-Scopes-Resources-B-Tests/ScClassB1Sub.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Class {
#name : 'ScClassB1Sub',
#superclass : 'ScClassB1',
#category : 'NewTools-Scopes-Resources-B-Tests',
#package : 'NewTools-Scopes-Resources-B-Tests'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Class {
#name : 'ScClassB1SubSub',
#superclass : 'ScClassB1Sub',
#category : 'NewTools-Scopes-Resources-B-Tests',
#package : 'NewTools-Scopes-Resources-B-Tests'
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
Class {
#name : 'ScopesManagesOperationsTest',
#name : 'ScopesManagerOperationsTest',
#superclass : 'TestCase',
#category : 'NewTools-Scopes-Tests',
#package : 'NewTools-Scopes-Tests'
}

{ #category : 'tests' }
ScopesManagesOperationsTest >> testAddClassToOrEnvironment [
ScopesManagerOperationsTest >> testAddClassToOrEnvironment [

| packageEnvB classEnv orEnv |

Expand All @@ -20,12 +20,12 @@ ScopesManagesOperationsTest >> testAddClassToOrEnvironment [
orEnv addClass: ScClassA1.
orEnv addClass: ScClassA1 class.

self assert: orEnv allClasses asSet equals: { ScClassA1 . ScClassB1 } asSet.
self assert: orEnv definedClasses asSet equals: { ScClassA1 . ScClassB1 . ScClassB1Sub . ScClassB1SubSub } asSet.
self assert: orEnv packages asSet equals: { ScClassA1 package . ScClassB1 package } asSet
]

{ #category : 'tests' }
ScopesManagesOperationsTest >> testAddClassToOrEnvironmentMakingAPackageFull [
ScopesManagerOperationsTest >> testAddClassToOrEnvironmentMakingAPackageFull [

| packageEnv classEnvA1 orEnv |

Expand All @@ -45,7 +45,7 @@ ScopesManagesOperationsTest >> testAddClassToOrEnvironmentMakingAPackageFull [
]

{ #category : 'tests' }
ScopesManagesOperationsTest >> testRemoveClassFromOrEnvironment [
ScopesManagerOperationsTest >> testRemoveClassFromOrEnvironment [

| classEnvA1 packageEnvB orEnv |

Expand All @@ -60,7 +60,7 @@ ScopesManagesOperationsTest >> testRemoveClassFromOrEnvironment [
]

{ #category : 'tests' }
ScopesManagesOperationsTest >> testRemoveClassFromOrEnvironmentBreakingFullPackage [
ScopesManagerOperationsTest >> testRemoveClassFromOrEnvironmentBreakingFullPackage [

| packageEnvA classEnv orEnv |

Expand All @@ -74,5 +74,5 @@ ScopesManagesOperationsTest >> testRemoveClassFromOrEnvironmentBreakingFullPacka
orEnv removeClass: ScClassA1.
orEnv removeClass: ScClassA1 class.

self assert: orEnv allClasses equals: { ScClassA2 }
self assert: orEnv definedClasses equals: { ScClassA2 . ScClassA3 } asSet
]
144 changes: 144 additions & 0 deletions src/NewTools-Scopes-Tests/ScopesManagerTest.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
Class {
#name : 'ScopesManagerTest',
#superclass : 'TestCase',
#category : 'NewTools-Scopes-Tests',
#package : 'NewTools-Scopes-Tests'
}

{ #category : 'private' }
ScopesManagerTest >> scopesManagerClass [
^ ScopesManager
]

{ #category : 'private' }
ScopesManagerTest >> testEditScopeAddingClass [
| scope oldClasses newClasses |
oldClasses := { ScClassA1 } asSet.
scope := self scopesManagerClass newScopeFrom: oldClasses.
self assert: scope fullPackages equals: Set new.
self assert: scope orphanClasses equals: oldClasses.

newClasses := { ScClassA1 . ScClassA2 } asSet.
self scopesManagerClass editScope: scope withNodes: newClasses.
self assert: scope fullPackages equals: Set new.
self assert: scope orphanClasses equals: newClasses.

]

{ #category : 'private' }
ScopesManagerTest >> testEditScopeAddingClassAndCompletingFullPackage [
| scope oldClasses newClasses |
oldClasses := { ScClassA1 . ScClassA2 } asSet.
scope := self scopesManagerClass newScopeFrom: oldClasses.
self assert: scope fullPackages equals: Set new.
self assert: scope orphanClasses equals: oldClasses.

newClasses := { ScClassA1 . ScClassA2 . ScClassA3 } asSet.
self scopesManagerClass editScope: scope withNodes: newClasses.
self assert: scope fullPackages equals: {ScClassA1 package} asSet.
self assert: scope orphanClasses equals: Set new.

]

{ #category : 'private' }
ScopesManagerTest >> testEditScopeRemovingClass [
| scope oldClasses newClasses |
oldClasses := { ScClassA1 . ScClassA2 } asSet.
scope := self scopesManagerClass newScopeFrom: oldClasses.
self assert: scope fullPackages equals: Set new.
self assert: scope orphanClasses equals: oldClasses.

newClasses := { ScClassA1 } asSet.
self scopesManagerClass editScope: scope withNodes: newClasses.
self assert: scope fullPackages equals: Set new.
self assert: scope orphanClasses equals: newClasses.

]

{ #category : 'private' }
ScopesManagerTest >> testEditScopeRemovingClassAndBreakingFullPackage [
| scope oldClasses newClasses |
oldClasses := { ScClassA1 . ScClassA2 . ScClassA3 } asSet.
scope := self scopesManagerClass newScopeFrom: oldClasses.
self assert: scope fullPackages equals: {ScClassA1 package} asSet.
self assert: scope orphanClasses equals: Set new.

newClasses := { ScClassA1 . ScClassA2 } asSet.
self scopesManagerClass editScope: scope withNodes: newClasses.
self assert: scope fullPackages equals: Set new.
self assert: scope orphanClasses equals: newClasses.

]

{ #category : 'tests' }
ScopesManagerTest >> testNewScopeFromAPackageWithExtendedClasses [
| packages scope |
packages := { ScClassC package } asSet.
scope := self scopesManagerClass newScopeFrom: packages.
"new scopes are always RBOrEnvironments"
self assert: scope isCompositeEnvironment.
self assert: scope definedPackages asSet equals: packages.
self assert: scope definedClasses equals: (packages flatCollect: [ :p | p definedClasses ]).
self assert: scope fullPackages equals: packages.
self assert: scope orphanClasses equals: Set new
]

{ #category : 'tests' }
ScopesManagerTest >> testNewScopeFromASetOfClasses [
| classes scope |
classes := { ScClassA1 . ScClassA2 .ScClassA3 . ScClassB1 } asSet.
scope := self scopesManagerClass newScopeFrom: classes.
"new scopes are always RBOrEnvironments"
self assert: scope isCompositeEnvironment.
self assert: scope packages asSet equals: { ScClassA1 package . ScClassB1 package } asSet.
self assert: scope definedClasses equals: classes.
self assert: scope fullPackages equals: { ScClassA1 package } asSet.
self assert: scope orphanClasses asSet equals: { ScClassB1 } asSet
]

{ #category : 'tests' }
ScopesManagerTest >> testNewScopeFromASetOfPackages [
| packages scope |
packages := { ScClassA1 package . ScClassB1 package } asSet.
scope := self scopesManagerClass newScopeFrom: packages.
"new scopes are always RBOrEnvironments"
self assert: scope isCompositeEnvironment.
self assert: scope packages asSet equals: packages.
self assert: scope definedClasses equals: (packages flatCollect: [ :p | p definedClasses ]).
self assert: scope fullPackages equals: packages.
self assert: scope orphanClasses equals: Set new
]

{ #category : 'tests' }
ScopesManagerTest >> testNewScopeFromASinglePackageAndItsClasses [
| classes scope packages packageAndItsClasses |
classes := { ScClassA1 . ScClassA2 .ScClassA3 } asSet.
packages := { ScClassA1 package } asSet.
packageAndItsClasses := Set newFrom: classes.
packageAndItsClasses addAll: packages.

scope := self scopesManagerClass newScopeFrom: packageAndItsClasses.
"new scopes are always RBOrEnvironments"
self assert: scope isCompositeEnvironment.
self assert: scope packages asSet equals: packages.
self assert: scope definedClasses equals: classes.
self assert: scope fullPackages equals: packages.
self assert: scope orphanClasses asSet equals: Set new
]

{ #category : 'tests' }
ScopesManagerTest >> testNewScopeFromASinglePackageAndSomeOfItsClasses [
| classes scope packages packageAndItsClasses |
classes := { ScClassA1 . ScClassA2 } asSet.
packages := { ScClassA1 package } asSet.
packageAndItsClasses := Set newFrom: classes.
packageAndItsClasses addAll: packages.

scope := self scopesManagerClass newScopeFrom: packageAndItsClasses.
"new scopes are always RBOrEnvironments"
self assert: scope isCompositeEnvironment.
self assert: scope definedPackages asSet equals: packages.
self assert: scope definedClasses equals: ScClassA1 package definedClasses.
self assert: scope fullPackages equals: packages.
self assert: scope orphanClasses asSet equals: Set new
]
5 changes: 5 additions & 0 deletions src/NewTools-Scopes/RBClassEnvironment.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ RBClassEnvironment >> asScopeNode [
^ ScopeClassNode on: self
]

{ #category : '*NewTools-Scopes' }
RBClassEnvironment >> definedClassesDo: aBlock [
^ self classesDo: aBlock
]

{ #category : '*NewTools-Scopes' }
RBClassEnvironment >> removePackage: aSymbol [
^ self
Expand Down
21 changes: 21 additions & 0 deletions src/NewTools-Scopes/RBCompositeEnvironment.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,27 @@ RBCompositeEnvironment >> asScopeNode [
^ ScopeScopeNode on: self
]

{ #category : '*NewTools-Scopes' }
RBCompositeEnvironment >> definedClasses [
| definedClasses |
definedClasses := IdentitySet new: 4096.
self definedClassesDo: [ :each | each isMeta ifFalse: [definedClasses add: each] ].
^ definedClasses
]

{ #category : '*NewTools-Scopes' }
RBCompositeEnvironment >> definedPackages [
"Defined packages ignores packages got from extended classes"
^ self definedClasses collect: [ :class | class package ]
]

{ #category : '*NewTools-Scopes' }
RBCompositeEnvironment >> fullPackages [

"full packages are those where all classes belong to the scope"
^ ScopesManager fullPackagesFrom: self definedClasses
]

{ #category : '*NewTools-Scopes' }
RBCompositeEnvironment >> removeClass: aClass [

Expand Down
12 changes: 12 additions & 0 deletions src/NewTools-Scopes/RBOrEnvironment.extension.st
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
Extension { #name : 'RBOrEnvironment' }

{ #category : '*NewTools-Scopes' }
RBOrEnvironment >> definedClassesDo: aBlock [
| enumerated |
enumerated := IdentitySet new.
environment definedClassesDo: [ :each |
aBlock value: each.
enumerated add: each].
self orEnvironment definedClassesDo: [ :each |
(enumerated includes: each)
ifFalse: [ aBlock value: each ] ]
]

{ #category : '*NewTools-Scopes' }
RBOrEnvironment >> isTerminal [

Expand Down
25 changes: 25 additions & 0 deletions src/NewTools-Scopes/RBPackageEnvironment.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,36 @@ RBPackageEnvironment >> asScopeNode [
^ ScopePackageNode on: self
]

{ #category : '*NewTools-Scopes' }
RBPackageEnvironment >> definedClassesDo: aBlock [
| enumerated enumerator |
enumerated := IdentitySet new.
enumerator := [ :each |
(enumerated includes: each) ifFalse: [
(environment includesClass: each)
ifTrue: [ aBlock value: each ].
(environment includesClass: each classSide)
ifTrue: [ aBlock value: each classSide].
enumerated add: each ] ].
packages do: [ :package |
package definedClasses do: enumerator ]
]

{ #category : '*NewTools-Scopes' }
RBPackageEnvironment >> fullPackages [
^ self packages
]

{ #category : '*NewTools-Scopes' }
RBPackageEnvironment >> isPackageEnvironment [
^ true
]

{ #category : '*NewTools-Scopes' }
RBPackageEnvironment >> orphanClasses [
^ Set new
]

{ #category : '*NewTools-Scopes' }
RBPackageEnvironment >> removeClass: aClass [
^ self
Expand Down
4 changes: 2 additions & 2 deletions src/NewTools-Scopes/ScopeClyEnvironment.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ ScopeClyEnvironment >> changesAnnouncer: anObject [
]

{ #category : 'class management' }
ScopeClyEnvironment >> definedClassesInPackage: aRPackage [
ScopeClyEnvironment >> definedClassesInPackage: aPackage [
"ToDo: Consider orphan classes"
^ aRPackage definedClasses
^ aPackage definedClasses
]

{ #category : 'accessing' }
Expand Down
Loading

0 comments on commit 9881de9

Please sign in to comment.