1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // TEST_CONFIG
- #include "test.h"
- #include "testroot.i"
- id sawObject;
- const void *sawKey;
- id sawValue;
- objc_AssociationPolicy sawPolicy;
- objc_hook_setAssociatedObject originalSetAssociatedObject;
- 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);
- }
- 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);
- id out = objc_getAssociatedObject(obj, key);
- testassert(out == value);
- objc_setHook_setAssociatedObject(hook, &originalSetAssociatedObject);
- key = "key2";
- objc_setAssociatedObject(obj, key, value, OBJC_ASSOCIATION_RETAIN);
- testassert(sawObject == obj);
- testassert(sawKey == key);
- testassert(sawValue == value);
- testassert(sawPolicy == OBJC_ASSOCIATION_RETAIN);
- out = objc_getAssociatedObject(obj, key);
- testassert(out == value);
- succeed(__FILE__);
- }
|