X-Git-Url: https://git.saurik.com/apple/objc4.git/blobdiff_plain/bc4fafcea49b79b651a74506afcac72862f13fef..refs/heads/master:/test/setAssociatedObjectHook.m diff --git a/test/setAssociatedObjectHook.m b/test/setAssociatedObjectHook.m index e244d5c..97f78c1 100644 --- a/test/setAssociatedObjectHook.m +++ b/test/setAssociatedObjectHook.m @@ -1,47 +1,46 @@ -// TEST_CONFIG +/* + TEST_CONFIG MEM=mrc + TEST_ENV OBJC_DISABLE_NONPOINTER_ISA=YES +*/ #include "test.h" #include "testroot.i" -id sawObject; -const void *sawKey; -id sawValue; -objc_AssociationPolicy sawPolicy; +bool hasAssociations = false; -objc_hook_setAssociatedObject originalSetAssociatedObject; +@interface TestRoot (AssocHooks) +@end -void hook(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy) { - sawObject = object; - sawKey = key; - sawValue = value; - sawPolicy = policy; - originalSetAssociatedObject(object, key, value, policy); +@implementation TestRoot (AssocHooks) + +- (void)_noteAssociatedObjects { + hasAssociations = true; +} + +// -_noteAssociatedObjects is currently limited to raw-isa custom-rr to avoid overhead +- (void) release { } +@end + int main() { id obj = [TestRoot new]; id value = [TestRoot new]; const void *key = "key"; objc_setAssociatedObject(obj, key, value, OBJC_ASSOCIATION_RETAIN); - testassert(sawObject == nil); - testassert(sawKey == nil); - testassert(sawValue == nil); - testassert(sawPolicy == 0); + testassert(hasAssociations == true); id out = objc_getAssociatedObject(obj, key); testassert(out == value); - objc_setHook_setAssociatedObject(hook, &originalSetAssociatedObject); - + hasAssociations = false; key = "key2"; objc_setAssociatedObject(obj, key, value, OBJC_ASSOCIATION_RETAIN); - testassert(sawObject == obj); - testassert(sawKey == key); - testassert(sawValue == value); - testassert(sawPolicy == OBJC_ASSOCIATION_RETAIN); + testassert(hasAssociations == false); //only called once + out = objc_getAssociatedObject(obj, key); testassert(out == value); succeed(__FILE__); -} \ No newline at end of file +}