-
-
Notifications
You must be signed in to change notification settings - Fork 353
/
SlotClassBuilderTest.class.st
124 lines (102 loc) · 3.05 KB
/
SlotClassBuilderTest.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
Class {
#name : #SlotClassBuilderTest,
#superclass : #TestCase,
#instVars : [
'aClass',
'anotherClass',
'yetAnotherClass'
],
#category : #'Slot-Tests-ClassBuilder'
}
{ #category : #'helpers-names' }
SlotClassBuilderTest >> aCategory [
^ 'SlotTestsTmp'
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> aClassName [
^ #SlotTestsClassA
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> anotherCategory [
^ 'SlotTestsTmp-Another'
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> anotherClassName [
^ #SlotTestsClassB
]
{ #category : #running }
SlotClassBuilderTest >> assertTraitIntegrity [
self assert: TOne traitUsers isHealthy.
self assert: TOne classTrait traitUsers isHealthy.
self assert: TTwo traitUsers isHealthy.
self assert: TTwo classTrait traitUsers isHealthy
]
{ #category : #running }
SlotClassBuilderTest >> cleanUpTrait: trait [
"During development some tests might invalidate the trait internal state.
To avoid follow-up failures we reset the trait state here as good as possible."
trait traitUsers removeAll.
trait classTrait traitUsers removeAll
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> layoutClasses [
^ { ByteLayout. WordLayout. FixedLayout. VariableLayout. WeakLayout }
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> layoutClassesWithSlots [
^ { FixedLayout. VariableLayout. WeakLayout }
]
{ #category : #'helpers-building' }
SlotClassBuilderTest >> make: anUnaryBlock [
"I build a class for testing, providing basic default values, but eventually customized by the received unary block."
^Smalltalk classInstaller make: [:builder|
builder
superclass: Object;
name: self aClassName;
layoutClass: FixedLayout;
category: self aCategory.
anUnaryBlock value: builder
]
]
{ #category : #'helpers-building' }
SlotClassBuilderTest >> makeWithLayout: aClassLayout [
^self makeWithLayout: aClassLayout andSlots: {}
]
{ #category : #'helpers-building' }
SlotClassBuilderTest >> makeWithLayout: aClassLayout andSlots: someSlots [
"
I create a class using the Slot class builder given a class layout and a collection of slots.
"
^self make: [:builder|
builder
layoutClass: aClassLayout;
slots: someSlots
]
]
{ #category : #running }
SlotClassBuilderTest >> tearDown [
"We remove the classes that could have been created during test run"
SystemAnnouncer uniqueInstance suspendAllWhile: [
{ self aClassName. self anotherClassName. self yetAnotherClassName. self yetYetAnotherClassName } do: [ :each |
Smalltalk globals
at: each
ifPresent: [ :class | class removeFromSystem ]]].
SystemAnnouncer uniqueInstance unsubscribe: self.
self
cleanUpTrait: TOne;
cleanUpTrait: TTwo.
Smalltalk organization removeCategory: self aCategory.
(RPackageOrganizer default
packageNamed: self aCategory
ifAbsent: [ ^ self ])
unregister.
super tearDown
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> yetAnotherClassName [
^ #SlotTestsClassC
]
{ #category : #'helpers-names' }
SlotClassBuilderTest >> yetYetAnotherClassName [
^ #SlotTestsClassD
]