From 81f7b16af5f9e84d22d85e7a947a40594fd2c785 Mon Sep 17 00:00:00 2001 From: Dustin Howett Date: Wed, 28 Feb 2018 17:14:19 -0800 Subject: [PATCH] Add a test for e3b069c (association policy) --- Test/AssociatedObject.m | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Test/AssociatedObject.m b/Test/AssociatedObject.m index cd9464e..e41da6f 100644 --- a/Test/AssociatedObject.m +++ b/Test/AssociatedObject.m @@ -19,8 +19,21 @@ int main(void) @autoreleasepool { Associated *object = [Associated new]; Test *holder = [[Test new] autorelease]; - objc_setAssociatedObject(object, &objc_setAssociatedObjectKey, holder, OBJC_ASSOCIATION_RETAIN); + objc_setAssociatedObject(holder, &objc_setAssociatedObjectKey, object, OBJC_ASSOCIATION_RETAIN); [object release]; - } + assert(!deallocCalled); + } + // dealloc should be called when holder is released during pool drain + assert(deallocCalled); + + deallocCalled = NO; + + Associated *object = [Associated new]; + Test *holder = [Test new]; + objc_setAssociatedObject(holder, &objc_setAssociatedObjectKey, object, OBJC_ASSOCIATION_RETAIN); + [object release]; // commuted into associated object storage + objc_setAssociatedObject(holder, &objc_setAssociatedObjectKey, nil, OBJC_ASSOCIATION_ASSIGN); + [holder release]; + assert(deallocCalled); }