@@ -151,59 +151,84 @@ mod tests {
151
151
152
152
use core:: ptr;
153
153
154
- use crate :: rc:: { Owned , Shared } ;
154
+ use crate :: rc:: { Owned , RcTestObject , Shared , ThreadTestData , _NSZone } ;
155
155
use crate :: runtime:: Object ;
156
- use crate :: { Encoding , RefEncode } ;
157
-
158
- #[ repr( C ) ]
159
- struct _NSZone {
160
- _inner : [ u8 ; 0 ] ,
161
- }
162
-
163
- unsafe impl RefEncode for _NSZone {
164
- const ENCODING_REF : Encoding < ' static > =
165
- Encoding :: Pointer ( & Encoding :: Struct ( "_NSZone" , & [ ] ) ) ;
166
- }
167
156
168
157
#[ test]
169
158
fn test_macro_alloc ( ) {
170
- let cls = class ! ( NSObject ) ;
159
+ let mut expected = ThreadTestData :: current ( ) ;
160
+ let cls = RcTestObject :: class ( ) ;
161
+
162
+ let obj: Id < RcTestObject , Shared > = unsafe { msg_send_id ! [ cls, alloc] . unwrap ( ) } ;
163
+ expected. alloc += 1 ;
164
+ expected. assert_current ( ) ;
171
165
172
- let _obj: Option < Id < Object , Shared > > = unsafe { msg_send_id ! [ cls, alloc] } ;
166
+ drop ( obj) ;
167
+ expected. release += 1 ;
168
+ expected. dealloc += 1 ;
169
+ expected. assert_current ( ) ;
173
170
174
171
let zone: * const _NSZone = ptr:: null ( ) ;
175
- let _obj: Option < Id < Object , Owned > > = unsafe { msg_send_id ! [ cls, allocWithZone: zone] } ;
172
+ let _obj: Id < RcTestObject , Owned > =
173
+ unsafe { msg_send_id ! [ cls, allocWithZone: zone] . unwrap ( ) } ;
174
+ expected. alloc += 1 ;
175
+ expected. assert_current ( ) ;
176
176
}
177
177
178
178
#[ test]
179
179
fn test_macro_init ( ) {
180
- let cls = class ! ( NSObject ) ;
180
+ let mut expected = ThreadTestData :: current ( ) ;
181
+ let cls = RcTestObject :: class ( ) ;
181
182
182
- let obj: Option < Id < Object , Shared > > = unsafe { msg_send_id ! [ cls, alloc] } ;
183
+ let obj: Option < Id < RcTestObject , Shared > > = unsafe { msg_send_id ! [ cls, alloc] } ;
184
+ expected. alloc += 1 ;
183
185
// Don't check allocation error
184
- let _obj: Id < Object , Shared > = unsafe { msg_send_id ! [ obj, init] . unwrap ( ) } ;
186
+ let _obj: Id < RcTestObject , Shared > = unsafe { msg_send_id ! [ obj, init] . unwrap ( ) } ;
187
+ expected. init += 1 ;
188
+ expected. assert_current ( ) ;
185
189
186
- let obj: Option < Id < Object , Shared > > = unsafe { msg_send_id ! [ cls, alloc] } ;
190
+ let obj: Option < Id < RcTestObject , Shared > > = unsafe { msg_send_id ! [ cls, alloc] } ;
191
+ expected. alloc += 1 ;
187
192
// Check allocation error before init
188
193
let obj = obj. unwrap ( ) ;
189
- let _obj: Id < Object , Shared > = unsafe { msg_send_id ! [ obj, init] . unwrap ( ) } ;
194
+ let _obj: Id < RcTestObject , Shared > = unsafe { msg_send_id ! [ obj, init] . unwrap ( ) } ;
195
+ expected. init += 1 ;
196
+ expected. assert_current ( ) ;
190
197
}
191
198
192
199
#[ test]
193
200
fn test_macro ( ) {
194
- let cls = class ! ( NSObject ) ;
195
-
196
- let _obj: Id < Object , Owned > = unsafe { msg_send_id ! [ cls, new] . unwrap ( ) } ;
197
-
198
- let obj = unsafe { msg_send_id ! [ cls, alloc] } ;
199
-
200
- let obj: Id < Object , Owned > = unsafe { msg_send_id ! [ obj, init] . unwrap ( ) } ;
201
-
202
- // TODO:
203
- // let copy: Id<Object, Shared> = unsafe { msg_send_id![&obj, copy].unwrap() };
204
- // let mutable_copy: Id<Object, Shared> = unsafe { msg_send_id![&obj, mutableCopy].unwrap() };
205
-
206
- let _desc: Option < Id < Object , Shared > > = unsafe { msg_send_id ! [ & obj, description] } ;
201
+ let mut expected = ThreadTestData :: current ( ) ;
202
+ let cls = RcTestObject :: class ( ) ;
203
+ crate :: rc:: autoreleasepool ( |_| {
204
+ let _obj: Id < RcTestObject , Owned > = unsafe { msg_send_id ! [ cls, new] . unwrap ( ) } ;
205
+ expected. alloc += 1 ;
206
+ expected. init += 1 ;
207
+ expected. assert_current ( ) ;
208
+
209
+ let obj = unsafe { msg_send_id ! [ cls, alloc] } ;
210
+ expected. alloc += 1 ;
211
+ expected. assert_current ( ) ;
212
+
213
+ let obj: Id < RcTestObject , Owned > = unsafe { msg_send_id ! [ obj, init] . unwrap ( ) } ;
214
+ expected. init += 1 ;
215
+ expected. assert_current ( ) ;
216
+
217
+ // TODO:
218
+ // let copy: Id<RcTestObject, Shared> = unsafe { msg_send_id![&obj, copy].unwrap() };
219
+ // let mutable_copy: Id<RcTestObject, Shared> = unsafe { msg_send_id![&obj, mutableCopy].unwrap() };
220
+
221
+ let _self: Id < RcTestObject , Shared > = unsafe { msg_send_id ! [ & obj, self ] . unwrap ( ) } ;
222
+ expected. retain += 1 ;
223
+ expected. assert_current ( ) ;
224
+
225
+ let _desc: Option < Id < RcTestObject , Shared > > =
226
+ unsafe { msg_send_id ! [ & obj, description] } ;
227
+ expected. assert_current ( ) ;
228
+ } ) ;
229
+ expected. release += 3 ;
230
+ expected. dealloc += 2 ;
231
+ expected. assert_current ( ) ;
207
232
}
208
233
209
234
#[ test]
0 commit comments