/
SlotClassVariableTest.class.st
120 lines (93 loc) · 3.09 KB
/
SlotClassVariableTest.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
Class {
#name : #SlotClassVariableTest,
#superclass : #SlotClassBuilderTest,
#category : #'Slot-Tests-ClassBuilder'
}
{ #category : #tests }
SlotClassVariableTest >> testAccessorInstanceVariableSlotGeneratesAccessors [
| class1 |
class1 := self make: [ :builder |
builder
name: self aClassName;
superclass: Object ].
class1 class addSlot: (AccessorInstanceVariableSlot named: #foo).
self assert: (class1 class canUnderstand: #foo).
self assert: (class1 class canUnderstand: #foo:)
]
{ #category : #tests }
SlotClassVariableTest >> testClassVariableDoesNotDuplicatesSubclassesOfSuperclass [
"Issue: 13028"
| class1 class2 |
class1 := self make: [ :builder |
builder
name: self aClassName;
superclass: Object ].
class2 := self make: [ :builder |
builder
name: self anotherClassName;
superclass: class1 ].
self assert: class1 subclasses equals: { class2 }.
class2 := self make: [ :builder |
builder
name: self anotherClassName;
superclass: class1;
sharedVariablesFromString: 'ASharedVariable' ].
self assert: class1 subclasses equals: { class2 }
]
{ #category : #tests }
SlotClassVariableTest >> testSlotIsPersistedAfterRebuildOfClass [
| class1 |
class1 := self make: [ :builder |
builder
name: self aClassName;
superclass: Object ].
class1 class addSlot: (AccessorInstanceVariableSlot named: #Foo).
self assert: class1 class slots size equals: 1.
self assert: (class1 class slots at:1) name equals: #Foo.
self assert: (class1 class slots at:1) class equals: AccessorInstanceVariableSlot.
class1 := self make: [ :builder |
builder
name: self aClassName;
superclass: Object ].
self assert: class1 class slots size equals: 1.
self assert: (class1 class slots at:1) name equals: #Foo.
self assert: (class1 class slots at:1) class equals: AccessorInstanceVariableSlot
]
{ #category : #tests }
SlotClassVariableTest >> testWantsInitializationAddsInitializeSlot [
| class1 |
class1 := self make: [ :builder |
builder
name: self aClassName;
superclass: Object ].
class1 addSlot: WriteOnceSlot new.
self assert: class1 slots size equals: 1.
self assert: ((class1 >> #initialize) hasLiteral: #initializeSlots:).
"validate 'self class initializeSlots: self' is the first message sent"
self assert: (class1 >> #initialize) literals first equals: #class.
self assert: (class1 >> #initialize) literals second equals: #initializeSlots:
]
{ #category : #tests }
SlotClassVariableTest >> testWantsInitializationSkipInitializeSlotIfAlreadyInHierarchy [
| class1 class2 |
class1 := self make: [ :builder |
builder
name: self aClassName;
superclass: Object;
slots: {
WriteOnceSlot new
name: #foo;
yourself } ].
self assert: class1 slots size equals: 1.
self assert: ((class1 >> #initialize) hasLiteral: #initializeSlots:).
class2 := self make: [ :builder |
builder
name: self anotherClassName;
superclass: class1;
slots: {
WriteOnceSlot new
name: #bar;
yourself } ].
self assert: class2 slots size equals: 1.
self deny: ((class2 >> #initialize) hasLiteral: #initializeSlots:)
]