-
-
Notifications
You must be signed in to change notification settings - Fork 353
/
SlotBasicTest.class.st
273 lines (198 loc) · 6.64 KB
/
SlotBasicTest.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
Class {
#name : #SlotBasicTest,
#superclass : #SlotSilentTest,
#category : #'Slot-Tests-ClassBuilder'
}
{ #category : #'tests - class slots' }
SlotBasicTest >> testAddClassSlotAndMigrate [
| classAdded classModified |
classAdded :=
self make: [ :builder |
builder classSlots: #(a) ].
classAdded instVarNamed: #a put: $A.
classModified :=
self make: [ :builder |
builder classSlots: #(a b) ].
self assert: (classModified instVarNamed: #a) equals: $A.
self assert: (classModified instVarNamed: #b) isNil
]
{ #category : #'tests - shared pools' }
SlotBasicTest >> testAddSharedPool [
self make: [ :builder |
builder sharedPools: '' ].
aClass := self make: [ :builder |
builder sharedPools: 'TestSharedPool' ].
self assert: (aClass sharedPools includes: TestSharedPool)
]
{ #category : #'tests -shared variables' }
SlotBasicTest >> testAddSharedVariable [
self make: [ :builder |
builder sharedVariablesFromString: '' ].
aClass := self make: [ :builder |
builder sharedVariablesFromString: 'Var' ].
self assert: aClass classVarNames equals: #(Var)
]
{ #category : #'tests - basic' }
SlotBasicTest >> testBasicClassBuilding [
aClass := self make: [ :builder | builder name: self aClassName ].
self deny: aClass classLayout isNil.
self assert: aClass name equals: self aClassName.
self assert: (self class environment at: self aClassName) identicalTo: aClass
]
{ #category : #'tests - comments' }
SlotBasicTest >> testClassWithComment [
aClass := self make: [ :builder |
builder
name: self aClassName;
comment: 'A class Comment' ].
self assert: aClass name equals: self aClassName.
self assert: aClass comment equals: 'A class Comment'
]
{ #category : #'tests - comments' }
SlotBasicTest >> testClassWithCommentAndStamp [
aClass := self make: [ :builder |
builder
name: self aClassName;
comment: 'A class Comment' stamp: (Object>>#halt) stamp ].
self assert: aClass name equals: self aClassName.
self assert: aClass comment equals: 'A class Comment'.
self assert: aClass organization commentStamp equals: (Object>>#halt) stamp
]
{ #category : #'tests - basic' }
SlotBasicTest >> testNewCompiledMethodClass [
aClass := self makeWithLayout: CompiledMethodLayout.
self deny: aClass isPointers.
self deny: aClass isFixed.
self assert: aClass isBytes.
self deny: aClass isWeak
]
{ #category : #'tests - basic' }
SlotBasicTest >> testNewPointerClass [
aClass := self makeWithLayout: FixedLayout.
self assert: aClass isPointers.
self assert: aClass isFixed.
self assertEmpty: aClass instVarNames
]
{ #category : #'tests - basic' }
SlotBasicTest >> testNewPointerClassWithSlots [
aClass := self
makeWithLayout: FixedLayout
andSlots: { #id. #name }.
self assert: (aClass instVarNames includes: 'id').
self assert: (aClass instVarNames includes: 'name')
]
{ #category : #'tests - basic' }
SlotBasicTest >> testNewVariableByteClass [
aClass := self makeWithLayout: ByteLayout.
self deny: aClass isPointers.
self deny: aClass isFixed.
self assert: aClass isBytes.
self assert: aClass isVariable
]
{ #category : #'tests - basic' }
SlotBasicTest >> testNewVariableWordClass [
aClass := self makeWithLayout: WordLayout.
self deny: aClass isPointers.
self deny: aClass isFixed.
self assert: aClass isWords.
self assert: aClass isVariable
]
{ #category : #'tests - basic' }
SlotBasicTest >> testNewWeakClass [
aClass := self makeWithLayout: WeakLayout.
self assert: aClass isPointers.
self deny: aClass isFixed.
self assert: aClass isWords.
self assert: aClass isWeak
]
{ #category : #'tests - class slots' }
SlotBasicTest >> testRemoveClassSlotAndMigrate [
| classAdded classModified |
classAdded :=
self make: [ :builder |
builder classSlots: #(a b) ].
classAdded instVarNamed: #a put: $A.
classModified :=
self make: [ :builder |
builder classSlots: #(a) ].
self assert: (classModified instVarNamed: #a) equals: $A.
self should: [ classModified instVarNamed: #b ] raise: Error
]
{ #category : #'tests - shared pools' }
SlotBasicTest >> testRemoveSharedPool [
self make: [ :builder | builder sharedPools: 'TestSharedPool' ].
aClass := self make: [ :builder | builder sharedPools: '' ].
self assertEmpty: aClass sharedPools
]
{ #category : #'tests -shared variables' }
SlotBasicTest >> testRemoveSharedVariable [
self make: [ :builder | builder sharedVariablesFromString: 'Var' ].
aClass := self make: [ :builder | builder sharedVariablesFromString: '' ].
self assertEmpty: aClass classVarNames
]
{ #category : #'tests - class slots' }
SlotBasicTest >> testSwitchClassSlotAndMigrate [
| classAdded classModified |
classAdded :=
self make: [ :builder |
builder classSlots: #(a b) ].
"Add methods"
classAdded class
compile: 'a ^a';
compile: 'b ^b'.
"Put values"
classAdded instVarNamed: #a put: $A.
classAdded instVarNamed: #b put: $B.
"Modify the class"
classModified :=
self make: [ :builder |
builder classSlots: #(b a) ].
"The instance was migrated"
self assert: (classModified instVarNamed: #a) equals: $A.
self assert: (classModified instVarNamed: #b) equals: $B.
"The methods were migrated"
self assert: classModified a equals: $A.
self assert: classModified b equals: $B
]
{ #category : #'tests - class slots' }
SlotBasicTest >> testWithClassSlots [
aClass := self make: [ :builder |
builder classSlots: #(a) ].
self assert: aClass class instVarNames equals: #(a).
aClass instVarNamed: #a put: $A.
self assert: (aClass instVarNamed: #a) equals: $A
]
{ #category : #'tests - shared pools' }
SlotBasicTest >> testWithSharedPool [
aClass := self make: [ :builder |
builder sharedPools: 'TestSharedPool' ].
aClass class compile: 'one ^One'.
self assert: (aClass sharedPools includes: TestSharedPool).
self assert: aClass one equals: 1
]
{ #category : #'tests -shared variables' }
SlotBasicTest >> testWithSharedVariable [
aClass := self make: [ :builder |
builder sharedVariablesFromString: 'Var' ].
aClass class
compile: 'var:x Var:=x';
compile: 'var ^Var'.
aClass var: true.
self assert: aClass classVarNames equals: #(Var).
self assert: aClass var
]
{ #category : #'tests - class slots' }
SlotBasicTest >> testWithoutClassSlots [
aClass := self make: [ :builder | builder classSlots: #() ].
self assertEmpty: aClass classVarNames
]
{ #category : #'tests - shared pools' }
SlotBasicTest >> testWithoutSharedPools [
aClass := self make: [ :builder | builder sharedPools: '' ].
self assertEmpty: aClass sharedPools
]
{ #category : #'tests -shared variables' }
SlotBasicTest >> testWithoutSharedVariables [
aClass := self make: [ :builder | builder sharedVariablesFromString: '' ].
self assertEmpty: aClass classVarNames
]