/
ClassFactoryWithOrganizationTest.class.st
139 lines (125 loc) · 5.27 KB
/
ClassFactoryWithOrganizationTest.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"
SUnit tests for ClassFactoryWithOrganization
"
Class {
#name : #ClassFactoryWithOrganizationTest,
#superclass : #TestCase,
#instVars : [
'factory'
],
#category : #'SUnit-Tests-Core'
}
{ #category : #accessing }
ClassFactoryWithOrganizationTest class >> defaultTimeLimit [
^10 seconds
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> assertEnvironmentOf: aBehavior [
self assert: aBehavior environment = self testedEnvironment
]
{ #category : #running }
ClassFactoryWithOrganizationTest >> setUp [
| environment |
super setUp.
environment := SystemDictionary withOrganizer: SystemOrganizer new.
factory := ClassFactoryWithOrganization newWithOrganization: environment organization.
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testClassCreationInDifferentCategories [
| firstThreeClasses lastTwoClasses |
3 timesRepeat: [
factory newSubclassOf: Object instanceVariableNames: '' classVariableNames: '' category: #One].
firstThreeClasses := factory createdClasses copy.
2 timesRepeat: [
factory newSubclassOf: Object instanceVariableNames: '' classVariableNames: '' category: #Two].
lastTwoClasses := factory createdClasses copyWithoutAll: firstThreeClasses.
self assert: (firstThreeClasses allSatisfy: [:class| class category = #One]).
self assert: (lastTwoClasses allSatisfy: [:class| class category = #Two]).
factory createdClasses do: [ :aClass |
self assertEnvironmentOf: aClass ]
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testClassFastCreationInDifferentCategories [
| firstThreeClasses lastTwoClasses |
3 timesRepeat: [
factory newClassInCategory: #One].
firstThreeClasses := factory createdClasses copy.
2 timesRepeat: [
factory newClassInCategory: #Two].
lastTwoClasses := factory createdClasses copyWithoutAll: firstThreeClasses.
self assert: (firstThreeClasses allSatisfy: [:class| class category = #One]).
self assert: (lastTwoClasses allSatisfy: [:class| class category = #Two]).
factory createdClasses do: [ :aClass |
self assertEnvironmentOf: aClass ]
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testDefaultCategoryCleanUp [
| createdClassNames allClasses |
3 timesRepeat: [
factory newClass].
createdClassNames := factory createdClassNames.
factory cleanUp.
self assert: (factory createdClasses allSatisfy: [:class| class isObsolete]).
allClasses := self testedEnvironment allClasses.
self assert: (factory createdClasses noneSatisfy: [:class| allClasses includes: class]).
self deny: (self testedOrganization categories includes: factory defaultCategory).
self class environment at: #ChangeSet ifPresent: [:changeSet |
self deny: (changeSet current changedClassNames includesAnyOf: createdClassNames) ].
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testMultipleClassCreation [
5 timesRepeat: [
factory newClass].
self assert: (self testedEnvironment allClasses includesAll: factory createdClasses).
self assert: factory createdClassNames asSet size = 5.
self assert: (self testedOrganization listAtCategoryNamed: factory defaultCategory) asSet = factory createdClassNames asSet.
factory createdClasses do: [ :aClass |
self assertEnvironmentOf: aClass ]
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testPackageCleanUp [
| createdClassNames allClasses |
3 timesRepeat: [ factory newClassInCategory: #One ].
2 timesRepeat: [ factory newClassInCategory: #Two ].
createdClassNames := factory createdClassNames.
factory cleanUp.
self assert: (factory createdClasses allSatisfy: [ :class | class isObsolete ]).
allClasses := self testedEnvironment allClasses.
self assert: (factory createdClasses noneSatisfy: [ :class | allClasses includes: class ]).
self assertEmpty: (self testedOrganization categoriesMatching: factory packageName , '*').
self class environment at: #ChangeSet ifPresent: [ :changeSet | self deny: (changeSet current changedClassNames includesAnyOf: createdClassNames) ]
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testSingleClassCreation [
|class elementsInCategoryForTest |
class := factory
newSubclassOf: Object
instanceVariableNames: 'a b c'
classVariableNames: 'X Y'.
self assert: (self testedEnvironment allClasses includes: class).
factory createdClasses do: [ :aClass |
self assertEnvironmentOf: aClass ].
elementsInCategoryForTest := self testedOrganization listAtCategoryNamed: factory defaultCategory.
self assert: elementsInCategoryForTest = {class name}.
self assert: class instVarNames = #(a b c).
self assert: class classPool keys asSet = #(X Y) asSet
]
{ #category : #testing }
ClassFactoryWithOrganizationTest >> testSingleClassFastCreation [
| class elementsInCategoryForTest |
class := factory newClass.
self assert: (self testedEnvironment allClasses includes: class).
elementsInCategoryForTest := self testedOrganization listAtCategoryNamed: factory defaultCategory.
factory createdClasses do: [ :aClass | self assertEnvironmentOf: aClass ].
self assert: elementsInCategoryForTest = {class name}.
self assertEmpty: class instVarNames.
self assertEmpty: class classPool
]
{ #category : #accessing }
ClassFactoryWithOrganizationTest >> testedEnvironment [
^self testedOrganization environment
]
{ #category : #accessing }
ClassFactoryWithOrganizationTest >> testedOrganization [
^factory organization
]