9
9
#import < XCTest/XCTest.h>
10
10
#import < objc/runtime.h>
11
11
#import " NSObject+FLEX_Reflection.h"
12
+ #import " FLEXObjcInternal.h"
13
+ #import " FLEXHeapEnumerator.h"
14
+ #import " FLEXObjectRef.h"
12
15
#import " NSArray+FLEX.h"
13
16
#import " FLEXPropertyAttributes.h"
14
17
#import " FLEXProperty.h"
@@ -25,6 +28,12 @@ @interface Subclass : NSObject {
25
28
@end
26
29
@implementation Subclass @end
27
30
31
+ @interface NeverCreated : Subclass {
32
+ NSInteger a, b, c;
33
+ }
34
+ @end
35
+ @implementation NeverCreated @end
36
+
28
37
@interface FLEXTests : XCTestCase
29
38
@property (nonatomic , setter =setMyFoo:) id foo;
30
39
@end
@@ -140,4 +149,22 @@ - (void)testSafeGetClassName {
140
149
XCTAssertEqualObjects (@" FLEXNewRootClass" , className);
141
150
}
142
151
152
+ - (void )testInvalidObjectFinding {
153
+ // Create something that looks like an objc object
154
+ uintptr_t *pointer = (uintptr_t *)calloc (1 , sizeof (uintptr_t ));
155
+ object_setClass ((__bridge id )(void *)pointer, [NeverCreated class ]);
156
+
157
+ // Find that one object and assert that it is the object we just created
158
+ NSArray <FLEXObjectRef *> *refs = [FLEXHeapEnumerator
159
+ instancesOfClassWithName: @" NeverCreated" retained: NO
160
+ ];
161
+ XCTAssertEqual (refs.count , 1 );
162
+ XCTAssertEqual ((__bridge void *)refs.firstObject .object , pointer);
163
+
164
+ // Find that the object isn't really an object
165
+ XCTAssertFalse (FLEXPointerIsValidObjcObject (pointer));
166
+
167
+ free (pointer);
168
+ }
169
+
143
170
@end
0 commit comments