@@ -43,6 +43,35 @@ ResilientClassTestSuite.test("ClassWithResilientProperty") {
43
43
expectEqual ( c. color, 50 )
44
44
}
45
45
46
+
47
+ // Generic class with resilient stored property
48
+
49
+ public class GenericClassWithResilientProperty < T> {
50
+ public let s1 : Size
51
+ public let t : T
52
+ public let s2 : Size
53
+
54
+ public init ( s1: Size , t: T , s2: Size ) {
55
+ self . s1 = s1
56
+ self . t = t
57
+ self . s2 = s2
58
+ }
59
+ }
60
+
61
+ ResilientClassTestSuite . test ( " GenericClassWithResilientProperty " ) {
62
+ let c = GenericClassWithResilientProperty < Int32 > (
63
+ s1: Size ( w: 10 , h: 20 ) ,
64
+ t: 30 ,
65
+ s2: Size ( w: 40 , h: 50 ) )
66
+
67
+ expectEqual ( c. s1. w, 10 )
68
+ expectEqual ( c. s1. h, 20 )
69
+ expectEqual ( c. t, 30 )
70
+ expectEqual ( c. s2. w, 40 )
71
+ expectEqual ( c. s2. h, 50 )
72
+ }
73
+
74
+
46
75
// Concrete class with non-fixed size stored property
47
76
48
77
public class ClassWithResilientlySizedProperty {
@@ -71,4 +100,125 @@ ResilientClassTestSuite.test("ClassWithResilientlySizedProperty") {
71
100
expectEqual ( c. color, 60 )
72
101
}
73
102
103
+
104
+ // Concrete subclass of fixed-layout class with resilient stored property
105
+
106
+ public class ChildOfParentWithResilientStoredProperty : ClassWithResilientProperty {
107
+ let enabled : Int32
108
+
109
+ public init ( p: Point , s: Size , color: Int32 , enabled: Int32 ) {
110
+ self . enabled = enabled
111
+ super. init ( p: p, s: s, color: color)
112
+ }
113
+ }
114
+
115
+ ResilientClassTestSuite . test ( " ChildOfParentWithResilientStoredProperty " ) {
116
+ let c = ChildOfParentWithResilientStoredProperty (
117
+ p: Point ( x: 10 , y: 20 ) ,
118
+ s: Size ( w: 30 , h: 40 ) ,
119
+ color: 50 ,
120
+ enabled: 60 )
121
+
122
+ expectEqual ( c. p. x, 10 )
123
+ expectEqual ( c. p. y, 20 )
124
+ expectEqual ( c. s. w, 30 )
125
+ expectEqual ( c. s. h, 40 )
126
+ expectEqual ( c. color, 50 )
127
+ expectEqual ( c. enabled, 60 )
128
+ }
129
+
130
+
131
+ // Concrete subclass of fixed-layout class with resilient stored property
132
+
133
+ public class ChildOfOutsideParentWithResilientStoredProperty : OutsideParentWithResilientProperty {
134
+ let enabled : Int32
135
+
136
+ public init ( p: Point , s: Size , color: Int32 , enabled: Int32 ) {
137
+ self . enabled = enabled
138
+ super. init ( p: p, s: s, color: color)
139
+ }
140
+ }
141
+
142
+ ResilientClassTestSuite . test ( " ChildOfOutsideParentWithResilientStoredProperty " ) {
143
+ let c = ChildOfOutsideParentWithResilientStoredProperty (
144
+ p: Point ( x: 10 , y: 20 ) ,
145
+ s: Size ( w: 30 , h: 40 ) ,
146
+ color: 50 ,
147
+ enabled: 60 )
148
+
149
+ expectEqual ( c. p. x, 10 )
150
+ expectEqual ( c. p. y, 20 )
151
+ expectEqual ( c. s. w, 30 )
152
+ expectEqual ( c. s. h, 40 )
153
+ expectEqual ( c. color, 50 )
154
+ expectEqual ( c. enabled, 60 )
155
+ }
156
+
157
+
158
+ // Resilient class from a different resilience domain
159
+
160
+ ResilientClassTestSuite . test ( " ResilientOutsideParent " ) {
161
+ let c = ResilientOutsideParent ( )
162
+
163
+ expectEqual ( c. property, " ResilientOutsideParent.property " )
164
+ expectEqual ( c. finalProperty, " ResilientOutsideParent.finalProperty " )
165
+ }
166
+
167
+
168
+ // FIXME: needs indirect metadata access
169
+
170
+ #if false
171
+ // Concrete subclass of resilient class
172
+
173
+ public class ChildOfResilientOutsideParent : ResilientOutsideParent {
174
+ let enabled : Int32
175
+
176
+ public init ( enabled: Int32 ) {
177
+ self . enabled = enabled
178
+ super. init ( )
179
+ }
180
+ }
181
+
182
+ ResilientClassTestSuite . test ( " ChildOfResilientOutsideParent " ) {
183
+ let c = ChildOfResilientOutsideParent ( enabled: 60 )
184
+
185
+ expectEqual ( c. property, " ResilientOutsideParent.property " )
186
+ expectEqual ( c. finalProperty, " ResilientOutsideParent.finalProperty " )
187
+ expectEqual ( c. enabled, 60 )
188
+ }
189
+
190
+
191
+ // Concrete subclass of resilient class
192
+
193
+ public class ChildOfResilientOutsideParentWithResilientStoredProperty : ResilientOutsideParent {
194
+ public let p : Point
195
+ public let s : Size
196
+ public let color : Int32
197
+
198
+ public init ( p: Point , s: Size , color: Int32 ) {
199
+ self . p = p
200
+ self . s = s
201
+ self . color = color
202
+ super. init ( )
203
+ }
204
+ }
205
+
206
+ ResilientClassTestSuite . test ( " ChildOfResilientOutsideParentWithResilientStoredProperty " ) {
207
+ let c = ChildOfResilientOutsideParentWithResilientStoredProperty (
208
+ p: Point ( x: 10 , y: 20 ) ,
209
+ s: Size ( w: 30 , h: 40 ) ,
210
+ color: 50 )
211
+
212
+ expectEqual ( c. property, " ResilientOutsideParent.property " )
213
+ expectEqual ( c. finalProperty, " ResilientOutsideParent.finalProperty " )
214
+
215
+ expectEqual ( c. p. x, 10 )
216
+ expectEqual ( c. p. y, 20 )
217
+ expectEqual ( c. s. w, 30 )
218
+ expectEqual ( c. s. h, 40 )
219
+ expectEqual ( c. color, 50 )
220
+ }
221
+ #endif
222
+
223
+
74
224
runAllTests ( )
0 commit comments